function Suggester() {

	var myForm;
	var myInput;
	var myLayer;
	var myInstanceName;
	var myCurrentPosition = -1;
	var myLastRequest = "";
	var myAjaxCall = "";
	var myReloadInner = "";

   this.init = function(myFormId, myInputId, myLayerId, InstanceName, AjaxCall, ReloadInner)
   {
   	  myForm = document.getElementById(myFormId);
   	  myInput = document.getElementById(myInputId);
   	  myLayer = document.getElementById(myLayerId);
   	  myForm.onsubmit = checkAuswahlValue;
   	  myInput.onblur = blurinput;
   	  myInput.onfocus = ladeSuchBegriffe;
   	  myInput.onkeyup = moveCursor;
   	  myInstanceName = InstanceName;
   	  myCurrentPosition = -1;
   	  myAjaxCall = AjaxCall;
   	  myReloadInner = ReloadInner;
   	  myLastRequest = "";
      
        if (navigator.appVersion.indexOf('Chrome') > -1)
        {
            myLayer.style.marginTop = '36px';
        }

   }

	 function blurinput()
	 {
	 	 window.setTimeout(myInstanceName+'.hideSuchBegriffe()', 200);
	 }

	 function showSuchBegriffe()
	 {
	 	 myLayer.style.display = 'block';
	 }

	 this.hideSuchBegriffe = function()
	 {
	 	 myLayer.style.display = 'none';
	 }

  function ladeSuchBegriffe()
   {
    	myLastRequest = myInput.value;
    	str = escape(myInput.value);
    	myCurrentPosition = -1;

		    	var hasAjax = Ajax.getTransport();
		    	if ((typeof hasAjax) == 'object')
		    	{
		    		showSuchBegriffe();
		    		if (myReloadInner != '')
		    		  {
		    		  	myLayer.innerHTML = myReloadInner;
		    		  }
					  var myAjax = new Ajax.Updater(myLayer.id, myAjaxCall+str, 
					  {method:'get',
					   onComplete:function (){
							  	ahrefs = myLayer.getElementsByTagName('a');
							 	  for(i=0;i<ahrefs.length;i++)
							 	   {
							 	   	 ahrefs.item(i).onmouseover = function(){ auswahlMaus(this); };
							 	   	 ahrefs.item(i).onmouseout = allInactive;
							 	   	 if (ahrefs.item(i).className != 'kategorie')
							 	   	   {
							 	   	   	 ahrefs.item(i).onclick = function() { getSuchBegriff(this.innerHTML); };
							 	   	   }
							     }
					   	
					   }
    				});
					}

      else
      {
		     hideSuchBegriffe();
      }
   }
   
  function checkAuswahlValue()
  {
 	  ahrefs = myLayer.getElementsByTagName('a');
 	  var found = 0;
 	  for(i=0;i<ahrefs.length;i++)
 	   {
 	   	 if (ahrefs.item(i).className.substr(0,5) == 'aktiv')
 	   	   {
 	   	   	 //ahrefs.item(i).click();
 	   	   	 if (ahrefs.item(i).className == 'aktivkategorie')
 	   	   	  {
 	   	   	  	window.location.href = ahrefs.item(i).href;
 	   	   	  	return false;
 	   	   	  }
 	   	   	 else
 	   	   	 	{
				   	wert = ahrefs.item(i).innerHTML.replace(/\<b\>/ig, '');
				   	myInput.value = wert.replace(/\<\/b\>/ig, '');
 	   	   	 	}
 	   	   }
 	   }
 	  
	   return true;
  }

  function allInactive()
  {
 	  ahrefs = myLayer.getElementsByTagName('a');
 	  for(i=0;i<ahrefs.length;i++)
 	   {
 	   	 if (ahrefs.item(i).className.substr(0,5) == 'aktiv') ahrefs.item(i).className = ahrefs.item(i).OrgClassName;
 	   }
		myCurrentPosition = -1;
  }

  function auswahlMaus(obj)
   {
  	  ahrefs = myLayer.getElementsByTagName('a');
	   	allInactive();
			obj.OrgClassName = obj.className;
			if (obj.OrgClassName == 'kategorie')
			  {
			  	obj.className = 'aktivkategorie';
			  }
			else
			  {
			  	obj.className = 'aktiv';
			  }
			
	 	  for(i=0;i<ahrefs.length;i++)
	 	   {
	 	   	 if (ahrefs.item(i).className.substr(0,5) == 'aktiv')
	 	   	 { 
	 	   	 	  myCurrentPosition = i;
	 	   	 }
	 	   }
 }

  function moveBar(richtung)
  {
 	  ahrefs = myLayer.getElementsByTagName('a');
 	  
 	  var p = myCurrentPosition
 	  
  	if (richtung == -1) // hoch
  	 {
		  	if (p > -1)
		  	  {
						ahrefs.item(p).className = ahrefs.item(p).OrgClassName;
		  	  	p = p - 1;
		  	  	if (p > -1)
		  	  	   {
					  	  	ahrefs.item(p).OrgClassName = ahrefs.item(p).className;
									if (ahrefs.item(p).OrgClassName == 'kategorie')
									  {
									  	ahrefs.item(p).className = 'aktivkategorie';
									  }
									else
									  {
									  	ahrefs.item(p).className = 'aktiv';
									  }
		  	  	   }
		  	  }
  	 }
  	else if (richtung == 1) // runter
  	 {
		  	if (p < ahrefs.length-1)
		  	  {
		  	  	if (p > -1) ahrefs.item(p).className = ahrefs.item(p).OrgClassName;
		  	  	
		  	  	p = p + 1;
		  	  	ahrefs.item(p).OrgClassName = ahrefs.item(p).className;
						if (ahrefs.item(p).OrgClassName == 'kategorie')
						  {
						  	ahrefs.item(p).className = 'aktivkategorie';
						  }
						else
						  {
						  	ahrefs.item(p).className = 'aktiv';
						  }
		  	  }
  	 }

		myCurrentPosition = p;
  }

  function moveCursor( ev )
   {
   	  ev = (ev) ? ev : ((event) ? event : null);
			var keyCode = ev.keyCode;
			if (keyCode == 38)
			{
					moveBar(-1);
			}
			else if (keyCode == 40)
			{
					moveBar(1);
			}    	
			else if (keyCode == 27)
			{
					myInput.blur();
			}    	
    	else 
    	{
    		 if (myLastRequest != myInput.value)
    		  {
    		  	 ladeSuchBegriffe();
    		  }
    		 else
    		  {
    		  	 //alert();
    		  }
    	}

   }

  function getSuchBegriff( wert )
   {
   	wert = wert.replace(/\<b\>/ig, '');
   	myInput.value = wert.replace(/\<\/b\>/ig, '');
   	myInput.focus();
   	ladeSuchBegriffe();
   }
   
}
