// Logo animation
var $logo = {
	totalFrames: 24,
	currentFrame: 1,
	render: function() {
		var $element = $("#logo_animation");
		if ( $logo.currentFrame < $logo.totalFrames-1 ) {
			$logo.currentFrame++;
			setTimeout($logo.render, 30);
		} else {
			$logo.currentFrame = 1;
			setTimeout($logo.render, 3000);
		}
		$element.css("background-position", "0px -" + ($logo.currentFrame * 106) + "px");
	}
}

// Featured content
var $featuredContent = {
	items: [],
	current: null,
	show: function($index) {
		if ( $featuredContent.items.length == 1 ) $("#featured_carousel_arrow_left, #featured_carousel_arrow_right").hide();
		$featuredContent.current = $featuredContent.items[$index];
		var $featuredHTML = "";
		var $projectLink = '/' + $lang + '/projects/project/' + $featuredContent.current.id + '/' + $featuredContent.current.title.split(" ").join("_").split("&").join("").split("%26").join("").split("amp;").join("");
		$featuredHTML += '<h2 class="projecttitle">' + $featuredContent.current.title + '</h2>';
		if ( $lang == "nl" ) {
			$featuredHTML += '<a title="Bekijk dit project &gt;" class="button watch_project" href="' + $projectLink + '">Bekijk dit project &gt;</a>';
		} else {
			$featuredHTML += '<a title="Bekijk dit project &gt;" class="button watch_project" href="' + $projectLink + '">View this project &gt;</a>';
		}
		$featuredHTML += '<a href="' + $projectLink + '">';
		$featuredHTML += '<img src="' + $featuredContent.current.screenshot + '" />';
		if ( $featuredContent.current.link ) $featuredHTML += '</a>';
		$("#featured_carousel_display").html($featuredHTML);
		if ( navigator.userAgent.indexOf("MSIE 7") != -1 ) $(".projecttitle").css("margin-bottom","12px");
	},
	slide: function($position) {
		var $targetIndex = $featuredContent.current.arrayIndex;
		$targetIndex += $position;
		if ( $targetIndex < 0 ) $targetIndex = $featuredContent.items.length-1;
		if ( $targetIndex > $featuredContent.items.length-1 ) $targetIndex = 0;
		if ( $targetIndex == $featuredContent.current.arrayIndex ) return;
		var $direction = ($position > 0) ? 1 : -1;
		if ( $.support.opacity ) {
			$("#featured_carousel_display").animate({left:-200 * $direction,opacity:0},500, function() {
				$("#featured_carousel_display").css("left",200 * $direction);
				$featuredContent.show($targetIndex);
				$("#featured_carousel_display").animate({left:0,opacity:1},500);
			});
		} else {
			$("#featured_carousel_display").animate({left:-840 * $direction},500, function() {
				$("#featured_carousel_display").css("left",840 * $direction);
				$featuredContent.show($targetIndex);
				$("#featured_carousel_display").animate({left:0},500);
			});
		}
	}
}

// Tweets
var $twitter = {
	tweets: [],
	accounts: [],
	accountsLoaded: 0,
	limitPerUser: 3,
	limitTotal: 6,
	loadTweets: function() {
		for ( var i in $twitter.accounts ) {
			var $query = "from:" + $twitter.accounts[i].username;
			$.ajax({account:$twitter.accounts[i] , dataType:"json",success:$twitter.tweetsLoaded, url:"http://search.twitter.com/search.json?&q=" + escape($query) + "&rpp=" + $twitter.limitPerUser + "&callback=?"});
		}
	},
	tweetsLoaded: function($response) {
		var $items = ($response.results || $response);
		var $account = this.account;
		var $count = 0;
		$($items).each(function(i,item) {
			if ( $twitter.tweets.length == $twitter.limitTotal || $count == $twitter.limitPerUser ) return;
			if ( item.text.toLowerCase().indexOf("#nsfw") != -1 || item.text.toLowerCase().indexOf("#nfw") != -1 ) return;
			if ( $account.hashtagFilter == true ) {
				if ( item.text.toLowerCase().indexOf("#site") != -1 ) {
					item.text = item.text.split(" #site").join("").split("#site ").join("").split("#site").join("");
				} else if ( item.text.toLowerCase().indexOf("#website") != -1 ) {
					item.text = item.text.split(" #website").join("").split("#website ").join("").split("#website").join("");
				} else {
					return;
				}
			}
			$count++;
			$twitter.tweets.push({
				id:item.id,
				author: (item.from_user || item.user.screen_name),
				authorimage: (item.profile_image_url || item.user.profile_image_url),
				pubdate: $twitter.formatTimestamp(item.created_at),
				link: "http://twitter.com/" + (item.from_user || item.user.screen_name) + "/status/"+item.id_str,
				content: item.text
			});
		});
		$twitter.accountsLoaded++;
		if ( $twitter.accountsLoaded == $twitter.accounts.length ) $twitter.displayTweets();
	},
	addZero: function(value) {
		var $output = "" + value;
		for ( var i = 0; i < 1; i++ ) {
			if ( $output.length < 2 ) $output = ("0" + $output);
		}
		return $output;
	},
	formatTimestamp: function($stamp) {
		var $date = new Date($stamp);
		return $twitter.addZero($date.getDate()) + "-" + $twitter.addZero($date.getMonth()+1) + "-" + $date.getFullYear() + " @ " + $date.getHours() + ":" + $date.getMinutes();
	},
	displayTweets: function() {
		var $tweetHTML = "";
		for ( var i in $twitter.tweets ) {
			$tweetHTML += '<div class="tweet">';
			$tweetHTML += '<a href="' + $twitter.tweets[i].link + '" class="tweet_link" target="_blank">';
			$tweetHTML += '<div class="tweet_image_wrap"><img class="tweet_image" src="' + $twitter.tweets[i].authorimage + '" alt="' + $twitter.tweets[i].author + '" width="48" height="48" /></div>';
			$tweetHTML += '<span class="tweet_text">' + $twitter.tweets[i].content + '<span>';
			$tweetHTML += '</a>';
			$tweetHTML += '<span class="tweet_info">' + $twitter.tweets[i].pubdate + ' by <a href="http://twitter.com/' + $twitter.tweets[i].author + '" target="_blank">' + $twitter.tweets[i].author + '</a></span>';
			$tweetHTML += '</div>';
		}
		$("#tweets").html($tweetHTML);
	}
}


// Contact
var $contact = {
	sessid: null,
	defaultFieldValues: {},
	messages: {},
	messageTimers: [0,0],
	show: function() {
		var pos = $("#footer").offset().top;
		$("html,body").animate({scrollTop: pos}, 500);
	},
	sendMessage: function() {
		if ( $("#sendmessage_name").val() != $contact.defaultFieldValues.sendmessage.name && $("#sendmessage_email").val() != $contact.defaultFieldValues.sendmessage.email && $("#sendmessage_question").val() != $contact.defaultFieldValues.sendmessage.question ) {
			$.ajax({
				success: $contact.onSendMessage,
				error: $contact.onSendMessageError,
				dataType: "xml",
				url: "/" + $lang + "/xml/contact/sendmessage/" + $contact.sessid + "&name=" + $("#sendmessage_name").val() + "&company=" + $("#sendmessage_company").val() + "&email=" + $("#sendmessage_email").val() + "&question=" + $("#sendmessage_question").val()
			});
			$("*").css("cursor","progress");
			setTimeout(function(){$("*").css("cursor","")},10000);
		} else {
			$contact.showSendMessageMessage($contact.messages.sendmessage.checkfields);
		}
	},
	onSendMessageError:function($request,$type){
		$("*").css("cursor","");
		$contact.showSendMessageMessage($contact.messages.sendmessage.error, "error");
	},
	onSendMessage: function($data) {
		$("*").css("cursor","");
		var $response = $($data).find("response");
		if ( $response.text() == "true" ) {
			$contact.showSendMessageMessage($contact.messages.sendmessage.success, "success");
		} else {
			$contact.showSendMessageMessage($contact.messages.sendmessage.error, "error");
		}
	},
	showSendMessageMessage: function($message, $type) { // best function name ever!
		if ( !$type ) $type = "info";
		$("#sendmessage_message").attr("class","").addClass("messagetype_" + $type).html($message).hide().fadeIn();
		clearTimeout($contact.messageTimers[0]);
		$contact.messageTimers[0] = setTimeout(function(){$("#sendmessage_message").fadeOut()}, 3000);
	},
	callMeBack: function() {
		if ( $("#callmeback_name").val() != $contact.defaultFieldValues.callmeback.name  && $("#callmeback_phonenumber").val() != $contact.defaultFieldValues.callmeback.phonenumber ) {
			$.ajax({
				success: $contact.onCallMeBack,
				error: $contact.onCallMeBackError,
				dataType: "xml",
				url: "/" + $lang + "/xml/contact/callmeback/" + $contact.sessid + "&name=" + $("#callmeback_name").val() + "&company=" + $("#callmeback_company").val() + "&phonenumber=" + $("#callmeback_phonenumber").val()
			});
			$("*").css("cursor","progress");
			setTimeout(function(){$("*").css("cursor","")},10000);
		} else {
			$contact.showCallMeBackMessage($contact.messages.callmeback.checkfields);
		}
	},
	onCallMeBackError:function($request,$type){
		$("*").css("cursor","");
		$contact.showCallMeBackMessage($contact.messages.callmeback.error, "error");
	},
	onCallMeBack: function($data) {
		$("*").css("cursor","");
		var $response = $($data).find("response");
		if ( $response.text() == "true" ) {
			$contact.showCallMeBackMessage($contact.messages.callmeback.success, "success");
		} else {
			$contact.showCallMeBackMessage($contact.messages.callmeback.error, "error");
		}
	},
	showCallMeBackMessage: function($message, $type) {
		if ( !$type ) $type = "info";
		$("#callmeback_message").attr("class","").addClass("messagetype_" + $type).html($message).hide().fadeIn();
		clearTimeout($contact.messageTimers[1]);
		$contact.messageTimers[1] = setTimeout(function(){$("#callmeback_message").fadeOut()}, 3000);
	}
}

// Search
var $search = {
	type: "all",
	JSONFeedURL: "",
	timer: 0,
	suggestions: [],
	highlighted: [],
	autoComplete: function(target) {
		$search.JSONFeedURL = "/" + $lang + "/xml/searchsuggestions/" + $search.type + "/";
		$search.timer = 0;
		$search.suggestions = [];
		$search.highlighted = -1;
		target.keyup($search.loadSuggestions);
		target.blur(function(){setTimeout(function(){$search.hideSuggestions(target)},1000)});
	},
	loadSuggestions: function(e) {
		var target = $(this);
		var suggestionsList = target.parent().find(".search_suggestions");
		if (e.keyCode == 38 || e.keyCode == 40 ) {
			$search.upDownKeys(target,(e.keyCode == 38)?-1:1);
			return;
		} else if ( e.keyCode == 13 ) {
			$search.go(target);
			return;
		} else if ( e.keyCode == 27 ) {
			$search.hideSuggestions(target,false);
			return;
		} else {
			$search.highlighted = -1;
		}

		target.parent().find(".search_suggestions_list").hide();
		suggestionsList.children().remove();
		if ( target.val().length > 1 ) {
			clearTimeout($search.timer);
			$search.timer = setTimeout(function() {
				var $terms = target.val().split("&amp;").join("%26").split("&").join("%26");
				$.ajax({dataType:"json",success:function(response){$search.suggestionsLoaded(response,target)}, url:$search.JSONFeedURL + escape($terms)});
			},200);
		}
		$search.displaySuggestions(target,target.val(),$search.suggestions,false);
	},
	suggestionsLoaded: function(response,target) {
		if ( response.length < 2 ) return;
		var val = response[0];
		var suggestions = $search.mergeSuggestions(target,val,$search.suggestions,response[1]);
		if ( suggestions[0] != "" ) $search.displaySuggestions(target,val,suggestions,true);
	},
	mergeSuggestions: function(target,val,array1,array2) {
		for ( var i = 0; i < array1.length; i++ ) {
			if ( array1[i].toLowerCase().indexOf(val.toLowerCase()) != -1 && array2.indexOf(array1[i]) == -1 ) array2.push(array1[i]);
		}
		$search.suggestions = array2;
		return array2;
	},
	displaySuggestions: function(target,val,suggestions,isJSON) {
		var i;
		if ( !isJSON ) {
			if ( val == "" || val.length < 2 ) return;
			var filteredSuggestions = [];
			for ( var i = 0; i < suggestions.length; i++ ) {
				if ( suggestions[i].toLowerCase().indexOf(val.toLowerCase()) != -1 ) filteredSuggestions.push(suggestions[i]);
			}
			suggestions = filteredSuggestions;
		}
		var suggestionsList = target.parent().find(".search_suggestions");
		if ( val == target.val() ) {
			if ( suggestions.length ) target.parent().find(".search_suggestions_list").show();
			suggestionsList.children().remove();
			for ( i = 0; i < suggestions.length; i++ ) {
				var suggestion = suggestions[i].toLowerCase();
				var match = suggestion.substr(0,suggestion.indexOf(val.toLowerCase()));
				match += '<span class="strong">' + suggestions[i].substr(suggestion.indexOf(val.toLowerCase()),val.length) + '</span>';
				match += suggestion.substr(suggestion.indexOf(val.toLowerCase())+val.length,suggestion.length-(suggestion.indexOf(val.toLowerCase())+val.length));
				suggestionsList.append('<a href="#" onclick="$search.setText($(this),true);return false" onmouseover="$search.highlight($(this),'+i+')" onmouseout="$search.highlight($(this),-1)" class="search_suggestion">' + match + '</a>');
			}
		}
	},
	highlight: function(suggestion,index) {
		var suggestionsList = suggestion.parent();
		var target = suggestionsList.parent().parent().find(".search_field");
		suggestionsList.children().removeClass("active");
		if ( index != -1 ) suggestion.addClass("active");
		$search.highlighted = index;
	},
	upDownKeys: function(target,dir) {
		var current = $search.highlighted;
		var suggestionsList = target.parent().find(".search_suggestions");
		var count = suggestionsList.children().length-1;
		var targetItem = current + dir;
		if ( targetItem < 0 ) targetItem = count;
		if ( targetItem > count ) targetItem = 0;
		$search.highlight(suggestionsList.children().eq(targetItem),targetItem);
		$search.highlighted = targetItem;
		$search.setText(suggestionsList.children().eq(targetItem));
	},
	hideSuggestions: function(target) {
		var suggestionsList = target.parent().find(".search_suggestions");
		suggestionsList.children().remove();
		target.parent().find(".search_suggestions_list").hide();
		$search.highlighted = -1;
	},
	setText: function(suggestion,hide) {
		var suggestionsList = suggestion.parent();
		var target = suggestionsList.parent().parent().find(".search_field");
		var text = suggestion.text();
		target.val(text);
		if ( hide ) $search.hideSuggestions(target);
		target.focus();
	},
	go: function(target) {
		var $terms = target.val().split("&amp;").join("%26").split("&").join("%26");
		if ( $terms == "Zoeken..." || $terms == "Search..." ) return;
		location.href = "/" + $lang + "/search/" + escape($terms);
	}
}

// Write SWF
var $swf = {
	defaultParameters:{},
	minVersion:"9",
	write:function(c){
		var i,e,v,r;
		r=Math.floor(Math.random()*999999);
		for(i in $swf.defaultParameters)c.parameters[i]=c.parameters[i]||$swf.defaultParameters[i];
		v=[];for(i in c.flashvars)v.push(i+"="+c.flashvars[i]);
		e='<object id="___swf'+r+'" data="'+c.src+'" width="'+c.width+'" height="'+c.height+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version='+$swf.minVersion.toString().split(".").join(",")+'"><param name="movie" value="'+c.src+'"'+$swf.closeTag("param");
		if(v.length)e+='<param name="flashvars" value="'+v.join("&")+'"'+$swf.closeTag("param");
		for(i in c.parameters)e+='<param name="'+i+'" value="'+c.parameters[i]+'"'+$swf.closeTag("param");
		e+='<embed id="___swf'+(r+1)+'" width="'+c.width+'" height="'+c.height+'" src="'+c.src+'" ';
		for(i in c.parameters)e+=i+'="'+c.parameters[i]+'" ';
		if(v.length)e+='flashvars="'+v.join("&")+'" ';
		e+='type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"'+$swf.closeTag("embed")+'</object>';
		e=(navigator.userAgent.indexOf("MSIE")!=-1)?('<div style="display:none"></div>'+e):e;
		if(c.target){c.target.innerHTML=e}else{document.write(e)}
		if(c.complete)setTimeout(function(){
			c.complete("___swf"+r)
		},250);
	},
	closeTag:function(t){
		var xhtml=document.doctype?(document.doctype.publicId.toLowerCase().indexOf("xhtml")!=-1):false;
		return xhtml?' />':(t?'></'+t+'>':'>');
	},
	getCallback:function(f,i){
		var fn=document.getElementById("___swf"+(parseInt(i.split("___swf").join(""))+1))[f]||document.getElementById(i)[f];
		return eval(fn);
	}
}

// R2-D2 easter egg (Konami code)
var r2 = {
	element: null,
	keys: [38,38,40,40,37,39,37,39,66,65],
	init: function() {
		r2.element = document.createElement("DIV");
		$(r2.element).css({
			"display":"none",
			"position":"fixed",
			"bottom":"20px",
			"z-index":"100",
			"width":"166px",
			"height":"291px",
			"background-image":"url('/gfx/r2.png')",
			"background-repeat":"no-repeat"
		});
		$(document.body).append(r2.element);
		$(document).keyup(r2.keyhandler);
	},
	keyhandler: function(e) {
		if ( e.keyCode == r2.keys[0] ) {
			r2.keys.shift();
			if ( r2.keys.length == 0 ) {
				var r2img = new Image();
				r2img.onload = function() {
					$(r2.element).css({"display":"block","left":"-200px"});
					$(r2.element).animate({left:$(document.body).width() + 100},5000);
					r2.keys = [38,38,40,40,37,39,37,39,66,65];
				}
				r2img.src = "/gfx/r2.png";
			}
		} else {
			r2.keys = [38,38,40,40,37,39,37,39,66,65];
		}
	}
}
