if(typeof(net) == "undefined" || net == null) var net = new Object();
net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4;

net.ContentLoader = function(url,onload,onerror){
	this.url = url;
	this.req = null;
	this.onload = onload;
	this.onerror = (onerror) ? onerror : this.defaultError;
	this._to = null;
	this.loadXMLDoc(url);
}
net.ContentLoader.prototype.loadXMLDoc = function(url){
	this.req = createXMLHttpRequest();
	if(this.req){
		try{
			var loader = this;
			this.req.onreadystatechange = function(){
				loader.onReadyState.call(loader);
			}
			if(this._to) clearTimeout(this._to);
			this._to = setTimeout(function(){ loader.req.onreadystatechange = null; loader.onerror.call(loader); loader.req.abort(); return false; },5000);
			this.req.open("GET",url,true);
			this.req.send(null);
		}catch(err){
			this.onerror.call(this);
		}
	}
}
net.ContentLoader.prototype.onReadyState = function(){
	var req = this.req;
	var ready = req.readyState;
	if(ready == net.READY_STATE_COMPLETE){
		clearTimeout(this._to);
		//alert("ok");
		var httpStatus = req.status;
		if(httpStatus == 200 || httpStatus == 0){
			this.onload.call(this);
		}else{
			this.onerror.call(this);
		}
	}
}
net.ContentLoader.prototype.defaultError = function(){
	if(this.req.readState > net.READY_STATE_LOADING){
		alert("error fetching data!"
			  +"\n\nreadyState: "+this.req.readyState
			  +"\nstatus: "+this.req.status
			  +"\nheaders: "+this.req.getAllResponseHeaders());
	}else{
		alert("timeout fetching data!");
	}
}