var ac_req_instance_id = 0;
var cur_instance_id = 0;
var autocomplete;
var autocompleteQueryBox;
var timeoutID;

	function autocompleteSendQuery(e,el,field_name)	{
	  
	  autocomplete = document.getElementById('autocomplete');
	  var queryBox = el;
	  
	  if (!queryBox.onblur)
  	       queryBox.onblur = new Function("e","timeoutID=window.setTimeout(\"autocomplete.style.visibility='hidden';\",200)");

	  autocomplete.onfocus = new Function("e","window.clearTimeout(timeoutID);");
	  autocomplete.onblur = new Function("e","window.clearTimeout(timeoutID);timeoutID=window.setTimeout(\"autocomplete.style.visibility='hidden';\",200);");
	
		//if(!e) e = window.event;
	  switch(e.keyCode)
		{
			case 13://non-printable keys to ignore
				autocomplete.style.visibility = "hidden";
				return(false);
				break;
			case 16:
			case 17:
			case 20:
			case 37:
			case 39:
				break;
			case 27://escape key
				autocomplete.style.visibility = "hidden";
				break;
			case 40:// down arrow
				selectItemDown(queryBox);
				break;
			case 38://up arrow
				selectItemUp(queryBox);
				break;
			default:
				if(queryBox.lastValue == queryBox.value)
					return true;

				queryBox.lastValue = queryBox.value;

				if(queryBox.value.length < 1)
				{
					ac_req_instance_id++;
					autocomplete.style.visibility = "hidden";
					return true;
				}
				
				autocomplete.activeIndex = -1;
				var req = null;
        
        if (field_name)
            var fn = field_name
        else {
	        var fn = queryBox.name.replace(/^data\[/,'');
	        fn = fn.replace(/]$/,'');
	    }
	      
	    var table = '';
	    if (fn == 'keyword') {
			table = 'suggest';
		    fn = 'phrase';
		}
		
		if (fn == 'application') {
			table = 'suggest_application';    
		    fn = 'phrase';
		}
		if (fn == 'ansi') {
			table = 'product';   
		    fn = 'ansi';
		}
		if (fn == 'beam_spread') {
			table = 'product';   
		    fn = 'beam_spread'; 
		}
		if (fn == 'base') {
			table = 'product';   
		    fn = 'base';  
		}
	    
		new Ajax.Request('query_product_field.php?field='+fn+'&table='+table+'&keyword='+escape(queryBox.value), {
                         asynchronous:true,
                         onComplete:function(req) {
        									
        									if (req.readyState == 4) {
        										if (req.status == 200){
        											ac_req_instance_id++;
        											if(req.responseText == '' || !req.responseText) {
        												autocomplete.style.visibility = "hidden";
        											} else {
        												var pp = Position.positionedOffset(queryBox);
        												autocomplete.innerHTML = '<div style="padding-bottom:5px"><b class="gray_text">Search suggestions:</b></div>'+req.responseText; 
        												autocomplete.style.visibility = "visible";
        												autocomplete.style.left = pp[0] + 'px';
        												autocomplete.style.top = (pp[1] + 16 + 1)  + 'px';
        												autocompleteQueryBox = queryBox;
        											}
        										}	else {
        											autocomplete.style.visibility = "hidden";
        											autocomplete.innerHTML = "";
        										}
        									}
                         }});
        break;
		}
		return true;
	}
	
	function autocompleteClose() {
  	autocomplete = document.getElementById('autocomplete');
  	autocomplete.style.visibility = "hidden";
	}
	
	function selectItemDown(queryBox){

        autocomplete = document.getElementById('autocomplete');
		if(autocomplete.style.visibility == "hidden")
			return;

       if (autocomplete.activeIndex==-1)
           autocomplete.activeIndex=0;  
        
   	    if (!autocomplete.childNodes[autocomplete.activeIndex])
		    return
		if(autocomplete.activeIndex < autocomplete.childNodes.length - 1)
			autocomplete.activeIndex++;
		else{
			autocomplete.childNodes[autocomplete.activeIndex].className = "";
			autocomplete.activeIndex = 1;
		}

		if(autocomplete.activeIndex>0)
			autocomplete.childNodes[autocomplete.activeIndex-1].className = "";
			
		autocomplete.childNodes[autocomplete.activeIndex].className = "activeLink";
        queryBox.value = autocomplete.childNodes[autocomplete.activeIndex].firstChild.innerHTML;

		//attempt to set selection range
		if(queryBox.lastValue)
		{
			if(queryBox.createTextRange)
			{
				var selection = queryBox.createTextRange();
				selection.moveStart("character", queryBox.lastValue.length);
				selection.moveEnd("character", queryBox.value.length-1);
				selection.select();
			}
			else if(queryBox.setSelectionRange)
			{
				queryBox.setSelectionRange(queryBox.lastValue.length,queryBox.value.length);
			}
		}
	}

	function selectItemUp(queryBox){  	
	
	    autocomplete = document.getElementById('autocomplete');
		
		if(autocomplete.style.visibility == "hidden")
			return; 

        if (!autocomplete.childNodes[autocomplete.activeIndex])
		    return

        if (autocomplete.activeIndex==1){
            autocomplete.childNodes[autocomplete.activeIndex].className = "";
		    autocomplete.activeIndex=autocomplete.childNodes.length; 
		}
	  
		if(autocomplete.activeIndex > autocomplete.childNodes.length)
			autocomplete.activeIndex = autocomplete.childNodes.length-1;
			
		if(autocomplete.activeIndex < 1)
		{
			autocomplete.activeIndex = 0;
			queryBox.value = queryBox.lastValue;//value.substring(0,queryBox.lastValue.length);
  		    autocomplete.childNodes[autocomplete.activeIndex].className = "";
			return;
		}

		autocomplete.activeIndex--;
		if(autocomplete.activeIndex < autocomplete.childNodes.length-1)
			autocomplete.childNodes[autocomplete.activeIndex+1].className = "";
		autocomplete.childNodes[autocomplete.activeIndex].className = "activeLink";

		queryBox.value = autocomplete.childNodes[autocomplete.activeIndex].firstChild.innerHTML;
		
		//attempt to set selection range
		if(queryBox.lastValue)
		{
			if(queryBox.createTextRange)
			{
				var selection = queryBox.createTextRange();
				selection.moveStart("character", queryBox.lastValue.length);
				selection.moveEnd("character", queryBox.length-1);
				selection.select();
			}
			else if(queryBox.setSelectionRange)
			{
				queryBox.setSelectionRange(queryBox.lastValue.length,queryBox.value.length);
			}
		}
	}
	
	function hideAutoComplete(){
   	    autocomplete = document.getElementById('autocomplete');
        autocomplete.style.visibility = "hidden";  
		}
	
	function selectItemMouse(index) {

   	    autocomplete = document.getElementById('autocomplete');
        
		queryBox = autocompleteQueryBox;
		autocomplete.activeIndex = index;
		queryBox.value = autocomplete.childNodes[autocomplete.activeIndex].firstChild.innerHTML;
	    autocomplete.childNodes[autocomplete.activeIndex].className = ""; 
		
		//attempt to set selection range
		if(queryBox.lastValue)
		{
			if(queryBox.createTextRange)
			{
				var selection = queryBox.createTextRange();
				selection.moveStart("character", queryBox.lastValue.length);
				selection.moveEnd("character", queryBox.length-1);
				selection.select();
			}
			else if(queryBox.setSelectionRange)
			{
				queryBox.setSelectionRange(queryBox.lastValue.length,queryBox.value.length);
			}
		} 
		autocomplete.style.visibility = "hidden";
        form = document.getElementById('search_topbar');
		if (form)
		    form.submit();  
	}

	function HilightItemMouse(index) {

		queryBox = autocompleteQueryBox; 
	    autocomplete = document.getElementById('autocomplete');

        if(autocomplete.activeIndex < 0 )
			autocomplete.activeIndex=0;
        if( autocomplete.activeIndex > autocomplete.childNodes.length - 1)
			autocomplete.activeIndex = autocomplete.childNodes.length - 1; 
		
        if(index < -1 )
		   index=0;
        if( index > autocomplete.childNodes.length - 1)
			index = autocomplete.childNodes.length - 1; 
		
		autocomplete.childNodes[autocomplete.activeIndex].className = "";         
		autocomplete.activeIndex = index;
		autocomplete.childNodes[autocomplete.activeIndex].className = "activeLink"; 
        queryBox.value = autocomplete.childNodes[autocomplete.activeIndex].firstChild.innerHTML;
		if(queryBox.lastValue)
		{
			if(queryBox.createTextRange)
			{
				var selection = queryBox.createTextRange();
				selection.moveStart("character", queryBox.lastValue.length);
				selection.moveEnd("character", queryBox.length-1);
				selection.select();
			}
			else if(queryBox.setSelectionRange)
			{
				queryBox.setSelectionRange(queryBox.lastValue.length,queryBox.value.length);
			}
		}
	
	}
