var livesearch_http; // HTTP Handler
var livesearch_status; // Status (0-3)
var livesearch_focused_result; // Nr of currently focused result
var livesearch_search_string;
var livesearch_request_status=0;
var livesearch_currentsearch = '';
var livesearch_timeout;

function livesearch_results_keyevent(e,eventtype,currentsearch)
{
	var preventdefault = false;
	if(window.event) { // IE
		keynum = e.keyCode;
	}
	else if(e.which) { // Netscape/Firefox/Opera
		keynum = e.which;
	}

	if(keynum==40) { // Arrow down
		if(eventtype=='up') livesearch_focus_result(livesearch_focused_result+1,currentsearch);
	}
	else if(keynum==38) { // Arrow up
		if(eventtype=='up' && livesearch_focused_result>1) livesearch_focus_result(livesearch_focused_result-1,currentsearch);
	}
	else if(keynum==9) { // Tab
	}
	else if(keynum==13) { // Enter
		if(eventtype=='press') {
			if(livesearch_focused_result) {
				window.location = document.getElementById('livesearch_result_'+livesearch_focused_result+currentsearch).href;
				preventdefault=true;
			}
			else {
				
			}
		}
	}
	else if(keynum==27) { // Escape
	}
	else if(keynum==33) { // Page Up
	}
	else if(keynum==34) { // Page Down
	}
	else { // Redirect to search field
		if(eventtype=='up') {
			livesearch_focused_result=0;
			livesearch_focus_result(0,currentsearch);
			livesearch_showResult(currentsearch);
		}
	}
	if(preventdefault) {
		e.returnValue = false; // for IE
		if(e.preventDefault) e.preventDefault(); // for Mozilla
	}
}

/* Set focus to numbered result element
*/
function livesearch_focus_result(result_nr,currentsearch)
{
	var livesearch_search = document.getElementById("livesearch_search"+currentsearch);
	var old_item = document.getElementById('livesearch_result_'+livesearch_focused_result+currentsearch);
	var new_item = document.getElementById('livesearch_result_'+result_nr+currentsearch);
	if(old_item&&(new_item||result_nr==0)) {
		old_item.style.backgroundColor='#ffffff';
	}
	if(new_item) {
		new_item.style.backgroundColor='#ffc8bc';
	}
	livesearch_focused_result = result_nr;
}

function livesearch_showResult(currentsearch)
{
	var search_field = document.getElementById("livesearch_search"+currentsearch);
	if(search_field.value != livesearch_search_string) {
		livesearch_focused_result = 0;
		livesearch_search_string = search_field.value;
	}
	// if(!livesearch_request_status) {
		if(search_field.value.length<1) {
			livesearch_hideSearch(currentsearch);
		}
		else {
			if(livesearch_timeout) clearTimeout(livesearch_timeout);
			livesearch_timeout = setTimeout("livesearch_sendRequest('"+addslashes(currentsearch)+"')",200);
			// livesearch_sendRequest(search_field.value,currentsearch);
			livesearch_request_status=1;
		}
	// }
}

function livesearch_hideSearch(currentsearch)
{
	var livesearch_results = document.getElementById("livesearch_results"+currentsearch);
	livesearch_results.style.display='none';
}

function livesearch_sendRequest(currentsearch)
{
	var search_field = document.getElementById("livesearch_search"+currentsearch);
	livesearch_currentsearch = currentsearch;
	livesearch_request_status=0;
	var livesearch_results = document.getElementById("livesearch_results"+currentsearch);
	livesearch_http=GetXmlHttpObject()
	if (livesearch_http==null) {
		// alert("FiDi Error: Ihr Browser unterst&uuml;tzt XML HTTP Request nicht!");
		// ignore -> classical search still works
		return;
	}
	var url=DIR_LROOT +'/livesearch/getresults.php';
	url=url+"?q="+search_field.value;
	url=url+"&s="+currentsearch;
	url=url+"&sid="+Math.random();
	livesearch_http.open("GET",url,true);
	livesearch_http.send(null);
	livesearch_http.onreadystatechange=livesearch_stateChanged;
}

function livesearch_positioning(currentsearch)
{
		var div_x;
		var div_y;

		var textbox = document.getElementById("livesearch_search"+currentsearch);
		var element = document.getElementById("livesearch_results"+currentsearch);
		el = textbox;
		for(var posx=0,posy=0;el!=null;posx+=el.offsetLeft,posy+=el.offsetTop,el=el.offsetParent);
		div_x = posx-element.offsetWidth+textbox.offsetWidth;
		div_y = posy+textbox.offsetHeight;

		element.style.left = div_x + 50;
		element.style.top = div_y;
}

/* HTTP request ready
*/
function livesearch_stateChanged()
{
	var search_field = document.getElementById("livesearch_search"+livesearch_currentsearch);
	var livesearch_results = document.getElementById("livesearch_results"+livesearch_currentsearch);
	if(livesearch_http.readyState==4) {
		if(livesearch_http.responseText && search_field.value.length>0) {
			livesearch_results.style.display="";
		}
		else {
			livesearch_hideSearch(livesearch_currentsearch);
		}
		livesearch_results.innerHTML=livesearch_http.responseText;
		livesearch_positioning(livesearch_currentsearch);
	}
}
