/****
	@file lib.js
	@title Biblioteca de funciones comunes en javascript
	
	@version 1.0
	@date Octubre de 2007
	@lastdate 21 de noviembre, 2007
	
	@description Biblioteca con las funciones de uso comun y generico para el contenido dinamico del sitio
	
	@author Javier Novoa C (Stitch, jstitch@gmail.com)
	
El código fuente de este sitio está sujeto a lo establecido en la licencia GPL de la FSF http://www.gnu.org/copyleft/gpl.html
Ver el archivo licencia.php para más detalles.
***/

/****
---   Constantes   ---
****/
var semana = new Array(7);
semana[0] = "Domingo";
semana[1] = "Lunes";
semana[2] = "Martes";
semana[3] = "Mi&eacute;rcoles";
semana[4] = "Jueves";
semana[5] = "Viernes";
semana[6] = "S&aacute;bado";

var meses = new Array(12);
meses[0] = "Enero";
meses[1] = "Febrero";
meses[2] = "Marzo";
meses[3] = "Abril";
meses[4] = "Mayo";
meses[5] = "Junio";
meses[6] = "Julio";
meses[7] = "Agosto";
meses[8] = "Septiembre";
meses[9] = "Octubre";
meses[10] = "Noviembre";
meses[11] = "Diciembre";

/****
---   AJAX   ---
****/
//Documento JavaScript
//Esta función cargará las paginas
function llamarAsincronoGet(url, id_contenedor){
	
	var pagina_requerida = false;
	
	//Si es Mozilla, Safari, etc.
	if (window.XMLHttpRequest) {
		try {
			pagina_requerida = new XMLHttpRequest();
		} catch (e) {
			return false;
		}
	} 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) {
				return false;
			}
		}
	} else
		return false;
	
	//Función de respuesta
	pagina_requerida.onreadystatechange = function() {
		cargarPagina(pagina_requerida, id_contenedor);
	}
	
	//se asignan los métodos open y send
	pagina_requerida.open('GET', url, true);
	pagina_requerida.send(null);
}
//Si todo es correcto y ha llegado el momento de poner la información requerida en su sitio en la pagina xhtml, ejecuta asi mismo los scripts internos de la pagina cargada al final
function cargarPagina(pagina_requerida, id_contenedor){
	
	if (pagina_requerida.readyState == 4 &&
		(pagina_requerida.status == 200 ||
		window.location.href.indexOf("http") == -1)) {
			div = document.getElementById(id_contenedor);
			div.innerHTML = pagina_requerida.responseText;
			//Al cargar la pagina dinamicamente, no se ejecutan los scripts, las siguientes lineas lo hacen
			var dinScripts = div.getElementsByTagName("script");//obtiene scripts de la pagina
			for (var i = 0; i < dinScripts.length; i++) {
				//Ejecuta (eval) el script segun el navegador
				if (document.all && navigator.userAgent.toLowerCase().indexOf('msie')!=-1) {//IE
					eval(dinScripts.item(i).innerHTML);
				} else {//otros
					eval(dinScripts[i].innerHTML);
				}
			}
	}
}

/***Imprime un link Ajax o un link sencillo***/
//Obtiene un 'link' con cierto 'texto' a un destino 'div' dado, para Ajax si 'noAjax'=false o sencillo si 'noAjax=true'
function getAjaxLink(noAjax, link, div, texto) {
	if (noAjax) {
		return ('<a href="' + link + '">' + texto + '</a>');
	} else {
		return ('<a href="javascript:void(0);" onclick="javascript:llamarAsincronoGet(\'' + link + '\', \'' + div + '\');">' + texto + '</a>');
	}
}

/****
---   Validación dinámica de campos   ---
****/
/***Campo no vacío***/
//Comprueba que un campo no esté vacío
function noVacio(id, mensaje) {
	field = document.getElementById(id);
	if (field.value == null || field.value == "") {
		alert(mensaje);
		field.focus();
		return false;
	}
	return true;
}

/***Campo sin numeros***/
//Comprueba que un campo no contenga numeros
function noNums(id, mensaje) {
	field = document.getElementById(id);
	if (field.value == null || field.value == "") {
		alert(mensaje);
		field.focus();
		return false;
	} else {
		for (i = 0; i < field.value.length; i++) {
			if (!isNaN(field.value.charAt(i))) {
				alert(mensaje);
				field.select();
				field.focus();
				return false;
			}
		}
	}
	return true;
}

/***Campo email con mal formato***/
//Comprueba que un campo de email sea correcto
function malEmail(id, mensaje) {
	field = document.getElementById(id);
	if (field.length == 0) {
		alert(mensaje);
		field.focus();
		return false;
	}
	atpos = field.value.indexOf("@");
	lastdotpos = field.value.lastIndexOf(".");
	if ((atpos < 1) || ((lastdotpos - atpos) < 2)) {
		alert(mensaje);
		field.select();
		field.focus();
		return false;
	}
	return true;
}

/***Campo password con minimo n caracteres e igual al campo de confirmacion***/
//Comprueba que un campo de password sea correcto
function malPassword(idp, idc, n, mensajen, mensajen2, mensajec) {
	fieldp = document.getElementById(idp);
	fieldc = document.getElementById(idc);
	if (fieldp.value == null || fieldp.value== "" || fieldp.length < n) {
		alert(mensajen + n + mensajen2);
		fieldp.focus();
		return false;
	}
	if (fieldc.value == null || fieldc.value == "" || fieldp.value != fieldc.value) {
		alert(mensajec);
		fieldc.focus();
		return false;
	}
	return true;
}

/***Campo password con minimo n caracteres e igual al campo de confirmacion***/
//Comprueba que un campo de password sea correcto
function checkChecked(id, numboolval, mensaje) {
	field = document.getElementById(id);
	if ((field.checked == true && numboolval == 0) ||
		 (field.checked == false && numboolval == 1)) {
		alert(mensaje);
		field.focus();
		return false;
	}
	return true;
}

/***Campo fecha con mal formato***/
//Comprueba que un campo de fecha sea correcto para el formato DD/MM/YYYY
function malaFechaSlashDDMMYYYY(id, mensaje) {
	field = document.getElementById(id);
	firstSlash = field.value.indexOf("/");
	lastSlash = field.value.lastIndexOf("/");
	dia = parseInt(field.value.substring(0,2), 10);
	mes = parseInt(field.value.substring(3,5), 10);
	anyo = parseInt(field.value.substring(6,10), 10);
	//validaciones de la cadena
	if ((field.value.length > 10) || (firstSlash != 2) || (lastSlash != 5) ||	//formato de la cadena
	    dia == null || isNaN(dia) ||
	    mes == null || isNaN(mes) ||
	    anyo == null || isNaN(anyo)) {
		alert(mensaje + " - cadena");
		field.select();
		field.focus();
		return false;
	}
	//validaciones de los numeros
	if (dia < 1 || dia > 31 || mes < 1 || mes > 12 || anyo < 0) {	//maximo y minimo numero de dias y meses, años positivos
		alert(mensaje + " - numero");
		field.select();
		field.focus();
		return false;
	}
	//validaciones de la fecha
	if (((mes == 4 || mes == 6 || mes == 9 || mes == 11) && (dia == 31)) ||	//meses con 30 dias
	    ((mes == 2) && (dia > 29) && ((anyo%4 == 0) && (anyo%100 != 0))) ||	//años bisiestos (multiplos de 4 y no multiplos de 100)
	    ((mes == 2) && (dia > 28) && ((anyo%4 != 0) || (anyo%100 == 0)))) {	//años no bisiestos
		alert(mensaje + " - fecha");
		field.select();
		field.focus();
		return false;
	}
	return true;
}

/****
---   Tratamiendo de cadenas   ---
****/
/***Parametros tipo GET en URL***/
//Devuelve un arreglo de cadenas con los valores de los parametros tipo GET de la URL desde la que se llama a la funcion
function getGet() {
	var g = new Array();

	//Cadena que aparece luego del '?' en la URL
	var urlSrch = window.location.search.substr(1);
	var urlSrchl = urlSrch.length;
	if (urlSrchl > 0) {
		g = urlSrch.split('&');	//genera arreglo con elementos separados por '&' en la cadena
	}
	return g;
}

/***Estado de una variable GET dada***/
//Si la variable esta establecida en el GET, devuelve true, si no devuelve false
function isGetVarSet(variable) {
	var g = getGet();	//obtiene parametros get en un arreglo
	var l = g.length;
	for (var i = 0; i < l; i++) {
		var p = new Array();
		var nind = g[i].indexOf('=');	//indice del primer '=' en el parametro get, separa nombre del valor
		if (nind == -1) {		//si no hubo ningun '=', el parametro get no tenia valor, es el puro nombre
			p[0] = g[i];
		} else {			//si si lo hubo, se divide el parametro en dos: nombre (ind 0) y valor (ind 1)
			p[0] = g[i].substr(0, nind);
			p[1] = g[i].substr(nind + 1);
		}
		if (p[0] == variable) {
			return true;
		}
	}
	return false;
}

/***Valor de una variable GET dada***/
//Si la variable esta establecida en el GET, devuelve su valor como cadena si existe, en cualquier otro caso devuelve ''
function getGetVarSet(variable) {
	var g = getGet();	//obtiene parametros get en un arreglo
	var l = g.length;
	for (var i = 0; i < l; i++) {
		var p = new Array();
		var nind = g[i].indexOf('=');	//indice del primer '=' en el parametro get, separa nombre del valor
		if (nind == -1) {		//si no hubo ningun '=', el parametro get no tenia valor, es el puro nombre
			continue;
		} else {			//si si lo hubo, se divide el parametro en dos: nombre (ind 0) y valor (ind 1)
			p[0] = g[i].substr(0, nind);
			p[1] = g[i].substr(nind + 1);
		}
		if (p[0] == variable) {
			return p[1];
		}
	}
	return '';
}
/***Actualiza valores para controles de fecha con formato DD/MM/YYYY***/
//Actualiza año
function actualizayear(id, defyear) {
	fch = document.getElementById(id);
	if (fch.value != 'DD/MM/YYYY') {
		year = fch.value.substr(6);
	} else {
		year = defyear;
	}
}
//Actualiza mes
function actualizamonth(id, defmon) {
	fch = document.getElementById(id);
	if (fch.value != 'DD/MM/YYYY') {
		mon = fch.value.substr(3,2);
		if (mon.substr(0,1) == '0') {
			mon = mon.substr(1,1);
		}
	} else {
		mon = defmon;
	}
}

/****
---   Ventanas emergentes   ---
****/
/***Ventana emergente***/
//Abre la ventana emergente
function popUp(URL, scrollbars)
{
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', " +
						"'toolbar = 0, scrollbars = '+scrollbars+', location = 0, statusbar = 0, " +
						"menubar = 0, resizable = 0, width = 640, height = 480');");
}
/***Ventana emergente completa***/
//Abre la ventana emergente con todas las barras
function popUp2(URL, scrollbars)
{
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', " +
						"'toolbar = 1, scrollbars = '+scrollbars+', location = 1, statusbar = 1, " +
						"menubar = 1, resizable = 1');");
}
/***Ventana emergente para mostrar imagenes***/
//parametros de la ventana
widthImgpopwin = 700;
heightImgpopwin = 550;
topImgpopwin = 85;
leftImgpopwin = 100;
textColor = 'black';
//Abre la ventana emergente
function enlrge(title, bg, imgnme, alttxt, textCol)
{
	OpenWin = this.open("",
				"CtrlWindow",
				"toolbar=No, menubar=No, location=No, scrollbars=yes, resizable=yes, status=No" +
				",width=" + widthImgpopwin +
				",height=" + heightImgpopwin +
				",left=" + leftImgpopwin +
				",top=" + topImgpopwin +
				",");
	imagenImgpopwin = imgnme;
	textoImgpopwin = alttxt + '&nbsp' + '&nbsp' + '&nbsp';
	fondoImgpopwin = bg;
	tituloImgpopwin = title;
	textColor = (typeof(textCol) == 'undefined') ? 'black' : textCol;
	setTimeout('imgpopwinUpd()', 500);
}
//Llena el contenido de la ventana emergente
function imgpopwinUpd()
{
	doc = OpenWin.document;
	doc.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>' + tituloImgpopwin + '<\/title><link href="../css/style.css" rel="stylesheet" type="text/css"><\/head><body style="background-image:url(\'' + fondoImgpopwin + '\'); background-attachment:fixed">');
	doc.write('<div style="text-align:center;"><img src="' + imagenImgpopwin + '" />');
	doc.write('<form><h2 style="font-weight:bold;color:' + textColor + ';" />' + textoImgpopwin + '<input class="boton" type="button" value="Cerrar" onclick="window.close()" /><\/form><\/div><\/body><\/html>');
	doc.close();
}

/****
---   Cierra la nota amarilla que avisa que la página está cargando   ---
---   @deprecated - sustituida por las funciones de x_core (CrossWeb DHTML), ver /lib/js/x_core.js
****/
function cerrarNota()
{
	NS4 = (document.layers) ? 1 : 0;
	IE4 = (document.all) ? 1 : 0;
	
	if (NS4) {
		document.nota.visibility = "hidden";
	} else {
		document.getElementById('nota').style.visibility="hidden";
	}
}

/****
---   Imprime un texto dado dentro de un elemento HTML
****/
function printText(id, text) {
	document.getElementById(id).innerHTML = text;
}

/****
---   Link a un mail de forma dinamica, intentando evitar spam   ---
****/
function correoelDin(showtag, showname, showhost, showdomain, showlink, clase)
{
	if (showlink == "") {
		showlink = showname + showtag + showhost + showdomain;
	}
	var cadena = '<a title="e-mail" class="' + clase + '" ' + 'href="mailto:' +
			showname + showtag + showhost + showdomain + '">' + showlink + '</a>'
	return cadena;
}

/****
---   Obtiene el año actual
****/
function actualAnyo() {
	hoy = new Date();
	return hoy.getFullYear();
}

/****
---   Estilo para una ventana de Internet Explorer: cambia los colores del scrollbar   ---
****/
/*function setScrollBarStyle()
{
	document.body.style.scrollbarFaceColor = "#666666";
	document.body.style.scrollbarShadowColor = "#ffffff";
	document.body.style.scrollbarHighlightColor = "#ffffff";
	document.body.style.scrollbar3dLightColor = "#ffffff";
	document.body.style.scrollbarDarkShadowColor = "#ffffff";
	document.body.style.scrollbarTrackColor = "#ffffff";
	document.body.style.scrollbarArrowColor = "#ffffff";
}*/

/****
---   Muestra años de la Casa, un nuevo año cada noviembre, a partir de 1981
****/
function printEdadCasa()
{
	var hoy = new Date();
	var actyear = hoy.getFullYear();
	var mes = hoy.getMonth();
	var dia = hoy.getDate();

	if ( (mes > 10) ||
			((mes == 11) && dia >= 1)) {
		var cadena = actyear - 1981;
	} else {
		var cadena = actyear - 1981 - 1;
	}
	return (cadena);
}

/****
---   Reloads the window if Nav4 resized
****/
function MM_reloadPage(init) {
	if (init == true) {
		with (navigator) {
			if ( (appName == "Netscape") &&
			     (parseInt(appVersion) == 4) ) {
				document.MM_pgW = innerWidth;
				document.MM_pgH = innerHeight;
				onresize = MM_reloadPage;
			}
		}
	} else if ( (innerWidth != document.MM_pgW) ||
		    (innerHeight != document.MM_pgH) ) {
		location.reload();
	}
}

/****
---   Crea link a favoritos-bookmark dependiendo navegador
****/
function createBookmarkLink(url, titulo) {
	if (window.sidebar) { //Mozilla Firefox Bookmark
		window.sidebar.addPanel(titulo, url, "");
	} else if (window.external) { //IE Favorite
		window.external.AddFavorite(url, title);
	} else if (window.opera && window.print) { //Opera Hotlist
		return true;
	}
}
