function objetoAjax(metodo) 
{
/*Primero necesitamos un objeto XMLHttpRequest que cogeremos del constructor para 
que sea compatible con la mayoria de navegadores posible. */
this.objetoRequest = new ConstructorXMLHttpRequest();
this.metodo = metodo;
}

function peticionAsincrona(url,valores) //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) //Detección de errores
					{ 
					alert("Posible Error: " + objetoActual.objetoRequest.status + ", Descripción: " + objetoActual.objetoRequest.statusText);
					}
					else //Si no hubo error, se deja al programa seguir su flujo normal.
					{	
				
						//Función que se llama cuando se completo la transmisión, se le envian 4 parametros.
						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(valores);
	}
}

/*Las siguientes funciones las dejo en blanco ya que las redefiniremos según nuestra necesidad 
haciendolas muy sencillas o complejas dentro de la página.*/
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 objetos que se creen, lo harán conteniendo estas funciones en ellos*/

//Definimos la funcion de recoger informacion.
objetoAjax.prototype.coger = peticionAsincrona ;
//Definimos una serie de funciones que sería posible utilizar y las dejamos en blanco.
objetoAjax.prototype.cargando = objetoRequestCargando ;
objetoAjax.prototype.cargado = objetoRequestCargado ;
objetoAjax.prototype.interactivo = objetoRequestInteractivo ;
objetoAjax.prototype.completado = objetoRequestCompletado ;