/*
  BlueAjax 一个简单易用的ajax框架。在ie，firefox，opera上测试通过
  版本——1.1
  版权声明：您可以免费使用此框架，前提是您必须在代码中完整的保留本
  段声明。同时您可以在此框架基础之上做任何您觉得适用的修改，甚至声
  明您对自主修改部分的版权，但不得因为您的部分修改而声明您拥有此框
  架的版权。作者保留根据相关法律追究违背此声明者责任的权利。
  作者：廖彩彪 2007年12月 联系我：email  ——ublue2006@163.com——
*/
var BlueAjax=function()
{  
  var xmlhttp, bComplete = false;
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}
  if (!xmlhttp) return null;
  
  var Data="";
  var PROXY="proxy.aspx"; 
  this.URL="";
  this.Method="";  
  this.State="";
  this.ResponseText="";
  this.onFailure=null;
  this.onSuccess=null;
  this.onLoading=null;
  this.onComplete=null;
  this.onLoaded=null;
  
    
  this.ExistData=function(name)
  {
    if(!name)
    return "requirename";
    else
    {
      var DataExist=false;
      var DataArr=Data.split("&");
      var nameLength=name.length;
      for(var i=0;i<DataArr.length;i++)
      {      
        if(DataArr[i].substr(0,nameLength)==name)
        {        
        DataExist=true;
        break;
        }
      }          
      return DataExist;               
    }
  };
  
  this.AddData=function(name,value)
  {
    if(!name)
    return "requirename";
    else if(!value)
    return "requirevalue";
    else if(this.ExistData(name))
    return "existedname";
    else
    {
     if(Data=="")
     Data=name+"="+escape(value);
     else    
     Data=Data+"&"+name+"="+escape(value);
     return "success";
    }
  };
  
  this.RemoveData=function(name)
  {
    if(!name)
    return "requirename";
    else
    {
      var DataExist=false;
      var DataArr=Data.split("&");
      var nameLength=name.length;
      for(var i=0;i<DataArr.length;i++)
      {      
        if(DataArr[i].substr(0,nameLength)==name)
        {
        DataArr.splice(i,1);
        DataExist=true;
        break;
        }
      }
      if(DataExist==false)
      return "noname";
      else
      {
      Data=DataArr.join("&");
      return "success"; 
      }        
    }
  };
  
  this.ClearData=function()
  {
    Data="";
    return "success";
  };
  
  this.SetData=function(name,value)
  {
    if(!name)
    return "requirename";
    else if(!value)
    return "requirevalue";
    else
    {
      var DataExist=false;
      var DataArr=Data.split("&");
      var nameLength=name.length;
      for(var i=0;i<DataArr.length;i++)
      {      
        if(DataArr[i].substr(0,nameLength)==name)
        {
        var dateTemp=DataArr[i].split("=");
        DataArr[i]=dateTemp[0]+"="+escape(value);
        DataExist=true;
        break;
        }
      }
      if(DataExist==false)
      return "noname";
      else
      {
      Data=DataArr.join("&");
      return "success"; 
      }        
    }
  };
  
  this.getDataArrLength=function()
  {  
      var DataArr=Data.split("&");
      return DataArr.length;
  };  
  
  this.getDataArr=function()
  {   
      var DataArr=Data.split("&");
      var nameLength=name.length;
      for(var i=0;i<DataArr.length;i++)
      {      
       var dateTemp=DataArr[i].split("=");
       DataArr[i]=dateTemp[0]+"="+unescape(dateTemp[1]);
      }
      return DataArr;
  };
  
  this.getData=function(name)
  {   
    if(!name)
    return "requirename";
    else
    {
      var DataExist=false;
      var DataArr=Data.split("&");
      var tempData="";
      var nameLength=name.length;
      for(var i=0;i<DataArr.length;i++)
      {      
        if(DataArr[i].substr(0,nameLength)==name)
        {
        var dateTemp=DataArr[i].split("=");
        tempData=unescape(dateTemp[1]);
        DataExist=true;
        break;
        }
      }
      if(DataExist==false)
      return "noname";
      else
      return tempData;    
    }
  };
  
  this.getProxy=function()
  {
    return PROXY;
  };
  this.setProxy=function(newProxy)
  {
    if(!newProxy)
    return "requirenewProxy"
    else
    {
    PROXY=newProxy;
    return "success";
    }
  };
  
  this.Execute = function()
  {
    var self=this;      
    if (!xmlhttp) return false;
    bComplete = false;
    var sMethod=self.Method;
    if(sMethod=="")
    sMethod="POST";
    var sURL=escape(self.URL);
    
    if (sURL.substring(0,4)=="http")//这一段请注意，一定要有预先设计好的代理页面
    {    
     sURL=PROXY + '?&url=' + escape(sURL);
    }
    var sVars=Data;
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        self.ClearData();//释放资源
      }
      else
      {
        xmlhttp.open("POST", sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		//self.ClearData();//释放资源
		//alert("yy");
      }
      
	  //alert("Execute");
      xmlhttp.onreadystatechange = function(){		
        if (xmlhttp.readyState == 4 && !bComplete)
        {
          bComplete = true;
          self.ResponseText=xmlhttp.responseText;          //alert(self.ResponseText);
          if(self.onLoaded!=null)
		  {
          self.onLoaded();
          self.State="Loaded";  //完成 
		  //alert(self.onLoaded);
		  }
        }
        else if (xmlhttp.readyState == 3 && !bComplete)
        {                     
          if(self.onFailure!=null)
          self.onComplete(); 
          self.State="Complete";  //交互中 
		  //alert("Complete");
        }
        else if (xmlhttp.readyState == 2 && !bComplete)
        {
          if(self.onSuccess!=null)
          self.onSuccess();
          self.State="Success";//已读取 
          //alert("onSuccess");
        }
        else if (xmlhttp.readyState == 1 && !bComplete)
        {
          if(self.onLoading!=null)
          {self.onLoading();
          self.State="Loading";//读取中
		  //alert(self.onLoading);
		  }
        } 
        else if (xmlhttp.readyState == 0 && !bComplete)
        {
          if(self.onFailure!=null)
          self.onFailure();
          self.State="Failure";//未初始化
		  //alert("onFailure");
        }        
        
        };
        
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}

function addEvent(o, t, f) {
		if (o.addEventListener) o.addEventListener(t, f, false);
		else if (o.attachEvent) o.attachEvent('on'+ t, f);
		else o['on'+ t] = f;
	}	
function removeEvent(o, t, f) {
		if (o.removeEventListener) o.removeEventListener(t, f, false);
		else if (o.detachEvent) o.detachEvent('on'+ t, f);
		else o['on'+ t] = null;
	}   

/*附加说明：
XMLHttpRequest 对象属性描述
onreadystatechange 状态改变的事件触发器(异步处理时要req.open('POST', 'servlet')或req.open('POST', 'servlet',true))
readyState 对象状态(integer):
0 = 未初始化
1 = 读取中
2 = 已读取
3 = 交互中
4 = 完成
responseText 服务器进程返回数据的文本版本
responseXML 服务器进程返回数据的兼容DOM的XML文档对象
responseBody 服务器返回的主题（非文本格式）
responseStream 服务器返回的数据流
status 服务器返回的状态码, 如：404 = "文件末找到" 、200 ="成功"
statusText 服务器返回的状态文本信息
*/