/*
Content Loader "Object"
Originally Written By: Ajax in Action authors (Dave Crane, Eric Pascarello with Darren James)
Modified By: Ken Colton <kcolton@360hubs.com>
*/


var net = new Object();//Namespacing Object

//Ready State Constants
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;



//Content Loader Constructor
net.ContentLoader = function(url, onload, onerror, method, params, contentType)
{	
	this.url = url;
	this.req = null;
	this.onload = onload;
	this.onerror = (onerror) ? onerror : this.defaultError;

	this.loadXMLDoc(url, method, params, contentType);
}

//Content Loader Prototype Functions using JSON declaration
net.ContentLoader.prototype = 
{	
	//Crossbrowser function to load get an instance of an XMLHttpRequest object and make the HTTP call
	loadXMLDoc:function(url, method, params, contentType)
	{
		if(!method)
		{
			method = "GET";
		}
		
		if(!contentType && method=="POST")
		{
			contentType = "application/x-www-form-urlencoded";
		}
	
		if(window.XMLHttpRequest)//Firefox and the rest of the sane community
		{
			this.req = new XMLHttpRequest();
		}
		else if(window.ActiveXObject)//Internet Explorer
		{
			this.req = new ActiveXObject("Microsoft.XMLHTTP");
		}
		
		//If we've gotten an XMLHttpRequestObject
		if(this.req)
		{
			//Try to set the callback of it
			try
			{
				var loader = this;//Get ourself since the context variable changes with a event driven call
				//Define a callback that calls our onReadyStateChange class with this as the context variable
				this.req.onreadystatechange = function()
				{
					loader.onReadyState.call(loader);
				}
				this.req.open(method , url, true);
				
				if(contentType)
				{
					this.req.setRequestHeader("Content-Type", contentType);
				}
				
				this.req.send(params);
			}
			catch(err)
			{
				this.onerror.call(this);
			}
		}
	},
	
	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)
			{
				if(this.onload)
					this.onload.call(this);
			}
			else
			{
				this.onerror.call(this);
			}
		}
	},
	
	defaultError:function()
	{
		/*
		alert("Error Fetching Data!" 
			+ "\n\nreadyState: " + this.req.readyState
			+ "\nstatus: " + this.req.status
			+ "\nheaders: " + this.req.getAllResponseHeaders());
		*/
	}
}

