var ajax=new ajaxObject();
function ajaxObject(){
    var loopBreaker=0;
    var urlStr="";
    var methodType="POST";
    var requestXMLStr;
    var callbackMethod="";
    var headerMap=new map();
    var requestMap=new map();
    var http;
    init();
    this.url=setURL;
    this.method=setMethod;
    this.headerParam=getHeaderParameters;
    this.requestParam=getRequestParameters;
    this.requestXML=setRequestXML;
    this.callbackHandler=setCallbackHandler;
    this.execute=executeRequest;
    this.responseHeader=getResponseHeader;
    this.divId;
    function setURL(urlVal){
        urlStr=urlVal
    }
    function setMethod(methodVal){
        methodType=methodVal
    }
    function setRequestXML(requestXMLVal){
        requestXMLStr=requestXMLVal
    }
    function setCallbackHandler(callbackHandlerVal){
        callbackMethod=callbackHandlerVal
    }
    function getHeaderParameters(){
        return headerMap
    }function getRequestParameters(){
        return requestMap
    }
    function init(){
        try{
            /*if(window.XMLHttpRequest){
                http=new XMLHttpRequest();
                if(http.overrideMimeType){
                    http.overrideMimeType("text/xml")
                }
            }
            else{*/
                //if(window.ActiveXObject){
                    for (var b = ["MSXML2.XActiveXObjectMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"], c = 0, e; e = b[c++];) try {
                        http = new ActiveXObject(e);
                        break
                    } catch (h) {}
                    
                    if (!http){
                        try{
                            http=new XMLHttpRequest();
                            if(http.overrideMimeType){
                                http.overrideMimeType("text/xml")
                            }
                        }catch (h) {}
                    }
                    
                    if (!http){
                        try{
                            http=new ActiveXObject("Msxml2.XMLHTTP");
                        }catch (e){}
                    }
                    if (!http){
                        try{
                            http=new ActiveXObject("Microsoft.XMLHTTP")
                        } catch (e){}
                    }

                    //try{http=new ActiveXObject("Msxml2.XMLHTTP");}
                    //catch (e){http=new ActiveXObject("Microsoft.XMLHTTP")}
                //}
            //}
        }
        catch(Exception){
            throw new Error("Error : Error while initializing ajax for application")
        }
    }
    function executeRequest(){
        try{
            methodType="GET";
            http.open(methodType,urlStr,true);
            setRequestHeader();
            if(!arguments[0]){
                http.onreadystatechange=handleHttpResponse;
            }
            else{
                http.onreadystatechange=arguments[0];
            }
            var request=setRequestParameter();
            http.send(request)
        }
        catch(Exception){
            throw new Error(Exception.number, Exception.description )//"Error : Error while invoking request")
        }
    }
    function doNothing(){}
    function setRequestHeader(){
        for(var i=0;i<headerMap.size;i++){
            http.setRequestHeader(headerMap.keys[i],headerMap.keys[i])
        }
    }
    function setRequestParameter(){
        var request="";
        if(requestXMLStr!=null){
            request=requestXMLStr;
            return request
        }
        for(var i=0;i<requestMap.size;i++){
            request=request+""+requestMap.keys[i]+"="+requestMap.values[i]+"&"
        }
        if(request!=""){
            request=request.substring(0,request.length-1)
        }
        else{
            request=null
        }
        return request
    }
    function map(){
        var gKeys=new Array();
        var gValues=new Array();
        this.keys=gKeys;
        this.values=gValues;
        this.size=0;
        this.put=setMapEntry;
        this.get=getMapEntry;
        function setMapEntry(key,value){
            gKeys[gKeys.length]=key;
            gValues[gValues.length]=value;
            this.size++
        }
        function getMapEntry(keyParam){
            for(var i=0;i<this.size;i++){
                if(gKeys[i]==keyParam){
                    return gValues[i]
                }
            }
            return""
        }
    }
    function handleHttpResponse(){
        try{
            if(http.readyState==4){
                if(http.status==200){
                    var responseText="";
                    var contentType=http.getResponseHeader("Content-Type");
                    var message=http.responseXML;
                    var headers=http.getAllResponseHeaders();
                    if(contentType!=null&&contentType.indexOf("xml")!=-1){
                        responseText=message.xml;
                        alert("message.xml :"+responseText)
                    }
                    else{
                        if(contentType!=null&&contentType.indexOf("html")!=-1){
                            responseText=http.responseText
                        }
                        else{
                            responseText=http.responseText
                        }
                    }
                    responseText=window.escape(responseText);
                    var responseHeaders=window.escape(headers);
                    var scripts=getScripts();
                    eval(""+callbackMethod+'("'+responseText+'","'+responseHeaders+'","'+http.readyState+'")');
                    if(contentType.match("html")=="html"){
                        findAndLoadScript(scripts)
                    }
                }
                else{
                    if (http.status == 502){
                        if (loopBreaker < 2){
                            loopBreaker+=1;
                            invokeServer(urlStr, callbackMethod);
                        }
                    }
                    //throw new Error(http.status, '');
                }
            }
        }
        catch(Exception){
            //throw new Error(Exception.number, Exception.description )
        }
    }
    function getResponseHeader(headers){
        headers=unescape(headers);
        var responseHeaderMap=new map();
        var obj=headers.split("\n");
        for(var i=0;i<obj.length;i++){
            var headerStr=obj[i];
            var index=headerStr.indexOf(":");
            if(index!=-1){
                var key=headerStr.substring(0,index);
                var val=headerStr.substring(index+1,headerStr.length);
                responseHeaderMap.put(key,val)
            }
        }
        return responseHeaderMap
    }
}
function cleanString(G){
    var F="abcdefghijklmnopqrstuvwxyzABCEDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    var C="";
    var E="";
    var D="";
    var A=G.length;
    for(j=0;j<A;j++){
        E=G;
        D=E.substring(j,j+1);
        var B=F.indexOf(D);
        if(B>-1){
            C=C+D
        }
    }
    return C
}
var newdiv="";
function callback(B,E){
    B=unescape(B);
    var C=ajax.responseHeader(E).get("div_id");
    try{
        C=cleanString(C);
        var D=document.getElementById(C);
        if(D!=null){
            D.innerHTML=B
        }
    }
    catch(A){
        alert(A)
    }
}
function callPageScript(){
    pos=newdiv.lastIndexOf("<script".toLowerCase());
    newdiv=newdiv.substring(pos,newdiv.length);
    a=newdiv.indexOf(">");
    b=newdiv.lastIndexOf("<\/script>".toLowerCase());
    script="";
    if(a&&b){
        var script="";
        for(var i=a+1;i<b-1;i++){
            script=script+newdiv.substring(i,i+1)
        }
        eval(script)
    }
}
function loadExternalJavascript(C){
    var A=document.getElementsByTagName("body").item(0);
    var B=document.createElement("script");
    B.src=C;
    B.type="text/javascript";
    A.appendChild(B)
}
function findAndLoadScript(oldScripts){
    if(oldScripts==null){
        oldScripts=[]
    }
    var newScripts=document.getElementsByTagName("script");
    if(newScripts==null){
        newScripts=[]
    }
    var loadedScript=[];
    for(var i=0;i<newScripts.length;i++){
        var currscript=newScripts[i];
        var existJS=false;
        for(var j=0;j<oldScripts.length;j++){
            if(currscript.src){
                if(oldScripts[j].src==currscript.src){
                    existJS=true;
                    break
                }
            }
            else{
                if(oldScripts[j].innerHTML==currscript.innerHTML){
                    existJS=true;
                    break
                }
            }
        }
        if(!existJS){
            loadedScript[loadedScript.length]=newScripts[i]
        }
    }
    var newArray=new Array();
    newArray=uniqueArray(loadedScript);
    for(var i=0;i<newArray.length;i++){
        var unloadedscript=newArray[i];
        if(unloadedscript.src){
            loadExternalJavascript(unloadedscript.src)
        }
        else{
            var contentScript=unloadedscript.innerHTML;
	    if (contentScript){
	        if (contentScript != ''){
            	    eval(contentScript.replace('<!--', '').replace('//-->', ''))
            	    //eval(contentScript)
	        }
	    }
        }
    }
}
function uniqueArray(C){
    for(var B=0;B<C.length;B++){
        for(var A=B+1;A<C.length;A++){
            if(C[B]!=""){
                if(C[B].src==C[A].src){
                    C[A]=""
                }
                else{
                    if(C[B].innerHTML&&C[A].innerHTML){
                        if(C[B].innerHTML==C[A].innerHTML){
                            C[A]=""
                        }
                    }
                }
            }
        }
    }
    return C
}
function getScripts(){
    var A=document.getElementsByTagName("script");
    var C=[A.length];
    for(var B=0;B<A.length;B++){
        C[B]=A[B]
    }
    return C
}
function invokeServer(){
    if(!arguments[0]){
        return 
    }
    if(!arguments[1]){
        return 
    }
    var A=new ajaxObject();
    A.url(arguments[0]);
    A.callbackHandler(arguments[1]);
    A.execute()
}
function showProgressSearch(){
    var B=document.getElementById("overlay");
    var A=document.getElementById("progressBar");
    if(B&&A){
        B.style.visibility="visible";
        B.style.display="block";
        A.style.visibility="visible";
        A.style.display="block"
    }
}
var objArr;
function showProgressSearch(){
    var B=document.getElementById("overlay");
    var A=document.getElementById("progressBar");
    var obj = document.getElementsByTagName("SELECT");
    objArr = new Array();
    for (var i = 0 ; i<obj.length; i++){
        if ( !obj[i].disabled ){
            objArr[objArr.length++] = obj[i].id;
            //obj[i].disabled = true;
        }
    }
    if(B&&A){
        B.style.visibility="visible";
        B.style.display="block";
        A.style.visibility="visible";
        A.style.display="block"
    }
    //timeoutId=window.setTimeout(hideProgressSearch,60000)
}
function hideProgressSearch(C){
    //window.clearTimeout(showProgressSearch.timeoutId);
    //showProgressSearch.timeoutId=null;
    var B=document.getElementById("overlay");
    var A=document.getElementById("progressBar");
    if(B&&A){
        B.style.visibility="hidden";
        B.style.display="none";
        A.style.visibility="hidden";
        A.style.display="none"
    }
    for (var i = 0 ; i < objArr.length ; i++){
        if(document.getElementById(objArr[i])){ 
            //document.getElementById(objArr[i]).disabled=false;
            //alert(objArr[i]);
        }
    }
}
function showObject(A){
    var B=document.getElementById(A);
    if(B){
        B.style.visibility="visible";
        B.style.display="block"
    }
}
function hideObject(A){
    var B=document.getElementById(A);
    if(B){
        B.style.visibility="hidden";
        B.style.display="none"
    }
}
;
