
var s_lastSuggestSearchWord = '';

function request() {
	var s_searchword	= document.getElementById('suchtext_top').value.replace("\"", '')
	s_lastSuggestSearchWord = s_searchword;
	var s_url			= '/gateways/search/suggestions.mb1';
	var a_params		= 'searchword=' + escape(s_searchword);
	var myAjax			= new Ajax(s_url, {	method: 'get',
									onRequest: function() {
										// show loading animation?
									},
									onFailure: function() {
									},
									onException: function() {
									},
									onComplete: function(a_data) {
										if(a_data != '') {
											a_data = Json.evaluate(a_data);
										}
										if (s_lastSuggestSearchWord == a_data.searchword) {
											objNaviItems.clearArray();
											$('searchResult_navi').innerHTML = formatResults(a_data.results, a_data.searchword);
											ke.setAnzahlnaviItems(a_data.results.length);
											divBlendOn(1);
										}
									},
									data: a_params
								}
	);

	if(s_searchword.length > 0) {//Nur wenn Eingabezeichen grösser 0
		//Wenn KeyStatus = True wird ein Request gestartet
		if(ke.getKeyStatus()) {	//Start der Anfrage
			ke.setlistNr(-1);
			myAjax.request();
		}
	} else {
		ke.setKeyStatus(true);
		divBlendOff();
	}
}

function formatResults(a_results, s_searchword) {
	var s_result = '';

	var i_count = 0;

	a_results.each(function(a_result) {
		a_result.text = a_result.text.replace('\u0080', '€').replace('\u0096', '–');
		objNaviItems.pushtoArray(a_result.text);

		// set pid and navid
		var i_pid = '';
		if (a_result.pid && a_result.pid != '') {
			i_pid = a_result.pid;
		}
		var i_navid = '';
		if (a_result.navid && a_result.navid != '') {
			i_navid = a_result.navid;
		}

		s_result += getSearchItem(a_result.text, a_result.text, a_result.type, i_pid, i_navid, i_count++, s_searchword)
	});

	s_result = '<table cellspacing="0" cellpadding="1">' + s_result + '</table>';

	return s_result;
}

function getSearchItem(s_orgText, s_shortText, s_type, i_pid, i_navid, i_nr, s_searchword) {
	s_shortText = highlightSearchWord(s_shortText, s_searchword);
	s_orgText	= s_orgText.replace(/"/g, "''");

	s_formedString =  "<tr id=\"searchResultElement"+ i_nr + "\" title=\" "+  s_orgText +" \" onmouseover=\"ke.setKeyStatus(false);ChangeDivColor(this.id)\" class=\"searchResultElement\">";
	s_formedString += "<td href=\"#\" id=\"sw"+ i_nr +"\" onClick=\"ke.setKeyStatus(true);pushToSearchField(this.id,1)\">"
	s_formedString += "<span class=\"searchWord\">" + s_shortText + "</span>"
	s_formedString += "<span class=\"resultType\">" + s_type + "</span>";
	s_formedString += "</td>";
	if (i_pid != '') {
		s_formedString += "<input type='hidden' id=\"sw"+ i_nr +"_pid\" value='" + i_pid + "' />";
	}
	if (i_navid != '') {
		s_formedString += "<input type='hidden' id=\"sw"+ i_nr +"_navid\" value='" + i_navid + "' />";
	}
	s_formedString += "</tr>";

	return s_formedString;
}

function highlightSearchWord(s_shortText, s_searchword) {

	var s_expression= new RegExp(s_searchword.replace('%u20AC', '€').replace('\u0096', '–'), 'gi');
	var a_match		= s_expression.exec(s_shortText);

	if (a_match) {
		s_shortText = s_shortText.replace(a_match[0], '<span style="color:#ff0029">' + a_match[0] + '</span>');
	}

	return s_shortText;
}

function cp_position() {
	var check = getNavigator();
	var aufloesung = screen.width;

	if (aufloesung <= 800) {
		try {
			document.getElementById('searchResult_navi').style.left ="395px";
			document.getElementById('searchResult_navi').style.top ="82px";
		}
		catch (e) {}
	}
}

function getNavigator(){
	return navigator.appVersion;
}
/********************************************************************************************
Schieben der Auswahl in das Suchfeld
*/
function pushToSearchField(element, send) {
	var pos = element.charAt(2);
	if (element.length == 4) {
		pos = element.charAt(2) + '' + element.charAt(3);
	}

	// prüfen ob gültige Zahl
	if(isNaN(pos) == false && pos > -1)	{
		try	{
			document.getElementById('suchtext_top').value =	objNaviItems.getNaviItemText(pos);
		}
		catch (e) {}

		//divBlendOff();
		if(send) {
			try	{
				/*
				Focus vom suchtext lösen, damit nach dem Senden die Suchergebnisbox nicht erneut aufgeht
				"s_quelle" ändern
				*/

				document.getElementById('suchtext_top').blur();
				if ($(element + '_pid')) {
					window.location.href = '/index.mb1?p_id=' + $(element + '_pid').value + '&s_quelle=suggest';
				}
				else if ($(element + '_navid')) {
					window.location.href = '/index.mb1?nav_id=' + $(element + '_navid').value + '&s_quelle=suggest';
				} else {

					var s_searchText = document.getElementById('suchtext_top').value;
					if (urlRewritingEnabled == true && isRewritableSearchText(s_searchText)) {
						window.location.href = '/search_start/' + escape(s_searchText) + '.html?s_quelle=suggest';
					}
					else {
						var s_quelle = document.getElementById('s_quelle_top').value;
						document.getElementById('s_quelle_top').value = 'suggest';
						document.getElementById('searchform_top').submit();
						document.getElementById('s_quelle_top').value = s_quelle;
					}
				}
			}
			catch (e) {}
		}
	}
}

/********************************************************************************************
Object zur Verwaltung der orig. Search Texte
*/
var objNaviItemsManager = new Object();
objNaviItemsManager = function() {
		var arr_origText = new Array();

		this.clearArray = function(){
						arr_origText = null;
						arr_origText = new Array();
		}

		this.pushtoArray = function(s_NaviItem){
			arr_origText.push(s_NaviItem);
		}

		this.getNaviItemText = function(i_ArrayIndex){
			return arr_origText[i_ArrayIndex];
		}
}
objNaviItems = new objNaviItemsManager();

/*********************************************************************************************/
var b_blendOffRunning = false;
function divBlendOff() {
	setRunningState = function(state) {
		b_blendOffRunning = state;
	}

	if (!b_blendOffRunning) {
		b_blendOffRunning = true;
		try	{
			var e_suggestLayer = $('searchResult_navi');
			myFx = e_suggestLayer.effect('opacity', {duration: 400}).start(0);
		}
		catch (e) {}
		window.setTimeout('setRunningState(false)',400);
	}
}


/********************************************************************************************
Box einblenden
*/
function divBlendOn() {
	window.setTimeout("delayBlendOn()", 100);
}

function delayBlendOn() {
	cp_position();
	try	{
		$('searchResult_navi').setOpacity(1);
		document.getElementById('searchResult_navi').style.display = "inline";
	}
	catch (e) {}
}
/********************************************************************************************
Durch Mouseover markiertes Navi Elemente wieder entfernen
*/
function clearSelectedItems() {
	var element = "";
	for (var i = 0; i < ke.getAnzahlnaviItems(); i++) {
		element = "searchResultElement" + i;
		try	{
			document.getElementById(element).style.backgroundColor = '#ffffff';
		}
		catch (e) {}
	}
}
/********************************************************************************************
Umwandlung von Hex zu RGB
*/
function hexColorToRGBString(s_hexColor){
	var s_returnValue = 'rgb(';

	s_returnValue += eval('0x' + s_hexColor.substr(0, 2)) + ', ';
	s_returnValue += eval('0x' + s_hexColor.substr(2, 2)) + ', ';
	s_returnValue += eval('0x' + s_hexColor.substr(4, 2));

	return  s_returnValue + ')';
}
/********************************************************************************************
Bei Mouseover od. bei Up/Down Key markieren des Navi Items
*/
function ChangeDivColor(element) {
	//letztes Element von String holen
	var i_pos = element.charAt(element.length-1);
	element = document.getElementById(element).id;

	clearSelectedItems();
	if(isNaN(i_pos) == false) {
		try	{

			if(document.getElementById(element).style.backgroundColor == hexColorToRGBString('cccccc'))	{
				document.getElementById(element).style.backgroundColor = '#ffffff';
			}
			else {
				document.getElementById(element).style.backgroundColor = '#e8e8e8';
			}
		}
		catch (e) {}
	}
}

/********************************************************************************************
Function zur Steuerung der Key's Up/Down Key
*/
function keyEventProcessing(key) {
	var keyNumber = 0;

	if (!key) {
		keyNumber = window.event.keyCode;
	}
	else {
		keyNumber = key.which;
	}
	//alert(keyNumber);
	switch(keyNumber) {
		case 38: // up arrow key
			ke.setKeyStatus(false); //Ausblenden der Div Container sperren sperren
			clearSelectedItems();

			ke.decrementListNr();
			ChangeDivColor("searchResultElement" + ke.getlistNr());
			pushToSearchField("sw" + this.ke.getlistNr(),0);

			break;
		case 40: // down arrow key
			ke.setKeyStatus(false); //Ausblenden der Div Container sperren sperren
			clearSelectedItems();

			ke.incrementListNr();
			ChangeDivColor("searchResultElement" + ke.getlistNr());
			pushToSearchField("sw" + this.ke.getlistNr(),0);

			break;
		case 13: // Return key
			try {
				ke.setKeyStatus(true);
				pushToSearchField("sw" + this.ke.getlistNr(),1);
				divBlendOff();
			}
			catch (e) {}
		break;
		default:
			ke.setKeyStatus(true);
	}
}

function changeSearchField() {
	var o_field = $('suchtext_top');

	if (o_field.value == '') {
		o_field.setStyles({
			'color'		: '#8F8F8F'
		});
		o_field.value = 'Was möchten Sie finden?';
	} else {
		if (o_field.value == 'Was möchten Sie finden?') {
			o_field.value = '';
		}
		o_field.setStyles({
			'color'		: '#000'
		});
	}
}

/********************************************************************************************
Object zur Verwaltung und Speicherung der Key Informationen
d.h. Zustände werden hier festgehalten wie an welcher Position ist gerade die Markierung des Mouseover
*/
var KeyInformation  = new Object();
//Konstruktur
KeyInformation.init = function() {
	//locale Variabeln
	var keystatus = true;
	//speichert die aktuell ausgewählte Listen Nummer
	var listNr = -1;
	// Anzahl der Navi Items im Div Container
	var anzahlNaviItems = 0;

	//Speichern des davor ausgewälten Navi Items
	var tempNaviItem = 0;

	var returnedNumberItems = 0;

	//public Methoden:
	//Liefert und Setzen des keystatus TRUE/FALSE
	this.getKeyStatus = function(){return keystatus;}

	this.setKeyStatus = function(_keystatus){
		if(_keystatus){
			if(anzahlNaviItems > 0) //keystatus wird nur auf TRUE gesetzt wenn die Anzahl der Navi Elemente > 0 sind
						keystatus =_keystatus;
		}
		else keystatus = false;
	}
	//Liefern, setzen, inkrementieren, dekrementieren der Navigationsnummer
	this.getlistNr = function()	{
		return listNr;
	}

	this.setlistNr = function( _listNr)	{
		listNr = _listNr;
	}

	this.incrementListNr = function() {
		//Wenn Anzahl der Navigations Elemente grösser ist als der gedrückt Wert
		var nr = this.getlistNr();
		this.setTempNaviItem(nr);
		if(this.getlistNr() < this.getAnzahlnaviItems()-1)
		listNr++;
	}

	this.decrementListNr = function() {
		var nr = this.getlistNr();
		if(nr < 0) nr = 0;
		this.setTempNaviItem(nr);
		if(this.getlistNr() > 0)
		listNr--;
	}


	this.getTempNaviItem = function() {
			return tempNaviItem;
	}

	this.setTempNaviItem = function(_tempNaviItem) {
		tempNaviItem = _tempNaviItem;
	}

	this.getAnzahlnaviItems = function() {
		return anzahlNaviItems;
	}
	this.setAnzahlnaviItems = function(_naviItems) {
		anzahlNaviItems = _naviItems;
	}

	this.getReturnedNumberItems = function() {
		return returnedNumberItems;
	}

	this.setReturnedNumberItems = function(_returnedNumberItems) {
		returnedNumberItems = _returnedNumberItems;
	}
}
ke = new KeyInformation.init();