﻿function resp(pResp) {
    var xmlDoc = null;
    if (window.ActiveXObject) {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.loadXML(pResp);
    } else {
        var parser = new DOMParser();
        xmlDoc = parser.parseFromString(pResp, "text/xml");
    }
    if (xmlDoc == null) return;

    for (var i = 0; i < xmlDoc.childNodes[0].childNodes.length; i++) {
        var node = xmlDoc.childNodes[0].childNodes[i];
        var s="";
        if(node.text)
            s=node.text;
        else {
            for(j=0; j < node.childNodes.length; j++)
                s += node.childNodes[j].nodeValue;
        }
        
        var id = node.attributes[0].value;
        var div = document.getElementById(id);

        if (node.tagName == "con") {
            if (s.indexOf('<script>') == 0) {
                eval(s.replace('<script>', '').replace('</script>', ''));
            } else {
                if (div != null) div.innerHTML = s;
            }
        }
        else if (node.tagName == "val") {
            if (div != null) div.value = s;
        }
        else if (node.tagName == "js") {
            eval(s);
        }
    }
}

function callServer(pButton, pDiv, pJs) {
    var type=pButton.type;
    pButton=pButton.id;
    var pForm = document.forms[0];
    var qs = '';
    var temp;

    if (pButton != '') {
        if (type == "image") {
            qs = pButton.replace(/_/g, '$') + ".x=1&";
            qs += pButton.replace(/_/g, '$') + ".y=1";
        }
        else
            qs = pButton.replace(/_/g, '$') + "=1";
    }
    for (var i = 0; i < pForm.elements.length; i++) {
        if (pForm.elements[i].name != '' && pForm.elements[i].type != 'submit') {
            qs += (qs == '') ? '' : '&';
            temp = pForm.elements[i].name;
            if (temp == '__VIEWSTATE') temp = 'x__VIEWSTATE';
            qs += temp + '=' + encodeURIComponent(pForm.elements[i].value);
        }
    }

    var tg = "ajax.axd?action=" + escape(getAction(pForm));
    if (pJs) tg += "&js=" + escape(pJs);

    if (pDiv != null) {
        tg += "&id=" + pDiv;
        showWaitImage(pDiv);
    }

    if (!aj(resp, tg, qs)) return true;
    return false;
}

function getAction(form) {
    var action = form.action.toLowerCase();
    if (action.substr(0, 4) == "http") return action;
    if (action[0] == '/') return window.location.protocol + "//" + window.location.host + action;
    var loc = window.location.toString();
    return loc.substr(0, loc.lastIndexOf("/")) + "/" + action;
}

function showWaitImage(ids) {
    var id=ids.split(",");
    for (var i = 0; i < id.length; i++) {
        var div = document.getElementById(id[i]);
        if (div != null) {
            var height = div.offsetHeight;
            var width = div.offsetWidth;
            var left = findPosx(div);
            var top = findPosy(div);

            if (document.body.leftMargin && document.compatMode != "BackCompat") {
//                left += parseInt(document.body.leftMargin);
//                top += parseInt(document.body.topMargin);
            }

            if (typeof(waitTemplate)=="undefined")
                div.innerHTML = div.innerHTML + '<div style="top:' + top + 'px;left:' + left + 'px;height:' + height + 'px;width:' + width + 'px;position:absolute; z-index:110; filter:alpha(opacity=15); -moz-opacity: 0.15;background-color:black;"></div><img style="position:absolute;left:' + (left + width / 2 - 10) + 'px;top:' + (top + height / 2 - 10) + 'px;" src="loading5.gif" />';
            else
                div.innerHTML = div.innerHTML + waitTemplate.replace("{top}", top).replace("{left}", left).replace("{height}", height).replace("{width}", width).replace("{imgleft}", (left + width / 2 - 10)).replace("{imgtop}", (top + height / 2 - 10));
        }
    }
}

function aj(pCallback, pReceiver, pParams) {
    var req = newXMLHttpRequest();
    if (req == null) return false;
    var handlerFunction = getReadyStateHandler(req, pCallback);
    req.onreadystatechange = handlerFunction;
    req.open("POST", pReceiver, true);
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.send(pParams);
    return true;
}

function ajg(pCallback, pReceiver) {
    var req = newXMLHttpRequest();
    var handlerFunction = getReadyStateHandler(req, pCallback);
    req.onreadystatechange = handlerFunction;
    req.open("GET", pReceiver, true);
    req.send("");
}

function findPos(obj) {
    var top = obj.offsetTop;
    var left = obj.offsetLeft;
    while (obj.offsetParent != null) {
        obj=obj.offsetParent;
        top += obj.offsetTop;
        left += obj.offsetLeft;
    }
    return { x:left, y:top };
}

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 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;
}

/*
* Returns a new XMLHttpRequest object, or null if this browser
* doesn't support it
*/
function newXMLHttpRequest() {

    var xmlreq = null;

    if (window.XMLHttpRequest) {
        // Create XMLHttpRequest object in non-Microsoft browsers
        xmlreq = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        // Create XMLHttpRequest via MS ActiveX
        try {
            // Try to create XMLHttpRequest in later versions
            // of Internet Explorer
            xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e1) {
            // Failed to create required ActiveXObject
            try {
                // Try version supported by older versions
                // of Internet Explorer
                xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e2) {
                // Unable to create an XMLHttpRequest with ActiveX
            }
        }
    }

    return xmlreq;
}

/*
* Returns a function that waits for the specified XMLHttpRequest
* to complete, then passes its XML response
* to the given handler function.
* req - The XMLHttpRequest whose state is changing
* responseXmlHandler - Function to pass the XML response to
*/
function getReadyStateHandler(req, responseXmlHandler) {

    // Return an anonymous function that listens to the 
    // XMLHttpRequest instance
    return function() {
        // If the request's status is "complete"
        if (req.readyState == 4) {

            // Check that a successful server response was received
            if (req.status == 200) {

                // Pass the XML payload of the response to the 
                // handler function
                responseXmlHandler(req.responseText);

            } else {

                // An HTTP problem has occurred
                alert("HTTP error: " + req.status);
            }
        }
    }
}

