	
	//Global variables
	var g_nSelMenuItem = 0;
	var g_sTextBoxID;
	var g_bCancelSubmit;
	var g_sOldTextBoxValue="";


	function asbGetXmlHttp()
	{
		var oXmlHttp=false;
	
		// -----> This method was provided from Jim Ley's website 
		/*@cc_on @*/
		/*@if (@_jscript_version >= 5)
		// JScript gives us Conditional compilation, we can cope with old IE versions.
		// and security blocked creation of the objects.
		try {
			oXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
		try {
			oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			oXmlHttp = false;
		}
		}
		/*@end @*/
	

		if (!oXmlHttp && typeof XMLHttpRequest!='undefined') 
		{
			oXmlHttp = new XMLHttpRequest();
		}
		
		return oXmlHttp;	  
	}	
	

  	// Over here we make a call back to our server side page and return the results from our query 
	// to a DIV tag sitting under the text box
	function asbGetDataFromServer(sValue, sDivID, sDataType)
	{
	    // disabled
	    return;
		
		var oXmlHttp;
		oXmlHttp=asbGetXmlHttp();
		
		var iCatId = document.getElementById('txtMainCatId');
		
		var sUrl;
		sUrl=ASB_GET_DATA_URL + "?CatId=" + iCatId.value + "&TextBoxID=" + g_sTextBoxID + "&DivID=" + sDivID + "&DataType=" + sDataType + "&Keyword=" + sValue 
		oXmlHttp.open("GET", sUrl, true);
		
		oXmlHttp.onreadystatechange=function() 
		{
			if (oXmlHttp.readyState==4) 
			{
				if (oXmlHttp.responseText!="")
				{
					asbShowDiv(sDivID, oXmlHttp.responseText);
				}				
				else
				{	
					asbHideDiv(sDivID)
				}
			}
		}
		
		oXmlHttp.send(null)
	}


	function asbSetSelectedValue(sValue)
	{
		asbTRACE("asbSetSelectedValue: " + sValue);
	
		var hdnSelectedValue=document.getElementById(g_sTextBoxID + "_SelectedValue");
		hdnSelectedValue.value=sValue;
	}


	function asbSetTextBoxValue()
	{
		var divMenuItem;
		divMenuItem=asbGetSelMenuItemDiv();
	
		asbTRACE("divMenuItem " + divMenuItem);
	
		if(divMenuItem)
		{
			var sMenuItemValueID;
			sMenuItemValueID=GetDivMenuItemID(g_nSelMenuItem) + "_value";
			var hdnMenuItemValue=document.getElementById(sMenuItemValueID);
			asbTRACE("Set selected item to " + hdnMenuItemValue.value);
			if (hdnMenuItemValue)
			{
				//Set selected value of control to the value of selected menu item
				asbSetSelectedValue(hdnMenuItemValue.value);
			}
			
			var hdnSelectedValue=document.getElementById(g_sTextBoxID + "_SelectedValue");
			var txtCtrl;
			txtCtrl=document.getElementById(g_sTextBoxID);
			txtCtrl.value = hdnSelectedValue.value;//divMenuItem.innerHTML;						
		}
	}


	function asbGetTextBoxValue()
	{
		var txtCtrl;
		txtCtrl=document.getElementById(g_sTextBoxID);
		return(txtCtrl.value);
	}
	
	
	
			
	function asbOnMouseClick(nMenuIndex, sTextBoxID, sDivID)
	{
		g_nSelMenuItem=nMenuIndex;
		g_sTextBoxID=sTextBoxID;
					
		asbSetTextBoxValue();
		asbHideDiv(sDivID);
	}
	


	function asbOnMouseOver(nMenuIndex, sTextBoxID)
	{
		g_sTextBoxID=sTextBoxID;
				
		asbSelectMenuItem(nMenuIndex);
	}
	
		
	function asbOnKeyPress(evt)
	{
		asbTRACE("asbOnKeyPress : " + asbGetKey(evt));
		if ((asbGetKey(evt)==13) && (g_bCancelSubmit)) 
			return false;
		
		return true;
	}
	
	
	function asbOnKeyUp(sTextBoxID, sDiv, sDataType, evt)
	{
		g_sTextBoxID=sTextBoxID;
		
		var nKey;
		nKey=asbGetKey(evt);
		
		asbTRACE("asbOnKeyUp : " + nKey);
		
		
		//Skip up/down/enter
		if ((nKey!=38) && (nKey!=40) && (nKey!=13))
		{
			var sNewValue;
			sNewValue=asbGetTextBoxValue();
			asbTRACE("asbOnKeyUp : New text box value '" + sNewValue + "'");
				
			/*
			if ((sNewValue.length <= 20) && (sNewValue.length > 0))
			{
				asbTRACE("asbOnKeyUp : Getting data for '" + sNewValue + "'");
				asbGetDataFromServer(sNewValue, sDiv, sDataType)
			}
			*/
			if (g_sOldTextBoxValue!=sNewValue)
			{
				asbSetSelectedValue("");
			}
		}
	}
		
	
	
	function asbOnKeyDown(sTextBoxID, sDiv, evt)
	{
		asbTRACE("asbOnKeyDown : " + asbGetKey(evt));
		
		g_sTextBoxID=sTextBoxID;
		
		//Save current text box value before key press takes affect
		g_sOldTextBoxValue=asbGetTextBoxValue();
		asbTRACE("asbOnKeyDown : old text box value='" + g_sOldTextBoxValue + "'");
		
		var nKey;
		nKey=asbGetKey(evt);
						
		//Detect if the user is using the down button
		if(nKey==38) //Up arrow
		{
			asbMoveDown()
		}
		else if(nKey==40) //Down arrow
		{
			asbMoveUp()
		}
		else if(nKey==13) //Enter
		{
			asbTRACE("asbOnKeyDown : asbIsVisibleDiv - " + asbIsVisibleDiv(sDiv));
			if (asbIsVisibleDiv(sDiv))
			{
				asbHideDiv(sDiv);
				asbTRACE("asbOnKeyDown : asbHideDiv");
				
				//Only works in IE
				evt.cancelBubble = true;
				
				if (evt.returnValue) evt.returnValue = false;
				if (evt.stopPropagation) evt.stopPropagation();
				
				g_bCancelSubmit=true;
     		}
     		else
     		{
     			g_bCancelSubmit=false;
     		}
		}
		else
		{
			asbHideDiv(sDiv);
		}
				
		return true;
	}

	
	function asbGetSelMenuItemDiv()
	{
		return asbGetMenuItemDiv(g_nSelMenuItem);
	}
			
			
	function GetDivMenuItemID(nMenuItem)
	{
		return (g_sTextBoxID + "_mi_" + nMenuItem);
	}
	
	
	
	function asbGetMenuItemDiv(nMenuItem)
	{
		var sDivMenuItemID;
		sDivMenuItemID=GetDivMenuItemID(nMenuItem);
		
		return document.getElementById(sDivMenuItemID)
	}
		

	function asbMoveUp()
	{
		var nMenuItem;
		nMenuItem=g_nSelMenuItem+1;
		
		//Check if menu item exists
		if(asbGetMenuItemDiv(nMenuItem))
		{
			asbSelectMenuItem(nMenuItem)
		}
	}


	function asbMoveDown()
	{
		var nMenuItem;
		nMenuItem=g_nSelMenuItem -1;
		
		if(nMenuItem!=0)
		{
			asbSelectMenuItem(nMenuItem)
		}
	}


	//Highlights a div
	function asbSelectMenuItem(nMenuItem)
	{
		var divMenuItem;
		divMenuItem=asbGetMenuItemDiv(nMenuItem)
					
		if(divMenuItem)
		{
			if (nMenuItem!=g_nSelMenuItem)
			{
				asbUnhighlightSelMenuItem();
				
				g_nSelMenuItem=nMenuItem;
				asbSetTextBoxValue();
						
				divMenuItem.className="asbSelMenuItem"
			}
		}
	}


	//unhighlights a div
	function asbUnhighlightSelMenuItem()
	{
		var divMenuItem;
		divMenuItem=asbGetSelMenuItemDiv()
	
		if(divMenuItem)
		{
			divMenuItem.className="asbMenuItem"
		}
	}


	//Detects what key was pressed
	function asbGetKey(evt)
	{
		evt = (evt) ? evt : (window.event) ? event : null;
		if (evt)
		{
			var cCode = (evt.charCode) ? evt.charCode :
					((evt.keyCode) ? evt.keyCode :
					((evt.which) ? evt.which : 0));
			return cCode; 
		}
	}
	


	function asbHideDiv(sDivID)
	{
		document.getElementById(sDivID).style.visibility = 'hidden';
		g_nSelMenuItem=0;
	}
	
	
	function asbIsVisibleDiv(sDivID)
	{
		if (document.getElementById(sDivID).style.visibility == 'hidden')
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	
	
	function asbShowDiv(sDivID, sDivContent)
	{
		var divMenu;
		divMenu=document.getElementById(sDivID);

		
		var sInnerHtml;

		//Use IFrame of the same size as div		
		if (asbIsIE()) 
		{
			sInnerHtml = "<div id='" + sDivID + "_content' style='z-index:9050; position:asbolute;'>";
			sInnerHtml += sDivContent;
			sInnerHtml += "</div><iframe id='" + sDivID + "_iframe' src='about:blank' frameborder='1' scrolling='no'></iframe>";
		}
		else
		{
			sInnerHtml=sDivContent;
		}
		
		
		divMenu.innerHTML = sInnerHtml;
		
		
		if (asbIsIE()) 
		{
			var divContent;
			divContent=document.getElementById(sDivID + "_content");
			
			var divIframe;
			divIframe=document.getElementById(sDivID + "_iframe");
					
			//Remember display type
			divContent.className="asbMenuIE";
			divMenu.className="asbMenuBaseIE";
				
			divIframe.style.width = divContent.offsetWidth + 'px';
			divIframe.style.height = divContent.offsetHeight + 'px';
			divIframe.marginTop = "-" + divContent.offsetHeight + 'px';

		}	
		
		divMenu.style.visibility = 'visible';
	}

	
	function asbIsIE()
	{
		return ( navigator.appName=="Microsoft Internet Explorer" ); 
	}
	

	function asbIsNav()
	{
		return ( navigator.appName=="Netscape" );
	}
	
	
	function asbTRACE(sText)
	{
		//var sMessage = window.document.forms[0].txtTRACE.value;
		//sMessage = sMessage + sText + "\n";;
		//window.document.forms[0].txtTRACE.value = sMessage;
	}
	

