//*******xmlhttp对象连接池*********
//Copyright 2006, G5 Studio www.g58.net

var __XmlHttpPool__ = 
{ 
    m_MaxPoolLength : 10, 
    m_XmlHttpPool : [], 
     
    __requestObject : function() 
    { 
        var xmlhttp = null; 
        var pool = this.m_XmlHttpPool; 
        for ( var i=0 ; i < pool.length ; ++i ) 
        { 
            if ( pool[i].readyState == 4 || pool[i].readyState == 0 ) 
            { 
                xmlhttp = pool[i]; 
                break; 
            } 
        } 
        if ( xmlhttp == null ) 
        { 
            return this.__extendPool(); 
        } 
        return xmlhttp; 
    }, 
     
    __extendPool : function() 
    { 
        if ( this.m_XmlHttpPool.length < this.m_MaxPoolLength ) 
        { 
            var xmlhttp = null;
			if (window.ActiveXObject) 
			{
				try 
				{ 
					xmlhttp = new ActiveXObject('MSXML2.XMLHTTP'); 
				} 
				catch(e) 
				{ 
					try 
					{ 
						xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); 
					} 
					catch(e2) {} 
				} 
			}
			else if(window.XMLHttpRequest)
			{
				try{
					xmlhttp = new XMLHttpRequest();
				}catch(e){
				}
			}

            if ( xmlhttp ) 
            { 
                this.m_XmlHttpPool.push(xmlhttp); 
            } 
            return xmlhttp; 
        } 
    }, 
    
	/*
	callback - 返回结果后的回调函数
	waitproc - 等待处理的函数
	*/
    GetRemoteData : function(url, callback, waitproc, charset) 
    { 
        this.__receiveRemoteData(url, callback, waitproc, 'GET', null, charset); 
    }, 
     
    PostRemoteData : function(url, callback, waitproc, data, charset) 
    { 
        this.__receiveRemoteData(url, callback, waitproc, 'POST', data, charset); 
    }, 
    
    __receiveRemoteData : function(url, callback, waitproc, httpmethod, data, charset) 
    { 
        var xmlhttp = this.__requestObject(); 
        if ( !xmlhttp ) 
        { 
            return null; 
        } 
        xmlhttp.open(httpmethod, url, true);	//异步

		//xmlhttp.setRequestHeader("Cookie",document.cookie);
		xmlhttp.setRequestHeader("referer","http://"+location.host+"/");
		//Firefox修正乱码
		if(navigator.userAgent.toLowerCase().indexOf("msie")==-1 && charset=="gb2312"){
			xmlhttp.overrideMimeType("text/html;charset=gb2312");
		}

		if ( httpmethod == 'POST' )
		{
			xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
		}

        xmlhttp.onreadystatechange = function() 
        { 
            if ( xmlhttp.readyState == 4 || xmlhttp.readyState == 'complete' ) 
            {
				if(xmlhttp.status==200)
				{
					if(navigator.userAgent.toLowerCase().indexOf("msie")!=-1 && charset=="gb2312")
					{
						callback(xmlhttp.responseBody); //回调 目标为gb2312编码时需返回二进制，再修正乱码
					}
					else
					{
						callback(xmlhttp.responseText); //回调
					}
				}
            }
			else
			{
				waitproc();	//等待处理
			}
        }; 
        xmlhttp.send(data); 
    },
	GetRemoteDataEx : function(url)
	{
		return this.__receiveRemoteDataEx(url, 'GET', null);
	},

	PostRemoteDataEx : function(url, data)
	{
		return this.__receiveRemoteDataEx(url, 'POST', data);
	},

	__receiveRemoteDataEx : function(url, httpmethod, data)
	{
		var xmlhttp = this.__requestObject();
		if ( !xmlhttp )
		{
			return null;
		}
		xmlhttp.open(httpmethod, url, false);	//同步
		if ( httpmethod == 'POST' )
		{
			xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
		}
		xmlhttp.setRequestHeader("Referer","http://"+location.host+"/");
		try
		{
			xmlhttp.send(data);
		}
		catch(e)
		{
			__Debug__(e, data); 
		}

		if ( xmlhttp.status == 200 )
		{
			return xmlhttp.responseText;
		}
		return '';
	},
	CancelAll : function()  
	{  
		var extendPool = this.__extendPool;  
		this.__extendPool = function()  
		{  
			return null;  
		}  
		for ( var i=0 ; i < this.m_XmlHttpPool.length ; ++i )  
		{  
			this.m_XmlHttpPool[i].abort();  
		}  
		this.__extendPool = extendPool;  
	}
}; 
///
