/**
* Ajax工具类
* by Gerry,Date:2010-09-24
*/
var AjaxExecute=function(){
	
	//创建XMLHttpRequest对象
	function createXMLHttpRequest(){
		var request = false;
		try{
			request = new XMLHttpRequest();//Mozilla,Safari,Opera,IE7等
		}catch(e){
			try{
				request = new ActiveXObject('Msxml2.XMLHTTP');//IE较新版本
			}catch(e1){
				try{
					request = new ActiveXObject('Microsoft.XMLHTTP');//IE较老版本
				}catch(e2){
					request = false;
				}
			}
		}
		return request;
	}
	
	//jQuery源码中的parseJSON方法
	function parseJSON(data){
	    if ( typeof data !== "string" || !data ) {   
	        return null;   
	    }
	    // Make sure leading/trailing whitespace is removed (IE can't handle it)   
	    // data = jQuery.trim( data );   屏蔽掉
	    
	    // Make sure the incoming data is actual JSON   
	    // Logic borrowed from http://json.org/json2.js   
	    //if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")   
	       // .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")   
	       // .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
	        // Try to use the native JSON parser first   
	        return window.JSON && window.JSON.parse ? window.JSON.parse(data) : (new Function("return " + data))();   
	   // }
	}
	
	/**
	* 执行Ajax请求
	* url:       请求url
	* data:      请求参数       
	* type:      返回数据格式（json或者文本型，默认文本型）
	* async:     是否异步，异步（true），同步（false），默认true
	* method:    请求方式 GET or POST(默认)
	* timeout    请求超时时间(默认0)（只有在异步时设置才有效）
	* onSuccess: 请求成功后响应函数
	* onTimeout: 请求超时后响应函数
	* onFailure: 请求失败后响应函数
	*/	
    function start(params){
        var request = createXMLHttpRequest();
        if(!request){
        	alert("不能创建XMLHttpRequest对象");
        	return false;
        }
        
        var url = params.url;
        var data = params.data || null;
        var type = params.type || "";//这个运算经常用来判断一个变量是否已定义，如果没有定义就给他一个初始值
        var async = params.async !== false;
        var method = (params.method || 'POST').toUpperCase();
        var timeout = params.timeout || 0;
        
        //alert("==url="+url+"\tdata="+data+"\ttype="+type+"\tasync="+async+"\tmethod="+method+"\ttimeout="+timeout);
        var timer;
        if(async){//异步时，可以检测超时
        	if(timeout>0){
	        	timer = setTimeout(function(){
	        		request.abort();//调用abort后request.status为0
	        	},timeout);
	        }
        }
        
        request.open(method,url,async);//建立到服务器的请求
        if(method==="POST"){
        	//因为是post请求，故需要设置requestHeader.(get请求就不用设置了)
      		//表示客户端提交给服务器文本内容的编码方式 是URL编码，即除了标准字符外，每字节以双字节16进制前加个“%”表示
        	request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        }
        request.onreadystatechange = function(){
        	//alert("request.readyState="+request.readyState);
        	if(request.readyState==4){
        		//alert("request.status="+request.status);
        		if(request.status==200){
        			if(type=="json"){
        				var text = request.responseText.replace(/\r\n/g,"");//替换返回的换行符"/n"
        				//AjaxParameter.onSuccess(eval('('+(ajax_responseText)+')'));//eval() 函数可计算某个字符串，并执行其中的的 JavaScript 代码
						params.onSuccess(parseJSON(text)); //效率比json_sans_eval.js中的jsonParse方法高效！！！
        			}else if(type=="xml"){
        				params.onSuccess(request.responseXML);
        			}else{
        				params.onSuccess(request.responseText);
        			}
        		}else{
        			if(request.status==0){
        				if(params.onTimeout){
        					params.onTimeout();
        				}else{
        					//alert('timeout');
        				}
        			}else{
        				if(params.onFailure){
        					params.onFailure();
        				}else{
        					//alert('fail');
        				}
        			}
        			window.parent.parent.DsrEliDivPro.LoadingCoverClose();
        		} 
        		if(async){
        			clearTimeout(timer);
        		}
        	}
        };
        request.send(data);
	}
     
    return{
	    setParameter:function(params){
	        start(params);
	    }
    }
}();
