Asynchronous = false;
AsyncReturn = '';
AsynchFinishWith = '';

//_________________________________________________________________
function XMLRequest(TargetURL,PostValue,MultipartBoundary){

    if (!Asynchronous){ AsynchFinishWith = ''; }

    if(MultipartBoundary==null){MultipartBoundary = "";}
    if (window.XMLHttpRequest) {
        if(PostValue==undefined){PostValue=null;}
        xmlhttp = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        if(PostValue==undefined){PostValue=null;}
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (TargetURL.indexOf('?')==-1){TargetURL = TargetURL + "?CacheKill=" + Math.random();}
    else{TargetURL = TargetURL + "&CacheKill=" + Math.random();}

    if(PostValue!=null && PostValue!=0){
        xmlhttp.onreadystatechange=XML_StateChange;
        xmlhttp.open("POST", TargetURL, Asynchronous);
        if(MultipartBoundary.length>0){xmlhttp.setRequestHeader("Content-Type","multipart/form-data, boundary="+MultipartBoundary);}
        else{xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");}
        xmlhttp.setRequestHeader("Content-Length", PostValue.length);
        xmlhttp.setRequestHeader("Connection", "close");
    }
    else{
        xmlhttp.onreadystatechange=XML_StateChange;
        xmlhttp.open("GET", TargetURL, Asynchronous);
        xmlhttp.setRequestHeader("Content-Length", '0');
    }



    xmlhttp.send(PostValue);  

    if (Asynchronous){ return 1 }
    else{        
        if(xmlhttp.ResponseText){ ReturnText = xmlhttp.ResponseText.toString(); }
        else{ReturnText = xmlhttp.responseText.toString();}

        if(ReturnText.indexOf('The system cannot find the file specified.') > -1){
            while(ReturnText.indexOf('The system cannot find the file specified.') > -1){
                xmlhttp.send(PostValue);
                if(xmlhttp.ResponseText){ ReturnText = xmlhttp.ResponseText.toString(); }
                else{ReturnText = xmlhttp.responseText.toString();}
            }
        }

        return ReturnText

    }
}

//_________________________________________________________________
function XMLAsyncRequest(TargetURL,PostValue,MultipartBoundary,FinishWith){
    AsyncReturn = ""
    Asynchronous = true
    AsynchFinishWith = FinishWith
    
    ReturnText = XMLRequest(TargetURL,PostValue,MultipartBoundary)

    Asynchronous = false

    return ReturnText

}


//_________________________________________________________________
function XML_StateChange(){
    if (xmlhttp.readyState==4)
      {// 4 = "loaded"
        if (xmlhttp.status==200) {
            if(xmlhttp.responseText){ AsyncReturn = xmlhttp.responseText.toString(); } 
            if(AsynchFinishWith != ''){ eval(AsynchFinishWith); }
        }
        else { 
            AsyncReturn = "error"
            ShowMessage("We apologize, but we encountered an error while contacting the server. Please try again.<br><br>Connection status:" + xmlhttp.status + "<br><br>"); 
            if(xmlhttp.status==500){echo(xmlhttp.responseText);}
            eval(AsynchFinishWith); 
        }
    }

}

//_________________________________________________________________
function LoadXMLDocument(TargetURL){

    //if (TargetURL.indexOf('?')==-1){TargetURL = TargetURL + "?CacheKill=" + Math.random();}
    //else{TargetURL = TargetURL + "&CacheKill=" + Math.random();}


    try { 
        tempXmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
        tempXmlDoc.async="false";
        tempXmlDoc.load(TargetURL)
    } //IE
    catch(e) { 
        try  { 
            TempXMLText = XMLRequest(TargetURL,null,null)
            TempParser=new DOMParser();
            tempXmlDoc=TempParser.parseFromString(TempXMLText,"text/xml");
        } //FF, OPERA, ETC...
        catch(e){alert(e.message); return; }
    }

    return tempXmlDoc
}


//_________________________________________________________________
function GetChild(ParentElement,ChildElement){
    try{
        if(ParentElement.getElementsByTagName(ChildElement).length==0){return '';}
        if(ParentElement.getElementsByTagName(ChildElement)[0].childNodes.length==0){return '';}
        return (unescape(ParentElement.getElementsByTagName(ChildElement)[0].childNodes[0].nodeValue)); 
    }
    catch(e){return '';}

}
