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;

//Constructor
//component - funcion que usa esta clase
//url - Url a la que se va a realizar la petición, en nuestro caso será "FrontController"
//method - Método de la petición (post|get)
//requestParams - Parámetros de la petición
net.ContentLoader = function( component, url, method, requestParams ) {
	this.component = component;
	this.url = url;
	this.requestParams = requestParams;
	this.method = method;
}

net.ContentLoader.prototype={

	//Método encargado de recoger el objeto
	//que egestiona la comunicación con el servidor
	getTransport: function() {
		var transport;
		
		if ( window.XMLHttpRequest )
			transport = new XMLHttpRequest();
		else if ( window.ActiveXObject ) {
			try {
        transport = new ActiveXObject('Msxml2.XMLHTTP');
			}
			catch(err) {
        transport = new ActiveXObject('Microsoft.XMLHTTP');
			}
		}

		return transport;
	},
	
	//Método encargado de enviar la petición
	sendRequest: function() {
		var requestParams = [];
		
		for ( var i = 0 ; i < arguments.length ; i++ ) {
			requestParams.push(arguments[i]);
		}
		
		var request = this.getTransport();
		request.open( this.method, this.url, true );
		request.setRequestHeader( 'Content-Type','application/x-www-form-urlencoded; charset=utf-8');
		
		var oThis = this;
		request.onreadystatechange = function() { oThis.handleAjaxResponse(request) };
		request.send( this.queryString(requestParams) );
	},

	//Método encargado de configurar la queryString
	queryString: function(args) {
		var requestParams = [];
		for ( var i = 0 ; i < this.requestParams.length ; i++ ) {
			requestParams.push(this.requestParams[i]);
		}

		for ( var j = 0 ; j < args.length ; j++ ) {
			requestParams.push(args[j]);
		}

		var queryString = "";
		if ( requestParams && requestParams.length > 0 ) {
			for ( var i = 0 ; i < requestParams.length ; i++ ) {
				queryString += requestParams[i] + '&';
			}
			queryString = queryString.substring(0, queryString.length-1);
		}
		
		return queryString;
	},
	
	//Una vez recogida la respuesta del servidor se llama a una función
	//u otra en función del estado de la respuesta
	handleAjaxResponse: function(request) {
		if ( request.readyState == net.READY_STATE_COMPLETE ) {
			if ( this.isSuccess(request) )
				this.component.ajaxUpdate(request);
			else
				this.component.handleError(request);
		}
		else if ( request.readyState == net.READY_STATE_LOADING ) {
			
		}
	},

	//Devuelve True o False en función del estado de la respuesta
	isSuccess: function(request){
		return (request.status == 0 || (request.status >= 200 && request.status < 300));
	}

}
