﻿//ajax simple framework
//author:zhouhai
//18795736@qq.com
//create:2008.03
//update:2009.06
var zhAjax =
{
    //小子好黑2008-12-11 21:40
    simple: function(_methodName, _callbackMethod, _arrayArgument) {
        zhAjax.isTimeout = false;
        zhAjax.msgBox(zhAjax.ajaxStateText.wait, zhAjax.msgMode.display, zhAjax.msgType.wrong);
        zhAjax.zhAjax_Main(_methodName, _arrayArgument, _callbackMethod, null);
    },

    //小子好黑 2009.01.14 17:45
    //功能:Ajax执行
    //参数:
    //_remoteMethodName:后台静态方法名
    //_remoteArrayArgument:后台静态方法参数(array数组形式)
    //_localCallBackMethod:前台回调方法(object)
    //_localCallBackArrayArgument:前台回调方法参数(array数形式)
    full: function(_remoteMethodName, _remoteArrayArgument, _localCallBackMethod, _localCallBackArrayArgument) {
        zhAjax.isTimeout = false;
        zhAjax.msgBox(zhAjax.ajaxStateText.wait, zhAjax.msgMode.display, zhAjax.msgType.wrong);
        zhAjax.zhAjax_Main(_remoteMethodName, _remoteArrayArgument, _localCallBackMethod, _localCallBackArrayArgument);
    },
    checkbox: function(_checkboxName, _checkboxIdOrValue, _remoteMethodName, _remoteArrayArgument, _localCallBackMethod, _localCallBackArrayArgument) {
        var checkboxList = document.getElementsByName(_checkboxName);
        if (checkboxList == null) {
            var msg = ("没找到" + _checkboxName + "标签!");
            zhAjax.msgBox(msg, zhAjax.msgMode.display, zhAjax.msgType.wrong);
            return;
        }
        var checkedCount = 0;
        var selectIdOrValueList = "";
        for (var i = 0; i < checkboxList.length; i++) {
            var currentObj = checkboxList.item(i);
            if (currentObj.checked) {
                checkedCount++;
                var split = ",";
                if (checkedCount == 1) {
                    split = "";
                }
                switch (_checkboxIdOrValue) {
                    case (zhAjax.checkboxIdOrValue.id):
                        selectIdOrValueList += split + currentObj.id;
                        break;
                    case (zhAjax.checkboxIdOrValue.value):
                        selectIdOrValueList += split + currentObj.value;
                        break;
                }
            }
            zhAjax.msgBox(selectIdOrValueList, zhAjax.msgMode.display, zhAjax.msgType.wrong);
        }
        if (checkedCount == 0) {
            zhAjax.msgBox("未选中任何项", zhAjax.msgMode.display, zhAjax.msgType.wrong);
            return;
        }
        if (selectIdOrValueList == "-860720") {
            zhAjax.msgBox("程序错误：checkbox未设置ID，未设置VALUE", zhAjax.msgMode.display, zhAjax.msgType.wrong);
            return;
        }
        zhAjax.isTimeout = false;
        var remoteParm = new Array();
        remoteParm.push(selectIdOrValueList);
        if (_remoteArrayArgument != null) {
            for (var xx = 0; xx < _remoteArrayArgument.length; xx++) {
                remoteParm.push(_remoteArrayArgument[xx]);
            }
        }

        zhAjax.full(_remoteMethodName, remoteParm, _localCallBackMethod, _localCallBackArrayArgument);
    },

    zhCreateXMLHttpRequest: function() {
        var request = false;
        if (window.XMLHttpRequest) {
            request = new XMLHttpRequest();
            if (request.overrideMimeType) {
                request.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) {
            try {
                request = new ActiveXObject("Msxml2.XMLHTTP");
                //request.validateOnParse = false;
            } catch (e) {
                try {
                    request = new ActiveXObject("Microsoft.XMLHTTP");
                    //request.validateOnParse = false;
                } catch (e) { return false; }
            }
        }
        if (!request) {
            alert('Create XMLHTTP Object false.');
            return false;
        }
        return request;
    },
    currentFinishCount: 0,
    zhRequest: function(url, body, callbackMethod, callbackMethodArguments) {
        if (body == null) body = "";
        if (callbackMethod == null) callbackMethod = "";
        var xmlHttp = zhAjax.zhCreateXMLHttpRequest();
        xmlHttp.open('POST', url, true);
        xmlHttp.setRequestHeader("Content-Length", body.length);
        xmlHttp.setRequestHeader("If-Modified-Since", "0");
        xmlHttp.setRequestHeader("Cache-Control", "no-cache");
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //application/x-www-form-urlencoded
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4) {
                if (xmlHttp.status == 200) {
                    zhAjax.currentFinishCount++;
                    zhAjax.msgBox(zhAjax.ajaxStateText.succeed, zhAjax.msgMode.display, zhAjax.msgType.right);
                    if (callbackMethod != null && callbackMethod.length > 0) {
                        var backData = null;
                        if (xmlHttp.responseText.length > 0) {
                            var responseText = xmlHttp.responseText;
                            responseText = responseText.replace(new RegExp("\"", "gm"), "'");
                            responseText = responseText.replace(new RegExp("“", "gm"), "");
                            responseText = responseText.replace(new RegExp("”", "gm"), "");
                            responseText = responseText.replace(new RegExp("''", "gm"), "");
                            responseText = responseText.replace(new RegExp("###", "gm"), "");
                            responseText = responseText.replace(/(\n)|(\r)/g, "");
                            if (responseText.indexOf("异常信息") != 0) {
                                if (responseText.indexOf("[") == 0 || responseText.indexOf("{") == 0) {
                                    backData = "company=" + responseText + ";";
                                }
                                else {
                                    backData = "company=\"" + responseText + "\";";
                                }
                            }
                            else {
                                //modify by zhouhai 2009-3-16
                                backData = "company=\"" + responseText + "\";";
                            }
                        }
                        else {
                            backData = "company=null";
                        }
                        var obj = eval(backData);
                        if (callbackMethodArguments != null && callbackMethodArguments.length > 0) {
                            callbackMethod(obj, callbackMethodArguments);
                        }
                        else {
                            callbackMethod(obj);
                        }
                    }
                }
            }
        }
        xmlHttp.send(body);
    },
    URLEncode: function(_text) {
        return escape(_text).replace(/\+/g, '%2B').replace(/\""/g, '%22').replace(/\'/g, '%27').replace(/\//g, '%2F');
    },
    zhAjax_Main: function() {
        var body = "";
        if (arguments[1] != null) {
            var argus = arguments[1];

            for (var i = 0; i < argus.length; i++) {
                var escapeValue = escape(escape(zhAjax.URLEncode(argus[i])));
                if (i == 0) {
                    body = "text" + i + "=" + escapeValue;
                }
                else {
                    body += "&text" + i + "=" + escapeValue;
                }
            }
        }
        var url = zhAjax.zhUrl + "?ISAJAXREQUEST=1&AJAXREQUESTFUNNAME=" + arguments[0] + "&randnum=" + Math.random();
        zhAjax.zhRequest(url, body, arguments[2], arguments[3]);    //body: "text1=1&text2=2"
    },
    stateID: "",
    zhUrl: "/Ajax/Ajax.aspx",
    m_loadImage: "/script/zhajax/images/loadingAnimation.gif",
    msgBox: function(msg, _msgMode, _msgType) {
        switch (_msgMode) {
            case (zhAjax.msgMode.alert):
                alert(msg);
                break;
            case (zhAjax.msgMode.display):
                zhAjax.SetText(msg, _msgType);
                break;
        }
    },
    msgMode: { alert: "alert", display: "display" },
    msgType: { right: "right", wrong: "wrong" },
    msgBackgroundColor: { right: "#68AF02", wrong: "#EF8F00" },
    ajaxStateText: { wait: "操作中……", succeed: "操作成功" },
    checkboxIdOrValue: { id: "id", value: "value" },
    timeout: 1000,
    isTimeout: true,
    SetText: function(_text, _msgType) {
        var stateObj = document.getElementById(zhAjax.stateID);
        if (stateObj == null) {
            return;
        }

        document.getElementById(zhAjax.stateID).style.fontSize = "12px";
        document.getElementById(zhAjax.stateID).style.width = "auto";
        document.getElementById(zhAjax.stateID).style.textAlign = "center";
        document.getElementById(zhAjax.stateID).style.lineHeight = "20px";
        document.getElementById(zhAjax.stateID).style.color = "white";
        document.getElementById(zhAjax.stateID).style.padding = "0 15px";
        var backgroundColor = "";
        if (_msgType == zhAjax.msgType.right) {
            backgroundColor = zhAjax.msgBackgroundColor.right;
        }
        else {
            backgroundColor = zhAjax.msgBackgroundColor.wrong;
        }
        document.getElementById(zhAjax.stateID).style.backgroundColor = backgroundColor;
        document.getElementById(zhAjax.stateID).style.display = "";
        document.getElementById(zhAjax.stateID).style.paddingTop = "3px";

        document.getElementById(zhAjax.stateID).innerHTML = _text;
        if (_text.length == 0) {
            document.getElementById(zhAjax.stateID).style.display = "none";
            return;
        }

        if (zhAjax.isTimeout) {
            setTimeout(function() {
                document.getElementById(zhAjax.stateID).style.display = "none";
            }, zhAjax.timeout);
        }
    }
}


