/* El objetivo de este fichero es crear la clase objetoAjax (en Javascript a las “clases” se les llama “prototipos”) */
function objetoAjax( )
{
/*Primero necesitamos un objeto XMLHttpRequest que cogeremos del constructor para
que sea compatible con la mayoría de navegadores posible. */
this.objetoRequest = new ConstructorXMLHttpRequest();
}
function peticionAsincrona(url,idDondeInsertar, tipoTransmision, cadenaPost) //Función asignada al método coger del objetoAjax.
{
if (tipoTransmision==2)
{
	
	/*Copiamos el objeto actual, si usamos this dentro de la función que asignemos
	a onreadystatechange, no funcionara.*/
	var objetoActual = this;
	this.objetoRequest.open('POST', 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:
	/*Detección de errores, solo nos fijamos en el codigo que nos llega
	normalmente como bueno, como por ahora no es necesario elevar la
	complejidad de la detección la dejamos así. */
	if(objetoActual.objetoRequest.status != 200)
	{
	alert("Posible Error: " + objetoActual.objetoRequest.status + ", Descripción: "
	+ objetoActual.objetoRequest.statusText);
	//Por si queremos hacer algo con el error
	if (idDondeInsertar){
	document.getElementById(idDondeInsertar).innerHTML="Posible Error: " + objetoActual.objetoRequest.status;
	}
	manejadorError(objetoActual.objetoRequest.status);
	}
	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 envían 4
parámetros.*/
	objetoActual.completado(objetoActual.objetoRequest.status,
	objetoActual.objetoRequest.statusText,
	objetoActual.objetoRequest.responseText,
	objetoActual.objetoRequest.responseXML);
	//document.getElementById('status_bar').innerHTML='';
	}
	break;
	}
	}
	this.objetoRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
   //envio dos valores el id de la encuesta y la opcion elegida de la encuesta
   this.objetoRequest.send(cadenaPost);
	
}
else
{
	/*Copiamos el objeto actual, si usamos this dentro de la función que asignemos
	a onreadystatechange, no funcionara.*/
	var objetoActual = this;
	this.objetoRequest.open('GET', 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:
	/*Detección de errores, solo nos fijamos en el codigo que nos llega
	normalmente como bueno, como por ahora no es necesario elevar la
	complejidad de la detección la dejamos así. */
	if(objetoActual.objetoRequest.status != 200)
	{
	alert("Posible Error: " + objetoActual.objetoRequest.status + ", Descripción: "
	+ objetoActual.objetoRequest.statusText);
	//Por si queremos hacer algo con el error
	if (idDondeInsertar){
	document.getElementById(idDondeInsertar).innerHTML="Posible Error: " + objetoActual.objetoRequest.status;
	}
	manejadorError(objetoActual.objetoRequest.status);
	}
	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 envían 4
parámetros.*/
	objetoActual.completado(objetoActual.objetoRequest.status,
	objetoActual.objetoRequest.statusText,
	objetoActual.objetoRequest.responseText,
	objetoActual.objetoRequest.responseXML);
	//document.getElementById('status_bar').innerHTML='';
	}
	break;
	}
	}
	this.objetoRequest.send(null); //Iniciamos la transmisión de datos.
}
}
/*Las siguientes funciones las dejo en blanco ya que las redefiniremos según nuestra necesidad
haciéndolas muy sencillas o complejas dentro de la página o omitiendolas sino son necesarias.*/


/*function objetoRequestCargando() {document.getElementById('status_bar').innerHTML='<img src="images/loading.gif"/>';}
function objetoRequestCargado() {document.getElementById('status_bar').innerHTML='<img src="images/loading.gif"/>';}
function objetoRequestInteractivo() {document.getElementById('status_bar').innerHTML='<img src="images/loading.gif"/>';}*/

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.coger = 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 ;