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, method, params, contentType)
{
	this.url = url;
	this.req = null;
	this.onload = onload;
	this.defaultError = function()
	{
		alert("Error fetching data!" + "\n\n readyState: " + this.req.readyState + "\n status: " + this.req.status + "\n headers: " + this.req.getAllResponseHeaders());
	}
	
	if(!onerror)
		this.onerror = this.defaultError;
	else
		this.onerror = onerror;

	this.onReadyStateChange = 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);
		}
	}
	
	this.loadXMLDoc = function(url, params, contentType)
	{
		if(!method)
			method = "GET";
		
		if(!contentType && method == "POST")
			contentType="application/x-www-form-urlencoded";
			
		if(window.XMLHttpRequest)
			this.req = new XMLHttpRequest();
		else if(typeof ActiveXObject != "undefined")
			this.req = new ActiveXObject("Microsoft.XMLHTTP");
		
		if(this.req)
		{
			try
			{
				var loader = this;
				this.req.onreadystatechange = function()
				{
					loader.onReadyStateChange.call(loader);
				}
				this.req.open(method, url, true);
				this.req.send(params);
			} catch(err)
			{
				this.onerror.call(this);
			}
		}
	}
	
	this.loadXMLDoc(url, params, contentType);
}
