// JavaScript Document

function openExternal() {
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName('a');
	for (var i=0;i < anchors.length;i++) {
		var thisAnchor = anchors[i];
		if (thisAnchor.getAttribute('href') && thisAnchor.getAttribute('rel') == 'external') {
			thisAnchor.target = '_blank';
		}
	}
}

function verificaAdmin() {
	var codpostal = trim(document.forms[0].cp.value);
	
	if (trim(document.forms[0].nombre.value) == "" &&
		trim(document.forms[0].apellidos.value) == "" &&
		trim(document.forms[0].empresa.value) == "" &&
		codpostal.length < 5) {
			alert('Debe rellenar al menos un campo de búsqueda');
			return false;
	}

	if (document.forms[0].conforme_politica.checked == false) {
		alert('Debe aceptar la Politica de Privacidad del Colegio');
		return false;
	}

	return true;
}

function submenu(opc, ic, ca, ta) {
	var x, ic, ca, ta;
	
	if (opc == '') {	// Ocultar los 3 submenus
		for (x=0;x < ic.length;x++) document.getElementById('i' + ic[x]).style.display = 'none';
		for (x=0;x < ca.length;x++) document.getElementById('c' + ca[x]).style.display = 'none';
		for (x=0;x < ta.length;x++) document.getElementById('t' + ta[x]).style.display = 'none';
	}
	
	if (opc == 'i') {	// Mostrar I.P.C. y ocultar los otros dos
		for (x=0;x < ic.length;x++) {
			if (document.getElementById('i' + ic[x]).style.display == 'block')
				document.getElementById('i' + ic[x]).style.display = 'none';
			else
				document.getElementById('i' + ic[x]).style.display = 'block';
		}
		
		for (x=0;x < ca.length;x++) document.getElementById('c' + ca[x]).style.display = 'none';
		for (x=0;x < ta.length;x++) document.getElementById('t' + ta[x]).style.display = 'none';
	}
	
	if (opc == 'c') {	// Mostrar Circulares y actas y ocultar los otros dos
		for (x=0;x < ca.length;x++) {
			if (document.getElementById('c' + ca[x]).style.display == 'block')
				document.getElementById('c' + ca[x]).style.display = 'none';
			else
				document.getElementById('c' + ca[x]).style.display = 'block';
		}
		
		for (x=0;x < ic.length;x++) document.getElementById('i' + ic[x]).style.display = 'none';
		for (x=0;x < ta.length;x++) document.getElementById('t' + ta[x]).style.display = 'none';
	}

	if (opc == 't') {	// Mostrar Tablón de anuncios y ocultar los otros dos
		for (x=0;x < ta.length;x++) {
			if (document.getElementById('t' + ta[x]).style.display == 'block')
				document.getElementById('t' + ta[x]).style.display = 'none';
			else
				document.getElementById('t' + ta[x]).style.display = 'block';
		}
		
		for (x=0;x < ic.length;x++) document.getElementById('i' + ic[x]).style.display = 'none';
		for (x=0;x < ca.length;x++) document.getElementById('c' + ca[x]).style.display = 'none';
	}
}

function parserInt(cadena) {
	for (var x=0;x < cadena.length;x++) {
		if (cadena.substr(x, 1) != "0") break;
	}
	
	return (x == cadena.length) ? 0 : parseInt(cadena.substr(x));
}

function bisiesto(year) {
	return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) ? 1 : 0;
}

function checkdate(fecha) {
	var patron, partes, ano, mes, dia;
	
	patron = /^\d{2}\/\d{2}\/\d{4}$/;
	
	if (patron.test(fecha)) {
		partes = fecha.split('/');
		
		dia = parserInt(partes[0]);
		mes = parserInt(partes[1]);
		ano = parserInt(partes[2]);
		
		if (ano < 1901 || ano > 2099)
			return false;
		else if (mes < 1 || mes > 12)
			return false;
		else if (dia < 1 || dia > 31)
			return false;
		else if (dia == 31 && (mes == 2 || mes == 4 || mes == 6 || mes == 9 || mes == 11))
			return false;
		else if (dia == 30 && mes == 2)
			return false;
		else if (dia == 29 && mes == 2 && !bisiesto(ano))
			return false;
		else
			return true;
	}
	else
		return false;
}

function trim(s) {
	return s.replace(/^\s*|\s*$/g,"");
}

function mail_valido(dircorreo) {

	// Función que comprueba si una dirección de e-mail es válida.
	// Primero declaramos algunas variables a 0.

	var conarroba=0,conpunto=0,posarroba=0,cuentarrobas=0,primarroba,x,car,ext,partes;

	// Las direcciones de correo son todas en minúscula.
	
	dircorreo=dircorreo.toLowerCase();
	
	// Si no contiene nada $dircorreo, no es válida

	if (dircorreo == '') return false;

	// Debe tener una y sólo una arroba.

	primarroba=dircorreo.indexOf('@');
	if (primarroba != -1) {
		cuentarrobas++;
		if (dircorreo.indexOf('@',primarroba + 1) != -1)
			cuentarrobas++;
	}
	if (cuentarrobas != 1) return false;
	
	// Al menos un punto, correspondiente como mínimo a la extensión del dominio.
	
	if (dircorreo.indexOf('.') == -1) return false;
	
	// No puede tener dos puntos seguidos.
	
	if (dircorreo.indexOf('..') != -1) return false;
	
	// Empezamos a comprobar cada carácter por separado.
	
	for (x=0;x<dircorreo.length;x++) {
	
		// No puede tener otro carácter no alfanumérico diferente de punto, arroba o guión medio o bajo.
		
		car=dircorreo.charCodeAt(x);
		
		if (car < 45 || car == 47 || (car > 57 && car < 64) || (car > 64 && car < 95) || (car > 95 && car < 97) || car > 122) return false;
	
		// Si es el carácter arroba, y se encuentra el primero en la dirección, o en una posición que no deja
		// espacio para un mínimo dominio (...@x.xx), no es válida la dirección.
		
		if (dircorreo.substr(x,1) == "@" && (x == 0 || x > (dircorreo.length - 5))) return false;
		
		// En caso contrario al anterior, cuando se encuentre la arroba empieza a buscarse al menos un punto,
		// para lo cual, activamos dos variables: $conarroba a true (encontrada) y $posarroba con la posición
		// de la arroba en la dirección.
		
		if (dircorreo.substr(x,1) == "@") {
			conarroba=1;
			posarroba=x;
		}
		
		// Si se encuentra un punto después de la arroba ($conarroba=true) y está inmediatamente después
		// de dicha arroba (p.e.: usuario@.com), no es correcta.
		
		if (dircorreo.substr(x,1) == "." && conarroba == 1 && x < (posarroba + 2)) return false;
		
		// En caso contrario, si la dirección termina con un punto y menos de dos caracteres como extensión
		// (usuario@dominio. o usuario@dominio.x), tampoco es válida, ya que lo mínimo es extensión .es, por ejemplo
		
		if (dircorreo.substr(x,1) == "." && x > (dircorreo.length - 3)) return false;
		
		// Y por último, si se encuentra el último punto, después de la arroba, con una extensión de 2 a 4 caracteres,
		// $conpunto se pone a true
		
		if (dircorreo.substr(x,1) == "." && conarroba == 1 && x >= (dircorreo.length - 5)) conpunto=1;
	}
	
	// Si la dirección tiene arroba y punto, con las verificaciones ya realizadas,
	// la dirección parece ser correcta.
	
	if (conpunto && conarroba) {

		// Verificamos la extensión

		ext = dircorreo.substr(posarroba + 1);
		ext = ext.substr(ext.indexOf('.') + 1);
		partes = ext.split('.');
		if (partes.length > 3)
			return false;
		else if (partes.length == 3 && ext != "e.telefonica.net")
			return false;
		else if (partes.length == 2 && (partes[0] != "com" || partes[1].length < 2 || partes[1].length > 3))
			return false;
		else
			return true;
	}
	
	// En cualquier otro caso, no será válida.
	
	else return false;
}
	
function verif_tfno(objeto) {
	var x, partes, result = "";
	partes = objeto.value.split('-');
	if (partes.length == 1 && trim(partes[0]) == "")
		objeto.value = "";
	else {
		tfno = trim(partes[0]);
		if (partes.length == 2)
			coment = trim(partes[1]);
		else
			coment = "";

		for (x=0;x < tfno.length;x++) {
			if ((x == 0 && tfno.charCodeAt(x) == 43) || (tfno.charCodeAt(x) > 47 && tfno.charCodeAt(x) < 58))
				result += tfno.substr(x, 1);
			else if (tfno.charCodeAt(x) != 32 && tfno.charCodeAt(x) != 44 && tfno.charCodeAt(x) != 46 && tfno.charCodeAt(x) != 47)
				break;
		}
		
		objeto.value = (result != "") ? ((coment != "") ? (result + "-" + coment) : (result)) : ("");
	}
}

function validar_fecha(fecha) {
	var dia, mes, anno, diamax;
	if (fecha.length != 8 || isNaN(fecha))
		return false;
	else {
		dia = fecha.substr(0,2);
		mes = fecha.substr(2,2);
		anno = fecha.substr(4,4);
		if (anno < 1900 || anno > 2099)
			return false;
		else if (mes < 1 || mes > 12)
			return false;
		else if (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)
			diamax = 31;
		else if (mes == 4 || mes == 6 || mes == 9 || mes == 11)
			diamax = 30;
		else if (bisiesto(anno))
			diamax = 29;
		else
			diamax = 28;

		if (dia >= 1 && dia <= diamax)
			return true;
		else
			return false;
	}
}

function validar_nif(nif) {
	var dni, letra, patron, first, x;
	
	nif = str_replace(".", "", nif);
	nif = str_replace("-", "", nif);
	patron = new RegExp("([0-9]{8})([A-Za-z]{1})","gi"); // NIF
	if (patron.test(nif)) {
		dni = nif.substr(0, nif.length - 1);
		letra = nif.substr(nif.length - 1);

		first = "";
		for (x=0;x < dni.length;x++) {
			if (first == "")
				first=dni.substr(x,1);
			else if (first != dni.substr(x,1))
				break;
		}
		if (x == dni.length)
			return false;

		if (letra == calcularletra(dni) || letra.toUpperCase() == calcularletra(dni))
			return true;
		else
			return false;
	}
	else {
		var patron = new RegExp("([A-HK-NP-S]{1})([0-9]{7})([A-J0-9]{1})","gi"); // CIF
		if (patron.test(nif))
			return true;
		else {
			var patron = new RegExp("([X]{1})([0-9]{7})([A-Za-z]{1})","gi"); // Residente
			if (patron.test(nif)) {
				dni = nif.substr(1, 7);
				letra = nif.substr(nif.length - 1);

				first = "";
				for (x=0;x < dni.length;x++) {
					if (first == "")
						first=dni.substr(x,1);
					else if (first != dni.substr(x,1))
						break;
				}
				if (x == dni.length)
					return false;

				if (letra == calcularletra(dni) || letra.toUpperCase() == calcularletra(dni))
					return true;
				else
					return false;
			}
			else
				return false;
		}
	}
}

function calcularletra(nif) {
	var cadena = 'TRWAGMYFPDXBNJZSQVHLCKET';
	var posicion = nif % 23;
	return cadena.charAt(posicion);
}

function str_replace(buscar, reemplazar, objeto) {
	var x, result = "", trozos = new Array();

	trozos = objeto.split(buscar);

	for (x=0;x < trozos.length;x++) {
		if (x > 0)
			result += reemplazar;
		result += trozos[x];
	}
	return result;
}
