function xmlHttp() {
	if(window.XMLHttpRequest) {
		return new XMLHttpRequest();
	}else if(window.ActiveXObject) {
		var versionesObj = new Array('Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP');
		for (var i = 0; i < versionesObj.length; i++) {
			try {
				return new ActiveXObject(versionesObj[i]);
			}
			catch (errorControlado) { }
		}
	}
	throw new Error("No se pudo crear el objeto XMLHttpRequest");
}
function objetoAjax() {
  this.objetoRequest = new xmlHttp();
}

function peticionGet(url) {
	var objetoActual = this; 
	this.objetoRequest.open('GET', url, true);
	this.objetoRequest.onreadystatechange = function() {
			switch(objetoActual.objetoRequest.readyState) {
				case 1:
  				objetoActual.cargando();
	 			 break;
				case 2:
				  objetoActual.cargado();
				  break;
				case 3:
				  objetoActual.interactivo();
				  break;
				case 4:
				  objetoActual.completado(objetoActual.objetoRequest.status, objetoActual.objetoRequest.statusText, objetoActual.objetoRequest.responseText, objetoActual.objetoRequest.responseXML);
				  break;
			}
		}
	this.objetoRequest.send(null);
}

function peticionPost(url) {
	var objetoActual = this;
	this.objetoRequest.open('POST', url, true);
	this.objetoRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	this.objetoRequest.onreadystatechange = function() {
		switch(objetoActual.objetoRequest.readyState) {
			case 1:
				objetoActual.cargando();
				break;
			case 2:
				objetoActual.cargado();
				break;
			case 3:
				objetoActual.interactivo();
				break;
			case 4:
				objetoActual.completado(objetoActual.objetoRequest.status, objetoActual.objetoRequest.statusText, objetoActual.objetoRequest.responseText, objetoActual.objetoRequest.responseXML);
				break;
			}
		}
	this.objetoRequest.send(componerPost()); //Iniciamos la transmisión de datos.
}

function objetoRequestCargando() {}
function objetoRequestCargado() {}
function objetoRequestInteractivo() {}
function objetoRequestCompletado(estado, estadoTexto, respuestaTexto, respuestaXml) {}

objetoAjax.prototype.enviar = peticionGet;
objetoAjax.prototype.cargando = objetoRequestCargando;
objetoAjax.prototype.cargado = objetoRequestCargado;
objetoAjax.prototype.interactivo = objetoRequestInteractivo;
objetoAjax.prototype.completado = objetoRequestCompletado;
