/*
 * -----------------------------------------------
 * "LICENCIA BEER-WARE" (Revisión 42):
 * <patxisanz@yahoo.es> escribió este archivo.
 * Siempre y cuando mantenga este aviso puede
 * hacer lo que quiera con el material. Si nos
 * reunimos algún día, y usted piensa que esto
 * vale la pena, me puede pagar una cerveza a
 * cambio.
 * 2009 Patxi Sanz
 * -----------------------------------------------
 */

// Objetos para acceder al servidor.
var xmlCentro;
var xmlDerecha;

/*
 * Crear un objeto XmlHttp para acceder a los datos del servidor.
 */
function GetXmlHttpObject() {
	if (window.XMLHttpRequest) {
		// IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}
	if (window.ActiveXObject) {
		// IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return null;
}

/*
 * Actualizar el contenido de la página principal.
 * - tipo: Tipo de página a cargar:
 *   - 0: Páginas principales: inicio, gracias, uso y rss.
 *   - 1: Artículos.
 *   - 2: Listado de artículos por tipo.
 *   - 3: Versiones de las descargas.
 *   - 4: Listado de descargas.
 *   - 5: Recursos.
 *   - 6: Listado de recursos.
 *   - 8: Bibliografía del artículo.
 * - id: clave para el tipo de página.
 */
function actualizar(tipo, id) {
	var casp = "";
	var c1 = id;
	var c2 = tipo;
	var c3 = 0;
	var dasp = "";
	var d1 = id;
	descargando();
	
	switch(tipo) {
		case 0:
			casp = "general.asp";
			switch (id) {
				case 0:
					dasp = "titulares.asp";
					break;
				case 4:
					dasp = "tiposenlace.asp";
					d1 = 104;
					break;
				default:
					dasp = "general.asp";
					d1 = id + 100;
					break;
			}
			break;
		case 1:
			casp = "articulo.asp";
			dasp = "datosarticulo.asp";
			break;
		case 2:
			casp = "lista.asp";
			dasp = "tiposarticulo.asp";
			break;
		case 3:
			casp = "lista.asp";
			dasp = "general.asp";
			d1 = 98;
			break;
		case 4:
			casp = "lista.asp";
			dasp = "general.asp";
			d1 = 98;
			break;
		case 6:
			dasp = "tiposenlace.asp";
			d1 = 104;
			if (id == 99) {
				casp = "general.asp";
			} else {
				casp = "lista.asp";
			}
			break;
		case 8:
			casp = "lista.asp";
			dasp = "datosarticulo.asp";
			break;
		default:
			document.getElementById("capabilities").innerHTML = "<div class='tituloSeccion'>Página no encontrada</div><p>No se ha encontrado nada con los parámetros indicados.</p>";
			document.getElementById("news").innerHTML = "";
			break;
	}
	
	if (casp != "") {
		xmlCentro = GetXmlHttpObject();
		if (xmlCentro == null) {
			alert("Tu navegador no soporta AJAX.");
		} else {
			var url = "server/" + casp;
			url = url + "?id1=" + c1;
			url = url + "&id2=" + c2;
			url = url + "&id3=" + c3;
			url = url + "&sid=" + Math.random();
			xmlCentro.onreadystatechange = cambiarCentro;
			xmlCentro.open("GET", url, true);
			xmlCentro.send(null);
		}
	}
	
	if (dasp != "") {
		xmlDerecha = GetXmlHttpObject();
		if (xmlDerecha == null) {
			alert("Tu navegador no soporta AJAX.");
		} else {
			var url = "server/" + dasp;
			url = url + "?id1=" + d1;
			url = url + "&sid=" + Math.random();
			xmlDerecha.onreadystatechange = cambiarDerecha;
			xmlDerecha.open("GET", url, true);
			xmlDerecha.send(null);	
		}
	}
}

/*
 * Se usa en los listados para ver las distintas páginas.
 * - id: clave para los listados.
 * - tipo: tipo de listado a mostrar.
 * - pag: página a mostrar.
 */
function listar(id, tipo, pag) {
	xmlCentro = GetXmlHttpObject();
	if (xmlCentro == null) {
		alert("Tu navegador no soporta AJAX.");
	} else {
		var url = "server/lista.asp";
		url = url + "?id1=" + id;
		url = url + "&id2=" + tipo;
		url = url + "&id3=" + pag;
		url = url + "&sid=" + Math.random();
		xmlCentro.onreadystatechange = cambiarCentro;
		xmlCentro.open("GET", url, true);
		xmlCentro.send(null);
	}
}

/*
 * Se usa en los artículos para ver las distintas páginas.
 * - articulo: Clave del artículo.
 * - pagina: Clave de la página.
 */
function pagina(articulo, pagina) {
	xmlCentro = GetXmlHttpObject();
	if (xmlCentro == null) {
		alert("Tu navegador no soporta AJAX.");
	} else {
		var url = "server/pagina.asp";
		url = url + "?id1=" + articulo;
		url = url + "&id2=" + pagina;
		url = url + "&sid=" + Math.random();
		xmlCentro.onreadystatechange = cambiarCentro;
		xmlCentro.open("GET", url, true);
		xmlCentro.send(null);
	}
}

/*
 * Mostrar mensaje de descargando contenido.
 */
function descargando() {
	document.getElementById("capabilities").innerHTML = "<p><img src=\"images/computer1.gif\" class=\"left\" width=\"60\" height=\"60\" alt=\"Trabajando...\" />Espere, por favor, estamos trabajando para mostrar el contenido que ha solicitado. En breves momentos le mostraremos el resultado...</p>";
	document.getElementById("news").innerHTML = "<p><img src=\"images/web054.gif\" class=\"left\" width=\"32\" height=\"32\" alt=\"reloj\" />Descargando contenido...</p>";
}

/*
 * Actualiza la columna central con el resultado recibido del servidor.
 */
function cambiarCentro() {
	if (xmlCentro.readyState == 4) {
		if (xmlCentro.status == 200) {
			document.getElementById("capabilities").innerHTML = recogerXml(xmlCentro.responseXML);
		} else {
			document.getElementById("capabilities").innerHTML = "<p>Se produjo un error al intentar descargar el contenido:</p>" + "<p>Error " + xmlCentro.status + ": " + xmlCentro.statusText + "</p><p>" + xmlCentro.responseText + "</p>";
		}
	}
}

/*
 * Actualiza la columna derecha con el resultado recibido del servidor.
 */
function cambiarDerecha() {
	if (xmlDerecha.readyState == 4) {
		if (xmlDerecha.status == 200) {
			document.getElementById("news").innerHTML = recogerXml(xmlDerecha.responseXML);
		} else {
			document.getElementById("news").innerHTML = "<p>Se produjo un error al intentar descargar el contenido:</p>" + "<p>Error " + xmlDerecha.status + ": " + xmlDerecha.statusText + "</p><p>" + xmlDerecha.responseText + "</p>";
		}
	}
}

/*
 * Recoge el XML devuelto y ajusta los datos para mostrarlos.
 */
function recogerXml(xmlDoc) {
	var titulo = "";
	var texto = "";
	
	/* Lo siguiente está permitido hacerlo en IE
	var nodos = xmlDoc.getElementsByTagName("elemento/titulo");
	Pero no en Chrome, así que cojo los nodos de 1 en 1 */
	var nodos = xmlDoc.getElementsByTagName("elemento");
	
	try {
		/* Y por tanto, en vez de coger enseguida al hijo, tengo que ir poco a poco descendiendo
		if (nodos[0].firstChild.nodeValue != null) {
			titulo = "<div class='tituloSeccion'>" + nodos[0].firstChild.nodeValue + "</div>";
		} else {
			titulo = "<div class='tituloSeccion'>" + nodos[0].firstChild.text + "</div>";
		}*/
		if (nodos[0].childNodes[0].firstChild.nodeValue != null) {
			titulo = "<div class='tituloSeccion'>" + nodos[0].childNodes[0].firstChild.nodeValue + "</div>";
		} else {
			titulo = "<div class='tituloSeccion'>" + nodos[0].childNodes[0].firstChild.text + "</div>";
		}
	} catch (e1) {
		titulo = "<div class='tituloSeccion'>Error de carga</div>";
		titulo += "<p>Se produjo el siguiente error al cargar el contenido:<br />";
		titulo += e1 + "</p>";
	}
	
	/* Pero como ya tengo al padre, no necesito coger otra vez al hijo
	var nodos = xmlDoc.getElementsByTagName("elemento/texto"); */
	try {
		/* Y tengo que seguir modificando cosas, para que todo vaya bien
		if (nodos[0].firstChild.nodeValue != null) {
			texto = nodos[0].firstChild.nodeValue;
		} else {
			texto = nodos[0].firstChild.text;
		}*/
		if (nodos[0].childNodes[1].firstChild.nodeValue != null) {
			texto = nodos[0].childNodes[1].firstChild.nodeValue;
		} else {
			texto = nodos[0].childNodes[1].firstChild.text;
		}
	} catch (e1) {
		texto = "<p>Se produjo un error al cargar los datos auxiliares:<br />";
		texto += e1 + "</p>";
	}
	
	return ajustarEspeciales(titulo + texto);
}
