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(element,action,data,onload,onerror)
{
	this.element = element;
  	this.url='/ajax/'+action+'/'+book;
	this.data=data; 
  	this.req=null;
  	this.onload=onload;
  	this.onerror=(onerror) ? onerror : this.defaultError;
  	this.loadXMLDoc(this.url);
}
net.ContentLoader.prototype=
{
  	loadXMLDoc:function(url)
	{
    	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()
				{
          			loader.onReadyState.call(loader);
        		}
        		this.req.open('POST', url, true);
				this.req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
				this.req.setRequestHeader('Accept', 'text/javascript, text/html, application/xml, text/xml, */*');
			    this.req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
				this.data ? this.req.send(this.data) : this.req.send(null);
        	}catch (err){ alert(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)
			{
        		this.onload.call(this);
      		}
			else
			{
    			this.onerror.call(this);
      		}
    	}
  	},
  	defaultError:function()
	{
    	alert("HTTP Status: "+this.req.status+"\nError fetching data: "+this.url+' '+this.data); 
	}
}
