function AutoSuggestBox(SearchInputID, MultiSelectID, fnSearch, fnFound) 
{
	var that = {}; 
	var eSearchInput, eMultiSelect;
	var iMaxListHeight = 280;
	var arrArgs; 
	var iSelectTextHeight = 20; 
	
	function Initiate() 
	{	
		eSearchInput = document.getElementById(SearchInputID);
		eMultiSelect = document.getElementById(MultiSelectID);
		PositionElement();
		eMultiSelect.style.visibility = 'hidden';
		eMultiSelect.onclick = GetResultClickHandler;
		eMultiSelect.onkeypress = GetResultKeyPressHandler;
		
		eSearchInput.onkeypress = GetResultKeyPressHandler;
		
	}

	function GetResultClickHandler() 
	{
		var id = eMultiSelect.options[eMultiSelect.selectedIndex].id;
		var text = eMultiSelect.options[eMultiSelect.selectedIndex].innerHTML;
		eSearchInput.value = text;
		eMultiSelect.style.visibility = 'hidden';		
		fnFound(id,text,arrArgs);		 
	}
    
	
	function GetResultKeyPressHandler(e) 
	{		    
	    if (e==undefined)e=event;		        
		if (GetKeyCode(e) == 13) 
		{   
			GetResultClickHandler();						
			//return !(window.event && window.event.keyCode == 13);			
			return !(e && e.keyCode == 13);			
		}		
	}

	function GetKeyCode(e)
	{	    
		if (e) 
		{		 
			return e.charCode ? e.charCode : e.keyCode;
		}
		else 
		{		    
			return window.event.charCode ? window.event.charCode : window.event.keyCode;
		}
	}

	function PositionElement() 
	{
		eMultiSelect.style.position = 'absolute';
		eMultiSelect.style.width = eSearchInput.offsetWidth + 'px';
	}

	var undefined;
	
	that.CreateResults = function(e) 
	{
	    var unicode = GetKeyCode(e);
	    if(unicode == 13) return;
	    
	    document.getElementById("CityID").value = 0;
	    document.getElementById("CityResults").innerHTML = "";
		// Check for additional arguments
	
		if (arguments != undefined) 
		{
			arrArgs = arguments;
		}

		// Check for up/down key press
	
		//var unicode = GetKeyCode(e);

		if (unicode == 40) 
		{
			if (eMultiSelect.style.visibility == 'visible') 
			{
				eMultiSelect.options.selectedIndex = 0;
				eMultiSelect.focus();
				return;
			}
		}
		
		if (unicode == 38) 
		{
			if (eMultiSelect.style.visibility == 'visible') 
			{
				eMultiSelect.options.selectedIndex = eMultiSelect.options.length-1;
				eMultiSelect.focus();
				return;
			}
		}

		// Check for valid search criteria
		if (eSearchInput.value.length < 1) 
		{
			eMultiSelect.style.visibility = 'hidden';
			return;
		}

		// Get results
		var arrResults = fnSearch(eSearchInput.value), i, eOption, iCount = 0;
		
		if (arrResults == undefined) 
		{
			eMultiSelect.style.visibility = 'hidden';
			return;
		}

		eMultiSelect.innerHTML = ''; 

		for (i=0; i < arrResults.length; i++) 
		{
			if (arrResults[i] != undefined) 
			{
				eOption = document.createElement('option');
				eOption.setAttribute('id',arrResults[i].id);
				eOption.innerHTML = arrResults[i].text;
				eMultiSelect.appendChild(eOption);
				iCount++;
			}
		}

		if (iCount < 1) 
		{
			eMultiSelect.style.visibility = 'hidden';
			return; // No results found.
		}        
		PositionElement();
		
		var iHeight = iCount*iSelectTextHeight; 
	
		if (iCount > 2) 
		{
			if (iHeight > iMaxListHeight) { // Don't want it to tall on the page
				eMultiSelect.style.height = iMaxListHeight+'px';
			}
			else {
				eMultiSelect.style.height = iHeight+'px';
			}
		}

		eMultiSelect.style.visibility = 'visible';
		eMultiSelect.options.selectedIndex = 0;
	}

	Initiate(); // Do all setup when the object is created.

	/* 
	* This (or that) is the object returned with all public members and
	* functions included above when the contructor is instantiated.
	*/
    return that;
}
function GetResults(sSearch) 
{
    var arrCountryCodePairs = new countryCodes(), i, arrResults = new Array(arrCountryCodePairs.length), arrBits, objResult, iCount = 0;   
     
    for (i=0; i < arrCountryCodePairs.length; i++) 
    {
        arrBits = arrCountryCodePairs[i].split('='); 
        if (arrBits.length > 1)
        {
            if(arrBits[1].toLowerCase().substring(0,sSearch.length)== sSearch.toLowerCase())
            {
            	objResult = {};
		        objResult.id = arrBits[0];
		        objResult.text = arrBits[1];
		        arrResults[iCount] = objResult;
		        iCount++;
            }
        
            /*
	        if (arrBits[1].toLowerCase().indexOf(sSearch.toLowerCase()) != -1) 
	        {
		        objResult = {};
		        objResult.id = arrBits[0];
		        objResult.text = arrBits[1];
		        arrResults[iCount] = objResult;
		        iCount++;
	        }
	        */
        }
    }    
    return arrResults;
}
function HandleChoice(sID, sText, arrExtra) 
{
    var ID = sID.split(',')
    var Text = sText.split(',')    
    document.getElementById("CityID").value = ID[0];
    document.getElementById("CityText").innerHTML = " FOR " + ID[1] +' '+ Text[0] +' HOTELS ';    
}