﻿var Ajaxs=new Array();
var AjaxStacks=new Array(0,0,0,0,0,0,0,0,0,0);
var attackevasive=0;
function Ajax(recvType,waitId)
{
    for (var stackId=0;stackId<AjaxStacks.length&&AjaxStacks[stackId]!=0;stackId++);
    AjaxStacks[stackId]=1;
    var aj=new Object();
    aj.loading='Loading...';
    aj.recvType=recvType?recvType:'XML';
    aj.waitId=waitId?$(waitId):null;
    aj.resultHandle=null;
    aj.sendString='';
    aj.targetUrl='';
    aj.stackId=0;
    aj.stackId=stackId;
    //装载准备函数
	aj.setLoading=function(loading)
    {
        if(typeof loading!=='undefined'&&loading!==null)aj.loading=loading;
    }
	
	//接受类型HTML,XML
    aj.setRecvType=function(recvtype)
    {
        aj.recvType=recvtype;
    }
	
	//等待
    aj.setWaitId=function(waitid)
    {
        aj.waitId=typeof waitid=='object'?waitid:$(waitid);
    }
	
	//创建请求
    aj.createXMLHttpRequest=function()
    {
        var request=false;
        if(window.XMLHttpRequest)
        {
            request=new XMLHttpRequest();
            if(request.overrideMimeType)
            {
                request.overrideMimeType('text/xml');
            }
        }
        else if(window.ActiveXObject)
        {
            var versions=['Microsoft.XMLHTTP','MSXML.XMLHTTP','Microsoft.XMLHTTP','Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP'];
            for(var i=0;i<versions.length;i++)
            {
                try
                {
                    request=new ActiveXObject(versions[i]);
                    if(request)
                    {
                        return request;
                    }
                }
                catch(e)
                {
                }
            }
        }
        return request;
    }
	//调用创建请求初始化对象
    aj.XMLHttpRequest=aj.createXMLHttpRequest();
    
	//Loading函数
	aj.showLoading=function()
    {
        if(aj.waitId&&(aj.XMLHttpRequest.readyState!=4||aj.XMLHttpRequest.status!=200))
        {
            changedisplay(aj.waitId,'');
            aj.waitId.innerHTML='<span><img src="images/loading.gif"> '+aj.loading+'</span>';
        }
    }
	
	//ajax处理函数
    aj.processHandle=function()
    {
        if (aj.XMLHttpRequest.readyState == 4 && aj.XMLHttpRequest.status == 200)
        {
            for(k in Ajaxs)
            {
                if(Ajaxs[k]==aj.targetUrl)
                {
                    Ajaxs[k]=null;
                }
            }
            
			if(aj.waitId)changedisplay(aj.waitId,'none');

			if (aj.recvType == 'HTML' && aj.resultHandle)
            {                								
				aj.resultHandle(aj.XMLHttpRequest.responseText,aj);
            }
            else if (aj.recvType == 'XML' && aj.resultHandle)
            {
                aj.resultHandle(aj.XMLHttpRequest.responseXML.lastChild.firstChild.nodeValue,aj);
            }
            AjaxStacks[aj.stackId]=0;
        }
    }
	
	//get方法	
    aj.get=function(targetUrl,resultHandle)
    {
		setTimeout(function(){	aj.showLoading()},500);
		if(in_array(targetUrl,Ajaxs))
		{
			return false;
		}
		else
		{
			Ajaxs.push(targetUrl);
		}
		aj.targetUrl=targetUrl;
		aj.XMLHttpRequest.onreadystatechange=aj.processHandle;
		aj.resultHandle=resultHandle;
		var delay=attackevasive&1?(aj.stackId+1)*1001:100;
		if(window.XMLHttpRequest)
		{
			setTimeout(function(){	aj.XMLHttpRequest.open('GET',aj.targetUrl);	aj.XMLHttpRequest.send(null);}	,delay);
		}
		else
		{
			setTimeout(function(){	aj.XMLHttpRequest.open("GET",targetUrl,true);aj.XMLHttpRequest.send();},delay);
		}
	}

	//同步get方法	
	aj.syncGet = function(targetUrl) {
	    
	    if (in_array(targetUrl, Ajaxs)) {
	        return false;
	    }
	    else {
	        Ajaxs.push(targetUrl);
	    }
	    aj.targetUrl = targetUrl;
	    //aj.XMLHttpRequest.onreadystatechange = aj.processHandle;
	    //aj.resultHandle = resultHandle;

	    if (window.XMLHttpRequest) {
	        aj.XMLHttpRequest.open('GET', aj.targetUrl,false); 
	        aj.XMLHttpRequest.send(null);;
	    }
	    else {
	        aj.XMLHttpRequest.open("GET", targetUrl, false); 
	        aj.XMLHttpRequest.send();
	    }
	    var returnValue = "";
	    if (aj.XMLHttpRequest.readyState == 4) {
	        returnValue = aj.XMLHttpRequest.responseText;
        }
        return returnValue
    }
	
   aj.post=function(targetUrl,sendString,resultHandle) { 		
		setTimeout(function(){aj.showLoading()},500);				
		//alert("OK1");
		if(in_array(targetUrl,Ajaxs)){
		
			return false;
		} else {
			Ajaxs.push(targetUrl);
		}
		//alert("OK2");
		aj.targetUrl=targetUrl;
		aj.sendString=sendString;
		aj.XMLHttpRequest.onreadystatechange=aj.processHandle;
		aj.resultHandle=resultHandle;
		aj.XMLHttpRequest.open('POST',targetUrl);
		aj.XMLHttpRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		aj.XMLHttpRequest.send(aj.sendString);		
	}
	
	//返回ajax对象
	return aj;
}
//公用函数
function $(id)
{
	return document.getElementById(id);
}
function in_array(needle,haystack){
	if (typeof needle=='string'){
		for(var i in haystack){
			if(haystack[i]==needle){
				return true;
			}
		}
	}
    return false;
}
function changedisplay(obj,display)
{
    if(display=='auto')
    {
        obj.style.display=obj.style.display==''?'none':'';
    }
    else
    {
        obj.style.display=display;
    }
    return false;
}
