var xmlReady=0;
var myXMLHTTPRequest = getRequest();
var xmlNodes;

function loadDataIsland(){
        var xmlNodes=window.document.getElementsByTagName("xml");var mNode;
        mNode = xmlNodes[0].childNodes[0];
        if(!mNode.hasChildNodes()){mNode = xmlNodes[0].childNodes[1];}
        var m_return = mNode.childNodes;
        return m_return;
}

function getSyncData(p_address) {
        if(myXMLHTTPRequest&&myXMLHTTPRequest.readyState!=0){
                myXMLHTTPRequest.abort()
        }
        myXMLHTTPRequest.open("GET", p_address, false);
        myXMLHTTPRequest.send(null);
       // alert(p_address);
       // alert(myXMLHTTPRequest.responseText);
      //  alert(myXMLHTTPRequest.responseXML.parseError.reason);

      var mDoc = myXMLHTTPRequest.responseXML;

        var m_return=loadSyncData(mDoc);
        return m_return;
}

function loadSyncData(xmlDocument) {
        if(xmlDocument.hasChildNodes()){
        var m_return = xmlDocument.documentElement.childNodes;
        return m_return;
        }else{alert('no data');if(isnull(xmlDocument),alert('1'),alert('2'));}
}

function sendRequest(t_obj,d_obj,keyCode,p_address) {
        if(myXMLHTTPRequest&&myXMLHTTPRequest.readyState!=0){
                myXMLHTTPRequest.abort()
        }
        //clear ready flag...
        xmlReady=0;
        myXMLHTTPRequest.open("GET", p_address + t_obj.value.substr(0,1), true);
        myXMLHTTPRequest.onreadystatechange=function() {
        if(myXMLHTTPRequest.readyState == 4 && myXMLHTTPRequest.status == 200) {
                loadHandler(myXMLHTTPRequest.responseXML,t_obj,d_obj,keyCode);
                }
        };
        myXMLHTTPRequest.send(null);
}

function getInnerText(node){
        var innerText = '';
        if (node.nodeType == 3){return node.nodeValue;}
        else {for (var j=0;j<node.childNodes.length;j++){innerText += getInnerText(node.childNodes[j]);}return innerText;}
}

function loadHandler(xmlDocument,t_obj,d_obj,keyCode){
        if(xmlDocument.hasChildNodes()){xmlNodes = xmlDocument.documentElement.childNodes}
    xmlReady=1;
    processXML(t_obj,d_obj,keyCode);
 }


function processXML(t_obj,d_obj,keyCode) {
    if(t_obj.value.length>0 && xmlNodes.length>0){

        var i_Value = t_obj.value;

        var xml;
        var addFlag;
        var replaceFlag=0;
        var m_Id;
        var m_Name;

        for (i=0; i< xmlNodes.length; i++)
        {
            xml = xmlNodes[i];

            addFlag = 0;
            m_Id = getInnerText(xml.firstChild);
            m_Name = getInnerText(xml.lastChild);

            if(t_obj.value.length>1){
                    if(m_Name.substr(0,i_Value.length).toLowerCase()==i_Value.toLowerCase()){addFlag=1;}
            }
            else{addFlag=1;}

            if(addFlag==1) {
                if(replaceFlag==0) {
                    replaceFlag=1;
                    if(IsValidKey(keyCode)){
                                                //next check for speedy typer...
                                                if(t_obj.value==i_Value){
                                                        highlight(t_obj,i_Value,m_Name);
                                                }else{i=xmlNodes.length;}
                    }
                                        d_obj.style.visibility = "visible";
                }
                addToList(d_obj,m_Id,m_Name);
            }
        }
        ddsize(d_obj);
    }
}

function highlight(t_obj,i_Value,i_nValue){
        t_obj.value=i_nValue;
        if(t_obj.createTextRange){
            var t=t_obj.createTextRange();
                t.moveStart("character",i_Value.length);
                t.select();
        }else if (t_obj.setSelectionRange){
            t_obj.setSelectionRange(i_Value.length,i_nValue.length);
        }
}

function getRequest(){
  var mr=null;
  try{mr=new ActiveXObject("Msxml2.XMLHTTP")}catch(A){try{mr=new ActiveXObject("Microsoft.XMLHTTP")} catch(B){mr=null}}
  if(!mr&&typeof XMLHttpRequest!="undefined"){mr=new XMLHttpRequest()}
  return mr
}


function oc_keyup(t_obj,d_obj,e,p_address){
        var keyCode = e.keyCode;

        if(!IsUpOrDown(keyCode)) {
                if(keyCode!=13){
                        d_obj.options.length = 0;
                        d_obj.style.visibility = "hidden";
                        switch(t_obj.value.length){
                        case 0:
                                xmlReady=0;break;
                        case 1:
                                sendRequest(t_obj,d_obj,keyCode,p_address);        break;
                        default:
                                if(xmlReady==1){processXML(t_obj,d_obj,keyCode);}
                                else{sendRequest(t_obj,d_obj,keyCode,p_address);}
                                break;
                        }
                }
        }
}

function l_keyup(t_obj,d_obj,e,o_xmlNodes){

        var keyCode = e.keyCode;

        if(!IsUpOrDown(keyCode)) {
                if(keyCode!=13){
                        d_obj.options.length = 0;
                        d_obj.style.visibility = "hidden";
                        if(o_xmlNodes.length!=0){processNodes(t_obj,d_obj,keyCode,o_xmlNodes);}
                        else {hclick(d_obj)}
                }
        }
}

function processNodes(t_obj,d_obj,keyCode,o_xmlNodes) {
    if(t_obj.value.length>0 && o_xmlNodes.length>0){

        var i_Value = t_obj.value;

        var xml;
        var addFlag;
        var replaceFlag=0;
        var m_Id;
        var m_Name;

        for (i=0; i< o_xmlNodes.length; i++)
        {
            xml = o_xmlNodes[i];

            addFlag = 0;
            m_Id = getInnerText(xml.firstChild);
            m_Name = getInnerText(xml.lastChild);

            if(m_Name.substr(0,i_Value.length).toLowerCase()==i_Value.toLowerCase()){addFlag=1;}

            if(addFlag==1) {
                if(replaceFlag==0) {
                    replaceFlag=1;
                    if(IsValidKey(keyCode)){
                                                //next check for speedy typer...
                                                if(t_obj.value==i_Value){
                                                        highlight(t_obj,i_Value,m_Name);
                                                }else{i=o_xmlNodes.length;}
                    }
                                        d_obj.style.visibility = "visible";
                }
                addToList(d_obj,m_Id,m_Name);
            }
        }
        ddsize(d_obj);
    }
}

function f_keyup(t_obj,d_obj,e,o_xmlNodes){

        var keyCode = e.keyCode;

        if(!IsUpOrDown(keyCode)) {
                if(keyCode!=13){
                        d_obj.options.length = 0;
                        d_obj.style.visibility = "hidden";
                        if(o_xmlNodes.length!=0){pfNodes(t_obj,d_obj,keyCode,o_xmlNodes);}
                        else {hclick(d_obj)}
                }else{t_obj.value=t_obj.value}
        }
}

function fdiv_keyup(t_obj,d_obj,v_obj,id_obj,e,o_xmlNodes){

        var keyCode = e.keyCode;

        if(!IsUpOrDown(keyCode)) {
                if(keyCode!=13){
                        d_obj.options.length = 0;
                        d_obj.style.visibility = "hidden";
                        changeposition(t_obj,v_obj);
                        if(o_xmlNodes.length!=0){pfNodes(t_obj,d_obj,id_obj,keyCode,o_xmlNodes);}
                        else {hclick(d_obj)}
                }else{t_obj.value=t_obj.value;}
        }
}

function pfNodes(t_obj,d_obj,id_obj,keyCode,o_xmlNodes) {
    if(o_xmlNodes.length>0){
        var i_Value = t_obj.value;

        var xml;
        var addFlag;
        var replaceFlag=0;
        var m_Id;
        var m_Name;

        if(keyCode==8 && t_obj.value.length>0){
                        i_Value = i_Value.substr(0,i_Value.length-1);
        }


        for (i=0; i< o_xmlNodes.length; i++)
        {
            xml = o_xmlNodes[i];

            addFlag = 0;
            m_Id = getInnerText(xml.firstChild);
            m_Name = getInnerText(xml.lastChild);

                        if(i_Value.length==0){addFlag=1}
                        else{if(m_Name.substr(0,i_Value.length).toLowerCase()==i_Value.toLowerCase()){addFlag=1;}}

            if(addFlag==1) {
                if(replaceFlag==0) {
                    replaceFlag=1;
                    if(IsValidKey(keyCode) || keyCode==8){
                                                highlight(t_obj,i_Value,m_Name);
                                                id_obj.value=m_Id;
                    }
                                        d_obj.style.visibility = "visible";
                }
                addToList(d_obj,m_Id,m_Name);
            }
        }
        ddsize(d_obj);
    }
}

function ddsize(d_obj) {
        if(d_obj.options.length <12) {
        if(d_obj.options.length==0) {hclick(d_obj)}
        else {d_obj.size=d_obj.options.length;}
    }
    else {d_obj.size=12;}
}

function keydown(t_obj,d_obj,id_obj,e){
        var keyCode = e.keyCode;
        if(IsUpOrDown(keyCode)) {
                if(d_obj.length>0 && d_obj.style.visibility!="hidden") {
                        if(keyCode == 40) {/*down arrow*/ if(d_obj.selectedIndex<d_obj.length-1){d_obj.selectedIndex++;}}
                        else if(keyCode == 38) {/*up arrow*/ if(d_obj.selectedIndex>0){d_obj.selectedIndex--;}}
                        t_obj.value=d_obj.options[d_obj.selectedIndex].text;
                        id_obj.value=d_obj.options[d_obj.selectedIndex].value;
                }
        }
        else {if(keyCode==13){ /*Enter button*/ hclick(d_obj);}}
}



function addToList(d_obj,i_Value,i_Text){
        var oOption = document.createElement("OPTION");
        oOption.text=i_Text;
        oOption.value=i_Value;
        d_obj.options[d_obj.options.length] = oOption
}

function pickvalue(t_obj,d_obj){
        t_obj.value=d_obj.options[d_obj.selectedIndex].text;
}

// Character checking functions

function IsValidKey(i_nKeyCode) {
        if( ((i_nKeyCode >= 48) & (i_nKeyCode <= 57)) || ((i_nKeyCode >= 65) & (i_nKeyCode <= 90)) ) {return true;}        return false;
}

function IsUpOrDown(i_nKeyCode) {
        if((i_nKeyCode == 38) || (i_nKeyCode == 40)) {return true;} return false;
}

function hclick(object){object.style.visibility = "hidden";object.size=1;}

function img_click(t_obj,d_obj,v_obj,o_xmlNodes) {
        changeposition(t_obj,v_obj);
        if(d_obj.style.visibility=="visible"){d_obj.style.visibility="hidden"}
        else{
                if(d_obj.options.length==0) {
                        var xml;
                    var m_Id;
                    var m_Name;

                    for (var i=0; i< o_xmlNodes.length; i++) {
                        xml = o_xmlNodes[i];
                        m_Id = getInnerText(xml.firstChild);
                        m_Name = getInnerText(xml.lastChild);
                        addToList(d_obj,m_Id,m_Name);
                    }
                }
                ddsize(d_obj);d_obj.style.visibility = "visible";
        }
}

function findPosX(obj){
        var curleft = 0;
        if(obj.offsetParent){while (obj.offsetParent){curleft+=obj.offsetLeft;obj=obj.offsetParent;}}else if(obj.x)curleft += obj.x;
        return curleft;
}

function findPosY(obj){
        var curtop = 0;
        if (obj.offsetParent){while (obj.offsetParent){curtop+=obj.offsetTop;obj=obj.offsetParent;}}else if(obj.y)curtop += obj.y;
        return curtop;
}

function changeposition(t_obj,v_obj){v_obj.style.left=findPosX(t_obj) + 'px';v_obj.style.top=(findPosY(t_obj) + parseInt(t_obj.style.height)+2)+'px';}