﻿function ajax_createXMLHttpRequest()
{
    var _request = null;
    if (window.XMLHttpRequest)
    {
        _request = new XMLHttpRequest();
    } 
    else if (window.ActiveXObject)
    {
        try
        {
            _request = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                _request = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e)
            {
            }
        }
    }

    if (_request == null)
    {
        ScoAlert("Create XMLHttp Object Failed!");
    }
    return _request;
}

/******************************************************/
/* ajax POST数据
/* url:地址
/* isxml: 返回值是否xml格式
/* fun: 正确返回时的处理函数
/* errFun: 错误返回时的处理函数，有一个status参数
/* strParam: Post的数据
/* isAsync: 是否异步
/* timeout: 超时时间
/******************************************************/
function ajax_Post(url, fun, errFun, isxml, isAsync, strParam, timeout)
{
    var _request = ajax_createXMLHttpRequest();
    if (null == _request)
    {
        return;
    }
    _request.open('POST', url, isAsync);
    _request.onreadystatechange = function()
    {
        if (_request.readyState == 4)
        {
            if (_request.status == 200)
            {
                var obj = isxml == true ? _request.responseXML : _request.responseText;
                ajax_execFun(fun, obj);
            }
            else
            {
                var status = _request.status;
                var obj = _request.responseText;
                ajax_execErrFun(errFun, status, obj);
            }
            fun = null;
            errFun = null;
            _request = null;
        }
    }
    if (strParam != null)
    {
        _request.setRequestHeader("Content-Length", strParam.length);
    }
    _request.setRequestHeader("cache-control", "no-cache");
    _request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

    if (!isNull(timeout) && (timeout > 0))
    {
        if (isNull(ajax_Post.AbortRequest))
        {
            ajax_Post.AbortRequest = function()
            {
                if (!isNull(_request) && (_request.readyState > 0) && (_request.readyState < 4))
                {
                    _request.abort();
                    var status = -1;
                    var obj = "";
                    ajax_execErrFun(errFun, status, obj);
                }
                fun = null;
                errFun = null;                
                _request = null;
            }
        }
        setTimeout(ajax_Post.AbortRequest, timeout * 1000);
    }
    _request.send(strParam);
}


/******************************************************/
/* ajax GET数据
/* url:地址
/* isxml: 返回值是否xml格式
/* fun: 正确返回时的处理函数
/* errFun: 错误返回时的处理函数，有一个status参数
/* isAsync: 是否异步
/* timeout: 超时时间
/******************************************************/
function ajax_Get(url, fun, errFun, isxml, isAsync, timeout)
{
    var _request = ajax_createXMLHttpRequest();
    if (null == _request)
    {
        return;
    }

    _request.onreadystatechange = function()
    {
        if (_request.readyState == 4)
        {
            if (_request.status == 200)
            {
                var obj = isxml == true ? _request.responseXML : _request.responseText;
                ajax_execFun(fun, obj);
                obj = null;
            }
            else
            {
                var status = _request.status;
                var obj = _request.responseText;
                ajax_execErrFun(errFun, status, obj);
                obj = null;
            }
            fun = null;
            errFun = null;
            _request = null;
        }
    }
    _request.open('GET', url, isAsync);


    if (!isNull(timeout) && (timeout > 0))
    {
        if (isNull(ajax_Get.AbortRequest))
        {
            ajax_Get.AbortRequest = function()
            {
                if (!isNull(_request) && (_request.readyState > 0) && (_request.readyState < 4))
                {
                    _request.abort();
                    var status = -1;
                    var obj = "";
                    ajax_execErrFun(errFun, status, obj);
                }
                fun = null;
                errFun = null;
                _request = null;
            }
        }
        setTimeout(ajax_Get.AbortRequest, timeout * 1000);
    }
    _request.send(null);
}

/******************************************************/
/* ajax POST数据（使用同一处理函数处理返回值）
/* url:地址
/* isxml: 返回值是否xml格式
/* fun: 正确返回时的处理函数
/* strParam: Post的数据
/* isAsync: 是否异步
/******************************************************/
function ajax_Post_EscapeError(url, fun, isxml, isAsync, strParam)
{
    var _request = ajax_createXMLHttpRequest();
    if (null == _request)
    {
        return;
    }

    _request.onreadystatechange = function()
    {
        if (_request.readyState == 4)
        {
            var obj = ((isxml == true) && (_request.status == 200)) ? _request.responseXML : _request.responseText;
            ajax_execFun(fun, obj);
            obj = null;
            fun = null;
            _request = null;
        }
    }
    _request.open('POST', url, isAsync);
    if (strParam != null)
    {
        _request.setRequestHeader("Content-Length", strParam.length);
    }
    _request.setrequestheader("cache-control", "no-cache");
    _request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

    _request.send(strParam);
}

function ajax_execFun(fun, obj)
{
    if (null == fun)
    {
        return;
    }

    var cst = fun.constructor;
    if (cst == String)
    {
        eval(fun);
    }
    else if (cst == Array && fun.length > 1)
    {
        var funOwner = fun[0];
        var innerFun = fun[1];
        fun.splice(0, 2, obj);
        innerFun.apply(funOwner, fun);
    }
    else if (cst == Function)
    {
        fun.apply(fun, [obj]);
    }
}

function ajax_execErrFun(fun, status, obj)
{
    if (null == fun)
    {
        return;
    }

    var cst = fun.constructor;
    if (cst == String)
    {
        eval(fun);
    }
    else if (cst == Array && fun.length > 1)
    {
        var funOwner = fun[0];
        var innerFun = fun[1];
        fun.splice(0, 2, status, obj);
        innerFun.apply(funOwner, fun);
    }
    else if (cst == Function)
    {
        fun.apply(fun, [status, obj]);
    }
}

function getRequestBody(oForm)
{
    var aParams = new Array();
    for (var i = 0; i < oForm.elements.length; i++)
    {
        var sParam = encodeURIComponent(oForm.elements[i].name);
        sParam += "=";
        sParam += encodeURIComponent(oForm.elements[i].value);
        aParams.push(sParam);
    }
    return aParams.join("&");
}


function getSpecificNodeValue(doc, tagname, index)
{
    try
    {
        var oNodes = doc.getElementsByTagName(tagname);
        if (oNodes[index] != null && oNodes[index] != undefined)
        {
            if (oNodes[index].childNodes.length > 1)
            {
                return oNodes[index].childNodes[1].nodeValue;
            } else
            {
                return oNodes[index].firstChild.nodeValue;
            }
        }
    }
    catch (e) { }
    return '';
}

function getSingleNodeValue(doc, tagname)
{
    return getSpecificNodeValue(doc, tagname, 0);
}

