﻿// JScript 檔
var xmlhttp = getXmlHttp();
var xmlDom = getXmlDom();
var bProcess = false;
var oInterval = null;
var oServiceList = new Array();
var oPassObj = null;
var oWait = null;
function callAjaxService(cmd, params, key, oEvent, oParent, sUrl, sUrlParams, bUseXml, bSingleThread, bWait) {
    var oServiceObj = new Object();
    oServiceObj.Cmd = cmd;
    oServiceObj.Params = params;
    oServiceObj.Key = key;
    oServiceObj.EventHandler = oEvent;
    oServiceObj.DialogParent = oParent;
    oServiceObj.Url = sUrl;
    oServiceObj.UrlParams = sUrlParams;
    if (bUseXml == undefined) { bUseXml = true; }
    oServiceObj.UseXml = bUseXml;
    oServiceObj.Wait = bWait;
    oServiceList.push(oServiceObj);
    if (bSingleThread)
        runAjaxService();
    else
        if (!oInterval) { oInterval = window.setInterval("runAjaxService();", 100); }
}
function runAjaxService() {
    if (!bProcess && oServiceList.length > 0) {
        oPassObj = oServiceList[0];
        xmlhttp.open("POST", oPassObj.Url, true);
        xmlhttp.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded");
        xmlhttp.onreadystatechange = onAjaxReadyStateChange;
        if (oPassObj.Cmd == "")
            xmlhttp.send();
        else {
            var params = "ScriptCmd=" + oPassObj.Cmd + "&ScriptParams=" + encodeURIComponent(oPassObj.Params) + "&ScriptKey=" + oPassObj.Key;
            if (oPassObj.UrlParams != undefined)
                params += "&" + oPassObj.UrlParams;
            xmlhttp.setRequestHeader("Content-Length", params.length);
            xmlhttp.send(params);
        }
        bProcess = true;
        if (oPassObj.Wait) createWait();
        oServiceList.splice(0, 1);
    }
    if (oServiceList.length == 0 && oInterval) {
        window.clearInterval(oInterval);
        oInterval = null;
    }
}
function onAjaxReadyStateChange() {
    if (!xmlhttp) return;
    if (xmlhttp.readyState == 4) {
        try {
            if (oPassObj.EventHandler) {
                if (oPassObj.UseXml) {
                    xmlDom.async = false;
                    xmlDom.loadXML(xmlhttp.responseText);
                    if (!catchXmlError(xmlDom)) {
                        closeWait();
                        oPassObj.EventHandler(getXml(xmlDom));
                    }
                }
                else {
                    closeWait();
                    oPassObj.EventHandler(xmlhttp.responseText);
                }
            }
        }
        catch (e) {
            var msg = "";
            if (e.Message)
                msg = e.Message;
            else if (e.message)
                msg = e.message;
            alert("Error : " + msg);
        }
        finally {
            bProcess = false;
            closeWait();
            window.status = " ";
        }
    }
}
function stopAjaxService() {
    window.clearInterval(oInterval);
    oInterval = null;
    oServiceList = new Array();
}
function catchXmlError(xmlDoc) {
    return false;
    var errNode = xmlDoc.selectSingleNode("*/Error");
    var sessionNode = xmlDoc.selectSingleNode("*/NoSession");
    if (errNode) {
        alert(errNode.text);
        return true;
    }
    else if (sessionNode) {
        alert("Error : session lost");
        //document.location.href = "ErrorPage.aspx?type=session";
        return true;
    }
    else
        return false;
}
function createWait() {
    try {
        oWait = document.createElement("<TABLE border=0 cellspacing=2 cellpadding=2 style='position:absolute;zIndex:999;" +
		    "border:solid 1 gray;background-color:#FFFFE7;border-collapse:collapse;'>");
        document.body.appendChild(oWait);
        var oImgCell = oWait.insertRow().insertCell();
        var oImg = document.createElement("<IMG src='./images/wait.gif'>");
        oImgCell.appendChild(oImg);
        var oTextCell = oWait.insertRow().insertCell();
        oTextCell.runtimeStyle.textAlign = "center";
        var oText = document.createElement("DIV");
        //oText.innerHTML = "<font color='blue'>讀取中，請稍後。</font>"
        //oText.innerHTML = "<font color='blue'>讀取中，請稍後。<br>按「取消」可中止執行。</font>"
        oTextCell.appendChild(oText);
        /*
        var oAbortRow = oWait.insertRow();
        oAbortRow.id = "waitAbortRow";
        var oAbortCell = oAbortRow.insertCell();
        oAbortCell.runtimeStyle.textAlign = "center";
        var oAbort = document.createElement("<INPUT style='width:50px;' type='button' value='取消' onclick='abortService();'>");
        oAbortCell.appendChild(oAbort);
        */
        var waitTop = (document.body.offsetHeight - oWait.offsetHeight) / 2;
        var waitLeft = (document.body.offsetWidth - oWait.offsetWidth) / 2;
        oWait.style.posTop = document.body.scrollTop + waitTop - oWait.parentElement.offsetTop;
        oWait.style.posLeft = document.body.scrollLeft + waitLeft - oWait.parentElement.offsetLeft;
    }
    catch (e) {
    }
}
function closeWait() {
    finalizeObject(oWait);
}
function finalizeObject(obj) {
    if (obj) {
        if (obj.parentNode) obj.parentNode.removeChild(obj);
        obj = null;
    }
}