﻿function SimpleAJAX() {
    this.XmlHttpRequest = null;
    this.CallbackMethod = null;

    // Creates new XMLHttpRequest instance
    this.CreateNewXMLRequest = function () {
        if (window.XMLHttpRequest) {
            // code for IE6, IE7, Firefox, Mozilla, etc.
            this.XmlHttpRequest = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) {
            // code for IE5
            this.XmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }

        if (this.XmlHttpRequest != null) {
            this.XmlHttpRequest.onreadystatechange = this.CallbackMethod;
        }
        else {
            //alert("Your browser does not support XMLHTTP.");
        }
    }

    // Sends Simple AJAX Request
    this.SendNewAJAXRequest = function (a_sUrl) {
        this.CreateNewXMLRequest();

        // Sends the XML HTTP request
        this.XmlHttpRequest.open("GET", a_sUrl, true);
        this.XmlHttpRequest.send(null);
    }
}

/*------------------------Autocomplete functionality-----------------------------------------------------------------------------*/

var oSimpleAJAX = new SimpleAJAX();
oSimpleAJAX.CallbackMethod = ResponseStateReceived;
var sUrlBase = 'http://' + window.location.host.replace('/', '') + '/'; // Some browsers put '/' at the end of the host name, others miss it. This replace unifies both


var keys = { 13: 'Enter', 27: 'Esc', 38: 'Arrow Up', 40: 'Arrow Down', 16: 'Shift' }
var txtValue = ''; //the value of the text box entered by the user

/*
a_oObject - the object for which the autocomplete is for,
a_sTxtBoxType - 1 - for professions etc., 2 - for regions,
a_oEvent = 'event',
a_oAutocompleteDiv = the ID of the div object where the results go
*/
function DoAutocompleteRequest(a_oObject, a_sTxtBoxType, a_oEvent, a_oAutocompleteDiv, a_sUrl) {
    var e = e || a_oEvent;

    if (keys[e.keyCode] != 'Arrow Up' && keys[e.keyCode] != 'Arrow Down' && keys[e.keyCode] != 'Esc')
        txtValue = a_oObject.value;

    if (keys[e.keyCode] == 'Arrow Up' ||
            keys[e.keyCode] == 'Arrow Down' //|| keys[e.keyCode] == 'Shift'
            )//if up or down arrows have been pressed
    {
        var divElem = document.getElementById(a_oAutocompleteDiv);
        var arrAutocompleteElems = divElem.getElementsByTagName('div');

        var pos = -1;

        for (var i = 0; i < arrAutocompleteElems.length; i++) //goes through all the elements in the autocomplete div
        {
            if (arrAutocompleteElems[i].className == 'autocompleteTextHover') //if there is selected element in the autocomplete div
            {
                pos = i;
                arrAutocompleteElems[i].className = 'autocompleteText';
                if (keys[e.keyCode] == 'Arrow Down') //select next element if Up Arrow is pressed
                {
                    if (i >= arrAutocompleteElems.length - 1) a_oObject.value = txtValue;
                    else {
                        arrAutocompleteElems[i + 1].className = 'autocompleteTextHover';
                        a_oObject.value = arrAutocompleteElems[i + 1].innerHTML.replace('&amp;', '&');
                    }
                }
                else //select previous element if Down Arrow is selected
                {
                    if (i == '0') a_oObject.value = txtValue;
                    else {
                        arrAutocompleteElems[i - 1].className = 'autocompleteTextHover';
                        a_oObject.value = arrAutocompleteElems[i - 1].innerHTML.replace('&amp;', '&');
                    }
                }
                break;
            }
        }
        if (pos == -1) //no element is selected => select first element
        {
            arrAutocompleteElems[0].className = 'autocompleteTextHover';
            a_oObject.value = arrAutocompleteElems[0].innerHTML.replace('&amp;', '&');
        }
    }
    else if (keys[e.keyCode] == 'Enter') {
        var divElem = document.getElementById(a_oAutocompleteDiv);
        var arrAutocompleteElems = divElem.getElementsByTagName('div');

        for (var i = 0; i < arrAutocompleteElems.length; i++) //goes through all the elements in the autocomplete div
        {
            if (arrAutocompleteElems[i].className == 'autocompleteTextHover') {
                a_oObject.value = arrAutocompleteElems[i].innerHTML.replace('&amp;', '&');
                document.getElementById(a_oAutocompleteDiv).style.display = "none";
                arrAutocompleteElems[i].className = 'autocompleteText';
                break;
            }
        }
    }
    else if (keys[e.keyCode] == 'Esc') {
        document.getElementById(a_oAutocompleteDiv).style.display = "none";
        a_oObject.value = txtValue;
    }
    else {
        if (a_oObject.value.length > 0) {
            var sUrl = sUrlBase;
            if (a_sUrl && a_sUrl != null)
                sUrl = a_sUrl;

            //oSimpleAJAX.SendNewAJAXRequest(encodeURI(sUrl + 'Autocomplete.ashx?text=' + a_oObject.value + '&txtBox=' + a_sTxtBoxType + '&divResultBox=' + a_oAutocompleteDiv));
            oSimpleAJAX.SendNewAJAXRequest(encodeURI(sUrl + 'php/Autocomplete.php?text=' + a_oObject.value + '&txtBox=' + a_sTxtBoxType + '&divResultBox=' + a_oAutocompleteDiv));
        }
        else {
            document.getElementById(a_oAutocompleteDiv).style.display = "none";
        }
    }
}



function ResponseStateReceived() {
    var httpRequest = oSimpleAJAX.XmlHttpRequest;

    if (httpRequest.readyState == 4) {
        if (httpRequest.status == 200) {
            // XML Document received
            var oBrowsingDataNode = httpRequest.responseXML.getElementsByTagName('o');
            var autocompleteDivID = httpRequest.responseXML.getElementsByTagName('r')[0].getAttribute('div');

            document.getElementById(autocompleteDivID).style.display = "";
            document.getElementById(autocompleteDivID).innerHTML = "";



            for (var i = 0; i < oBrowsingDataNode.length; i++) {
                document.getElementById(autocompleteDivID).innerHTML += '<div name=\"AutocomplText\" class="autocompleteText" onmouseover="this.className=\'autocompleteTextHover\'" onmouseout="this.className=\'autocompleteText\'" onmousedown="ResetSearchValue(this, \'' + autocompleteDivID + '\');">' + oBrowsingDataNode[i].getAttribute('v') + '</div>';

            }
            if (oBrowsingDataNode.length == 0) {
                document.getElementById(autocompleteDivID).style.display = "none";
            }
        }
    }
    else if (httpRequest.readyState == 2) {
        // XML request sent      
    }
}



