// <GLOBAL VARS>
var pageInitialized = false;
var ieVersion = 9;

// text
var txt_noTweets = "Er zijn geen tweets gevonden.";
var txt_second = "seconde";
var txt_seconds = "seconden";
var txt_minute = "minuut";
var txt_minutes = "minuten";
var txt_hour = "uur";
var txt_hours = "uur";
var txt_yesterday = "gisteren";
var txt_ago = "geleden";
var txt_month = ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'];
var txt_search = "zoeken...";

// navigation settings
var menuDelay = null;
var menuDelayAmount = 250;

// billboard settings
var billboardInterval = null;
var billboardIntervalAmount = 7500;

//tweets settings
var init = false;
var tweetSearch = "";
var tweetUrl = "modules/mod_tweets/twitterapi/get.php";
var tweetCount = 5;
var tweetTimeout = null;
var tweetIntervalAmount = 5000;
// </GLOBAL VARS>

// <INITIALIZATION>
$(document).ready(function ()
{
  if(!pageInitialized)
    initializePage();
});

function initializePage()
{
	jQuery.fx.interval = 25;

	if($("#navigation").length > 0)
		initNavigation();

	if($("#searchbar").length > 0)
		initSearchbar();

	if($("#billboard").length > 0)
		initBillboard();

	if($("#tweets").length > 0)
		initTweets();

	if($(".sametime").length > 0 && !lteIE6())
		initSametime();

	if($(".rounded").length > 0 && !isCSS3Capable())
		initRounded();
		
	if($(".popterm").length > 0 )
		initPopword();
	
	if($(".scroller").length > 0 )
		initScrollers();
	
	pageInitialized = true;
}
// </INITIALIZATION>

// <NAVIGATION>
function initNavigation()
{
	// mouse-over events binden
	$("#navigation > ul > li").mouseenter(function()
	{
		clearTimeout(menuDelay);
		hideMenu(this);
		$(this).addClass("over");

		if ($(this).index() == 0 && !lteIE7())
		{
			$(this).addClass("first");
//			$("#navigation div.corner.left").addClass("over");
		}
		if ($(this).find("li").length > 0)
		{
			$(this).addClass("parent").find("ul").css("visibility", "visible");
		}
	}).mouseleave(function()
	{
		$(this).removeClass("over");
//		if ($(this).index() == 0 && !lteIE7())
//		{
//			$("#navigation div.corner.left").removeClass("over");
//		}
	});

	// mouse-out events binden
	$("#navigation > ul").mouseleave(function()
	{
		menuDelay = setTimeout("hideMenu()", menuDelayAmount);
	});
}

// menu verbergen
function hideMenu(li)
{
	var ul = (li != null) ? $(li).parent() : $("#navigation > ul");
	$(ul).children().each(function(i)
	{
		if (this != li)
		{
			$(this).find("ul").css("visibility", "hidden");
		}
	});
}
// </NAVIGATION>

// <SEARCHBAR>
function initSearchbar()
{
	// form events binden
	var box = $("#navigation div#searchbar input.box");
	box.focus(function()
	{
		$(this).removeClass("inactive");
		if($(this).val() == txt_search)
			$(this).val("");
	}).blur(function()
	{
		$(this).addClass("inactive");
		if($(this).val() == "")
			$(this).val(txt_search);
	});

	$("#navigation div#searchbar form").submit(function()
	{
		return $(this).find('input.box').val() != '';
	});
}
// </SEARCHBAR>

// <BILLBOARD>
function initBillboard()
{
	// initialiseer de imagerotater
	var container = $("#billboard div.photos");
	var pictEls = container.find("li").size();

	if(pictEls > 0)
	{
		container.find("ul").css("width" , container.width()*pictEls);

		//create controls
		var controls = $('<div class="control rounded">');
		controls.width( (pictEls*16) + 'px');
		for(var i=0; i < pictEls; i++)
		{
			var bullet = $('<div class="bullet">');
			bullet.css('left', (4 + i*16) + 'px');
			controls.append(bullet);
		}
		if(!isCSS3Capable())
			controls.append('<div class="left"></div><div class="right"></div>');
		
		$("#billboard").append(controls);

		$("#billboard div.control div.bullet").each(function(i)
		{
			$(this).click(function()
			{
				clearInterval(billboardInterval);
				changeImage(i);
				billboardInterval = setInterval("nextImage()", billboardIntervalAmount);
			});
		});

		changeImage(getRandomInt(0, pictEls-1), false);
		//changeImage(0, false);
		billboardInterval = setInterval("nextImage()", billboardIntervalAmount);
	}
	$("#billboard").removeClass("loading");
}

// verander image in rotator naar #nr, met of zonder fx
function changeImage(nr, animate)
{
    animate = (typeof(animate) == 'undefined') ? true : animate;

	var prev = $("#billboard li.current");
	var next = $($("#billboard li").get(nr));

	prev.removeClass("current");
	next.addClass("current");
	$("#billboard div.control div.bullet.current").removeClass("current");
	$($("#billboard div.control div.bullet").get(nr)).addClass("current");

	if (!animate)
	{
		prev.hide();
		next.show();
	} else {
		prev.fadeOut("slow");
		next.fadeIn("slow");
//		prev.animate({opacity: 0}, "slow");
//		next.animate({opacity: 1}, "slow");
	}
//    animate = (typeof(animate) == 'undefined') ? true : animate;
//
//	var prev = $("#billboard li.current").index();
//	$("#billboard li.current").removeClass("current");
//	$("#billboard div.control div.bullet.current").removeClass("current");
//
//	$($("#billboard li").get(nr)).addClass("current");
//	$($("#billboard div.control div.bullet").get(nr)).addClass("current");
//
//	var cnt = -1 * $("#billboard div.photos").width() * nr;
//	var delta = (prev - nr) * $("#billboard div.photos").width();
//
//	if (!animate)
//	{
//		$("#billboard div.photos ul").css('left', cnt);
//	} else {
//		$("#billboard div.photos ul").animate({left: cnt}, {queue: false, duration: 1000, easing: "easeOutCubic"});
//	}
}

// laat de volgende afbeelding zien
function nextImage()
{
	var images = $("#billboard li");
	var currIndex = images.index(images.filter(".current"));
	var nextIndex = (currIndex + 1) % images.length;
	if (nextIndex != currIndex)
		changeImage(nextIndex);
}
// </BILLBOARD>

// <MISC>
function lteIE7()
{return getIEversion() <= 7;}
function lteIE6()
{return getIEversion() <= 6;}
function getIEversion()
{return ieVersion;}
function isCSS3Capable()
{return !(getIEversion() <= 8);}
// Returns a random integer between min and max
function getRandomInt(min, max)
{
    // Using Math.round() will give you a non-uniform distribution!
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
// </MISC>

// <TWEETS>
function initTweets()
{
	if (!init)
	{
		init = true;

		if (getIEversion() > 8)
		{
			$('#tweets div.window').touchwipe({wipe: function(d)
			{
				if(d == 'up' || d == 'down')
				{
					nextTweet(d == 'down' ? -1 : 1, true);
					clearInterval(tweetTimeout);
					tweetTimeout = setTimeout("nextTweet()", tweetIntervalAmount);
				}
			}});
		}
	}
	// refresh rate: 2 minutes
	setTimeout("refreshTweets()", 120000);
	var searchstr = (tweetSearch != '') ? '&search=' + tweetSearch : '';
	$.getJSON(tweetUrl + '?count=' + escape(tweetCount) + searchstr, parseTweets);
}

function refreshTweets()
{
	clearInterval(tweetTimeout);
	$("#tweets div.window").unmousewheel().html('<div class="loader"><div class="animation"></div></div>');
	$("#tweets").addClass("loading");
	initTweets();
}

// verander image in rotator naar #nr, met of zonder fx
function changeTweet(nr)
{
	//var prev = $("#tweets li.current").index();
	$("#tweets li.current").removeClass("current");
	$($("#tweets li").get(nr)).addClass("current");

	var easeType = "easeOutCubic";
	var bar = $("#tweets div.bar");
	var cnt = -1 * $("#tweets li.tweet").height() * nr;
	//var delta = (prev - nr) * $("#tweets li.tweet").height();

	$("#tweets div.window ul").animate(
		{top: cnt},
		{queue: false, duration: 2000, easing: easeType}
	);
	bar.animate(
		{top: nr * bar.height(), useTranslate3d:true},
		{queue: false, duration: 1000, easing: easeType}
	);
}

// laat de volgende afbeelding zien
function nextTweet(i, bounds)
{
	i = typeof(i) == 'undefined' ? 1 : i;
	var tweets = $("#tweets li");
	var tweetsAtOnce = Math.floor($("#tweets div.window").height() / tweets.height());
	var numPages = tweets.length - tweetsAtOnce + 1;
	var currIndex = tweets.index(tweets.filter(".current"));
	var nextIndex = 0;

	if (!bounds)
		nextIndex = (currIndex + i) % numPages;
	else
		nextIndex = Math.max(Math.min(currIndex + i, numPages-1), 0);
	if (nextIndex != currIndex)
		changeTweet(nextIndex);

	clearInterval(tweetTimeout);
	tweetTimeout = setTimeout("nextTweet()", tweetIntervalAmount);
}

function parseTweets(tweets)
{
	if (tweets.length < 1)
	{
		$('#tweets div.window').append('<p>' + txt_noTweets + '</p>');
	}
	else
	{
		var ul = $('<ul>');
		for (var i in tweets)
		{
			var author = tweets[i].user.name;
			var tweet = $('<li class="tweet">');

			tweet.append('<div class="image"><a href="http://twitter.com/' + tweets[i].user.screen_name + '" target="_blank"><img class="rounded" src="' + tweets[i].user.profile_image_url + '" alt="' + author + '" title="' + author + '" /></a></div>');
			tweet.append('<div class="content">' + tweets[i].text + '</div>');
			tweet.append('<div class="author"><a href="http://twitter.com/' + tweets[i].user.screen_name + '" target="_blank">' + author + '</a> | <a href="' + tweets[i].link + '" target="_blank">twitter.com</a></div>');
			tweet.append('<div class="date">' + relativeDate(tweets[i].created_at) + '</div>');

			ul.append(tweet);
		}

		$('#tweets div.window').append(ul);

		var windowHeight = $("#tweets div.window").height();
		var bar = $('<div class="bar"><div class="corner top"></div><div class="middle"></div><div class="corner bottom"></div></div>');
		//var prev = $('<div class="previous">');
		var next = $('<div class="next">');
		var tweetsAtOnce = Math.floor(windowHeight / $("#tweets li.tweet").height());
		var barHeight = Math.floor(windowHeight / (tweets.length - tweetsAtOnce + 1));
		bar.height(barHeight);
		bar.find("div.middle").height(barHeight - 4);
		next.height(windowHeight - barHeight + 2);

		// mouse/touch events
		$('#tweets div.window').mousewheel(function(event, delta)
		{
			nextTweet((-delta) / Math.abs(delta), true);
			clearInterval(tweetTimeout);
			tweetTimeout = setTimeout("nextTweet()", tweetIntervalAmount);
			return false;
		});

		// add controls
		if(tweets.length > tweetsAtOnce && !lteIE7())
		{
			$('#tweets div.window').append(bar);
		}

		changeTweet(0);
		clearInterval(tweetTimeout);
		tweetTimeout = setTimeout("nextTweet()", 3*tweetIntervalAmount);
	}
	
	$("#tweets").removeClass("loading");
}

function relativeDate(timestamp, plain)
{
	// format: yyyy-mm-ddThh:MM:ssZ
	var date = new Date(timestamp * 1000);
	var today = new Date();
	var diff = today.getTime() - date.getTime();
	var oneHour = 1000*60*60;
	var yesterday = diff < 48*oneHour && today.getDate() - date.getDate() == 1;
	var value = 0;
	var returnval = '';

	if (yesterday) // yesterday
	{
		returnval = txt_yesterday;
	}
	else if (diff < 1000*60) // less than a minute
	{
		value = Math.floor(diff/1000);
		returnval = value + ' ' + (value == 1 ? txt_second : txt_seconds) + ' ' + txt_ago;
	}
	else if (diff < oneHour) // less than an hour
	{
		value = Math.floor(diff/1000/60);
		returnval = value + ' ' + (value == 1 ? txt_minute : txt_minutes) + ' ' + txt_ago;
	}
	else if (diff < oneHour*24) // less than a day
	{
		value = Math.floor(diff/oneHour);
		returnval = value + ' ' + (value == 1 ? txt_hour : txt_hours) + ' ' + txt_ago;
	}
	else // more than one day
	{
		returnval = date.getDate() + ' ' + txt_month[date.getMonth()];
	}

	if(plain)
	{
		return returnval;
	}
	else
	{
		var title = date.getDate() + ' ' + txt_month[date.getMonth()] + ' @ ' + date.toLocaleTimeString();
		return '<span title="'+title+'">' + returnval + '</span>'
	}
}
// </TWEETS>

// <ROUNDED>
function initRounded()
{
	var allCorners =
		'<div class="corner tt"></div>' +
		'<div class="corner rr"></div>' +
		'<div class="corner bb"></div>' +
		'<div class="corner ll"></div>' +
		'<div class="corner tl"></div>' +
		'<div class="corner tr"></div>' +
		'<div class="corner br"></div>' +
		'<div class="corner bl"></div>' ;
	var lrCorners =
		'<div class="corner  left"></div>' +
		'<div class="corner right"></div>' ;
	var triCorners =
		'<div class="corner tl1"></div>' +
		'<div class="corner tl2"></div>' +
		'<div class="corner tr1"></div>' +
		'<div class="corner tr2"></div>' +
		'<div class="corner br1"></div>' +
		'<div class="corner br2"></div>' +
		'<div class="corner bl1"></div>' +
		'<div class="corner bl2"></div>' ;

	$('#navigation.rounded').append(lrCorners);
	$('#billboard.rounded').append(triCorners);
	$('#banner.rounded').append(triCorners);
	$('#frontpage-logos.rounded').append(allCorners);
	$('#frontpage-content.rounded').append(allCorners);
	$('#main-content.rounded').append(allCorners);
	$('#footer.rounded').append(lrCorners);

	if(lteIE6())
	{
		$('#frontpage-logos.rounded,#frontpage-content.rounded,#main-content.rounded').each(function(i)
		{
			var height = $(this).height() + parseInt($(this).css('padding-top').replace('px','')) + parseInt($(this).css('padding-bottom').replace('px',''));
			var width = $(this).width() + parseInt($(this).css('padding-left').replace('px','')) + parseInt($(this).css('padding-right').replace('px',''));
			$(this).find('div.corner.ll,div.corner.rr').height(height);
			$(this).find('div.corner.tt,div.corner.bb').width(width);
		});
	}
}
// </ROUNDED>

// <SCROLLERS>
function initScrollers()
{
	$(".scroller").each(function()
	{
		var viewportWidth = $(".scroller").width();
		var contentWidth = 0;
		$(this).find("ul li").each(function()
		{
			contentWidth += $(this).width();
		});
		var diff = contentWidth - viewportWidth;
		if (diff > 0)
		{
			initOneScroller($(this).find("ul"), diff);
		}
	});
}

function initOneScroller(obj, offset)
{
	$(obj).animate(
		{left: -offset},
		{queue: false, duration: offset * 50, easing: "linear", complete: function()
			{
				$(obj).animate(
					{left: 0},
					{queue: false, duration: offset * 50, easing: "linear", complete: function()
						{
							setTimeout(function()
							{
								initOneScroller(obj, offset);
							}, 10);

						}
					}
				);
			}
		}
	);
}
// </SCROLLERS>

function initPopword() {
	$(".popterm").each(function() {
		$(this).mouseover(function(){
			var keyword = $(this).html();
			keyword = keyword.toLowerCase();
			$('.popword').remove();
			$(this).after('<div class="popword rounded dropshadow"></div>')
			$.get("/"+keyword+".html",function(data){
				$('.popword').html(data);
				$('.popword').css('display',"block");
			});
		});
		$(this).mouseout(function(){
			$('.popword').remove();
		});
	});
}
