// Clase JavaScript para trabajar con Ajax

// Función que crea el objeto XMLHttpRequest necesario para utilizar Ajax
// Independientemente del navegador que utilizemos.
function nuevoAjax()
{
	var xmlhttp=false;
	
	try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch(e){
		try{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
		catch (E) { xmlhttp = false; } 
	}
	
	if (!xmlhttp && typeof XMLHttpRequest!='undefined')
	{
		xmlhttp = new XMLHttpRequest();
	}
	
	return xmlhttp;
}

// Declaración de la clase PAjax

function CAjax()
{
	this.objetoRequest = new nuevoAjax();
	
	// Definición de la función para cargar la información de una determinada página
	this.Load = function peticionAsincrona(url)
	{
		/*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: objetoActual.cargando(); break;
				case 2: objetoActual.cargado(); break;
				case 3: objetoActual.interactivo(); break;
				case 4: 
					// Control de errores...
					if(objetoActual.objetoRequest.status != 200)
						objetoActual.manejadorError( objetoActual.objetoRequest.status, objetoActual.objetoRequest.statusText );
					else
						objetoActual.completado(objetoActual.objetoRequest.responseText, objetoActual.objetoRequest.responseXML);
					//
					break;
			}
		}
	
		this.objetoRequest.send(null); //Iniciamos la transmisión de datos.
	}

	// Implementación de las funciones para mostrar estados en la página web...
	this.cargando = function objetoRequestCargando() {}
	this.cargado = function objetoRequestCargado() {}
	this.interactivo = function objetoRequestInteractivo() {}
	this.manejadorError = function objetoRequestError(status, statusText) {}
	this.completado = function objetoRequestCompletado(responseText, responseXML) {}
}
