function Ajax(url,args){
	if (!url || !args) return;
	this.url = url || '';
	this.params = args.params || args.pars || '';
	this.containers = args.obj || '';
	this.mime = args.mime || 'text/html';
	this.evalScripts=args.evalScripts || false;
	this.onComplete=args.onComplete || this.defaultOnCompleteFunc;
	this.onLoading= args.onLoading || this.defaultOnLoadingFunc;
	this.onError = args.onError || this.defaultOnErrorFunc;
	this.method = args.method || 'get';
	if (typeof(args.sync) == 'undefined' || args.sync == null) { 
		this.sync = true;
	} else {
		this.sync = args.sync ? true : false; 
	}
	this.loadData();
}
Ajax.prototype={
	READY_STATE_COMPLETE : 4,
	getRequest : function () {
		var funcs = [
			function() {return new ActiveXObject('Msxml2.XMLHTTP')},
			function() {return new ActiveXObject('Microsoft.XMLHTTP')},
			function() {return new XMLHttpRequest()},
		];
		var req = null;
		for (var i = 0; i < funcs.length; i++) {
			var f = funcs[i];
			try {
				req = f();
				break;
			} catch (e) {}
		}
		return req || false;
	},
	escapeParams : function() {
		if (!this.params || typeof this.params!='string') return false;
		var arr=this.params.split("&");
		for (var i=0;i<arr.length;i++){
			var arrtmp=arr[i].split("=");
			arr[i]=arrtmp[0]+'='+escape(arrtmp[1]||'');
		}
		return this.url+=this.url.indexOf("?")!=-1?"&":"?"+arr.join("&");
	},
	parseParams : function () {
		if (typeof (this.params) == "string") {
			return this.params;
		} else {
			return formQuery(this.params)
		}
	},
	updateContent: function() {
		//alert(this.req.responseText)
		var receiver = $(this.containers);
		var response = this.req.responseText;
		//if (this.evalScripts) response = response.evalScripts();
		if (receiver) receiver.innerHTML = response;
		if (this.onComplete) { this.onComplete(arguments[0],arguments[1]) }
	},
	loadData : function () {
		this.req = this.getRequest();
		if (this.req) {
			this.onLoading();
			try {
				var loader = this;
				this.req.onreadystatechange = function () {
					if (loader.req.readyState == loader.READY_STATE_COMPLETE) {
						loader.updateContent.call(loader,loader.req);
					}
				}
				this.req.open(this.method, this.url, this.sync);
				
				if (this.method == "post") {
					this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				}
				
				if (this.req.overrideMimeType) {
					this.req.overrideMimeType(this.mime);
				}

				this.req.send(this.method == "post" ? this.parseParams() : this.escapeParams());
			} catch (e) {
				this.onError.call(this, e);
			}
		}
	},
	defaultOnCompleteFunc : function () {/*alert(this.req.responseText);*/},
	defaultOnLoadingFunc : function () {},
	defaultOnErrorFunc : function (error) {/*alert(error);*/}
}
function easyAjax(url,obj){
	new Ajax(url,{
		obj:obj,
		evalScripts:arguments[2]?true:false
	})
}