var itsXmlHttpObjectR 	= false;
var itsXmlHttpObjectV 	= false;
var itsXmlHttpObjectH 	= false;
var itsXmlRpcUrl		= "index.php?cnt=xmlrpc";

function setListboxes() {
	if(document.getElementById("Reihe")) 		getSearchData("oReihe",			"Reihe");
	if(document.getElementById("Verlage")) 		getSearchData("oVerlage",		"Verlage");
	if(document.getElementById("Hersteller")) 	getSearchData("oHersteller",	"Hersteller");
	return true;
}

function getSearchData(theType,theName) {
	var aUrl		= "";
	var aLoadText	= "";

	setXmlHttpObjects();

	if(!itsXmlHttpObjectR || !itsXmlHttpObjectH || !itsXmlHttpObjectV) {
		return false;
	}

	document.getElementById(theName).style.visibility = "visible";
//	document.getElementById("Verlage").style.visibility		= "visible";
//	document.getElementById("Hersteller").style.visibility	= "visible";

	aLoadText = "<select class=\"searchselectload\"><option>Wird geladen...</option></select>";

	document.getElementById(theType).innerHTML = aLoadText;
//	document.getElementById("oReihe").innerHTML =		aLoadText;
//	document.getElementById("oVerlage").innerHTML =		aLoadText;
//	document.getElementById("oHersteller").innerHTML =	aLoadText;

	aUrl += itsXmlRpcUrl;
	aUrl += "&type="	+ theType;
/*
	if(document.getElementById("s1_1") && document.getElementById("s1_1").checked)	aUrl += "&s1[]=" + escape("deutsch");
	if(document.getElementById("s1_2") && document.getElementById("s1_2").checked)	aUrl += "&s1[]=" + escape("englisch");
	if(document.getElementById("s7_1") && document.getElementById("s7_1").checked)	aUrl += "&s7[]=" + escape("bücher");
	if(document.getElementById("s7_2") && document.getElementById("s7_2").checked)	aUrl += "&s7[]=" + escape("software");
*/
	var s7 = document.getElementById("s7_1");

	if(s7 && s7.value == "-1") {
		aUrl += "&s7[]=" + escape("bücher");
		aUrl += "&s7[]=" + escape("software");
	}
	else if(s7 && s7.value == "bücher") {
		aUrl += "&s7[]=" + escape("bücher");
	}
	else if(s7 && s7.value == "software") {
		aUrl += "&s7[]=" + escape("software");
	}

	aUrl += "&rand="	+ Math.random();
	
	switch(theType) {
		case "oReihe":
			itsXmlHttpObjectR.open("GET",aUrl,true);
			itsXmlHttpObjectR.onreadystatechange = function() {
				if (itsXmlHttpObjectR.readyState == 4 || itsXmlHttpObjectR.readyState == "complete") {
					aResponse = itsXmlHttpObjectR.responseText;

					if(aResponse == "false") {
						document.getElementById("Reihe").style.visibility	= "hidden";
					}
					else {
						document.getElementById("Reihe").style.visibility	= "visible";
						document.getElementById("oReihe").innerHTML 		= aResponse;
					}
				}
			}
			itsXmlHttpObjectR.send(null);
			break;
		case "oVerlage":
			itsXmlHttpObjectV.open("GET",aUrl,true);
			itsXmlHttpObjectV.onreadystatechange = function() {
				if (itsXmlHttpObjectV.readyState == 4 || itsXmlHttpObjectV.readyState == "complete") {
					aResponse = itsXmlHttpObjectV.responseText;

					if(aResponse == "false") {
						document.getElementById("Verlage").style.visibility	= "hidden";
					}
					else {
						document.getElementById("Verlage").style.visibility	= "visible";
						document.getElementById("oVerlage").innerHTML 		= aResponse;
					}
				}
			}
			itsXmlHttpObjectV.send(null);
			break;
		case "oHersteller":
			itsXmlHttpObjectH.open("GET",aUrl,true);
			itsXmlHttpObjectH.onreadystatechange = function() {
				if (itsXmlHttpObjectH.readyState == 4 || itsXmlHttpObjectH.readyState == "complete") {
					aResponse = itsXmlHttpObjectH.responseText;

					if(aResponse == "false") {
						document.getElementById("Hersteller").style.visibility	= "hidden";
					}
					else {
						document.getElementById("Hersteller").style.visibility	= "visible";
						document.getElementById("oHersteller").innerHTML 		= aResponse;
					}
				}
			}
			itsXmlHttpObjectH.send(null);
			break;
	}
} 

function setXmlHttpObjects() {
	if(!itsXmlHttpObjectR && document.getElementById("oReihe")) {
		if(window.ActiveXObject) {
			try {
				itsXmlHttpObjectR = new ActiveXObject("Msxml2.XMLHTTP");
				itsXmlHttpObjectV = new ActiveXObject("Msxml2.XMLHTTP");
				itsXmlHttpObjectH = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e) {
				try {
					itsXmlHttpObjectR = new ActiveXObject("Microsoft.XMLHTTP");
					itsXmlHttpObjectV = new ActiveXObject("Microsoft.XMLHTTP");
					itsXmlHttpObjectH = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch(e) {
					itsXmlHttpObjectR = false;
					itsXmlHttpObjectV = false;
					itsXmlHttpObjectH = false;
				}
			}
		}
		else if(window.XMLHttpRequest) {
			itsXmlHttpObjectR = new XMLHttpRequest();
			itsXmlHttpObjectV = new XMLHttpRequest();
			itsXmlHttpObjectH = new XMLHttpRequest();
		}
		else {
			itsXmlHttpObjectR = false;
			itsXmlHttpObjectV = false;
			itsXmlHttpObjectH = false;
		}
	}
}

var aCurrentSelected = -1;
var aOldValue = "";

function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} 
	else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} 
}

var searchReq				= getXmlHttpRequestObject();
var handleSuggestTimeout	= false;
var itsDefaultSearchField	= "s0";
var itsDefaultSuggestDiv	= "search_suggest";
var itsCurrentSearchField	= "";
var itsCurrentSuggestDiv	= "";
var itsExtendedSearch		= false;
var itsLastValue			= "";

function searchSuggest(theSearchField,theSuggestDiv) {
	if(theSearchField && theSearchField.length) itsCurrentSearchField = theSearchField;
	else itsCurrentSearchField = itsDefaultSearchField;
	if(theSuggestDiv && theSuggestDiv.length) itsCurrentSuggestDiv = theSuggestDiv;
	else itsCurrentSuggestDiv = itsDefaultSuggestDiv;
	if(theSearchField == "ext_search_stichwort" || theSearchField == "ext_search_autor") itsExtendedSearch = true;
	else itsExtendedSearch = false;

	if(handleSuggestTimeout) {
		window.clearTimeout(handleSuggestTimeout);
		handleSuggestTimeout = false;
	}
	if (aCurrentSelected == -1 && (searchReq.readyState == 4 || searchReq.readyState == 0 || searchReq.readyState == "complete")) {
		if(document.getElementById(itsCurrentSearchField).value.length) {
		
			var ss = document.getElementById(itsCurrentSuggestDiv)
			ss.innerHTML = '<div class="suggest_link" style="height:32px;"><center><img src="/images/loading_small.gif" border="0" style="padding-top:7px;"></center></div>';
			ss.style.visibility	= "visible";

			handleSuggestTimeout = window.setTimeout("handleSearchRequest()", 200);
		}
		else {
			document.getElementById(itsCurrentSuggestDiv).innerHTML = '';
			document.getElementById(itsCurrentSuggestDiv).style.visibility	= "hidden";
		}
	}		
}

function handleSearchRequest() {
	if(handleSuggestTimeout) {
		window.clearTimeout(handleSuggestTimeout);
		handleSuggestTimeout = false;
	}
	aOldValue = document.getElementById(itsCurrentSearchField).value;
	var s0 = encodeURIComponent(document.getElementById(itsCurrentSearchField).value);
	if(s0 == itsLastValue) return true;
	else itsLastValue = s0;

	var s7 = itsExtendedSearch?document.getElementById('s7_1'):document.getElementById('s7');
	var url = itsXmlRpcUrl + '&type=oSuggestSearch&search=' + s0;

	// alert(itsExtendedSearch);

	if(s7 && s7.value && s7.value != "-1") {
		url += "&group=" + escape(s7.value);
	}

	if(itsExtendedSearch) {
		if(itsCurrentSearchField == "ext_search_stichwort") {
			url += "&field=keyword";
		}
		if(itsCurrentSearchField == "ext_search_autor") {
			url += "&field=autor";
		}
		// if((document.getElementById("s7_1") && !document.getElementById("s7_1").checked) || (document.getElementById("s7_1") && !document.getElementById("s7_1").checked)) {
			// if(document.getElementById("s7_1") && document.getElementById("s7_1").checked) {
				// url += "&group=" + escape("bücher");
			// }
			// if(document.getElementById("s7_2") && document.getElementById("s7_2").checked) {
				// url += "&group=" + escape("software");
			// }
		// }
	}

	// document.write(s7.value);
	// document.write(url);
	
	searchReq.open("GET", url, true);
	searchReq.onreadystatechange = handleSearchSuggest; 
	searchReq.send(null);
}

function handleSearchSuggest() {
	if (searchReq.readyState == 4) {
		var ss = document.getElementById(itsCurrentSuggestDiv)
		// alert(itsCurrentSuggestDiv);
		ss.innerHTML = '';
		ss.style.visibility	= "visible";
		var str = searchReq.responseText.split("\n");
//		var org = escape(document.getElementById('s0').value);
		var org = document.getElementById(itsCurrentSearchField).value;
//		alert(str.length);
		if(str.length < 2) {
			ss.style.visibility	= "hidden";
		}
		else {
			for(i=0; i < str.length - 1; i++) {
				var keyword = "<b>" + str[i].substr(0,org.length) + "</b>" + str[i].substr(org.length,str[i].length);
					// aString = aString.replace(/<b>/,"");
					// aString = aString.replace(/<\/b>/g,"");
//				var keyword = str[i].toString();
//				keyword = keyword.replace("/"+org+"/","#"+org+"#");

				var suggest = '<div onmouseover="javascript:suggestOver(this,'+i+');" ';
				suggest += 'onmouseout="javascript:suggestOut(this);" ';
				suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
				suggest += 'class="suggest_link">' + keyword + '</div>';
				ss.innerHTML += suggest;
			}
		}
	}
}

function suggestOver(div_value,theCurrentSelected) {
	var aContainer 	= document.getElementById(itsCurrentSuggestDiv);
	var aList 		= aContainer?aContainer.getElementsByTagName('div'):false;
	if(aList && aList.length && aCurrentSelected > -1) {
		aList[aCurrentSelected].className = "suggest_link";
	}
	aCurrentSelected = theCurrentSelected;
	div_value.className = 'suggest_link_over';
}

function suggestOut(div_value) {
	div_value.className = 'suggest_link';
}

function setSearch(value) {
	// var done = false;
	document.getElementById(itsCurrentSearchField).value = doHtmlSpecialCharsDecode(value);
	document.getElementById(itsCurrentSuggestDiv).innerHTML = '';
	document.getElementById(itsCurrentSuggestDiv).style.visibility	= "hidden";

	// if(document.forms["search"]) alert(document.forms["search"].s0.value);
	// if(document.forms["sf0"]) alert(document.forms["sf0"].s0.value);
	
	if(itsExtendedSearch) {
		if(document.forms["sf1"] && document.forms["sf1"].submit) { document.forms["sf1"].submit(); done = true;}
	}
	else {
		if(document.forms["search"] && document.forms["search"].submit) { document.forms["search"].submit(); done = true;}
	}
//	if(!done && document.forms["sf0"] && document.forms["sf0"].submit) { document.forms["sf0"].submit(); done = true;}
}

function selectSuggest(event,theSearchField,theSuggestDiv){
	event = event || window.event;
	
	switch(event.keyCode) {
		case 27:
			document.getElementById(itsCurrentSearchField).value = aOldValue;
			break;
		case 33:
			doSelectDiv(-5);
			break;
		case 34:
			doSelectDiv(5);
			break;
		case 38:
			doSelectDiv(-1);
			break;
		case 40:
			doSelectDiv(1);
			break;
		case 9:
		case 13:
			document.getElementById(itsCurrentSuggestDiv).innerHTML = '';
			document.getElementById(itsCurrentSuggestDiv).style.visibility	= "hidden";
			break;
		default:
			// alert(event.keyCode);
			aCurrentSelected = -1;
			break;
	}

//	alert(event.keyCode);
	
	return false;
}

function doSelectDiv(theDirection) {
	var aContainer 	= document.getElementById(itsCurrentSuggestDiv);
	var aList 		= aContainer?aContainer.getElementsByTagName('div'):false;
	
	if(aList && aList.length) {
		if(aCurrentSelected > -1) {
			aList[aCurrentSelected].className = "suggest_link";
		}
		
		if(theDirection > 0) {
			if((aCurrentSelected + theDirection) > (aList.length-1)) {
				aCurrentSelected = aList.length-1;
			}
			else {
				aCurrentSelected += theDirection;
			}
		}
		else {
			if((aCurrentSelected + theDirection) < 1) {
				aCurrentSelected = 0;
			}
			else {
				aCurrentSelected += theDirection;
			}
		}

		aList[aCurrentSelected].className = "suggest_link_over";
		document.getElementById(itsCurrentSearchField).value = doHtmlSpecialCharsDecode(aList[aCurrentSelected].innerHTML);
	}
}

function doHtmlSpecialCharsDecode(theString) {
	var aList 		= {};
	var aString		= theString.toString();
	
	aString = aString.replace(/<b>/g,"");
	aString = aString.replace(/<\/b>/g,"");
	aString = aString.replace(/<B>/g,"");
	aString = aString.replace(/<\/B>/g,"");

	aList['<'] = '&lt;';
	aList['>'] = '&gt;';
	aList['&'] = '&amp;';

	for (aSymbol in aList) {
        aEntity		= aList[aSymbol];
        aString		= aString.split(aEntity).join(aSymbol);
    }

	return aString;
}