﻿/*
 * CreateBy Hishop 丹青 20080609
 */

function CreateHttpRequest()
{
    var http_request = false; 
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
               
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }
 
        if (!http_request) {
            //alert('Giving up :( Cannot create an XMLHTTP instance');
            alert('无法连接到XmlHttp组件');
            return false;
        }
        return http_request;
}
function GetValue(_url,_callBackFunction)
{
        _httpRequest=CreateHttpRequest();
        _httpRequest.onreadystatechange = function() { OnreadyStateChange(_httpRequest,_callBackFunction); };
        _httpRequest.open('get', _url, true);
        _httpRequest.setRequestHeader("If-Modified-Since","0");
        _httpRequest.send(null);
}
function OnreadyStateChange(_httpRequest,_callBackFunction)
{
        if (_httpRequest.readyState == 4) 
        {
            if (_httpRequest.status == 200) 
            {
                var _backText=_httpRequest.responseText;
                
                
                //如果返回的有JS，就先执行JS
                var theJs=GetJavaScript(_backText);
                if (theJs!="")
                    eval(theJs);
                   
                var Html=_backText.replace(theJs,"");//获取不包含脚本的其他内容
                
                //调用这个函数
                _callBackFunction(Html);
            }            
        }
}

var _HttpRequestArray;
function TheHttpRequest(_url,_callBackFunction,_parameter1,_parameter2,_parameter3,_parameter4,_parameter5,_parameter6,_parameter7,_parameter8,_parameter9,_bAsync,_isunshift)
{
	this.Url=_url;
	this.CallBackFunction=_callBackFunction;
	this.Parameter1=_parameter1;
	this.Parameter2=_parameter2;
	this.Parameter3=_parameter3;
	this.Parameter4=_parameter4;
	this.Parameter5=_parameter5;
	this.Parameter6=_parameter6;
	this.Parameter7=_parameter7;
	this.Parameter8=_parameter8;
	this.Parameter9 = _parameter9;
	if (_bAsync!=null)
		this.Async=_bAsync;
	else
	    this.Async = true;

	if (_isunshift != null)
	    this.IsUnshift = _isunshift;
	else
	    this.IsUnshift = false;
}

//这个方法允许给要返回的方法传递9个参数
var AjaxIsRuning;
function GetValue2(_url,_callBackFunction,_parameter1,_parameter2,_parameter3,_parameter4,_parameter5,_parameter6,_parameter7,_parameter8,_parameter9,_bAsync,_isunshift)
{	
	if (_HttpRequestArray==null)
		_HttpRequestArray=new Array();
		
		if (_isunshift==null || _isunshift ==false){
		    _HttpRequestArray.push(new TheHttpRequest(_url, _callBackFunction, _parameter1, _parameter2, _parameter3, _parameter4, _parameter5, _parameter6, _parameter7, _parameter8, _parameter9, _bAsync));

}
		else{

		    _HttpRequestArray.unshift(new TheHttpRequest(_url, _callBackFunction, _parameter1, _parameter2, _parameter3, _parameter4, _parameter5, _parameter6, _parameter7, _parameter8, _parameter9, _bAsync));
}
	    
	
	if (_HttpRequestArray.length==1 && (AjaxIsRuning ==null || AjaxIsRuning == false))
	{
	    //如果只有一个且现在没有ajax在执行中就立即执行，否则就等待执行。
		GetValue3(_HttpRequestArray[0],0);
	}
	
	
	/*
        _httpRequest=CreateHttpRequest();
        _httpRequest.onreadystatechange = function() { OnreadyStateChange2(_httpRequest,_callBackFunction,_parameter1,_parameter2,_parameter3,_parameter4,_parameter5,_parameter6,_parameter7,_parameter8,_parameter9); };
        _httpRequest.open('get', _url, true);
        _httpRequest.setRequestHeader("If-Modified-Since","0");//可以清除缓存
        _httpRequest.send(null);
		*/
}

var AjaxBaseSentTimeOut;

function GetValue3(_theHttpRequest, _index) {

    AjaxIsRuning = true;
	    _httpRequest=CreateHttpRequest();
        _httpRequest.onreadystatechange = function() { OnreadyStateChange2(_httpRequest,_theHttpRequest.CallBackFunction,_theHttpRequest.Parameter1,_theHttpRequest.Parameter2,_theHttpRequest.Parameter3,_theHttpRequest.Parameter4,_theHttpRequest.Parameter5,_theHttpRequest.Parameter6,_theHttpRequest.Parameter7,_theHttpRequest.Parameter8,_theHttpRequest.Parameter9,_index); };
		var _vc=getck("HishopAjaxSecurityVerifyCode");

		if (_vc && _vc!='')
		{
			if (_theHttpRequest.Url.indexOf("?")>-1)
				_theHttpRequest.Url+="&VC="+_vc;
			else
				_theHttpRequest.Url+="?VC="+_vc;
		}
		
        _httpRequest.open('get', _theHttpRequest.Url, _theHttpRequest.Async);
        _httpRequest.setRequestHeader("If-Modified-Since","0");//可以清除缓存
        _httpRequest.send(null);
		AjaxBaseSentTimeOut=window.setTimeout(
		function()
		{
			 var _ajaxLoad=document.getElementById("HishopAjaxLoader2");
			 if (_ajaxLoad)
			 {
			
			 	_ajaxLoad.style.display = "block";
				var _top="1px";
				var _left="1px";			
				if (_hishopMousePos) {
					if (_hishopMousePos.y != null) 
						_top = _hishopMousePos.y + "px";
											
					if (_hishopMousePos.x != null) 
						_left = (_hishopMousePos.x + 15) + "px";
				}
				_ajaxLoad.style.top=_top;
				_ajaxLoad.style.left=_left;
			 }
			},500);//500毫秒后显示Loading动画
		
		
}

var readyStateChangeSystemErrorIsAlert=false;
function OnreadyStateChange2(_httpRequest, _callBackFunction, _parameter1, _parameter2, _parameter3, _parameter4, _parameter5, _parameter6, _parameter7, _parameter8, _parameter9, _index) {

    if (_httpRequest.readyState == 4) {

        //不管成功失败都继续执行
        //把_HttpRequestArray的此索引对象删除
        //删除对象要在调用_callBack之前删除，主要是因为　unshift的使用
        if (_index != null) {
            _HttpRequestArray[_index] = null;
            _HttpRequestArray.splice(_index, 1);

        }

        if (_httpRequest.status == 200) {
            var _backText = _httpRequest.responseText;
            var Html = _backText;

            if (_backText.length > 12 && _backText.substr(0, 12) == "SYSTEMERROR:" && !readyStateChangeSystemErrorIsAlert) {
                //alert(_backText.replace("SYSTEMERROR:", ""));
                //不再提示了 080701
                readyStateChangeSystemErrorIsAlert = true;
            }


            /*
            //如果返回的有JS，就先执行JS
            var theJs=GetJavaScript(_backText);
            if (theJs != "") {					
            eval(theJs);
            }
                   
            var Html=_backText.replace(theJs,"").replace("<script type=\"text/javascript\"></script>","");;//获取不包含脚本的其他内容
            */




            //调用这个函数
            if (_parameter1 == null) {
                _callBackFunction(Html);
            }
            else if (_parameter2 == null)
            { _callBackFunction(Html, _parameter1); }
            else if (_parameter3 == null)
            { _callBackFunction(Html, _parameter1, _parameter2); }
            else if (_parameter4 == null)
            { _callBackFunction(Html, _parameter1, _parameter2, _parameter3); }
            else if (_parameter5 == null)
            { _callBackFunction(Html, _parameter1, _parameter2, _parameter3, _parameter4); }
            else if (_parameter6 == null)
            { _callBackFunction(Html, _parameter1, _parameter2, _parameter3, _parameter4, _parameter5); }
            else if (_parameter7 == null)
            { _callBackFunction(Html, _parameter1, _parameter2, _parameter3, _parameter4, _parameter5, _parameter6); }
            else if (_parameter8 == null)
            { _callBackFunction(Html, _parameter1, _parameter2, _parameter3, _parameter4, _parameter5, _parameter6, _parameter7); }
            else if (_parameter9 == null)
            { _callBackFunction(Html, _parameter1, _parameter2, _parameter3, _parameter4, _parameter5, _parameter6, _parameter7, _parameter8); }
            else
            { _callBackFunction(Html, _parameter1, _parameter2, _parameter3, _parameter4, _parameter5, _parameter6, _parameter7, _parameter8, _parameter9); }


        }
        //关闭Loading动画
        if (AjaxBaseSentTimeOut)
            window.clearTimeout(AjaxBaseSentTimeOut);
        document.getElementById("HishopAjaxLoader2").style.display = "none";


        //如果还有其他的，那么就继续执行。
        if (_HttpRequestArray.length > 0) {
            GetValue3(_HttpRequestArray[0], 0);
        }
        else {
            AjaxIsRuning = false;
        }


    }
}

