// LIBRERÍAS DE AJAX

//////////////////////// FUNCIONES DE CARGA ////////////////////////////////////
function httpRequest(url, id_contenedor, valores, metodo, funcion_respuesta)
// Realiza una carga desde una página y la muestra en el contenedor elegido
{
	var pagina_requerida = false;
	
	if (!metodo) metodo = 'GET';
	if (!valores) valores = '';
	
	if (window.XMLHttpRequest)
	{
		// Si es Mozilla, Safari etc
		pagina_requerida = new XMLHttpRequest ();
	} 
	else if (window.ActiveXObject)
	{
		// pero si es IE
		try {pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");}
		catch (e) 
		{
			// en caso que sea una versión antigua
			try {pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");}
			catch (e) {	}
		}
	} 
	else 
		return false;
		
	pagina_requerida.onreadystatechange = function ()
	{
		// función de carga
		cargarPagina (pagina_requerida, id_contenedor, funcion_respuesta);
	}
	
	// Muestra un texto que indica que se están cargando los datos
	capaSolicitada = document.getElementById(id_contenedor);
	capaSolicitada.innerHTML = '<br><br><br><br><div align="center">Cargando...</div>';


	// Solicitamos la página
	pagina_requerida.open (metodo, url, true); // asignamos los métodos open y send
	if (metodo == 'GET')
		pagina_requerida.send (null);
	else
	{
		pagina_requerida.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
		pagina_requerida.send (valores);
	}
}

function cargarPagina (pagina_requerida, id_contenedor, funcion_respuesta)
// Recupera los datos obtenidos y los muestra en la capa elegida
{
	if (pagina_requerida.readyState == 4 && (pagina_requerida.status == 200 || window.location.href.indexOf ("http") == - 1))
	{
		document.getElementById (id_contenedor).innerHTML = pagina_requerida.responseText;
		
		if (funcion_respuesta)
			setTimeout(funcion_respuesta + "()", 0);
	}
}

function httpService(url, valores, metodo, funcion_respuesta)
// Realiza una petición asíncrona para recibir datos, los cuales
// redirige a la función de respuesta elegida
{
	var pagina_requerida = false;
	
	if (!metodo) metodo = 'GET';
	if (!valores) valores = '';
	
	if (window.XMLHttpRequest)
	{
		// Si es Mozilla, Safari etc
		pagina_requerida = new XMLHttpRequest ();
	} 
	else if (window.ActiveXObject)
	{
		// pero si es IE
		try {pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");}
		catch (e)
		{
			// en caso que sea una versión antigua
			try {pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");}
			catch (e) {	}
		}
	} 
	else 
		return false;
	pagina_requerida.onreadystatechange = function ()
	{
		// función de respuesta
		httpServiceGet (pagina_requerida, funcion_respuesta);
	}

	// Solicitamos la página
	pagina_requerida.open (metodo, url, true); // asignamos los métodos open y send
	if (metodo == 'GET')
		pagina_requerida.send (null);
	else
	{
		pagina_requerida.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
		pagina_requerida.send (valores);
	}
}

function httpServiceGet(pagina_requerida, funcion_respuesta)
// Devuelve los datos obtenidos asíncronamente por httpService
{
	if (pagina_requerida.readyState == 4 && (pagina_requerida.status == 200 || window.location.href.indexOf ("http") == - 1))
		setTimeout(funcion_respuesta + "('" + pagina_requerida.responseText + "')", 0);
}

function PostService(url, valores)
// Realiza una petición síncrona para enviar datos, mediante POST, a un servicio Web
// que los procese. Si no se pasan valores, se entiende que 
// los datos estarán en un formulario llamado frmPOST
{
	var pagina_requerida = false;
	
	if (window.XMLHttpRequest)
	{
		// Si es Mozilla, Safari etc
		pagina_requerida = new XMLHttpRequest ();
	} 
	else if (window.ActiveXObject)
	{
		// pero si es IE
		try {pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");}
		catch (e)
		{
			// en caso que sea una versión antigua
			try {pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");}
			catch (e) {	}
		}
	} 
	else 
		return false;

	if (!valores)
	{
		// Obtenemos los datos del formulario que hay que enviar
		var campos = "";
		var num_campos = document.frmPOST.elements.length;
		
		for (i=0; i<num_campos; i++)
		{
			if (i>0) campos += "&";
			campo_formulario = document.frmPOST.elements[i].value;
			campos += document.frmPOST.elements[i].name + "=" + campo_formulario.replace('&', '·'); 
		}
	}
	else
		campos = valores;
	
	// Solicitamos la página
	pagina_requerida.open ("POST", url, false); // false: síncrono, espera hasta que finalice
	pagina_requerida.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
	pagina_requerida.send (campos);
}

function Espera()
{
	ObtenerDimensiones();
	
	capaModal = document.getElementById("modal");
	capaEspera = document.getElementById("espera");
	
	// Mostramos la ventana de progreso
	capaEspera.style.top = parseInt((altoVentana - 150)/2) + "px";
	capaEspera.style.left = parseInt((anchoVentana - 50)/2) + "px";
	capaEspera.style.visibility = "visible";

	// Mostramos la capa que desactiva el fondo
	capaModal.style.width = parseInt(anchoVentana) + "px";
	capaModal.style.height = parseInt(altoVentana) + "px";
	capaModal.style.visibility = "visible";
}