      var xmlHttp = null;
      var ajaxElementId = "ajaxId1";
      var submitUrl = "ajaxSearch.php?text=";
      var minInputLength = 2;
      var active = false;
      var selectedIndex = -1;
      
      document.onkeydown = keyPressed;
      
      function keyPressed(e) {
         e = (e) ? e : ((window.event) ? window.event : "");

         if (!active)
            return;
            
         if (e.keyCode == 38) {
            var links = document.getElementById('ajaxPreview').getElementsByTagName("a");
            if (selectedIndex <= 0) return;
            
            selectedIndex--;
            links[selectedIndex].style.color = '#000000';
            if (selectedIndex + 1 < links.length)
               links[selectedIndex + 1].style.color = '#fc7e24';
         } else if (e.keyCode == 40) {
            var links = document.getElementById('ajaxPreview').getElementsByTagName("a");
            if (selectedIndex + 1 >= links.length - 1) return;
            
            selectedIndex++;            
            links[selectedIndex].style.color = '#000000';
            if (selectedIndex > 0)
               links[selectedIndex - 1].style.color = '#fc7e24';
      	 } else if (e.keyCode == 13) {
      	    var links = document.getElementById('ajaxPreview').getElementsByTagName("a");
      	    var selectedValue = links[selectedIndex].innerHTML;
      	    ajaxHide();
      	    document.getElementById(ajaxElementId).value= '"' + selectedValue + '"';
      	 } else if (e.keyCode == 27) {
      	    ajaxHide();
      	 }
      }

      function init() {
      	if (window.ActiveXObject) {
      		try {
      		   xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
      		} catch (e) {
      			try {
      	         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      			} catch (e) {
      			}
      		} 
      	} else if (window.XMLHttpRequest) {
      		try {
      			xmlHttp = new XMLHttpRequest();
      		} catch (e) {
      		}
      	}
      }
      
      function send(e) {
        e = (e) ? e : ((window.event) ? window.event : "");
         
        if (e.keyCode == 38 || e.keyCode == 40 || e.keyCode == 13 || e.keyCode == 27)
           return;
           
        selectedIndex = -1;
        
        var text2submit = document.getElementById(ajaxElementId).value;

      	if (text2submit.length >= minInputLength) {
	      	if (!xmlHttp)
	      	   init();
	      	
	      	xmlHttp.open('GET', submitUrl + text2submit, true);
	      	xmlHttp.onreadystatechange = receive;
	      	try {
	      	   xmlHttp.send(null);
      		} catch (e) {
      		}
      	} else {
  		   ajaxHide();
      	}
      }
      
      function receive() {
      	if (xmlHttp.readyState == 4) {
      		var text = xmlHttp.responseText;
      		var rows = new Array();
      		var output = "";
      		
      		if (text != "") {
      			rows = text.split("#");
      			for(var row in rows) {
      				output += '<a class="defaultLinkSmall" ' +
      				              'style="cursor:pointer;" ' +
      				              'onmouseover="javascript:this.style.color=\'#000000\';" ' + 
      				              'onmouseout="javascript:this.style.color=\'#fc7e24\';" ' +
      				              'onclick="javascript:searchCocktail(\'' + (rows[row]) + '\');">' + (rows[row]) + '</a>';
      				if (row < rows.length -1)
      				   output += "<br>";
      			}
      			
      		   document.getElementById('ajaxPreview').innerHTML = output;
      		   document.getElementById('ajaxPreview').style.visibility = 'visible';
      		   
      		   if (rows.length <= 9)
      		      document.getElementById('ajaxPreview').style.height = (rows.length * 7) + 10 + 'px';
      		   else
      		      document.getElementById('ajaxPreview').style.height = '108px';
      		      
      		   document.getElementById('ajaxPreview').style.width = '150px';
      		   
      		   active = true;
      		} else {
      		   // no results
      		   ajaxHide();
      		}
      	}
      }
      
      /**
       * Hides the selection (eg: if the user has navigated with cursors and now uses the mouse).
       */
      function ajaxHideSelection() {
         var links = document.getElementById('ajaxPreview').getElementsByTagName("a");
         if (selectedIndex >= 0)
            links[selectedIndex].style.color = '#fc7e24';
         selectedIndex = -1;
      }
      
      function ajaxHide() {
         document.getElementById('ajaxPreview').innerHTML = '';
         document.getElementById('ajaxPreview').style.height = '0px';
         document.getElementById('ajaxPreview').style.width = '0px';
         document.getElementById('ajaxPreview').style.visibility = 'hidden';
         selectedIndex = -1;
         active = false;
      }
      
      function searchCocktail(name) {
         document.getElementById(ajaxElementId).value = '"' + name + '"';
         document.getElementById('form1').submit();
      }
