﻿// search.js -- start --

var qErrFlag = 0;
var qErrFlagAgent = 0;
var CUR_FILE = '';
var CUR_POS = '';
var xmlHttp = null;

function trim(inputString) {
    if (typeof inputString != "string") {
        return inputString;
    }
    var retValue = inputString;
    var ch = retValue.substring(0, 1);
    while (ch == " ") {
        retValue = retValue.substring(1, retValue.length);
        ch = retValue.substring(0, 1);
    }
    ch = retValue.substring(retValue.length - 1, retValue.length);
    while (ch == " ") {
        retValue = retValue.substring(0, retValue.length - 1);
        ch = retValue.substring(retValue.length - 1, retValue.length);
    }
    while (retValue.indexOf("  ") != -1) {
        retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ") + 1, retValue.length);
    }
    return retValue;
}

function trim(strText) {
    while (strText.substring(0, 1) == ' ')
    strText = strText.substring(1, strText.length);
    while (strText.substring(strText.length - 1, strText.length) == ' ')
    strText = strText.substring(0, strText.length - 1);
    return strText;
}

function removeError(arrElementId, src, errFlag) {
    if (qErrFlagAgent) if (qErrFlag != errFlag && errFlag != qErrFlagAgent) return false;
    else if (qErrFlag != errFlag) return false;
    if (src == 'quickbar') {
        if (document.getElementById('divInlineErrMsg').style.display == "block") {
            var i = 0;
            document.getElementById('divInlineErrMsg').style.display = "none";
            if (document.getElementById('divfordisplay')) document.getElementById('divfordisplay').style.top = (parseInt(document.getElementById("divfordisplay").style.top.substr(0, (document.getElementById("divfordisplay").style.top.length - 2))) - 30) + 'px';

            for (i = 0; i < arrElementId.length; i++) {
                if (arrElementId[i] == 'qf') {
                    document.getElementById("spanid_" + arrElementId[i]).className = '';
                    continue;
                }
                document.getElementById(arrElementId[i]).className = 'textbox';
            }
        }
    }
    if (qErrFlagAgent) {
        if (qErrFlagAgent == errFlag) qErrFlagAgent = 0;
        else qErrFlag = 0;
    }
    else qErrFlag = 0;
}

// SELECT_FIRST_ELEMENT
var elem_name = '';
var firstSuggestion = '';

function AutoSuggest(elem, formname, tmpDiv, Sample) {
    var me = this;
    this.elem = elem;
    this.eligible = new Array();
    this.inputText = null;
    this.highlighted = -1;
    this.div = document.getElementById(tmpDiv); //document.getElementById("autosuggest");
    this.div.style.zIndex = 1000;
    var TAB = 9;
    var ESC = 27;
    var KEYUP = 38;
    var KEYDN = 40;
    var ENTER = 13;
    var cntr = 0;
    var maxlist = 20;
    var flag_ie = false;
    var leftover = '';
    elem.setAttribute("autocomplete", "off");
    if (!elem.id) {
        var id = "autosuggest" + idCounter;
        idCounter++;
        elem.id = id;
    }
    elem.onblur = function (ev) {
        me.hideDiv(1);
    }
    elem.onkeydown = function (ev) {
        newflag = "";
        var key = me.getKeyCode(ev);
        switch (key) {
        case TAB:
            me.useSuggestion();
            break;
        case ENTER:
            newflag = "DOWN";
            var val_ret = me.useSuggestion();
            if (val_ret == 0) newflag = "";
            break;
        case ESC:
            me.hideDiv(2);
            break;
        case KEYUP:
            if (me.highlighted > 0) {
                me.highlighted--;
            }
            me.changeHighlight(key);
            break;
        case KEYDN:
            if (me.highlighted < (me.eligible.length - 1) && me.highlighted < (maxlist - 1)) {
                me.highlighted++;
            }
            me.changeHighlight(key);
            break;
        }
    };
    elem.onkeyup = function (ev) {
        newflag = "";
        var key = me.getKeyCode(ev);
        switch (key) {
        case ENTER:
            newflag = "UP";
        case TAB:
        case ESC:
        case KEYUP:
        case KEYDN:
            return;
        default:
            //			if(this.value != me.inputText && trim(this.value).length > 0)
            var str_input;
            if (trim(this.value).length > 0) {
                str_input = this.value;
                // CLEANUP STARTS
                // SELECT_FIRST_ELEMENT
                elem_name = elem.name;
                if (elem.name == 'qp') {
                    str_input = str_input.replace(/[@,;:!&\s]+/g, " ");
                }
                else if (elem.name == 'ql') {
                    var arr_tmp = str_input;
                    if (arr_tmp.length > 1) {
                    }
                    delete(arr_tmp);
                    str_input = str_input.replace(/[@;:!&\s]+/g, " ");
                }
                else if (elem.name == 'qa') {
                    var arr_tmp = str_input;
                    if (arr_tmp.length > 1) {
                    }
                    delete(arr_tmp);
                    str_input = str_input.replace(/[@;:!&\s]+/g, " ");
                }
                else {
                    var arr_tmp = str_input;

                    if (arr_tmp.length > 1) {
                    }
                    delete(arr_tmp);
                    str_input = str_input.replace(/[@;:!&\s]+/g, " ");
                }
                str_input = str_input.replace(/^\s/, "");
                // CLEANUP END
                if (str_input.length <= 0) {
                    leftover = '';
                    me.hideDiv(3);
                    return;
                }
                me.inputText = str_input;
                var return_len = me.getEligible(elem);
                if (return_len > 0) {
                    me.createDiv();
                    me.positionDiv();
                    me.showDiv();
                }
                else {
                    me.hideDiv(4);
                }
            }
            else {
                leftover = '';
                me.inputText = '';
                me.hideDiv(5);
            }
        }
    };
    this.useSuggestion = function () {
        if (this.highlighted > -1) {
            if (elem.name == 'qp') {
                if (document.getElementById("uen")) document.getElementById("uen").value = this.elem.value;
                this.elem.value = this.eligible[this.highlighted];
                if (document.getElementById("uen")) document.getElementById("uen").value += '|_|' + this.elem.value;
                this.hideDiv(6);
            }
            else {
                if (document.getElementById("usl")) document.getElementById("usl").value += this.elem.value + '::' + this.eligible[this.highlighted] + '##';
                if (leftover != '') leftover += ',';
                this.elem.value = leftover + this.eligible[this.highlighted];
                this.hideDiv(7);
                leftover = '';
            }
            if (document.getElementById("ddstate")!=null)
            {
             getdata('29&cityid=' + this.elem.value,'auto2_autosuggest1', 'auto2_ql');
            } 
            ///alert(this.elem.value);
            setTimeout("document.getElementById('" + this.elem.id + "').focus()", 0);
            return 1;
        }
        else return 0;
    };
    this.showDiv = function () {
        me.highlighted = -1;
        if (this.div.id == 'autosuggest') document.getElementById("uen").value = "";
        this.div.style.display = 'block';
        if (disable && flag_ie) {
            var subobj = this.div;
            var ifrRef = document.getElementById("DivShim");
            ifrRef.style.width = subobj.offsetWidth;
            ifrRef.style.height = subobj.offsetHeight;
            ifrRef.style.top = subobj.style.top;
            ifrRef.style.left = subobj.style.left;
            ifrRef.style.marginTop = subobj.style.marginTop;
            ifrRef.style.marginBottom = subobj.style.marginBottom;
            ifrRef.style.marginLeft = subobj.style.marginLeft;
            ifrRef.style.marginRight = subobj.style.marginRight;
            ifrRef.style.display = subobj.style.display;
            ifrRef.style.zIndex = 1;
            subobj.style.zIndex = 2;
        } // end of if()
    };
    this.hideDiv = function (no) {
        //SELECT_FIRST_ELEMENT
        if (!no || no > 1) firstSuggestion = '';
        this.div.style.display = 'none';
        document.getElementById("DivShim").style.display = 'none';
        this.highlighted = -1;
        this.eligible = new Array();
        if (disable && flag_ie) {
            var i;
            for (i = 0; i < disable.length; i++) {
                document.getElementById(disable[i]).style.visibility = 'visible';
            } // end of for()
        } // end of if()

        //if(newflag == "DOWN") document.forms[formname].submit();
    };
    this.changeHighlight = function () {
        var lis = this.div.getElementsByTagName('LI');
        var i = 0;
        for (i in lis) {
            var li = lis[i];
            if (!li) {
                continue;
            }
            if (this.highlighted == i) {
                li.className = "selected";
            }
            else {
                li.className = "";
            }
        }
    };
    this.positionDiv = function () {
        var el = this.elem;
        var x = 0;
        var y = el.offsetHeight;
        while (el.offsetParent && el.tagName.toUpperCase() != 'BODY') {
            x += el.offsetLeft;
            y += el.offsetTop;
            el = el.offsetParent;
        }
        x += el.offsetLeft;
        y += el.offsetTop;
        this.div.style.left = x - (formname == "form4" && document.getElementById("divfordisplay") ? parseInt(document.getElementById("divfordisplay").style.left.substr(0, (document.getElementById("divfordisplay").style.left.length - 2))) : 0) + 'px';
        this.div.style.top = y - (formname == "form4" && document.getElementById("divfordisplay") ? parseInt(document.getElementById("divfordisplay").style.top.substr(0, (document.getElementById("divfordisplay").style.top.length - 2))) : 0) + 'px';
    };
    this.createDiv = function () {
        cntr = 0;
        var full_temparr = new Array();
        var ul = document.createElement('ul');
        for (var i = 0; i <= this.eligible.length - 1; i++) {
            if (cntr == 20) break;
            //alert( this.eligible[i]);
            var word = this.eligible[i];
            full_temparr[cntr++] = word;
            var li = document.createElement('li');
            var a = document.createElement('a');
            a.href = "javascript:setValue(\"" + word + "\");";
            a.innerHTML = markbold(this.inputText.toLowerCase(), word);
            li.appendChild(a);
            if (me.highlighted == i) {
                li.className = "selected";
            }
            ul.appendChild(li);
        }
        this.div.replaceChild(ul, this.div.childNodes[0]);
        ul.onmouseover = function (ev) {
            var target = me.getEventSource(ev);
            while (target.parentNode && target.tagName.toUpperCase() != 'LI') {
                target = target.parentNode;
            }
            var lis = me.div.getElementsByTagName('LI');
            for (i in lis) {
                var li = lis[i];
                if (li == target) {
                    me.highlighted = i;
                    break;
                }
            }
            me.changeHighlight();
        };
        ul.onmousedown = function (ev) {
            //alert("dd");
            me.useSuggestion();
            me.hideDiv(8);
            me.cancelEvent(ev);
            return false;
        };
        this.div.className = "suggestion_list";
        this.div.style.position = 'absolute';
    };
    this.getEligible = function (element) {
        this.eligible = new Array();
        var smpl = new Array();
        if (element.name == 'qp') smpl = sample;
        else if (element.name == 'ql') smpl = Sample;
        else if (element.name == 'qa') smpl = Sample;
        else smpl = Sample;
        var str1 = this.inputText.toLowerCase();
        var match = str1.split(' ');
        var al = 0;
        for (var x = 0; x < match.length; x++) {
            if (match[x] != '') {
                if (match[x] != ' ') {
                    al = al + 1;
                    //alert(match[x]);
                }
            }
        }
        var cl = 0;
        for (var i = 0; i < smpl.length; i++) {
            var suggestion = smpl[i];
            cl = 0;
            for (var k = 0; k < match.length; k++) {
                if (match[k] != '') {
                    if (match[k] != ' ') {
                        var index = suggestion.toLowerCase().indexOf(match[k]);
                        if (index >= 0) {
                            cl = cl + 1;
                        }
                    }
                }
            }
            if (cl == al) {
                this.eligible[this.eligible.length] = suggestion;
            }
        }
        /// SELECT_FIRST_ELEMENT
        firstSuggestion = this.eligible[0];
        delete(smpl);
        return this.eligible.length;
    };
    this.getKeyCode = function (ev) {
        if (ev) //Moz
        {
            flag_ie = false;
            return ev.keyCode;
        }
        if (window.event) //IE
        {
            flag_ie = true;
            return window.event.keyCode;
        }
    };
    this.getEventSource = function (ev) {
        if (ev) return ev.target; /*Moz*/
        if (window.event) return window.event.srcElement; /*IE*/
    };
    this.cancelEvent = function (ev) {
        if (ev) //Moz
        {
            ev.preventDefault();
            ev.stopPropagation();
        }
        if (window.event) //IE
        {
            window.event.returnValue = false;
        }
    }
}
function in_array(arr, str) {
    for (var i in arr) {
        if (arr[i] === str) return i;
    }
    return -1;
}
function createAutoSuggest(suggestele, form_n, tmpDiv, Sample) {
    new AutoSuggest(document.getElementById(suggestele), form_n, tmpDiv, Sample);
}

function markbold(str1,str2){
    var strn1=str1.toLowerCase();
    var match=strn1.split(' ');
    var Indexes = new Array();
    var str_ret = new Array();
    str_ret[-1] = str2;
    var iCnt = 0;
    var LastStr = '';

    for ( var iCnt = 0 ; iCnt < match.length ; iCnt++){
        if (match[iCnt] !=''){
            if (match[iCnt] != ' '){
                Indexes[iCnt]  = str_ret[iCnt-1].toLowerCase().indexOf(match[iCnt]);
                str_ret[iCnt]  = str_ret[iCnt-1].substr(0,Indexes[iCnt]);
                str_ret[iCnt] += "<b>"+str_ret[iCnt-1].substr(Indexes[iCnt],match[iCnt].length)+"</b>";
                str_ret[iCnt] += str_ret[iCnt-1].substr((Indexes[iCnt]+match[iCnt].length),str_ret[iCnt-1].length);
                str_ret[iCnt] = str_ret[iCnt].replace('<<b>b</b>>','<b>');
                LastStr = str_ret[iCnt];
            }
        }
    }
    //return (str_ret[2]=="") ? ((str_ret[1]=="") ?  str_ret[0] :  str_ret[1]) : str_ret[2];
    return LastStr;
}

function setValue(val) {
    document.getElementById(suggestelement).value = val;
}

function getdata(Option, RenderObj, SenderObj) {
    var url = ''; //window.location.href;
    if (window.location.hostname)
        url = window.location.hostname;
    else
        url = window.location.href.match(/:\/\/(.[^/]+)/)[1];

//    var urlpart = url.split('/');
//    var tempiCnt;
//    if (url.toLowerCase().indexOf('localhost')>0) tempiCnt = 5; else tempiCnt = 3;
//    url = "";
//    for (var iCnt = 0 ; iCnt < urlpart.length-tempiCnt ; iCnt++){
//        url += "../";
//    }
    var virtualDirWithPort = ""; 
    try{
        virtualDirWithPort = window.location.href.split(url)[1].split('/')[0] + "/" + window.location.href.split(url)[1].split('/')[1];
    }catch(ex){}
    url = "http://" + url + (url.toLowerCase() == "localhost" ? virtualDirWithPort : "") + "/Customer/getData.aspx";
    url += "?mode="+Option+"&q=m&RenderObj="+RenderObj+"&SenderObj="+SenderObj;  //(a == 'Home' ? 18 : 16) 
    invokeServer(url, "WriteAutoSuggest")
}

function WriteAutoSuggest() {
    //hideProgressSearch();
    //var Sample = Array();
    var Out=unescape(arguments[0]);
    var RenderObj = ajax.responseHeader(arguments[1]).get("RenderObj").replace(/(\r\n|\n|\r)/gm,'').replace(/\s+/g,''); 
    var SenderObj = ajax.responseHeader(arguments[1]).get("SenderObj").replace(/(\r\n|\n|\r)/gm,'').replace(/\s+/g,'');

    try{
        if (Out) {
            var str = Out.split("|");
            var inc;
            if (!'Sample_'+SenderObj){
                eval('var Sample_'+SenderObj+' = Array();');
            }
            for (inc = 0; inc < str.length - 1; inc++) //seperate each row by '@'
            {
                var str2 = str[inc].split("|"); //for each element seperated by '#'
                var temp = str2[0];
                eval('Sample_'+SenderObj+' = Sample_'+SenderObj+'.concat(temp);');
            }
            eval('createAutoSuggest(SenderObj, "", RenderObj, Sample_'+SenderObj+');');
        }
    }
    catch(A){
        alert(A)
    }
}

var idCounter = 0;
