/*
	This is the JavaScript file for the AJAX Suggest Tutorial

	You may use this code in your own projects as long as this 
	copyright is left	in place.  All code is provided AS-IS.
	This code is distributed in the hope that it will be useful,
 	but WITHOUT ANY WARRANTY; without even the implied warranty of
 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
	
	For the rest of the code visit http://www.DynamicAJAX.com
	
	Copyright 2006 Ryan Smith / 345 Technical / 345 Group.	

*/
//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		//alert("Ihr Browser ist schon etwas aelter.\nEventuell sollten Sie einmal ueber ein Update nachdenken...");
	}
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();
var searchReqTimeout = null;
var ajaxCallTimout = 5000; //5 sec

var suggestTimeout = null;
var suggestSpeed = 100; //0.25 sec

var searchLang = "de";
var go_searchurl = "";
var lastSearch = "";

function triggerSuggestLater(lang,searchurl) 
{
	go_searchurl = searchurl;
	if (suggestTimeout) clearTimeout(suggestTimeout); //kill suggestion timer
	if (searchReqTimeout) clearTimeout(searchReqTimeout); //kill request timeout

	if (searchReq && (searchReq.readyState != 4 && searchReq.readyState != 0)) 
	{
		searchReq.abort(); //kill running requests
	}
	suggestTimeout = setTimeout('searchSuggest(\''+lang+'\')',suggestSpeed);
}

//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest(lang) {
	searchLang = lang;
	var str = encodeURIComponent(document.getElementById('txtSearch').value);

	if (str==lastSearch) return;
	lastSearch = str;

	//still going? kill it.
	if (searchReq && (searchReq.readyState != 4 && searchReq.readyState != 0)) {
		searchReq.abort();
	}

	if (str=="") {
		hideSuggest();
	}
	else {
		if (searchReq && (searchReq.readyState == 4 || searchReq.readyState == 0)) {
			var url = 'suggest.php?lang=' + searchLang + '&search=' + str;
			searchReq.open("GET", url, true);
			searchReq.onreadystatechange = handleSearchSuggest; 
			searchReq.send(null);
			searchReqTimeout= setTimeout(handleSearchTimeout, ajaxCallTimout);
		}
	}
}

function hideSuggest() {
	document.getElementById('search_suggest').style.visibility = "hidden";
	lastSearch = "";
}

//Called ajaxCallTimout ms after searchSuggest if handleSearchSuggest was not called
function handleSearchTimeout() {
	if (searchReq) {
		searchReq.abort(); //took too long, kill it. is server down?
		//XXX: automatically bump up the key stroke trigger time, to reduce load?
		//XXX: automatically disable suggest after n failures?
	}
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
	if (searchReq && searchReq.readyState == 4) {
		if (searchReqTimeout) {
			clearTimeout(searchReqTimeout); //clear timout
			searchReqTimeout = null;
		}

		if (searchReq.status!=200) return; //server return an HTTP error. ignore, leave popup as it is. //XXX: automatically disable suggest?

		var response = searchReq.responseText;
		if (response == null) return;	//the request was aborted or "somehow" failed. ignore, leave popup as it is.

		var ss = document.getElementById('search_suggest')
		document.getElementById('search_suggest').style.visibility = "visible";
		ss.innerHTML = '';

		var str = response.split("\n");
		if (str.length > 1) {
			var searchString = str[0];
			
			for(i=0; i < str.length; i++) {
				var suggest = '<div style="clear:both;">';
				suggest += '';
				//suggest += '<a href="'+go_searchurl+'?suchwort=' + str[i].replace(/ /,"+") + '&s=1">';
				suggest += '<a onclick="javascript:document.getElementById(\'txtSearch\').value=\''+str[i]+'\';document.getElementById(\'search_suggest\').style.visibility=\'hidden\';">';
				suggest += str[i];
				suggest += '</a></div>';
				suggest += '';
				ss.innerHTML += suggest;
			}
		}else{
			ss.innerHTML = '<div style="clear:both;text-align:left;padding:2px;">keine Vorschl&auml;ge gefunden</div>';
		}
	}
}

//Mouse over function
function suggestOver(div_value) {
	div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
	div_value.className = 'suggest_link';
	
}
//Click function
function setSearch(value) {
	document.getElementById('txtSearch').value = value;
	document.getElementById('search_suggest').innerHTML = '';
}

//Hide fucntion
function hideSuggest(){
setTimeout("document.getElementById('search_suggest').style.visibility='hidden';",500);
}

