suggestionSearch=new Object;
suggestionSearch.hiddenSelects=new Array;
suggestionSearch.timeout=new Array;
suggestionSearch.dummy=document.createElement('img');
suggestionSearch.dummy.src='/user/media/images/selectbox.gif';
	var position = 0;
	// Initiieren des Ajax Objektes
	function init_xml() {
		try {
			// für mozille
			new_xml = new XMLHttpRequest();
		} catch(error) {
			try {
				// für IE
				new_xml = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(error) {
				// wenn gar nicht möglich
				return false;
			}
		}
		// zurückgeben des Objektes
		return new_xml;
	}
	
	entry_list = init_xml();
	
	function getPosition(element)
		/* der Aufruf dieser Funktion ermittelt die absoluten Koordinaten
		des Objekts element */
		{
		var elem=element,tagname="",x=0,y=0,check=true;
		
		/* solange elem ein Objekt ist und die Eigenschaft offsetTop enthaelt
		wird diese Schleife fuer das Element und all seine Offset-Eltern ausgefuehrt */
		while ((typeof(elem)=="object") && check)
		{
			try {
				//alert(elem+" : "+typeof(elem)+"\n"+elem.tagName+" : "+typeof(elem.tagName));
				y+=elem.offsetTop;     /* Offset des jeweiligen Elements addieren */
				x+=elem.offsetLeft;    /* Offset des jeweiligen Elements addieren */
				tagname=elem.tagName.toUpperCase(); /* tag-Name ermitteln, Grossbuchstaben */
				
				/* wenn beim Body-tag angekommen elem fuer Abbruch auf 0 setzen */
				if (tagname=="BODY")
					elem=0;
				
				/* wenn elem ein Objekt ist und offsetParent enthaelt
				Offset-Elternelement ermitteln */
				if (typeof(elem)=="object")
					if (typeof(elem.offsetParent)=="object")
						elem=elem.offsetParent;
			} catch(e) {
				check=false;
			}
		}
		/* Objekt mit x und y zurueckgeben */
		position=new Object();
		position.x=x;
		position.y=y;
		return position;
	}

	function isIE7() {
		var Browser = navigator.userAgent.toLowerCase();
		var posie = Browser.indexOf("msie");
		var ie  = (posie!=-1) && (Browser.indexOf("opera")==-1) ? true : false;
		var ie7 = (ie && (Browser.substring(posie+5,posie+6)>=7)) ? true : false;
		return ie7;
	}
	
	function getEntryList(obj, name, url, limit, correction) {
		var pos = getPosition(obj);
		var searchtext=obj.value;
		if(entry_list.readyState < 4 && entry_list.readyState > 1) {
			setTimeout("getEntryList('"+searchtext+"', '"+name+"', '"+url+"', '"+correction+"');", 100);
		}
		entry_list.open("GET", url+"?search="+searchtext+"&name="+name+"&limit="+limit);
		entry_list.send(null);		
		if(!correction) {
			correction=document.getElementById(name).style.width;
		}

		if(navigator.appName == "Netscape") {
			document.getElementById('searchfield__outerDIV').style.marginLeft=pos.x+"px";
			document.getElementById('searchfield__outerDIV').style.marginTop=(pos.y+obj.offsetHeight)+"px";
		} else if(isIE7()) {
			document.getElementById('searchfield__outerDIV').style.marginLeft=(pos.x)+"px";
			document.getElementById('searchfield__outerDIV').style.marginTop=(pos.y+obj.clientHeight+5)+"px";		
		} else {
			document.getElementById('searchfield__outerDIV').style.marginLeft=(pos.x)+"px";
			document.getElementById('searchfield__outerDIV').style.marginTop=(pos.y+obj.clientHeight+5)+"px";
//			document.getElementById('searchfield__outerDIV').style.marginLeft="-"+correction+"px";
//			document.getElementById('searchfield__outerDIV').style.marginTop="20px";
		}
		
		entry_list.onreadystatechange = showSelection;
	}

	function showSelection() {
		// Loading anzeige an
		if (entry_list.readyState == 2) {
			null;
		}
		if(entry_list.readyState == 4) {
			// Loading anzeige aus
			if (entry_list.status != 200) {
				//Fehlermeldung
				null;
			} else {
				ergebnis = unescape(entry_list.responseText).split(':||:');
				//alert(unescape(entry_list.responseText));
				//name = ergebnis[2];
				name='searchfield';
				//suggestionSearch.name=name;
				suggestionSearch.name='searchfield';
				if (ergebnis[1] >= 1) {
					document.getElementById('searchfield__outerDIV').style.visibility = 'visible';					
					document.getElementById('suggestion__innerDIV').innerHTML = ergebnis[0];
					document.getElementById('searchfield__outerDIV').appendChild(document.getElementById('suggestion__innerDIV'));
					document.getElementById('suggestion__innerDIV').style.display = 'block';
					window.akt_entry = false;
					window.last_entry = (parseInt(ergebnis[1]));					
					for (i = 0; i < last_entry; i++) {
						document.getElementById('entry'+i).onkeydown = findKey;
					}
					hideSelectBoxes();	
				} else {
					document.getElementById('searchfield__outerDIV').style.visibility = 'hidden';
					document.getElementById('suggestion__innerDIV').innerHTML = '';
					document.getElementById('suggestion__innerDIV').style.display = 'none';
				}				
			}
		}
	}
	
	//*******/
	// function findKey stellt fest welche taste gedrückt wurde und entscheidet wann etwas passieren soll
	//*******/
	
	function findKey(Ereignis) {
		// abfragen des browsers netscape ja/nein
		var Netscape = new Boolean();
		if(navigator.appName == "Netscape") Netscape = true; 
	
		if(Netscape == true) {
			// erkennen der gedrückten taste im netscape
			dieserkey = Ereignis.which;
		} else {
			// erkennen der gedrückten taste im IE
			Ereignis = window.event;
			dieserkey = Ereignis.keyCode;
		}
		// standardfunktion der pfeiltasten oben/unten ausschalten
		if (dieserkey == 38 || dieserkey == 40) {
			document.getElementById('searchfield').blur();
			try {
				document.getElementById('entry'+akt_entry).blur();
			} catch(e) {
			
			}
			if (Ereignis.preventDefault) {
    			// für mozilla			
				Ereignis.preventDefault();
  			} else {
    			// für IE
				Ereignis.returnValue = false;
  			}
		}
		// sprung nach oben
		if (dieserkey == 38) {
			// festlegen was der nächste eintrag ist
			if (akt_entry > 0) {
				// der nächste in der liste
				window.old_entry = akt_entry;
				window.akt_entry = (parseInt(akt_entry) - 1);
			} else if (akt_entry == 0) {
				// der erste in der liste
				window.old_entry = akt_entry;
				window.akt_entry = (parseInt(last_entry) - 1);
			} else {
				// der erste in der liste
				window.akt_entry = (parseInt(last_entry) - 1);
			}
			//ändern des focus und des hintergundes für den angesprungenen eintrag
			document.getElementById('entry'+akt_entry).focus();	
			//document.getElementById('entry'+window.akt_entry+'div').style.border = '1px solid #96CA2E';

			document.getElementById('entry'+window.akt_entry+'div').style.backgroundColor = '#999999';
			document.getElementById('searchfield').value = document.getElementById('entry'+akt_entry).innerHTML;
			// ändern des focus und des hintergundes für den vorhergehenden eintrag
			/*try {
				//document.getElementById('entry'+last_entry).style.border = '';
			} catch(e) {
			
			}*/
			if (old_entry >= 0) {
				// wenn der nächste eintrag der nächste in der liste ist
				//document.getElementById('entry'+old_entry+'div').style.border = '';
				document.getElementById('entry'+old_entry+'div').style.backgroundColor = '#F6F6F6';
				//document.getElementById('entry'+old_entry+'div').style.borderTop = '1px solid #DCDFF1';
			}
			setTimeout("try{openSuggestions(suggestionSearch.name);document.getElementById('entry'+akt_entry).focus();} catch(e) { }",1);
		} 		
		// sprung nach unten
		if (dieserkey == 40) {
			if (window.akt_entry===false) {
				// der erste in der liste
				window.akt_entry = 0;
			}
			// festlegen was der nächste eintrag ist
			else if (akt_entry < (parseInt(last_entry) - 1)) {
				// der nächste in der liste
				window.old_entry = akt_entry;
				window.akt_entry = (parseInt(akt_entry) + 1);
			} else if (akt_entry == (parseInt(last_entry) - 1)) {
				// der erste in der liste
				window.old_entry = akt_entry;
				window.akt_entry = 0;
			}
			// ändern des focus und des hintergundes für den angesprungenen eintrag
			document.getElementById('entry'+window.akt_entry).focus();			
			//document.getElementById('entry'+window.akt_entry+'div').style.border = '1px solid #96CA2E';
			document.getElementById('entry'+window.akt_entry+'div').style.backgroundColor = '#999999';
			document.getElementById(suggestionSearch.name).value = document.getElementById('entry'+akt_entry).innerHTML;
			/*try {
				//document.getElementById('entry'+last_entry).style.border = '';
				document.getElementById('entry'+window.akt_entry+'div').style.backgroundColor = '#F6F6F6';
			} catch(e) {
			
			}*/
			// ändern des focus und des hintergundes für den vorhergehenden eintrag
			try{
				if (old_entry >= 0) {
					// wenn der nächste eintrag der nächste in der liste ist
					//document.getElementById('entry'+old_entry+'div').style.border = '';
					document.getElementById('entry'+old_entry+'div').style.backgroundColor = '#F6F6F6';
					//document.getElementById('entry'+old_entry+'div').style.borderTop = '1px solid #DCDFF1';
				}
			} catch(e) {}
			setTimeout("try{openSuggestions('searchfield');document.getElementById('entry'+akt_entry).focus();} catch(e) { }",1);
		}
		if(dieserkey==9) {
			closeSuggestions();
		}
		
	}
	
	function delayedCloseSuggestions(name) {
		suggestionSearch.timeout['searchfield']=setTimeout("closeSuggestions('searchfield');",10);
	}
	
	function closeSuggestions(name) {
		clearInterval(window.closeTheTabs);
		document.getElementById('searchfield__outerDIV').style.visibility = 'hidden';
		showSelectBoxes();
	}
	
	function openSuggestions(name) {
		clearTimeout(suggestionSearch.timeout['searchfield']);
		clearInterval(window.closeTheTabs);
		document.getElementById('searchfield__outerDIV').style.visibility = 'visible';
		hideSelectBoxes();
	}

	function hideSelectBoxes() {
		for(i in document.getElementsByTagName('select')) {
			if(i!='length') {
				try {
					if(document.getElementsByTagName('select')[i].style.display!='none') {
						var dummy = suggestionSearch.dummy.cloneNode(true);
						document.getElementsByTagName('select')[i].style.display='none';
						suggestionSearch.hiddenSelects[suggestionSearch.hiddenSelects.length]=document.getElementsByTagName('select')[i];
						document.getElementsByTagName('select')[i].parentNode.insertBefore(dummy, document.getElementsByTagName('select')[i]);
					}
				} catch(e) {
					null;
				}
			}
		}
	}
	
	function showSelectBoxes() {
		for(i in suggestionSearch.hiddenSelects) {
			if(i!='length') {
				suggestionSearch.hiddenSelects[i].style.display='inline';
				suggestionSearch.hiddenSelects[i].parentNode.removeChild(suggestionSearch.hiddenSelects[i].previousSibling);
			}
		}
		suggestionSearch.hiddenSelects=new Array;
	}

