/*************************************************/
/*             WEB DEL CPR DE AVILÉS             */
/*     © 2004 Pablo Suárez - IES Valliniello     */
/* --------------------------------------------- */
/* JavaScript 1.2                                */
/* Funciones para manejo de formularios:         */
/* validación antes de envío, máscaras de for-   */
/* mato por tipo de dato y por correspondencia   */
/* exacta                                        */
/*************************************************/




// Detecta genéricamente el navegador por las funciones DOM soportadas y devuelve "IE" o "NS"
function navegador()
	{
	if(document.all) return "IE";
	else return "NS";
	}



// Ajusta todo el texto escrito en un <input> de tipo text a una máscara de formato genérica.
// A utilizar al salir de un campo o en un onKeyUp, cuando ya se añadió el carácter pulsado.
// Esta técnica admite adaptación para aplicar máscaras de correspondencia exacta (ej. "0999A").
function mascara_formato_expost(input_box, formato)
	{
	var i, resultado = "";
	var original = input_box.value;
	var uppercase = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÀÁÂÃÄÅÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÇ- ";
	var lowercase = "abcdefghijklmnñopqrstuvwxyzàáâãäåèéêëìíîïòóôõöùúûüç- ";
	var numbers  =  "0123456789";
	
	for(i=0;i<original.length;i++)
		{
		switch(formato)
			{
			case "solomayusculas":
				if(uppercase.indexOf(original.charAt(i))!=-1) resultado += original.charAt(i);
				else if(lowercase.indexOf(original.charAt(i))!=-1) resultado += uppercase.charAt(lowercase.indexOf(original.charAt(i)));
				break;
			case "solominusculas":
				if(lowercase.indexOf(original.charAt(i))!=-1) resultado += original.charAt(i);
				else if(uppercase.indexOf(original.charAt(i))!=-1) resultado += lowercase.charAt(uppercase.indexOf(original.charAt(i)));
				break;
			case "mayusculas":
				if(lowercase.indexOf(original.charAt(i))!=-1) resultado += uppercase.charAt(lowercase.indexOf(original.charAt(i)));
				else resultado += original.charAt(i);
				break;
			case "minusculas":
				if(uppercase.indexOf(original.charAt(i))!=-1) resultado += lowercase.charAt(uppercase.indexOf(original.charAt(i)));
				else resultado += original.charAt(i);
				break;
			case "numeros":
				if(numbers.indexOf(original.charAt(i))!=-1) resultado += original.charAt(i);
				break;
			}
		}
	input_box.value = resultado;
	}



// Acepta, convierte o anula la tecla pulsada según se ajuste a la máscara especificada.
// La tecla se obtiene a partir del objeto event, de propiedades distintas según IE ó NS.
function mascara_formato(obj_event, formato)
	{
	var caracter, cod_resultante;
	var uppercase = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÀÁÂÃÄÅÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÇ- ";
	var lowercase = "abcdefghijklmnñopqrstuvwxyzàáâãäåèéêëìíîïòóôõöùúûüç- ";
	var numbers  =  "0123456789";
	
	if(navegador()=="IE") caracter = String.fromCharCode(obj_event.keyCode);
	else caracter = String.fromCharCode(obj_event.which);
	switch(formato)
		{
		case "solomayusculas":
			if(uppercase.indexOf(caracter)!=-1) cod_resultante = caracter.charCodeAt(0);
			else if(lowercase.indexOf(caracter)!=-1) cod_resultante = uppercase.charCodeAt(lowercase.indexOf(caracter));
			else cod_resultante = 0;
			break;
		case "solominusculas":
			if(lowercase.indexOf(caracter)!=-1) cod_resultante = caracter.charCodeAt(0);
			else if(uppercase.indexOf(caracter)!=-1) cod_resultante = lowercase.charCodeAt(uppercase.indexOf(caracter));
			else cod_resultante = 0;
			break;
		case "mayusculas":
			if(lowercase.indexOf(caracter)!=-1) cod_resultante = uppercase.charCodeAt(lowercase.indexOf(caracter));
			else cod_resultante = caracter.charCodeAt(0);
			break;
		case "minusculas":
			if(uppercase.indexOf(caracter)!=-1) cod_resultante = lowercase.charCodeAt(uppercase.indexOf(caracter));
			else cod_resultante = caracter.charCodeAt(0);
			break;
		case "numeros":
			if(numbers.indexOf(caracter)!=-1) cod_resultante = caracter.charCodeAt(0);
			else cod_resultante = 0;
		}
	
	if(navegador()=="IE") obj_event.keyCode = cod_resultante;
	else obj_event.which = cod_resultante;
	}



// Devuelve la letra del NIF correspondiente al número de DNI que se pasa
function letra_nif(numero_dni)
	{
	var letras = "TRWAGMYFPDXBNJZSQVHLCKE";
	return letras.charAt(numero_dni % 23);
	}



// Intercepta el envío del formulario login si faltan datos y muestra un diálogo con un aviso
function validar_login()
	{
	if(document.login.usuario.value=="" || document.login.password.value=="")
		{
		if(document.login.usuario.value=="" && document.login.password.value!="") alert("El nombre de usuario está vacío.");
		else if(document.login.usuario.value!="" && document.login.password.value=="") alert("La contraseña está vacía.");
		else alert("El nombre de usuario y la contraseña están vacíos.");
		return false;
		}
	else return true;
	}



// Intercepta el envío del formulario con datos personales si no cumple las reglas de validez
function validar_personales(formulario)
	{
	var i, mensajes = "";
	var valido = true;
	
	if(formulario.password.value!=formulario.repassword.value)
		{
		valido = false;
		mensajes += "La confirmación del password no coincide\n";
		}				
	for(i=0;i<formulario.length;i++)
		{
		if(formulario.elements[i].type=="text" && formulario.elements[i].name!="e_mail_sec" && formulario.elements[i].value=="")
			{
			valido = false;
			mensajes += ("El campo " + formulario.elements[i].name + " es obligatorio\n");
			}
		}				
	if(mensajes!="") alert(mensajes);
	return valido;
	}

