var xmlHttp
var liSelected = -1
var lookup = true;

function showResult(str, divName, locationName)
{
    if(!lookup)
    {
        return;
    }

    if(str.length == 0)
    {
        document.getElementById(divName).innerHTML="";
        document.getElementById(divName).style.border="0px";
        return;
    }

    xmlHttp = GetXmlHttpObject();

    if(xmlHttp == null)
    {
        alert("Browser does not support HTTP Request");
        return;
    }

    var url = "/service/location-livesearch.dot";
    url = url + "?q=" + str;
    url = url + "&sid=" + Math.random();
    url = url + "&divName=" + divName + "&locationName=" + locationName;
    xmlHttp.onreadystatechange = function () { return stateChanged(divName); }
    xmlHttp.open("GET", url, true);
    xmlHttp.send(null);
}

function stateChanged(divName)
{
    if(xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
    {
        document.getElementById(divName).innerHTML = xmlHttp.responseText;
        document.getElementById(divName).style.border="1px solid #A5ACB2";
        // Reset selection index on successful retrieval
        liSelected = -1;
    }
}

function GetXmlHttpObject()
{
    var xmlHttp = null;
    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch(e)
    {
        // Internet Explorer
        try
        {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}

function changeSelection(oldId, newId)
{
    var liIdPrefix = "search_li_";
    var selectedBackground = "#99c2c0";
    var normalBackground = "transparent";

    oldLiSelected = oldId;

    var liElement = document.getElementById(liIdPrefix+newId);
    if(liElement == null)
    {
        return false;
    }
    else
    {
        var oldLiElement = document.getElementById(liIdPrefix+oldLiSelected);
        if(oldLiElement)
        {
            oldLiElement.style.backgroundColor = normalBackground;
        }
        liElement.style.backgroundColor = selectedBackground;
    }

    return true;
}

function submitSelection(selectionId, divName, locationName)
{
    var aIdPrefix = "search_a_";
    var aElement = document.getElementById(aIdPrefix+selectionId);
    var inputElement = document.getElementById(locationName);
    if(aElement && inputElement)
    {
        inputElement.value = aElement.innerHTML;
        document.getElementById(divName).innerHTML="";
        document.getElementById(divName).style.border="0px";
    }
}

function navigateSearch(evt, divName, locationName)
{
    var keynum;
    var numcheck;

    keynum = (evt.which) ? evt.which : evt.keyCode
    offset = 0;

    if(keynum == 13 && liSelected > -1)
    { // Enter with selection active
        submitSelection(liSelected, divName, locationName);
        return false;
    }
    else if(keynum == 38)
    {             // Up arrow
        if(liSelected == -1)
        {
            liSelected = 1;
        }
        offset = -1;
    }
    else if(keynum == 40)
    {             // Down arrow
        offset = 1;
    }
    else
    {
        lookup = true;
        return true;
    }

    oldLiSelected = liSelected;
    liSelected += offset;

    if(changeSelection(oldLiSelected, liSelected) == false)
    {
        liSelected -= offset;
    }

    lookup = false;
    return false;
}