/*attention:the full space "　" among code will cause error!!
function.call(this,onloadArgArr)
onloadArgArr 是 onload回调函数的以数组传递的参数,可省
don't need function.apply(this,onloadArgArr)?*/
var net=new Object();//namespace:net
net.READY_STATE_UNINITIALISED=0;
net.READY_STATE_LOADING=1;
net.READY_STATE_LOADED=2;
net.READY_STATE_INTERACTIVE=3;
net.READY_STATE_COMPLETE=4;
net.ContentLoader=function(url,vars,method,onload,onloadArgArr,onerror){
    this.url=url;
	this.vars=vars;
	this.method=method=="GET"?"GET":"POST";
    this.onload=(onload)?onload:this.defaultOnload;
	this.onloadArgs=onloadArgArr;
    this.onerror=(onerror)?onerror:this.defaultError;
    this.req=null;
    this.init();
}
net.ContentLoader.prototype={
    init:function(){
	try {
	  this.req = new XMLHttpRequest();
	} catch (trymicrosoft) {
	  try {
		this.req = new ActiveXObject("Msxml2.XMLHTTP");
	  	}catch (othermicrosoft) {
		try {
		  this.req = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (failed) {
		  this.req = false;
		}
	  }
	}
    if(this.req){
    try{	
			var url=this.url;
			var req=this.req;
		    var loader=this;
			var method=this.method;
			var vars="t="+(new Date()).valueOf()+"&"+this.vars;
			if (method=="GET"){
	    		req.open(method,url+"?"+vars,true);
				vars=null;
			}else{
				req.open(method, url, true);
				req.setRequestHeader("Method", "POST "+url+" HTTP/1.1");
				req.setRequestHeader("Content-Type",
				"application/x-www-form-urlencoded");
			}
		    req.onreadystatechange=function(){
		  		loader.onReadyState();//.call(loader);
		    }
	    	req.send(vars);
  		}catch(err){
  			this.onerror.call(this);
  	  }
    }
  },
    onReadyState:function(){
		var req=this.req;
		var ready=req.readyState;
	    if(ready==net.READY_STATE_COMPLETE){
		    var httpStatus=req.status;
		if(httpStatus==200||httpStatus==0){
		  this.onload.call(this,this.onloadArgs);
		  /*this.onload==myCallBack();but this.onload(){==this.onload.call(this)} can auto transfer this , myCallBack() can't;
		  call let the function outside inherit this object*/
	    }else{
		  this.onerror.call(this);
	    }
	  }
 	 },
  	defaultOnload:function(){
	},
    defaultError:function(){
    	//alert("error fetching data!"+"\n\nreadyState:"+this.req.readyState+"\nstatus:"+this.req.status+"\nheaders:"+this.req.getAllResponseHeaders());
    }
}
