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()
{
	this.onerror 		= this.defaultError;
	this.method  		= 'POST';
	this.url     		= null;
	this.finalUrl  		= null;
	this.params  		= new Object;
	this.addUrlParams 	= new Object;
	this.results 		= null;
}


net.ContentLoader.prototype = {
	
	load:function() 
	{
	    if (window.XMLHttpRequest)
	    {
	    	this.req = new XMLHttpRequest();
	    }
	    else if (window.ActiveXObject)
	    {
	    	this.req = new ActiveXObject('Microsoft.XMLHTTP');
	    }
	    else
	    {
	    	alert('Your browser does not support some of the functions needed on this page. Please update your browser.');
	    } 
	    
	    
	    var postData = '';
	    var first    = true;
	    
	    for(name in this.params)
	    {
	    	if(!first)
	    	{
	    		postData += '&';	 
	    	}	
	    	  	
	       	postData += name + '=' + encodeURIComponent(this.params[name]); 	
	              	
	       	first = false;
	    }	
	    
	    this.finalUrl = this.url; 
	      
	    if(this.finalUrl.indexOf('?') > -1)
	    {
	    	var concatChar = '&';
	    }
	    else
	    {
	    	var concatChar = '?';
	    }
	  
	      
	    
	    for(name in this.addUrlParams)
	    {
	    	this.finalUrl += concatChar + name + '=' + encodeURIComponent(this.addUrlParams[name]);
	    	concatChar = '&';
	    }
	    
	    
	    
	    if (this.req)
	    {	    	
	    	try 
	    	{
	    		var loader = this;
	    		
	    		this.req.onreadystatechange = function() 
	    		{
	    			if(loader.req.readyState == net.READY_STATE_COMPLETE)
	    			{
	    				loader.parseJSON();
	    			}
	    			
	    			loader.onReadyState.call(loader);
	    		}
	    		
	    		this.req.open(this.method, this.finalUrl, true);
	    		this.req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	    		this.req.send(postData);
	    		
	    	} 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)
			{
				this.onload.call(this);
			}
			else
			{
				this.onerror.call(this);
			}
		}
	},
	
	
	parseJSON:function()
	{
		var jsonText  = this.req.responseText;
		
		try {
			
			this.results  = eval("(" + jsonText + ")" );
		}
		catch (error)
		{
			alert('Possible error parsing server response :::  ' + error + ' ::: ' + jsonText);
		}
	},
	
	
	
	defaultError:function()
	{
		alert("There was an error communicating with the server."
			  + "\n\n readyState: " + this.req.readyState
			  + "\n status: " + this.req.status
			  + "\n headers: " + this.req.getAllResponseHeaders());
	}
}    			