// LIBRERÍAS DE AJAX

function AleatorizarURL(url)
// Debido a los problemas de refresco de IE6 con AJAX, esta función añade un parámetro
// a la URL que es aleatorio, de forma que el navegador interprete que la página es nueva
{
	if (url.indexOf("?") == -1) // no encontrado
		url = url + "?rand=" + Math.random();
	else
		url = url + "&rand=" + Math.random();	

	return url;
}

//////////////////////// 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
{
	url = AleatorizarURL(url);
		
	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><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
{
	url = AleatorizarURL(url);

	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
{
	url = AleatorizarURL(url);

	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 += "&";
			campos += document.frmPOST.elements[i].name + "=" + document.frmPOST.elements[i].value; 
		}
	}
	else
		campos = valores;
	
	// Solicitamos la página
	pagina_requerida.open ("POST", "web_services/"+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);
}



//////////////////////// FUNCIONES PARA MANEJO DE DIÁLOGOS ////////////////////////////////////



function AbrirDialogo(url, ancho, alto)
{
	capaModal = document.getElementById("modal");
	capaDialogo = document.getElementById("dialogo");
	capaEspera = document.getElementById("espera");

	// Ocultamos el diálogo que contendrá la página (por si está visible)
	capaDialogo.style.visibility = "hidden";
	
	// 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";
	
	// Ajustamos el cuadro de diálogo
	capaDialogo.style.width = parseInt(ancho) + "px";
	capaDialogo.style.height = parseInt(alto) + "px";
	capaDialogo.style.top = parseInt((altoVentana - alto)/2 - 5) + "px";
	capaDialogo.style.left = parseInt((anchoVentana - ancho)/2) + "px";
	
	// Realizamos la llamada a la función que carga el cuadro de diálogo	
	httpRequest(url,'dialogo','','','MostrarDialogo');
}

function MostrarDialogo()
{
	// Ocultamos la ventana de progreso
	capaEspera = document.getElementById("espera");
	capaEspera.style.visibility = "hidden";

	// Mostramos el diálogo
	capaDialogo = document.getElementById("dialogo");
	capaDialogo.style.visibility = "visible";
	
	// Ajustamos la capa de contenidos interna del diálogo
	capaDialogoContenido = document.getElementById("dialogo_contenido");
	capaDialogoContenido.style.height = parseInt(parseInt(capaDialogo.style.height) - 65) + "px";
}

function CerrarDialogo()
{
	capaModal = document.getElementById("modal");
	capaDialogo = document.getElementById("dialogo");

	capaModal.style.visibility = "hidden";
	capaDialogo.style.visibility = "hidden";

	capaDialogo.innerHTML = ""; // Destruye los contenidos del cuadro de diálogo
}