/**
*
* @copyright: 2010
* @author: liexusong
*
*/
//使用方法:
/*
var options = {
	type: "GET",
	url: "xxx.php?data=xxx",
	onSuccess: function(data) {
		//data是返回的数据,程序主要处理data
	}
};
ajax(options);//调用ajax函数
*/

if (typeof XMLHttpRequest == 'undefined') {
	XMLHttpRequest = function() {
		return new ActiveXObject(
			navigator.userAgent.indexOf('MSIE 5') >= 0 ? 
			"Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"
		);
	};
}

function ajax (options) {
	options = {
		type: options.type || "POST",
		url: options.url || "",
		
		timeout: options.timeout || 5000,
		
		onComplete: options.onComplete || function() {},
		onError: options.onError || function() {},
		onSuccess: options.onSuccess || function() {},
		onLoading: options.onLoading || function() {},
		data: options.data || {}
	};
	
	var xml = new XMLHttpRequest();
	
	xml.open(options.type, options.url, true);
	
	var timeoutLength = options.timeout;
	var requestDone = false;
	
	setTimeout(function() {
		requestDone = true;
	}, timeoutLength);
	
	xml.onreadystatechange = function() {
		if (xml.readyState == 4 && !requestDone) {
			if (httpSuccess(xml)) {
				options.onSuccess(httpData(xml, options.type));
			} else {
				options.onError();
			}
			
			options.onComplete();
			xml = null;
		} else if(xml.readyState != 4 && !requestDone) {
			if (options.onLoading) {
				options.onLoading();
			}
		}
	};
	xml.send((options.type.toLowerCase() == 'post' ? serialize(options.data) : null));
	
	function httpSuccess(r) {
		try {
			return !r.status && location.protocol == 'file:' || (r.status >= 200 && r.status < 300) || r.status == 304 || navigator.userAgent.indexOf('Safari') >= 0 && typeof r.status == 'undefined';
		} catch(e) {}
		return false;
	}
	
	function httpData(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 == 'script') {
			eval.call(window, data);
		}
		return data;
	}
}

function serialize(a) {
	var s = [];
	if (a.constructor == Array) {
		for (var i = 0; i < a.length; i++)
			s.push(a[i].name + "=" + encodeURIComponent(a[i].value));
	} else {
		for (var j in a) {
			s.push(j + "=" + encodeURIComponent(a[j]));
		}
	}
	return s.join('&');
}

