	////////////////////////////////////////////////////////////////////////////////////////////////////
	// Ajax Globals
	////////////////////////////////////////////////////////////////////////////////////////////////////
	var searchAjax = new Array();
	searchAjax['xmlRequest'] = false;
	searchAjax['targetArray'] = null;
	
	var searchConfig = new Array();
	searchConfig['ie'] = (navigator.appName == "Microsoft Internet Explorer");
	searchConfig['local'] = (location.href.indexOf("192.168.253.") > -1);
	searchConfig['searchMinLen'] = 1;
	
	searchConfig['domain'] = "http://www.vrt-info.de";
	
	if(searchConfig['local'])
		searchConfig['domain'] = "http://192.168.253.61/vrt/web";
	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	// Ajax Main-functions
	////////////////////////////////////////////////////////////////////////////////////////////////////
	function searchAjaxGetXMLHttpRequest()
	{
		if(window.ActiveXObject)
		{
			try
				{searchAjax['xmlRequest'] = new ActiveXObject("Msxml2.XMLHTTP");}				// IE 6.x
			catch(e)
			{
				try
					{searchAjax['xmlRequest'] = new ActiveXObject("Microsoft.XMLHTTP");}		// IE 5.x
				catch(e)
					{searchAjax['xmlRequest'] = false;}
			}
		}
		else if(window.XMLHttpRequest)
		{
			try
				{searchAjax['xmlRequest'] = new XMLHttpRequest();}							// Mozilla, Opera, Safari
			catch(e)
				{searchAjax['xmlRequest'] = false;}
		}
		
		return searchAjax['xmlRequest'];
	}
	
	function searchAjaxLoadXMLDoc(url, callback, targetArray, postReq)
	{
		searchAjax['xmlRequest'] = searchAjaxGetXMLHttpRequest();
		if(!searchAjax['xmlRequest'])	return;
		
		if(targetArray)
			searchAjax['targetArray'] = targetArray;
		
		var async = false;
		if(callback)
		{
			searchAjax['xmlRequest'].onreadystatechange = callback;
			async = true;
		}
		
		postReq = (postReq) ? postReq : null;
		var reqMeth = (postReq) ? "POST" : "GET";
		
		searchAjax['xmlRequest'].open(reqMeth, url, async);
		
		if(postReq)
			searchAjax['xmlRequest'].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		
		searchAjax['xmlRequest'].send(postReq);
	}
	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////
	// Ajax user-defined Callback-functions
	////////////////////////////////////////////////////////////////////////////////////////////////////
	
	function searchAjaxUpdateSearchList()
	{
		if(searchAjax['xmlRequest'].readyState == 4 && searchAjax['xmlRequest'].status == 200 && searchAjax['targetArray'])
		{
			var aResponseText = searchAjax['xmlRequest'].responseText.split("|||");
			
			if(searchAjax['targetArray']['searchInputSearchList'])
			{
				searchAjax['targetArray']['searchInputSearchList'].innerHTML = aResponseText[0];
				
				searchAjax['targetArray']['searchInputSearchList'].style.display = (aResponseText[1] == "false") ? "none" : "";
				searchAjax['targetArray']['searchInputSearch'].style.color = (aResponseText[1] == "false") ? "red": "";
			}
		}
	}
	
	function searchGetSearchList(event)
	{
		var oSearchInputSearch = searchGetObj('searchInputSearch');
		var oSearchInputSearchList = searchGetObj('searchInputSearchList');
		
		if(oSearchInputSearch && oSearchInputSearchList)
		{
			event = searchConfig['ie'] ? window.event : event;
			
			// Keyup and keydown events
			if(event.keyCode == 40 || event.keyCode == 38)
			{
				var selectedIndex = -1;
				aSearchInputSearchListOptions = oSearchInputSearchList.childNodes;
				
				// Reverse array indizes
				if(event.keyCode == 38)
				{
					var aSearchInputSearchListOptionsReversed = new Array();
					for(var i=aSearchInputSearchListOptions.length-1; i>=0; i--)
						aSearchInputSearchListOptionsReversed.push(aSearchInputSearchListOptions[i]);
					
					aSearchInputSearchListOptions = aSearchInputSearchListOptionsReversed;
				}
				
				// Find selected option
				for(var i=0; i<aSearchInputSearchListOptions.length; i++)
				{
					if(aSearchInputSearchListOptions[i].className.match(/searchInputSearchListOptionSelected/))
					{
						selectedIndex = i;
						break;
					}
				}
				
				// Remove selection from currently selected option
				if(selectedIndex > -1 && aSearchInputSearchListOptions[selectedIndex])
					searchRemoveClass(aSearchInputSearchListOptions[selectedIndex], "searchInputSearchListOptionSelected");
				
				// Set selection to new selected option
				if(aSearchInputSearchListOptions[selectedIndex+1])
				{
					searchAddClass(aSearchInputSearchListOptions[selectedIndex+1], "searchInputSearchListOptionSelected");
					oSearchInputSearch.value = (searchConfig['ie']) ? aSearchInputSearchListOptions[selectedIndex+1].innerText : aSearchInputSearchListOptions[selectedIndex+1].textContent;
				}
			}
			else
			{
				// Enter event
				if(event.keyCode == 13)
				{
					aSearchInputSearchListOptions = oSearchInputSearchList.childNodes;
					
					// Find selected option
					for(var i=0; i<aSearchInputSearchListOptions.length; i++)
					{
						if(aSearchInputSearchListOptions.length == 1 || aSearchInputSearchListOptions[i].className.match(/searchInputSearchListOptionSelected/))
						{
							var onClickTmp = String(aSearchInputSearchListOptions[i].getAttribute('onclick'));
							var onClickBegin = onClickTmp.indexOf("{");
							var onClickEnd = onClickTmp.lastIndexOf("}");
							if(onClickBegin > -1 && onClickEnd > -1)
								onClickTmp = searchTrim(onClickTmp.substring(onClickBegin+1, onClickEnd));
							
							eval(onClickTmp);
							break;
						}
					}
				}
				
				if(oSearchInputSearch.value.length >= searchConfig['searchMinLen'])
				{
					if(event.keyCode != 37 && event.keyCode != 39 && event.keyCode != 35 && event.keyCode != 36)
					{
						var targetArray = new Array();
						targetArray['searchInputSearch'] = oSearchInputSearch;
						targetArray['searchInputSearchList'] = oSearchInputSearchList;
						
						var url = searchConfig['domain'] + "/ajaxsearch/search_suggestions.php";
						url += "?keyword=" + oSearchInputSearch.value;
						searchAjaxLoadXMLDoc(url, searchAjaxUpdateSearchList, targetArray);
					}
				}
				else
				{
					oSearchInputSearchList.style.display = "none";
				}
			}
		}
	}
	
	
	function searchClickKeyword(url, target)
	{
		if(url)
		{
			if(target)
			{
				if(target.toLowerCase() == "_blank")
					window.open(url, "_blank");
				else
					location.href = url;
			}
			else
				location.href = url;
		}
	}
	
	
	function searchBlurIntputSearch()
	{
		var oSearchInputSearchList = searchGetObj('searchInputSearchList');
		
		if(oSearchInputSearchList)
			oSearchInputSearchList.style.display = "none";
	}
	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////
	// HELPER FUNCTIONS
	////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	function searchGetObj(name)
	{
		var result = (typeof(name) == "object") ? name : document.getElementById(name);
		
		return result;
	}
	
	function searchAddClass(obj, className)
	{
		obj = searchGetObj(obj);
		
		if(obj)
			obj.className = obj.className + " " + className;
	}
	
	function searchRemoveClass(obj, className)
	{
		obj = searchGetObj(obj);
		
		if(obj)
			obj.className = obj.className.replace(eval("/"+className+"/gi"), "");
	}
	
	function searchTrim(str)
	{
		return str.replace(/^\s*|\s*$/g, "");
	}
