var searchSuggestIsBusy = 0;
var searchSuggestIndex = -1;

var lastRequestTime = 0;
var THROTTLE_PERIOD = 100;

document.onkeyup = keyPressed;
window.onload = mouseHandle;

function mouseHandle (Ereignis) {
	var li = document.getElementById("search_suggest");
	li.onmouseout = hide;
}

function hide (Ereignis) {
	if (!Ereignis)
		Ereignis = window.event;
	
	if (navigator.appName.indexOf("Internet Explorer") != -1) {
		if (this.contains(Ereignis.toElement)) {			
			return;
		}
	} else {
		var firedFrom = Ereignis.relatedTarget.getAttribute("class");
		if (firedFrom == 'suggest_alert' || firedFrom == 'suggest_result_header' || firedFrom == 'r' || firedFrom == 'srt' || firedFrom == 'src' || firedFrom == 'suggest_link' || firedFrom == 'suggest_link_over' || firedFrom == null) {
			
			return;
		}		
	}
	
	document.getElementById('search_suggest').style.display  = 'none';
}

function keyPressed (Ereignis) {
if (!Ereignis)
		Ereignis = window.event;

if (document.getElementById('search_suggest').style.display  == 'block') {
	if (!Ereignis)
		Ereignis = window.event;
		
		mykey = Ereignis.which?Ereignis.which:Ereignis.keyCode;
		
		switch (mykey) {
			case 38: handleup();	//Keyup => go to prev
				break;
			case 40: handledown();  //Keydown => go to next
				break;
			case 27: setSearch('',0,0); //ESC => reset		
				break;
		}
	}	
}  
  
  
function handleup()
{
	divs = document.getElementById("search_suggest").getElementsByTagName('div');
	
	if (searchSuggestIndex == 0)
		return;
	else if (searchSuggestIndex < 0)
		searchSuggestIndex = divs.length - 1;
	else
		searchSuggestIndex--;
		
	highlightSelSet();
}
  
function handledown()
{
	divs = document.getElementById("search_suggest").getElementsByTagName('div');
		
	if (searchSuggestIndex == divs.length - 1)
		return;
	else if (searchSuggestIndex < 0)
		searchSuggestIndex = 0;
	else
		searchSuggestIndex++;
		
	highlightSelSet();
}

function geSearchFormSuggest(keyCode) {
	var timer = new Date();
	if ((keyCode >= 48 && keyCode <= 57 || keyCode == 8) || (timer.getTime()-lastRequestTime > THROTTLE_PERIOD)) {
		if (keyCode == 27) {
			setSearch('', 0);
		} else if (keyCode >= 48 && keyCode <= 111 || keyCode == 8) {
			//is character or backspace
			var str = escape(document.getElementById('fq').value);
			
			if (str.length >= 3) {
				searchSuggestIsBusy = 1;
				document.getElementById('search_suggest').innerHTML = '<span id="suggest_corner"><img border="0" align="right" src="/images/2010/searchCorner.jpg"></span><span id="sRes"><img src="images/loadercircle.gif" border="0" hspace="5" vspace="6" align="absmiddle">searching...</span>';
				document.getElementById('search_suggest').style.display  = 'block';
				
				reqobj = agent.call('ajaxSearchSuggest.php', 'getNewSuggest', 'foobar', str);
				reqobj.onreadystatechange = function(){waitForResult(reqobj);};
				
				lastRequestTime = timer.getTime();
			} else {			
				document.getElementById('search_suggest').style.display  = 'none';
			}
		}
	}
}

function waitForResult(reqobj) {
	if (reqobj.readyState == 4) {
		// only if "OK"
		if (reqobj.responseText != 0) {
			if (reqobj.status == 200) {						
				document.getElementById('search_suggest').innerHTML = reqobj.responseText;
				document.getElementById('search_suggest').style.display  = 'block';											
			} else {
				alert("There was a problem retrieving the XML data:\n" + reqobj.statusText);
			}			
		} else {
			document.getElementById('search_suggest').style.display  = 'none';
		}
		searchSuggestIndex = -1;
		searchSuggestIsBusy = 0;
	}
}
 
//Mouse over function
function suggestOver(index) {
	searchSuggestIndex = index;
	
	highlightSel();
}

//Click function
function setSearch(value, submitIt, type) {
	value = value.replace(/<[^>]*>/ig,"");
	value = value.replace(/ß/,"ss");
	document.getElementById('fq').value = value;
	document.getElementById('search_suggest').innerHTML = '';
	document.getElementById('search_suggest').style.display  = 'none';
	
	//submit when clicked by mouse
	if (submitIt != 0) {
		document.getElementById('exact').value = 1;
		document.getElementById('type').value = type;
		document.forms.geSearchForm.submit();
	}
}
  
//highlight
function highlightSel()
{
	divs = document.getElementById("search_suggest").getElementsByTagName('div');
	
	for (i = 0; i < divs.length; i++) {
		if (i == searchSuggestIndex) {
			divs[i].className = 'suggest_link_over';
		}
		else
			divs[i].className = 'suggest_link';
	}
}

function cleanUp(myResult,type){
	if (type) {
		both = true;
		if (myResult[1] == "Diverse" || myResult[1] == "Various") {
			myResult[1] = "";
			both = false;
		}
		if (myResult[3] == "Diverse" || myResult[3] == "Various") {
			myResult[3] = "";
			both = false;
		}
		
		if (both) 
			myReturn = myResult[3] + " :: " + myResult[1];	
		else
			myReturn = myResult[3] + myResult[1];			
	} else {
		myReturn = myResult.replace(/<[^>]*>/ig,"");
		myReturn = myReturn.replace(/&amp;/ig,"&");
		myReturn = myReturn.replace(/ß/,"ss");
	}
	return myReturn;
}

//highlight and set searchfield
function highlightSelSet()
{
	divs = document.getElementById("search_suggest").getElementsByTagName('div');

	for (i = 0; i < divs.length; i++) {
		if (i == searchSuggestIndex) {
			divs[i].className = 'suggest_link_over';
		 
			searchField = document.getElementById("fq");
			if (searchField) {				
				mySuggest = document.getElementById("suggest_"+searchSuggestIndex).innerHTML;
				mySuggest = cleanUp(mySuggest,0);
				mySearch = /\[TIT\](.*)\[TYP\](.*)\[INT\](.*)/;
				myResult = mySearch.exec(mySuggest);				
				document.getElementById('type').value = myResult[2];				
				mySuggest = cleanUp(myResult,1);
				searchField.value = mySuggest;
				document.getElementById('exact').value = 1;
			}
		}
		else
			divs[i].className = 'suggest_link';
	}
}