rowSelected = "";
currentRow = 0;

/*
 * Handle key pressed event.
 * Arrow up and arrow down keys will hight light the suggested data
 * Enter key take hightlight value and set it as text box value
 * Tab key to switch between input box
 */
function handleKeyDown(e, searchType) {

    e = (!e) ? window.event : e;
    code = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0));

    if(code == 38) {    // Up arrow key pressed

        // Current row is not the first row, move 1 row up   
        if(currentRow > 1) {

            document.getElementById("tr" + currentRow).style.backgroundColor='';
            document.getElementById("tr" + currentRow).style.color='#000000';
            currentRow--; 
            document.getElementById("tr" + currentRow).style.backgroundColor='#41A317';
            document.getElementById("tr" + currentRow).style.color='#ffffff';
        }
        else {
            // Already at the first row, ignore the arrow key up event
            return;
        }
    }
    else if(code == 40) {   // Down arrow key pressed

        // No row is selected, hightlight the first row
        if (! rowSelected){

            rowSelected = 1;    // Turn on rowSelected flag
            currentRow++;       // CurrentRow becomes row 1
            document.getElementById("tr" + currentRow).style.backgroundColor='#41A317';
            document.getElementById("tr" + currentRow).style.color='#ffffff';
        }
        // Current row is not the last row, move 1 row down
        else if(rowSelected && currentRow < 6) {

            document.getElementById("tr" + currentRow).style.backgroundColor='';
            document.getElementById("tr" + currentRow).style.color='#000000';
            currentRow++; 
            document.getElementById("tr" + currentRow).style.backgroundColor='#41A317';
            document.getElementById("tr" + currentRow).style.color='#ffffff';
        }
        else {
            // Already at the last row, ignore the arrow key down event
            return;
        }
    }
    else if(code == 13) {   // Enter key is pressed

        if(rowSelected) {

            selectedData = document.getElementById("tr" + currentRow).firstChild.innerHTML;
            document.getElementById(searchType).value = selectedData; 

            if(searchType == "member" || searchType == "firstName" || searchType == "lastName") {
                searchType = "suggestedName";
            }
            else {
                searchType = "suggestedCompany";
            }

            hideSuggestion(searchType);
        }
    }
    else if(code == 9) { 
        // Tab key pressed, no action 
        return;
    }
    else {
        search(searchType);
    }

} // handleKeyDown()


/*
 * Create a new APGOSearch object and invoke the appropriate search funciton
 * depends on the searchType parameter
 */ 
function search(searchType) {
       
    url = 'php/apgo_search.php';

    if(searchType == "member" || searchType == "firstName" || searchType == "lastName") {
        var memSearch = new APGOSearch(url, searchType, displaySearchResult);
        memSearch.searchMember();
    }
    //else if(searchType == "company" || searchType == "companyName" || searchType == "membership" || searchType == "city") {
    else {
        var compSearch = new APGOSearch(url, searchType, displaySearchResult);
        compSearch.searchCompany();
    }

    rowSelected = "";
    currentRow = 0;

} // search()


/* Suggestion box is emptied out */
function hideSuggestion(suggestion) {

    document.getElementById(suggestion).innerHTML="";
    rowSelected = "";
    currentRow = 0;

} // hideSuggestion()


/*
 * Handle coccurent AJAX requests 
 * Take an URL of server script, type of search, and name of callback function
 * When server returns a response, callback function will be invoked
 */
function APGOSearch(url, searchType, callback) {

    var xmlHttpObject = getXmlHttpObject();
    xmlHttpObject.onreadystatechange = searchChange;

    function getXmlHttpObject() {

        var xmlHttpObj = null;
        try {
            // Firefox, Opera 8.0+, Safari
            xmlHttpObj = new XMLHttpRequest();
        }
        catch (e) {
            // Internet Explorer
            try {
                xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }

        return xmlHttpObj;

    } //getXmlHttpObject()


    function searchChange() {

        if (xmlHttpObject.readyState == 4) { 
            if (xmlHttpObject.status == 200) { 

                if(callback) {
                    callback(searchType, xmlHttpObject.responseText);
                }
            }
        }
    }


    this.searchMember = function() {

        var firstName = document.getElementById("firstName").value;
        var lastName = document.getElementById("lastName").value;

        url = url + "?searchType=" + searchType;
        url = url + "&firstName=" + firstName;
        url = url + "&lastName=" + lastName;

        xmlHttpObject.open("GET", url, true);
        xmlHttpObject.send(null);
    }

    this.searchCompany = function() {

        var companyName = document.getElementById("companyName").value;
        var membership = document.getElementById("membership").value;
        var city = document.getElementById("city").value;

        url = url + "?searchType=" + searchType;
        url = url + "&companyName=" + companyName;
        url = url + "&membership=" + membership;
        url = url + "&city=" + city;

        xmlHttpObject.open("GET", url, true);
        xmlHttpObject.send(null);
    }

} // APGOSearch()


/* Callback function when the response returns from server */
function displaySearchResult(searchType, response) {

    if(searchType == "firstName" || searchType == "lastName") {
        searchType = "suggestedName";
        document.getElementById(searchType).innerHTML = response; 
    }
    else if(searchType == "companyName" || searchType == "membership" || searchType == "city") {
        searchType = "suggestedCompany";
        document.getElementById(searchType).innerHTML = response; 
    }
    else {
        searchType = "searchResult";
        document.getElementById(searchType).innerHTML = response; 
    }
}


/* Text box's value is set to the value that is clicked on by the mouse */
function setSuggestion(nameBox, suggestedType, strName) {

    document.getElementById(nameBox).value = strName;
    hideSuggestion(suggestedType);
}

