// Submenus
var $menu = {
	current: {menu:null,link:null},
	timer: 0,
	init: function() {
		$("#menu>a").each(function() {
			$(this).mouseover($menu.close);
			if ( $("#sub" + $(this).attr("id")) ) {
				$(this).mouseover($menu.open);
				$(this).mouseout(function(){$menu.timer=setTimeout($menu.close,1000)});
			}
		});
		$(".submenu a").mouseover(function(){clearTimeout($menu.timer)});
		$(".submenu a").mouseout(function(){$menu.timer=setTimeout($menu.close,1000)});
		$(document).mouseup($menu.close);
	},
	open: function(e) {
		clearTimeout($menu.timer);
		$menu.current = {menu:$("#sub" + $(this).attr("id")),link:e.target};
		var $left = $(this).offset().left - $("#wrapper").offset().left;
		$menu.current.menu.css("left",$left).show();
	},
	close: function(e) {
		$(".submenu").hide();
		$menu.current = {menu:null,link:null};
	}
}

// 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 = $(".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;
		}
		$(".search_suggestions").hide();
		suggestionsList.children().remove();
		if ( target.val().length > 1 ) {
			clearTimeout($search.timer);
			$search.timer = setTimeout(function() {
				$.ajax({dataType:"json",success:function(response){$search.suggestionsLoaded(response,target)}, url:$search.JSONFeedURL + escape(target.val().split("&").join(""))});
			},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 = $(".search_suggestions");
		if ( val == target.val() ) {
			if ( suggestions.length ) suggestionsList.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 menubutton">' + 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 = $(".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 = $(".search_suggestions");
		suggestionsList.children().remove();
		suggestionsList.hide();
		$search.highlighted = -1;
	},
	setText: function(suggestion,hide) {
		var suggestionsList = $(".search_suggestions");
		var target = $("#search_field");
		var text = suggestion.text();
		target.val(text);
		if ( hide ) $search.hideSuggestions(target);
		target.focus();
	},
	go: function(target) {
		location.href = "/" + $lang + "/search/" + escape(target.val());
	}
}


// Scroll to element
var $scroll = {
	toID:function(id,offset) {
		$scroll.toElement($("#"+id),offset);
	},
	toElement:function(element,offset) {
		if ( !offset ) offset = 0;
		var pos = $(element).offset().top + offset;
		$("html,body").animate({scrollTop: pos}, 500);
	}
}


function loopBanner() {
	var t = $(".opensessies .banner_title");
	t.animate({left:0}, 1000, function() {
		setTimeout(function(){
			t.animate({left:-500}, 500, loopBanner);
			d.animate({left:500}, 500);
		}, 5000);
	});
	var d = $(".opensessies .banner_description");
	setTimeout(function() {
		d.animate({left:0}, 1000);
	}, 500);
}
