
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 !(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("CityText").innerHTML = ""; if (arguments != undefined) { arrArgs = arguments; }
        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; } }
        if (eSearchInput.value.length < 1) { eMultiSelect.style.visibility = 'hidden'; return; }
        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; }
        PositionElement(); var iHeight = iCount * iSelectTextHeight; if (iCount > 2) {
            if (iHeight > iMaxListHeight) { eMultiSelect.style.height = iMaxListHeight + 'px'; }
            else { eMultiSelect.style.height = iHeight + 'px'; } 
        }
        eMultiSelect.style.visibility = 'visible'; eMultiSelect.options.selectedIndex = 0;
    }
    Initiate(); 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++; } } }
    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 ';
}
