﻿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, target, params, onload, onerror){
	//trace(target);
	this.url = url;
	this.target = document.getElementById(target);
	//trace(this.target);
	this.params = params;
	this.onload = onload;
	this.onerror = onerror ? onerror : this.defaultError;
	
	this.req = null;
	this.data = null;
	this.loadXMLDoc(url);
}

Net.ContentLoader.prototype = {
	loadXMLDoc : function (url){
		//var xRequest = null;
		if (window.XMLHttpRequest) {
			this.req = new XMLHttpRequest(); // Mozilla, Safari, Opera
		} 
		else if (window.ActiveXObject) {
			try {
				this.req = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
			} 
			catch (e) {
				try {
					this.req = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
				} catch (e) {}
			}
		}
		if(this.req){
			try{
				var loader = this;
				this.req.onreadystatechange = function(){
					loader.onReadyState.call(loader);
				}
				this.req.open('POST',url,true);
				this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				this.req.send(this.params);
			}
			catch(e){
				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.data = this.req.responseText;
				this.onload.call(this);
			}
			else{
				this.onerror.call(this);
			}
		}
		else if(ready == Net.READY_STATE_LOADING){
			
		}
	},
	defaultError: function(){
		alert("error fetching data!"
			+ "\nreadyState: " + this.req.readyState
			+ "\nstatus: " + this.req.status
			+ "\nheaders: " + this.req.getAllResponseHeaders()
			);
	}
}

