(function($){
	$(document).ready(function () {
		var locale = $('meta[name=locale]').attr("content");
		if($('.search-header').length == 0){
			search_header(locale);
		}
		else{
			search_sws(locale);
		}
		$('.search-text').keyup(function(event) {
			if($('.search-text:focus')){
				if(event.keyCode == '13'){
					$.doTimeout(300,function() { 
						var url = '/' + locale + '/search/?q=' + $('.search-text').val();
						window.location.href = url;
					});
				}
			}
		});
	});
	
	function stripTags(term) {
		return term.replace(/<\/?[^>]+>/gi, ''); 
	};
	
	function sortByDomain(){
		var unsortedarr = [];
		var sortedarr = [];
		//put all item in list in array
		$("ul.ui-autocomplete li a").each(function(){
			unsortedarr.push($(this).html());
		});
		sortedarr = unsortedarr.sort(sortNumber);
		//put the sorted values back in the UL
		$("ul.ui-autocomplete li a").each(function(index, value){
			$(this).html(sortedarr[index]);
		});
	}
	
	function getDomainTranslation(facetterm){
		if(typeof facetItems == 'object'){
			if(typeof facetItems[facetterm.toLowerCase()] != 'undefined'){
				facetterm = facetItems[facetterm.toLowerCase()];
			}
			facetterm  = facetterm.charAt(0).toUpperCase() + facetterm.slice(1);
		}
		return facetterm;
	}
	
	function sortNumber(a, b)
	{
	return a.split("|")[0] - b.split("|")[0];
	}
	
	function search_sws(locale){
		var searchvalue = ''
		$('.search-text').autocomplete({
			source:function( request, response ) {
				lastXhr  = $.getJSON( '/global/services/utility/proxy_suggest_extended.jsp?site=' + locale + '_suggestion&proxyreload=1&proxystylesheet=suggestion&filter=0&start=0&getfields=*&client=suggestion', request, function( data, status, xhr ){
					if (data != null && data != '') {
						response( data );
					}
				});
			},
			delay:200,
			appendTo: '.search-box',		
			open: function(event, ui){
				var previousdomain = '';
				sortByDomain();
				$("ul.ui-autocomplete li a").each(function(){
					//get current HTML value of this <a>
					var itemvalue = $.trim($(this).html());
					//decode strings
					var label = stripTags($("<div/>").html(itemvalue).text());
					var labelarr = label.split("|");
					//Get page Title 
					label = labelarr[2];
					if(label == "See all results"){
						label = getDomainTranslation(label)
					}
					if(label.length > 55){
						label = label.substring(0, 55) + '...';
					}
					if(labelarr.length > 3){
						var domain = getDomainTranslation($.trim(labelarr[1]));
						var image_src = $.trim(labelarr[3]);
						var term_url = $.trim(labelarr[4]);
						image_src = image_src.replace('http://tomtom.com', '')
						
						if(domain != previousdomain){
							if(image_src != ''){
								label = '<div class="suggest-wrapper border-top-suggest"><span class="suggest_domain"><b>' + domain + '</b></span><span style="display: inline-block; width: 40px;"><img class="suggest-image" src="' + image_src + '"></span><span class="term" ref="' + term_url + '">' + label + '</span></div>'	
							}
							else{
								label = '<div class="suggest-wrapper border-top-suggest"><span class="suggest_domain"><b>' + domain + '</b></span><span class="no-image-suggest">&nbsp;</span><span class="term" ref="' + term_url + '">' + label + '</span></div>'	
							}
						}
						else{
							if(image_src != ''){
								label = '<div class="suggest-wrapper"><span class="suggest_domain">&nbsp;</span><span style="display: inline-block; width: 40px;"><img class="suggest-image" src="' + image_src + '"></span><span class="term" ref="' + term_url + '">' + label + '</span></div>'
							}
							else{
								label = '<div class="suggest-wrapper"><span class="suggest_domain">&nbsp;</span><span class="no-image-suggest">&nbsp;</span><span class="term" ref="' + term_url + '">' + label + '</span></div>'
							}
						}
						previousdomain = domain;
						$(this).html(label);
					}
				});
			},
			focus: function(event, ui){
				searchvalue = $('.search-text').val();
				ui.item.value = $.trim($('.ui-state-hover .term').html())
				ui.item.label = $.trim($('.ui-state-hover .term').html())
			},
			select: function(event, ui) {
				event.preventDefault();
				//get URL of the currently selected item from "ref" attribute
				var url = $('.ui-state-hover .term').attr('ref');
				if(url.indexOf('http://www.tomtom.com/') > -1){
					url = url + '?q=' + $.trim(ui.item.label);
				}
				if(url.indexOf('ALL_RESULTS_URL') > -1){
					url = '/' + locale + '/search/?q=' + searchvalue;
				}
				window.location.href = url;
			}
		});
	}
	
	function search_header(locale){
		var searchvalue = '';
		$('.search-text').autocomplete({
			source:function( request, response ) {
				lastXhr  = $.getJSON( '/global/services/utility/proxy_suggest_extended.jsp?site=' + locale + '_suggestion&proxyreload=1&proxystylesheet=suggestion&filter=0&start=0&getfields=*&client=suggestion', request, function( data, status, xhr ){
					if (data != null && data != '') {
						response( data );
					}
				});
			},
			position: {
				my: 'right top',
				at: 'right bottom'
			},
			delay:200,
			appendTo: '.header-details',		
			open: function(event, ui){
				var previousdomain = '';
				sortByDomain();
				$("ul.ui-autocomplete li a").each(function(){
					//get current HTML value of this <a>
					var itemvalue = $.trim($(this).html());
					//decode strings
					var label = stripTags($("<div/>").html(itemvalue).text());
					var labelarr = label.split("|");
					//Get page Title 
					label = labelarr[2];
					if(label == "See all results"){
						label = getDomainTranslation(label)
					}
					if(label.length > 45){
						label = label.substring(0, 45) + '...';
					}
					if(labelarr.length > 3){
						var domain = getDomainTranslation($.trim(labelarr[1]));
						var image_src = $.trim(labelarr[3]);
						var term_url = $.trim(labelarr[4]);
						image_src = image_src.replace('http://tomtom.com', '')
						
						if(domain != previousdomain){
							if(image_src != ''){
								label = '<div class="suggest-wrapper border-top-suggest"><span class="suggest_domain"><b>' + domain + '</b></span><span style="display: inline-block; width: 40px;"><img class="suggest-image" src="' + image_src + '"></span><span class="term" ref="' + term_url + '">' + label + '</span></div>'	
							}
							else{
								label = '<div class="suggest-wrapper border-top-suggest"><span class="suggest_domain"><b>' + domain + '</b></span><span class="no-image-suggest">&nbsp;</span><span class="term" ref="' + term_url + '">' + label + '</span></div>'	
							}
						}
						else{
							if(image_src != ''){
								label = '<div class="suggest-wrapper"><span class="suggest_domain">&nbsp;</span><span style="display: inline-block; width: 40px;"><img class="suggest-image" src="' + image_src + '"></span><span class="term" ref="' + term_url + '">' + label + '</span></div>'
							}
							else{
								label = '<div class="suggest-wrapper"><span class="suggest_domain">&nbsp;</span><span class="no-image-suggest">&nbsp;</span><span class="term" ref="' + term_url + '">' + label + '</span></div>'
							}
						}
						previousdomain = domain;
						$(this).html(label);
					}
				});
			},
			focus: function(event, ui){
				searchvalue = $('.search-text').val();
				ui.item.value = $.trim($('.ui-state-hover .term').html())
				ui.item.label = $.trim($('.ui-state-hover .term').html())
			},
			select: function(event, ui) {
				//get URL of the currently selected item from "ref" attribute
				var url = $('.ui-state-hover .term').attr('ref');
				if(url.indexOf('http://www.tomtom.com/') > -1){
					url = url + '?q=' + $.trim(ui.item.label);
				}
				if(url.indexOf('ALL_RESULTS_URL') > -1){
					url = '/' + locale + '/search/?q=' + searchvalue;
				}
				window.location.href = url;
			}
		});
	}
})(jQuery);
