/*
Ajax 类 阿智 QQ:13994912
2009-09-26 修正调用失败处理.
2009-08-23 编写.
*/
function Ajax(option){     
	option.success=option.success||function(){};   
    option.fail=option.fail||function(){};
    option.loading=option.loading||function(){};
    this.load = function(){
		var url     = option.url || "";
		var boolean = option.boolean || true;
        var method  = option.method || "get";
        var success = option.success || option.success;
        var fail    = option.fail || option.fail;
        var loading = option.loading || option.loading;
        var data    = option.data || null;
		var type    = option.type||"";
	    var timeout = option.timeout||5000;
		var intime  = true;
	    setTimeout(function(){intime=false;},timeout);
		var getData = this.data;
        
		try {   
			var xml=this.xml();        
            var stateIsOk=this.stateOK;   
            url=this.appendUrlRandom(url);   
            if (xml) {     
				xml.open(method, url ,boolean);   
                if(boolean)xml.onreadystatechange = function(){//异步请求
					if (xml.readyState == 4&&intime) {   
						if (stateIsOk(xml)) {   
							option.success(getData(xml,type));
                            }
						else option.fail();
                        }
					else{
						option.loading();
						}
                    };   

				if(method=="post"){                    
					xml.setRequestHeader("content-length",data.length);       
                    xml.setRequestHeader("Content-Type","application/x-www-form-urlencoded");   
                    }   
                xml.send(data);   
                    
			    if(!boolean){if(xml.readyState == 4)//同步请求   
					if(stateIsOk(xml)) {   
						success(xml);   
                        }   
                    }   
                }   
            }catch (e) {   
				option.fail();   
                return null;   
            }   
        };
		
	this.xml=function(){   
		try{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			} 
		catch (e) {
			try{
		        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
				} 
		    catch (e2) {
		        xmlHttp = false;
				}
			}

		if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
			xmlHttp = new XMLHttpRequest();
			}
		return xmlHttp;
		};
		
	this.appendUrlRandom = function(url){   
		var rnd = "t=" + new Date().getTime();   
        if(url.indexOf("?")!=-1)url +="&" + rnd;   
        else url += "?" + rnd;    
        return url;   
        };     
        
	this.stateOK = function(req){   
		var s = req.status || 0;   
        return ((s>=200)&&(s<300))||   
	            (s==304)||   
                (s==1223)||   
                (!s && (location.protocol=="file:" || location.protocol=="chrome:"));    
        };   
   
	this.data=function(r,type){
		var ct = r.getResponseHeader("content-type");
		var data = !type && ct && ct.indexOf("xml") >= 0;
		data = type == "xml" || data ? r.responseXML : r.responseText;
		if ( type == "json" )
		data=eval("("+data+")" );
		return data;
		}
	
	this.load();
	}
