// JavaScript Document
var xmlhttp;



function CallService(strMethod, strParams) {
    //var xmlhttp;
   // if (xmlhttp == null) {
        xmlhttp = GetXmlHttpObject();
        //alert(strMethod);
   // }

    if (xmlhttp == null) {
        alert("Your browser does not support AJAX!");
        return;
    }

    //alert (strParams);
    //var url = 'AjaxService.aspx?m=' + strMethod + '&' + strParams;
    var url = LocateService(strMethod) + '&' + strParams;
    //   alert(url);
    xmlhttp.onreadystatechange = stateChanged;
    xmlhttp.open("GET", url, true);
    xmlhttp.send(null);
 //   alert(url);
}


function stateChanged() {
    if (this.readyState == 4) {

        try{
        strData = this.responseText;
        //this = null;
        //delete (this);
        //alert(strData);
        a = strData.split("</caller>");
        b = trim(a[0].split("<caller>")[1]); // response header
        d = b.split("|")[0]; // called method
        c = trim(a[1]); // returned data
        k = c.split("<trailer>")
        strDataBody = k[0];
        //alert(strDataBody);
        if (k.length > 1) {
            strTrailer = (k[1].split("</trailer>"))[0];
            //alert(strTrailer);
            if (strTrailer.substr(0, 5) == "ERROR") {
                window.open("error.aspx?errmsg=" + strTrailer, "_self");
                return;
            }
        }
        param_str = b.split("|")[1];
        for (i = 0; i < params.length; i++) {
            s = params[i].replace('=', "='");
            s += "'";
            eval(s); // evaluate parameters ie e='test'
        }
        called_method = d.toString();
        strCall = called_method + "(strDataBody)";
        if (eval("typeof(" + called_method + ")") != 'undefined') { // check if the callback function exist before calling it
            eval(strCall); // invoke the call back function
        }
        }
        catch (ex) {
            window.open("error.aspx?errmsg=" + ex, "_self");
            return;
        }
    }
}



//-------------------------------------------------------------------------------
function FillElement(strMethod, strParams) {
   // var xmlhttp;
   // if (xmlhttp == null) {
        xmlhttp = GetXmlHttpObject();
        //alert("newobj");
   // }
 
    if (xmlhttp == null) {
        alert("Your browser does not support AJAX!");
        return;
    }

    //alert (strParams);
    //var url = 'AjaxService.aspx?m=' + strMethod + '&' + strParams;
    var url =  LocateService(strMethod) + '&' + strParams;
//    alert(url);
    xmlhttp.onreadystatechange = FillElement_h;
    xmlhttp.open("GET", url, true);
    xmlhttp.send(null);
}


function FillElement_h() {
    if (this.readyState == 4) {
        strData = this.responseText;
        //alert (strData);
        a = strData.split("</caller>");
        b = trim(a[0].split("<caller>")[1]);
        d = b.split("|")[0];
        param_str = b.split("|")[1];
        c = trim(a[1]);
        k = c.split("<trailer>")
        strDataBody = k[0];
        //alert(strDataBody);
        if (k.size > 1) {
            strTrailer = (k[1].split("</trailer>"))[0];
          //  alert(strTrailer);
        }

//        alert(param_str);
        params = param_str.split("&");
        for (i = 0; i < params.length; i++) {
            s=params[i].replace('=', "='");
            s += "'";
            eval(s); // evaluate parameters ie e='test' 
        }
        if (typeof (e) != "undefined") 
        {
           // alert(c);
            if ( typeof(innertxt) != "undefined") {
                document.getElementById(e).innerTEXT = strDataBody;
            }
            else {
                document.getElementById(e).innerHTML = strDataBody;
            }

            if (document.getElementById(d + "_script") != null) {
                //alert("script found");
                LoadScript(d + "_script",e);
                
            }
        
        }
    }
}
//---------------------------------------------------------------


function LoadScript(script_id, parent_id) {
    //dhead = document.getElementsByTagName("HEAD").item(0);
    dhead = document.getElementById(e);
    d_src = document.createElement('script');
    d_src.setAttribute("type", "text/javascript");
    d_src.defer = true;
    d_src.text = document.getElementById(script_id).text;
    dhead.appendChild(d_src);
}
//--------------------------------------------------------------
function LocateService(strMethod) {
    var strURL;
    mth = strMethod.split(".");
    if (mth.length == 2) { 
        strURL = "services/" + mth[0] + ".aspx?m=" ;
        strURL = strURL +  mth[1] ;
    }
    else if(mth.length == 1)
    {
        strURL = "services/default_service.aspx?m=" + mth[0] ;
    }
    else
    {
        strURL = "services/error_service.aspx?m=error" ;
    }
    return strURL;
}





//============================ HELPER FUNCTIONS ======================================================
function GetXmlHttpObject() {
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        return new XMLHttpRequest();
    }
    if (window.ActiveXObject) {
        // code for IE6, IE5
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return null;
}
//--------------------------------------------------------------------------------



function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
//==============================================================================
function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
        return [curleft, curtop];
    }
}
//===========================================================================
function SafeCall(strFunc) {
    a = strFunc.split("(")[0];
    if ( eval("typeof (" +  a + ")") == 'function')
        eval(strFunc);
}
//===============================================================

function HttpRequestCall(strcom) {
    this.httpreq = GetXmlHttpObject();
    this.strcall = strcom;

    this.exec = function() {

    this.httpreq.onreadystatechange = this.callback;
    this.httpreq.open("GET", this.strcall, true);
    this.httpreq.send(null);
    }
    
    this.callback = function()
    {
        if (this.readyState == 4) {
            strData = this.responseText;
            //xmlhttp_1 = null;
            alert(strData);
            a = strData.split("</caller>");
            b = trim(a[0].split("<caller>")[1]); // response header
            d = b.split("|")[0]; // called method
            c = trim(a[1]); // returned data
            called_method = d.toString();
            strReply = called_method + "(c)";
            if (eval("typeof(" + called_method + ")") != 'undefined') { // check if the callback function exist before calling it
                eval(strReply); // invoke the call back function
            }

        }
    }
}

