function addEvent(obj, evType, fn, useCapture) {
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, useCapture);
		return true;
	} else if (obj.attachEvent) {
		var r = obj.attachEvent('on' + evType, fn);
		return r;
	} 	else {
		obj['on' + evType] = fn;
	}
}

function ajaxObject() {
	var self = this;
	this.doingHandleAjax = false;
	this.ajax = null;
	this.url = null;
	this.method = 'GET';
	this.async = false;
	this.format = 'text';
	this.postData = null;
	this.handleAjax = function(resp,error,state){};
	
	this.init = function() {
		if(!self.ajax) {
			try {
				self.ajax = new XMLHttpRequest();
			}
			catch (e) {
				try {
					self.ajax = new ActiveXObject('MSXML2.XMLHTTP');
				}
				catch (e) {
					try {
						self.ajax = new ActiveXObject('Microsoft.XMLHTTP');
					}
					catch (e) {
						return false;
					}
				}
			}
			
		}
		return self.ajax;
	};
	this.ajaxOpen= function() { 
		if(!self.init()) {
			return;
		} 
		self.ajax.open(self.method,self.url,self.async);
		//var self = this;
		self.ajax.onreadystatechange = function () {self.doingHandleAjax=true;
			var resp = null;alert("main");
			if(self.ajax.readyState == 4) {
				switch(self.format) {
					case 'text':
						resp = self.ajax.responseText;
						break;
					case 'xml':
						resp = self.ajax.responseXML;
						break;
					case 'object':
						resp = self.ajax;
						break;
				}
				if(self.ajax.status >= 200 && self.ajax.status <= 299) {
					//if(self.ajax.responseText) alert(self.ajax.responseText);
					//if(self.ajax.responseXML) alert (self.ajax.responseXML.getElementsByTagName("error")[0].childNodes[0].xml);
					
					self.handleAjax(resp,false,self.ajax.status);
				}
				else {
					self.handleAjax(resp,true,self.ajax.status);
				}
			}
		}
		self.ajax.send(null);
		setTimeout(this.backupReadyStateChange, 10);
	};
	this.backupReadyStateChange = function() {
		var resp = null;
		if(self.ajax.readyState == 4) {
			if (self.doingHandleAjax==false) {alert("backup");
				switch(self.format) {
					case 'text':
						resp = self.ajax.responseText;
						break;
					case 'xml':
						resp = self.ajax.responseXML;
						break;
					case 'object':
						resp = self.ajax;
						break;
				}
				if(self.ajax.status >= 200 && self.ajax.status <= 299) {
					//if(self.ajax.responseText) alert(self.ajax.responseText);
					//if(self.ajax.responseXML) alert (self.ajax.responseXML.getElementsByTagName("error")[0].childNodes[0].xml);
					
					self.handleAjax(resp,false,self.ajax.status);
				}
				else {
					self.handleAjax(resp,true,self.ajax.status);
				}
				self.ajax.onreadystatechange = function() { };
			}
		} else setTimeout(self.backupReadyStateChange,10);
	}
	this.doAjax = function(aUrl,aMeth,aHand,aPostData,aFormat,aAsync) {
		self.url = aUrl;
		self.method = aMeth;
		self.handleAjax = aHand;
		self.postData = aPostData;
		self.format = aFormat||'text';
		self.async = aAsync;
		self.ajaxOpen();
	};
	this.abort = function() {
		if(self.ajax) {
			self.ajax.onreadystatechange = function() { };
			self.ajax.abort();
			self.ajax = null;
		}
	}
};
