var SAYT_autocomplete_list_pos = -1;
var SAYT_autocomplete_list = '';
var SAYT_sequence_no = 1;
var SAYT_query = '';

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}


function handleAjax_SAYT(ajax_result)
{	
	var sayt_var	= $('#sayt');
	var search_input= $('#search-input');
		
	if(search_input.val() == '' || SAYT_sequence_no > ajax_result.sequence_no) // if results return after user has emptied the input, ignore results
	{
		sayt_var.hide();
		return;
	}
	var query 		= ajax_result.query;
	SAYT_query		= query;
	
	//if(search_input.val() != query) return;
	
	var offset		= search_input.position();
	
	
	
	//sayt_var.css('top', offset.top+21);
	//sayt_var.css('left', offset.left-$('#sayt-autocomplete').width()+15);		
	sayt_var.css('left', offset.left - 100);		

//	// Google Search Appliance results
//	var gresults 	= '';
//	if(ajax_result.search_results)
//	{		
//		gresults 	= sayt_build_gresults(ajax_result.search_results, query);
//		$('#sayt-gresult-body').html(gresults);
//	}

	// Autocomplete
	if(ajax_result.auto_complete)
	{
		
		auto = sayt_build_autocomplete(ajax_result.auto_complete);
		//if(auto) 
		$('#sayt-autocomplete-body').html(auto);
		
		if(ajax_result.keymatches == '')
		{
			sayt_var.hide();
			return;
		}
	}
	
	// Keymatches
	if (ajax_result.keymatches){
		$('#sayt-keymatch-body').html(sayt_build_keymatches(ajax_result.keymatches));
	}
	sayt_var.show();
	
	
	
	if(gresults)
	{
		$('#sayt-gresult').show();
		
		/*
		if ($('#sayt-autocomplete').height()>$('sayt-gresult').height())
		{
			$('.sayt-gresult-body').css('height',$('#sayt-autocomplete').height()-$('.sayt-gresult-top').height()-$('.sayt-gresult-bottom').height()-11);	
		}
		else
		{
			$('#sayt-autocomplete').css('height',$('#sayt-gresult').height());	
		}
		*/
		//sayt_var.css('left', offset.left-$('#sayt-autocomplete').width()+15);
	}
	else
	{
		$('#sayt-gresult').hide();
		//sayt_var.css('left', offset.left);
	}	
}

function saytKeyUp(e)
{
	var sayt_var	= $('#sayt');
		
	SAYT_sequence_no++;
	// check for Up/Down keys for traversing Autocomplete
	if(!e) e = window.event;
	
	var do_autocomplete	= 1;
	
	if(SAYT_autocomplete_list == '')
	{
		SAYT_autocomplete_list = $('#sayt-autocomplete-body');
		SAYT_autocomplete_list.click(function(e) {
			var src = e.target;
			if(!src) src = e.srcElement;
			
			SAYT_autocomplete_list_pos = parseInt(src.lang);
			
			src = $(src);			
			query_val = src.text();
			
			$('#search-input').val(query_val);
			sayt_set_query(query_val, 0);						
			
			SAYT_autocomplete_list.children().removeClass('sayt-a-highlight');
			src.addClass('sayt-a-highlight');
			$('#search-input').focus();
		});
	}
	
	switch(e.keyCode)
	{
		// Up
		case 38: 
			sayt_set_autocomplete(SAYT_autocomplete_list_pos - 1);
			do_autocomplete = 0;
			break;	
		
		// Down			
		case 40: 
			sayt_set_autocomplete(SAYT_autocomplete_list_pos + 1);
			do_autocomplete = 0;
			break;
		
		// Esc
		case 27: 
			sayt_var.hide();
			return;
			break;		
	}
	
	
	var query_val	= $('#search-input').val();
	
	if(query_val) 	sayt_set_query(query_val, do_autocomplete);
	else			sayt_var.hide();
}

function sayt_set_query(query_val, do_autocomplete)
{		
	$.getJSON("/sayt/search-handler.php", 
		{
		q: query_val,
		s: (query_val.length > 2)?1:0,
		a: do_autocomplete,
		no: SAYT_sequence_no
		},
		handleAjax_SAYT);	
}

function sayt_build_autocomplete(autocomplete)
{	
	var html = '';	
	if(autocomplete)
	{	
		if(autocomplete[0] == '-EMPTY-') return html;
		
		length = autocomplete.length;
//		alert(autocomplete[length -1].word);
	    for (var i =0; i < length; i++){
	    	html += '<div class="autocomplete-text" lang='+i+'>' + sayt_bold_search_text(autocomplete[i].word, SAYT_query).toUpperCase() + '</div>';
	    }
	}
	
	SAYT_autocomplete_list_pos = -1;
	
	return html;
}

function sayt_build_keymatches(keymatches)
{
	var html = '';
	if(keymatches)
	{
		$('.sayt-divider').show();
		$('.sayt-key-match').show();
		kmlength = keymatches.length;
	    for(var i =0; i < kmlength; i++)
		{
			html += "<div class='sayt-key-match-result'>";
			html += "<div class='sayt-key-match-result-cutout'>";
		
	    	html += '<a href="' + keymatches[i].url + '">';
	    	html += '<img class="sayt-key-match-result-image" src="' + keymatches[i].img + '">';
			html += "<div class='sayt-key-match-result-text'>";
	    	html += '<span class="search-keymatch-title">' + sayt_bold_search_text(keymatches[i].word, SAYT_query).toUpperCase() + '</span>';
			html += '<span class="search-keymatch-snippet">' + sayt_bold_search_text(keymatches[i].snippet, SAYT_query)+'</span>';
			html += "</div>";	
	    	html += '</a>';

			html += "</div>";
			html += "</div>";
	    }
	}	
	else
	{
		$('.sayt-divider').hide();
		$('.sayt-key-match').hide();	
	}
	return html;
}


function sayt_build_gresults(gresults, query)
{
	var html = '';
	if (gresults)
	{
		for (i in gresults)
		{	
			res = gresults[i];
			if(!res.title) continue;
	    	html += "<a href='"+res.url+"'>"+res.title+"</a><BR/>";
	    	html += '<div class="g-snippet">'+res.snippet+'</div>';							
	    }
	}
	
	if(query)
	{
		eval("html = html.replace(/("+query+")/gi, function(v) {return '<i><b>'+v+'</b></i>';});");
	}
	return html;
}

function sayt_set_autocomplete(pos)
{		
	if(SAYT_autocomplete_list)
	{
		var autocomplete_words = SAYT_autocomplete_list.children();
				
		if(autocomplete_words[pos])
		{				
			
			var word = $(autocomplete_words[pos]);
			$('#search-input').val(word.text());
			SAYT_autocomplete_list_pos = pos;
			autocomplete_words.removeClass('sayt-a-highlight');
			word.addClass('sayt-a-highlight');
						
			// scroll autocomplete to the word					
			var offset = word.offset();
			if(offset.top > 260)
				SAYT_autocomplete_list.scrollTo({top:'+=20px',left:'0px'});
			else if(offset.top - 30 <= SAYT_autocomplete_list.scrollTop())
				SAYT_autocomplete_list.scrollTo({top:'-=20px',left:'0px'});
		}
	}	
}

function sayt_bold_search_text(html, query)
{
	eval("html = html.replace(/("+query+")/gi, function(v) {return '<b>'+v+'</b>';});");
	
	//pattern = stringToRegExp(trim($('#search-input').val(), 'gi'),

	//text = text.replace(pattern,'<b>'+$('#search-input').val()+'</b>');
	
	return html;
}

function stringToRegExp(pattern, flags){
    return new RegExp(
        pattern.replace(/[\[\]\\{}()+*?.$^|]/g, function(m){return '\\'+m;}),
        flags);
}

