var net = new Object();
net.READY_STATE_UNINIT = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACT = 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.loadXMLDoc( url );
}

net.ContentLoader.prototype = {
	loadXMLDoc : function ( url ) {
		if( window.XMLHttpRequest ) { //имеем дело с Mozilla или FireFox
			this.req = new XMLHttpRequest();
		}
		else if ( window.ActiveXObject ) { //Наш любимый МайкроЖоп
				this.req = new ActiveXObject("Microsoft.XMLHTTP");
		}
		if( this.req ) {
			try {
				var loader = this;
				this.req.onreadystatechange = function () {
					loader.onReadyState.call( loader );
				}
				this.req.open( 'GET',url, true );
				this.req.send( null );
			}
			catch ( err ) {
				this.onerror.call( this );
			}
		}
		if(this.req == null) alert('Error!!!');
	},
	onReadyState : function () {
		var req = this.req;
		var ready = req.readyState;
		if( ready == net.READY_STATE_COMPLETE ) {
			var httpStatus = req.status;
			if( httpStatus == 200 || httpStatus == 0 ){
				this.onload.call( this );
			} else {
				this.onerror.call( this );
			}
		}
	},
	defaultError : function () {
		alert("Error fetching data!\n"
		+ "\nREADY STATE: " + this.req.readyState
		+ "\nSTATUS: " + this.req.status
		+ "\nHEADERS: " + this.req.getAllResponseHeaders());
	}
}
