var metodo;
function objetoAjax(metodo)
{
	this.objetoRequest = new ConstructorXMLHttpRequest();
	this.metodo=metodo;

}

function ConstructorXMLHttpRequest()
{
	if(window.XMLHttpRequest) /*Vemos si el objeto window(la base de la ventana del navegador) posee el método XMLHttpRequest(Navegadores como Mozilla y Safari). */
	{
		return new XMLHttpRequest(); //Si lo tiene, crearemos el objeto con este método.
	}
	else
	if(window.ActiveXObject) /*Sino tenía el método anterior, debería ser el Internet Exp. un navegador que emplea objetos ActiveX, lo mismo, miramos si tiene el método de creación. */
	{
/*Hay diferentes versiones del objeto, creamos un array, que contiene los diferentes tipos desde la
versión mas reciente, hasta la mas antigua */
		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
			{
	/*Intentamos devolver el objeto intentando crear las diferentes versiones se puede intentar crear uno que no existe y se producirá un error. */
			return new ActiveXObject(versionesObj[i]);
			}
			catch (errorControlado) //Capturamos el error, ya que podría crearse otro objeto.
			{
			}
		}
	}
/* Si el navegador llego aquí es porque no posee manera alguna de crear el objeto, emitimos un mensaje de error. */
	throw new Error("XMLHttpRequest");
}
function peticionAsincrona(url,parametros) //Función asignada al método coger del objetoAjax.
{
	/*Copiamos el objeto actual, si usamos this dentro de la función que asignemos
	a onreadystatechange, no funcionara.*/
	var objetoActual = this;
	this.objetoRequest.open(this.metodo, url, true); //Preparamos la conexión.
	/*Aquí no solo le asignamos el nombre de la función, sino la función completa, así cada vez que
	se cree un nuevo objetoAjax se asignara una nueva función. */
	this.objetoRequest.onreadystatechange =
			function()
			{
				switch(objetoActual.objetoRequest.readyState)
				{
					case 1: //Función que se llama cuando se está cargando.
					objetoActual.cargando();
					break;
					case 2: //Función que se llama cuando se a cargado.
					objetoActual.cargado();
					break;
					case 3: //Función que se llama cuando se está en interactivo.
					objetoActual.interactivo();
					break;
					case 4:
						if(objetoActual.objetoRequest.status != 200)
						{
							   alert("Posible Error: " + objetoActual.objetoRequest.status + ", Descripción: "
																																	+ objetoActual.objetoRequest.statusText);
								//Por si queremos hacer algo con el error
								manejadorError(objetoActual.objetoRequest.status);
						}
						else
						{
						/*Función que se llama cuando se completo la transmisión, se le envían 4
						parámetros.*/
									objetoActual.completado(objetoActual.objetoRequest.status,
									objetoActual.objetoRequest.statusText,
									objetoActual.objetoRequest.responseText,
									objetoActual.objetoRequest.responseXML);
						}
     					break;
				}
			}
			if (this.metodo == "GET")
			{
				this.objetoRequest.send(null); //Iniciamos la transmisión de datos.
			}
			else
			{
				if(this.metodo == "POST")
				{
					this.objetoRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
					this.objetoRequest.send(parametros);
				}
			}

}
function manejadorError(status){}
function objetoRequestCargando() {}
function objetoRequestCargado() {}
function objetoRequestInteractivo() {}
function objetoRequestCompletado(estado, estadoTexto, respuestaTexto, respuestaXML) {}
/* Por último diremos que las funciones que hemos creado, pertenecen al ObjetoAJAX, con prototype,
de esta manera todos los objetoAjax que se creen, lo harán conteniendo estas funciones en ellos*/
//Definimos la función de recoger información.
objetoAjax.prototype.obtener = peticionAsincrona ;
//Definimos una serie de funciones que sería posible utilizar y las dejamos en blanco en esta clase.
objetoAjax.prototype.cargando = objetoRequestCargando ;
objetoAjax.prototype.cargado = objetoRequestCargado ;
objetoAjax.prototype.interactivo = objetoRequestInteractivo ;
objetoAjax.prototype.completado = objetoRequestCompletado ;
objetoAjax.prototype.manejadorError=manejadorError;


