function Ajax(timeout) {
	var self = this;
	this.ajax = null;
	this.intervalFunc = function() {self.onError.apply(self); self.intervalFunc = null;}
	if (typeof timeout == 'number') this.timeout = timeout;
	else this.timeout = 60000;
	this.intervalId = setTimeout('',1);
	if (window.XMLHttpRequest) this.ajax=new XMLHttpRequest();
	else if (window.ActiveXObject) this.ajax=new ActiveXObject("Microsoft.XMLHTTP");
	this.ajax.onreadystatechange = function(){self.onchange.apply(self,arguments);}
}
Ajax.prototype.onreadystatechange = function() {}
Ajax.prototype.onchange = function() {
	this.readyState = this.ajax.readyState;
	clearTimeout(this.intervalId);
	try{this.status = this.ajax.status}
	catch(e){this.status = null;}
	if (this.readyState == 4 && this.status == 200) {
		this.responseText = this.ajax.responseText;
	}
	else {
		this.intervalId = setTimeout(this.intervalFunc,this.timeout);
	}
	this.onreadystatechange();
}
Ajax.prototype.open = function(method,url,asynchronous) {
	this.ajax.open(method,url,asynchronous);
}
Ajax.prototype.send = function(arg) {
	this.ajax.send(arg);
}
Ajax.prototype.onError = function() {}
Ajax.error = function(rqstText) {
	if (rqstText.substr(0,2) == '!#') return rqstText.substr(2);
	else return false;
}
Ajax.prototype.remove = function() {
	this.intervalFunc = null;
	delete this.ajax.onreadystatechange;
}
