// Der grobe Aufbau des Suggest sieht hier so aus:
//
// <div id="suggest_container">
// 	<div style="float: left;" id="suggest">
// 		<table width="100%" cellspacing="0" cellpadding="0" border="0" style="table-layout: fixed;" class="suggest">
// 			<tbody>
// 				<tr onclick="doSomethingWithTheHit(this, 'ACIDUM FORMICICUM D 200 Globuli');" class="suggest_zeile">
// 					<td class="suggest_zelle">ACIDUM FORMICICUM D 200 <b>Glob</b>uli</td>
// 				</tr>
// 				...
// 				<tr onclick="doSomethingWithTheHit(this, 'ACIDUM HYDROFLUORICUM D 12 Globuli');" class="suggest_zeile">
// 					<td class="suggest_zelle">ACIDUM HYDROFLUORICUM D 12 <b>Glob</b>uli</td>
// 				</tr>
// 			</tbody>
// 		</table>
// 		<table width="100%" cellspacing="0" cellpadding="0" border="0" class="suggest_nav">
// 			<tbody>
// 				<tr class="suggest_nav_zeile">
// 					<td class="suggest_nav_zelle">
// 						<div style="float: left;">
// 							<span class="suggest_nav_action"><span style="visibility: visible;">« <a onclick="showHitEngine(this, 'q=...'); return false;" href="javascript:void(0)" class="suggest_hitprev">zurück</a></span></span>
// 							<span class="suggest_nav_action"><span style="visibility: visible;">» <a onclick="showHitEngine(this, 'q=...'); return false;" href="javascript:void(0)" class="suggest_hitnext">weiter</a></span></span>
// 						</div>
// 						<div style="float: right; padding-top: 5px;">5.459 Treffer</div>
// 					</td>
// 				</tr>
// 			</tbody>
// 		</table>
// 	</div>
// </div>
//
// Dies nur zur Info, damit mit den unteren Angaben etwas angefangen werden kann.

var force_hide = new Boolean(false);

function setForceHide() {
	hideHitEngineContainer();
	document.getElementById('suchform').rubrik2.value = '';
	document.getElementById('suchform').rubrik2.focus();
	force_hide = true;
}

function ajaxObject(sUrl, fnReadyStateComplete, fnResponseProcess, oElement) {

	var that = this;

	this.updating = false;
	this.abort = function() {
		if (that.updating) {
			that.updating = false;
			if (that.interval) {
				window.clearInterval(that.interval);
				that.interval = null;
			}
			that.AJAX.abort();
			that.AJAX = null;
		}
	}

	this.interval = null;
	this.clearInterval = function() {
		if (that.interval) {
			window.clearInterval(that.interval);
			that.interval = null;
		}
	}
	this.update = function(passData,postMethod,syncMethod) {
		var oUpdateElementLocale = (that.update.arguments.length > 3 ? that.update.arguments[3] : oUpdateElement);

		if (that.updating) { return false; }
		try {
			that.AJAX = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try{
				that.AJAX = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(sc) {
				that.AJAX = null;
			}
		}
		if (!that.AJAX && typeof XMLHttpRequest!="undefined") {
			that.AJAX = new XMLHttpRequest();
		}
		if (that.AJAX == null) {
			return false;
		} else {
			if (!(/^sync/i.test(syncMethod))) {
				that.AJAX.onreadystatechange = function() {
					if (that.AJAX.readyState == 4) {
						that.updating = false;
						that.callback(that.AJAX.responseText,that.AJAX.status,that.AJAX.responseXML,that.requestText,that.callbackCustom,oUpdateElementLocale);
						that.AJAX = null;
					}
				}
			}
			that.updating = new Date();
			that.requestText = passData;
			if (/^post/i.test(postMethod)) {
				var sTimestamp = that.updating.getTime();
				var sUri = sUrl + '?' + sTimestamp;
				that.AJAX.open("POST", sUri, !(/^sync/i.test(syncMethod)));
				that.AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				that.AJAX.setRequestHeader("Content-length", passData.length);
				that.AJAX.setRequestHeader("Connection", "close");
				that.AJAX.send(passData + '&host=' + window.location.host);
			} else {
				var sTimestamp = that.updating.getTime();
				//var sUri = sUrl + '?' + passData + '&host=' + window.location.host + '&timestamp=' + sTimestamp;
				var sUri = sUrl + '?' + passData;
				that.AJAX.open("GET", sUri, !(/^sync/i.test(syncMethod)));
				that.AJAX.send(null);
			}
			if (/^sync/i.test(syncMethod)) {
				that.updating = false;
				that.callback(that.AJAX.responseText,that.AJAX.status,that.AJAX.responseXML,that.requestText,that.callbackCustom,oUpdateElementLocale);
				that.AJAX = null;
			}
			return true;
		}
	}
	var oUpdateElement  = oElement || null;
	this.callback       = fnReadyStateComplete || function () { };
	that.callbackCustom = fnResponseProcess || function () { };
}

function ajaxCallback(sResponseText, iStatus, sResponseXML, sRequestText, fnResponseProcess, oUpdateElement) {
	if (iStatus == 200) {
		fnResponseProcess(sResponseText, sRequestText, oUpdateElement);
	}
}

function evalHitEngine(sResponseText, sRequestText) {
	hideHitEngineContainer();

	// Antwort einfügen
	jQuery('#suggest_container').html(sResponseText);

	/*
	if(force_hide == true) {
		jQuery('#suggest_container').css('display', 'none');
	}
	else {
		jQuery('#suggest_container').css('display', 'block');
	}
	*/
	jQuery('#suggest_container').css('display', 'block');

	// ...Hover-Funktion bei Suggest setzen
	jQuery('.suggest_zeile').hover(function() {
		jQuery('.suggest_zeile_on').removeClass('suggest_zeile_on');
		jQuery(this).addClass('suggest_zeile_on');
		jQuery('.suggest_href_on').removeClass('suggest_href_on');
		jQuery(this).addClass('suggest_href_on');
	}, function() {
		jQuery(this).removeClass('suggest_zeile_on');
		jQuery(this).removeClass('suggest_href_on');
	});
}

function showHitEngine(oElement, sRequestText) {
	ajaxObjectHitEngineSuggest.update(sRequestText, "POST");
}

function hideHitEngineContainer() {
	jQuery('#suggest_container').css('display', 'none');
}

var bUseHitsAsCompletion = true;
var oHitEngineContext    = null;
// ********* Bitte anpassen *********
// Hier bitte das Serverfile eintragen, welches die Parameter an den 
// HitEngine-Server (http://78.46.34.55:20702/) per GET weiterleitet.
// Das Serverfile erhält dann ein XML-File als Antwort
var sHitEngineUrl        = "api/hitengine/req_hitengine.php";
// **********************************

var ajaxObjectHitEngineSuggest = new ajaxObject(sHitEngineUrl, ajaxCallback, evalHitEngine);

jQuery.noConflict();
jQuery(document).ready(function() {

	jQuery('#hitengine').bind('keyup', function(event) {
		var sValue = escape(jQuery.trim(jQuery(this).val()));

		if (sValue != "" && isNaN(sValue)) {
			var sValueLast   = jQuery(this).data("valuelast");
			// ****** Bitte evtl. anpassen ******
			// Hier wird die Query (mit den entsprechenden Parametern aufgebaut
			//var sRequestText = "q=" + sValue;
			//var sRequestText = "q=" + sValue.split(/\s+/).join("~ ") + "*~" + "&rw=5&rd=5&c=0&h=15";
			var sRequestText = "q=" + sValue.toLowerCase().split(/\s+/).join("*~ ") + "*~" + "&rw=5&rd=5&c=0&h=20";
			// **********************************

			if (sValue != sValueLast &&
				event.keyCode != 13) {                                         // RETURN nicht bearbeiten
				ajaxObjectHitEngineSuggest.clearInterval();                    // Initialisierte Timer beenden
				ajaxObjectHitEngineSuggest.interval = window.setInterval(function() {
					ajaxObjectHitEngineSuggest.abort();                        // Laufende Requests abbrechen
					ajaxObjectHitEngineSuggest.update(sRequestText, "POST");   // Request absetzen
					ajaxObjectHitEngineSuggest.clearInterval();                // Wenn Request abgesetzt, dann Timer beenden
				}, 250);
				jQuery(this).data("valuelast", sValue);
			}
		}
		else {
			hideHitEngineContainer();
			jQuery(this).removeData("valuelast");
			jQuery(this).removeData('hovergroup');
		}
	}).bind('keydown', function(event) {                                       // Dies dient zur Steuerung des Suggest per Tastatur (siehe auch Aufbau oben)
		var bExist         = (jQuery('#suggest_container').length > 0);
		var bVisible       = (bExist && jQuery('#suggest_container').css('display') != 'none');

		var oHoverSuggest  = jQuery('.suggest_zeile_on');
		var oHoverSuggest  = jQuery('.suggest_href_on');
		var iHoverSuggest  = jQuery('.suggest_zeile').index(oHoverSuggest);
		var iNumberSuggest = jQuery('.suggest_zeile').length;
		var iHoverSuggest  = jQuery('.suggest_href').index(oHoverSuggest);
		var iNumberSuggest = jQuery('.suggest_href').length;

		if (event.keyCode == 40) {       // Falls es sich um Cursor nach unten handelt
			if (iNumberSuggest > 0 && !bVisible) {
				jQuery('#suggest_container').css('display', 'block');
			}
			if (bVisible) {
				var iHoverSuggestNew = (iHoverSuggest >= iNumberSuggest - 1 ? 0 : iHoverSuggest + 1);

				jQuery('.suggest_zeile_on').removeClass('suggest_zeile_on');
				jQuery('.suggest_zeile:eq(' + iHoverSuggestNew + ')').addClass('suggest_zeile_on');
				jQuery('.suggest_href_on').removeClass('suggest_href_on');
				jQuery('.suggest_href:eq(' + iHoverSuggestNew + ')').addClass('suggest_href_on');
				return false;
			}
		}
		else if (event.keyCode == 38) {  // Falls es sich um Cursor nach oben handelt
			if (bVisible) {
				var iHoverSuggestNew = (iHoverSuggest <= 0 ? iNumberSuggest - 1 : iHoverSuggest - 1);

				jQuery('.suggest_zeile_on').removeClass('suggest_zeile_on');
				jQuery('.suggest_zeile:eq(' + iHoverSuggestNew + ')').addClass('suggest_zeile_on');
				jQuery('.suggest_href_on').removeClass('suggest_href_on');
				jQuery('.suggest_href:eq(' + iHoverSuggestNew + ')').addClass('suggest_href_on');
				return false;
			}
		}
		else if (event.keyCode == 13) {  // Falls RETURN in der Suggest-Liste gedrückt wurde
			if (bVisible) {
				if (jQuery('.suggest_zeile_on').length > 0) {
					jQuery('.suggest_zeile_on').click();
					return false;
				}
				else {
					hideHitEngineContainer();
				}
			}
		}
		else if (event.keyCode == 27) {  // Falls ESC in der Suggest-Liste gedrückt wurde
			if (bVisible) {
				hideHitEngineContainer();
				return false;
			}
		}
		else if (event.keyCode == 33) {  // Falls BILD OBEN in der Suggest-Liste gedrückt wurde
			if (bVisible) {
				jQuery('.suggest_nav_zeile').find('span').map(function(){return (jQuery(this).css('visibility') == 'hidden' ? null : this)}).find('a.suggest_hitprev').click();
				return false;
			}
		}
		else if (event.keyCode == 34) {  // Falls BILD UNTEN in der Suggest-Liste gedrückt wurde
			if (bVisible) {
				jQuery('.suggest_nav_zeile').find('span').map(function(){return (jQuery(this).css('visibility') == 'hidden' ? null : this)}).find('a.suggest_hitnext').click();
				return false;
			}
		}
	});
});

function set_searchform(artname)
{
        document.getElementById('suchform').rubrik2.value = artname;
        document.getElementById('suchform').suchart.value = 'hitenginemain';
	document.getElementById('suggest_container').style.display = 'none';
	showWaitingScreen();
        document.getElementById('suchform').submit();
}

var objSuggest = null;
objSuggest = createReqObj();
var dateObj = new Date(); //no caching for xmlhhtp object
function nextSuggest(offset)
{
	var sValue = document.getElementById('suchform').rubrik2.value;

	var sRequestText = "q=" + sValue.toLowerCase().split(/\s+/).join("*~ ") + "*~" + "&rw=5&rd=5&c=0&h=20&f=" + offset;

        objSuggest.open('post', 'api/hitengine/req_hitengine.php?' + sRequestText, false);
        objSuggest.setRequestHeader("If-Modified-Since", dateObj.toGMTString());

	objSuggest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	objSuggest.setRequestHeader("Content-length", sRequestText.length);
	objSuggest.setRequestHeader("Connection", "close");

        objSuggest.send(sRequestText);	

	//alert(sRequestText + "\n\nResult: " + objSuggest.responseText);

	document.getElementById('suggest_container').innerHTML = objSuggest.responseText;

	// Hover-Effekt nach Blaettern
	jQuery('#suggest_container').html(objSuggest.responseText);
	jQuery('#suggest_container').css('display', 'block');
	jQuery('.suggest_zeile').hover(function() {
		jQuery('.suggest_zeile_on').removeClass('suggest_zeile_on');
		jQuery(this).addClass('suggest_zeile_on');
		jQuery('.suggest_href_on').removeClass('suggest_href_on');
		jQuery(this).addClass('suggest_href_on');
	}, function() {
		jQuery(this).removeClass('suggest_zeile_on');
		jQuery(this).removeClass('suggest_href_on');
	});
}
