// JavaScript Document
function newXMLHttpRequest() {
  var xmlreq = false;
  if (window.XMLHttpRequest) {
    xmlreq = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e1) {
      try {
        xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e2) {
      }
    }
  }

  return xmlreq;
}

function Ajax(url,backHandler,objAjaxData,async,method){//a
this.xmlhttp=newXMLHttpRequest(); 
this.method='get';
if(method)this.method=method;
this.url='';
if(typeof url==='string')this.url=url;
this.objAjaxData=null;
if(typeof objAjaxData==='object'){this.objAjaxData=objAjaxData;}else if(typeof url==='object'){this.objAjaxData=url;}
this.async=true;
if(typeof async==='boolean')this.async=async;
this.params=new Object();
this.add=function(name,value){
	this.params[name]=value;
}
if(typeof backHandler==='function'){this.backHandler=backHandler;}else if(typeof url==='function'){this.backHandler=url;}else{this.backHandler=function(){};}
this.setHeader=function(name,value){
	this.xmlhttp.setRequestHeader(name,value); 	
}
this.send=function(p,m){//b		
	if(typeof m==='string'){
		if(m.toLowerCase()=='post'||m.toLowerCase()=='get'){this.method=m.toLowerCase();}
	}
	if(!p)p='';
	var paramStr='';
	for ( var key in this.params ){
		paramStr+=("&"+key+"="+escape(this.params[key]));
	}
	if(paramStr!='')paramStr=paramStr.substring(1,paramStr.length);
	this.xmlhttp.onreadystatechange=getReadyStateHandler(this.xmlhttp, this.backHandler,this.objAjaxData);
	if (this.method.toLowerCase()=='post'){		
		if(typeof this.url==='undefined' || this.url==''){alert('ERROR:NO URL!');return;}
		this.xmlhttp.open(this.method,this.url,this.async);
		this.xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded"); 
		var sendStr='';
		if(paramStr!='')sendStr=paramStr;
		if(p!=''){
			if(sendStr!='')sendStr+=('&'+p);
			else sendStr+=p;
		}
		this.xmlhttp.send(sendStr);
	}else{//'get' method
		if (this.url.indexOf("?")>0){			
			if(paramStr.length>0) this.url+=('&'+paramStr);
			if(p.length>0) this.url+=('&'+p);
		}else{
			if(paramStr.length>0){
				this.url+=('?'+paramStr);
			}
			if(p.length>0){
				if(paramStr.length>0) {
					this.url+=('&'+p);
				}else{
					this.url+=('?'+p);
				}
			}
		}
		this.xmlhttp.open(this.method,this.url,this.async);
		this.xmlhttp.send(null);
		//fireFox不支持同步回调的处理 开始
		if(!this.async&&navigator.userAgent.indexOf("Firefox")>0){
			this.xmlhttp.onreadystatechange=function(){};
			if(!this.objAjaxData)this.objAjaxData=new Object();
			this.objAjaxData.xml=this.xmlhttp.responseXML;
			this.objAjaxData.text=this.xmlhttp.responseText;	
			this.objAjaxData.request=this.xmlhttp;
			this.objAjaxData.status=this.xmlhttp.status;
			if (this.xmlhttp.status == 200) {		
				this.backHandler(this.objAjaxData);	
			}else{
				this.backHandler(this.objAjaxData);				
			}			
		}
		//fireFox不支持同步回调的处理 结束
	}
	
}//b
}//a

function getReadyStateHandler(xmlHttprequestObj,backHandler, objAjaxData) {
  return function () {
    if (xmlHttprequestObj.readyState == 4) {
	  	if(!objAjaxData)objAjaxData=new Object();
		objAjaxData.xml=xmlHttprequestObj.responseXML;
		objAjaxData.text=xmlHttprequestObj.responseText;	
		objAjaxData.request=xmlHttprequestObj;
		objAjaxData.status=xmlHttprequestObj.status;
      if (xmlHttprequestObj.status == 200) {		
		backHandler(objAjaxData);	
      } else {
		backHandler(objAjaxData);
        //alert("HTTP error: "+xmlHttprequestObj.status);
      }
    }
  }//return function
}

//usage
/*
function ajaxBack(objAjaxData){
alert(objAjaxData.text);
alert(objAjaxData.mjj);
}
objAjaxData=new Object();
objAjaxData.mjj='ameng';
var a=new Ajax('t1.asp?d=dv',ajaxBack,objAjaxData);
a.async=true;
a.add('a','av');
a.add('x','xv');
a.method='post';
a.send('b=bv&c=cv','post');
*/