//////////////////////////////
// A esto tenemos que proveer con una función que ocurrirá cuando llame con el contenido del texto.
// Es super primitivo, pero debería servirnos.
//
//Forma de uso: 
//1- Crear el objeto como en "cosa = new request_http()";
//2- Para realizar una petición llamamos al método cargar(url y función) del objeto: "Cosa('www.google.es', 'mifuncion')"...
//3- La llamada a "cargar" tira una request a la url dada y cuando se ha completado devuelve TODO el contenido que haya sacado esa url como parámetro de la función especificada
//4- La función deberíamos definirla fuera del objeto y hacerla particular de cada página.
//5- Para pasar la función como parámetro debemos hacerlo sin paréntesis (de lo contrario la ejecutará en la propia llamada a cargar()).
//
//Hay algún ejemplo abajo muy ramplón que hace "alert" del contenido de la url que se haya pasado.
//
//Dani Diciembre 2008.

function Request_http(var_modo, var_post)
{	
	var modo='GET';	

	if(var_modo)
	{
		modo=var_modo;
	}

	this.crear_request = function ()	//Esto, obviamente, no es mio... Nos ayuda a separar si es un objeto para IE o para el resto del mundo.
	{ 	
		if (typeof XMLHttpRequest != 'undefined') return new XMLHttpRequest(); 		//Para el resto del mundo.
		try { return new ActiveXObject("Msxml2.XMLHTTP");} 	//Para explorer...
		catch (e) 
		{ 
			try {return new ActiveXObject("Microsoft.XMLHTTP");}	//Para Dios sabe que otra versión de Explorer.
			catch (e) {} 
		} 
		return false; 	//Para Mosaic :P.
	}
	
	this.cargar = function(url, metodo)
	{					
		var funcion_respuesta = this.respuesta;		//Necesitamos hacer accesible al siguiente ámbito esto...
		var request_temporal= this.request;		//...y esto...			
		var funcion = function () {funcion_respuesta(request_temporal, metodo)}; //Y ahora creamos esto otro para poder usarlo de respuesta.			

		switch(modo)
		{
			case 'GET':
				this.request.open('GET', url, true);	//Prepara...
				this.request.onreadystatechange = funcion; //La respuesta cuando haya cambio
				this.request.send(null);	//Lanza.						
			break;
			
			case 'POST':
				// var_post='cabeza=contodoelrollo&tal=cual'; Esta es la forma que tiene que tener un post

				this.request.open('POST', url, true);	//Prepara...						

				this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				this.request.setRequestHeader("Content-length", var_post.length);
				this.request.setRequestHeader("Connection", "close");

				this.request.onreadystatechange = funcion; //La respuesta cuando haya cambio			
				this.request.send(var_post);	//Lanza.						
			break;
		}
	}
			
	this.respuesta = function(request_temporal, metodo)	//Cuando cambia el estado (según el método cargar()) lanzaremos esto, que recibe el request completo...
	{						
		if (request_temporal.readyState == 4) metodo(request_temporal.responseText);	//Cuando el estado sea 4 llamaremos a la función que pásamos... Nótese que al ser de ámbito global al objeto la podemos usar.
	}
	
	this.request = this.crear_request(); //Finalmente esto es lo primerísimo que ocurre cuando creamos un objeto: dentro del objeto se crea una instancia de XMLHTTPRequest en función del navegador que sea.		
}

/* 
Y este es el aspecto que tiene una función que damos al request, su creación y la llamada.

	<script type="text/javascript">
	function recarga(texto)
	{		
		alert(texto);
	}	

	var peticion = new request_http();		
	</script>

	<select onchange="peticion.cargar('dani2.php', recarga)">
		<option>1</option>
		<option>2</option>
		<option>3</option>
	</select>
*/

