// ajaxClass -- XMLHttp Object Pool and XMLHttp chunnel Pool
// == written by Apple <zysp322@gmail.com> ===
// == update Sun Aug 27 2006 ( add extra )
// == Copyright (C) 2006 Apple Blog - http://www.applelife.cn ==


var Request = new function(){

this.pool = new Array();

this.getXMLHttp = function (chunnel)
{
	
   if(chunnel != null)
   {
      for (var a = 0; a < this.pool.length; a++)
      {
         if(this.pool[a]["chunnel"] == chunnel)
         {
	        if(this.pool[a]["obj"].readyState == 0 || this.pool[a]["obj"].readyState == 4)
            {
               return this.pool[a]["obj"];
            }
	        else 
	        {
               return "busy";
	        }
         }
      }
  
      this.pool[this.pool.length] = new Array();
      this.pool[this.pool.length - 1]["obj"] = this.createXMLHttp();
      this.pool[this.pool.length - 1]["chunnel"] = chunnel;
      return this.pool[this.pool.length - 1]["obj"];
   }
	
   for (var i = 0; i < this.pool.length; i++)
   {
      if(this.pool[i]["obj"].readyState == 0 || this.pool[i]["obj"].readyState == 4)
      {
         return this.pool[i]["obj"];
      }
   }
 
   this.pool[this.pool.length] = new Array();
   this.pool[this.pool.length - 1]["obj"] = this.createXMLHttp();
   this.pool[this.pool.length - 1]["chunnel"] = "";
   return this.pool[this.pool.length - 1]["obj"];

}


this.createXMLHttp = function ()
{
 
   if(window.XMLHttpRequest)
   {
      var xmlObj = new XMLHttpRequest();
   } 
   else 
   {
      var MSXML = ['Microsoft.XMLHTTP', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
      for(var n = 0; n < MSXML.length; n++)
      {
         try
         {
            var xmlObj = new ActiveXObject(MSXML[n]);        
            break;
         }
         catch(e)
         {
         }
      }
   } 
 
   return xmlObj;

}


this.reSend = function (url,data,callback,extra,chunnel)
{
   var objXMLHttp = this.getXMLHttp(chunnel) ;
 
   if(typeof(objXMLHttp) != "object")
   {
      return false ;
   }

   if(data == "")
   {
      objXMLHttp.open('GET' , url, true);
	  objXMLHttp.setRequestHeader("If-Modified-Since", 0); // no cache
      objXMLHttp.send('');
   }
   else 
   { 
      objXMLHttp.open('POST' , url, true);
	  objXMLHttp.setRequestHeader("If-Modified-Since", 0); // no cache
      objXMLHttp.setRequestHeader("Content-Length",data.length); 
      objXMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
      objXMLHttp.send(data);
   }
 
   if(typeof(callback) == "function" )
   {
      objXMLHttp.onreadystatechange = function ()
      {
         if(objXMLHttp.readyState == 4)
         {
            if(objXMLHttp.status == 200 || objXMLHttp.status == 304)
            {
               if(extra != null)
			   {
			      callback(objXMLHttp,extra) ;
			   }
			   else
			   {
			      callback(objXMLHttp) ;
			   }
            }
//            else
//          {
//             alert("Error loading page\n" + objXMLHttp.status + ":" + objXMLHttp.statusText);
//          }
         }
      }
   }

}

}

