/*
 * This is a new implementation of ContentLoader object in order to let the user pass parameter in Ajax
 */

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;


/* content loader object for cross-browser requests */
net.ContentLoader=function(pURL,pCallBackFunc,pOnErrorFunc,pRequestMethod,pRequestParam,pContentType,pCallBackParam)
{
	this.req=null;
	this.onload=pCallBackFunc;
	this.onerror=(pOnErrorFunc) ? pOnErrorFunc : this.defaultError;
	this.loadXMLDoc(pURL,pRequestMethod,pRequestParam,pContentType);
	this.parameter = (pCallBackParam)? pCallBackParam:null;
};

net.ContentLoader.prototype.loadXMLDoc=function(url,method,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 (window.ActiveXObject)
	{
		this.req=new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (this.req)
	{
		try
		{
			var loader = this;
			this.req.onreadystatechange = function()
			{
				net.ContentLoader.onReadyState.call(loader);
			};

			/*
			See the reference on http://www.w3schools.com/dom/dom_http.asp.
			when you call open("method","URL",async,"uname","pswd") if the async="true" then
			the process carry on without waiting for the response.
			*/

			this.req.open(method,url,true);
			if (contentType)
			{
				this.req.setRequestHeader("Content-Type", contentType);
			}
			this.req.send(params);
		}
		catch (err)
		{
			this.onerror.call(this);
		}
	}
};

net.ContentLoader.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);
		}
	}
};

net.ContentLoader.prototype.defaultError=function()
{
	alert ("error fetching data!" + "\n\nreadyState:" + this.req.readyState + "\nstatus: " + this.req.status + "\nheaders: " + this.req.getAllResponseHeader());
};
