/* Definimos ahora los conjuntos de caracteres que podemos introducir en los campos
   dividiendolos en grupos para poder manejarlos independientemente */
var numeros = "0123456789";
var minusculas = "abcdefghijklmnopqrstuvwxyzáéíóúñü"
var mayusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"
var espacios = " ";   
var especiales = "ÁÉÍÓÚáéíóúâôîäëöüÀÈÒàèòñÑÇç-.,@€";

/* Definimos los mensajes de error que se visualizarán
   en caso de haber errores en la introducción de los campos */
var pVacio = "ERROR:\nNo puede dejar este espacio vacío" 
var pAlfanumerico = "ERROR:\nIngrese un texto que contenga solo letras y/o numeros";
var pNumerico = "ERROR:\nIngrese un valor numérico correcto";
var pEmail = "ERROR:\nIngrese una dirección de correo electrónico válida";
var pFormato = "ERROR:\nIngrese una fecha correcta.\nFormato: dd/mm/aa";

/* Comenzamos a implementar las funciones */
function estaVacio(s){   
  return ((s == null) || (s.length == 0))
}

/* La función esBlanco está implementada par evitar que se introduzcan caractéres en blanco
   en los campos donde se verifique */
function esBlanco(s){
  var i;
  for (i = 0; i < s.length; i++){   
     var c = s.charAt(i);
     if (espacios.indexOf(c) == -1) return false;}
  return true;
}

function esAlfanumerico(s){
  var i,c;  
  for (i = 0; i < s.length; i++){   
      c = s.charAt(i);    //Saca cada carácter de la cadena introducida
      if (! ((mayusculas.indexOf( c ) != -1 ) ||   
             (minusculas.indexOf( c ) != -1 ) ||   
    	     (espacios.indexOf( c ) != -1 ) ||     
	     (especiales.indexOf( c ) != -1 ) ||  
	     (numeros.indexOf( c ) != -1 ))) return false;
  }
  return true;
}

function esNumerico(s){   
    var i,c;
    for (i = 0; i < s.length; i++){   
       c = s.charAt(i);  //Saca cada carácter de la cadena introducida
       if (numeros.indexOf( c ) == -1 ) return false;} //Comprueba que sea un número
    //if (s.length != ex) return false;   
    return true;
}

function esEmail(s){
    if (esBlanco(s)) return false;  //No se permiten los caracteres en blanco
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@")){i++}  //Busca la arroba
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    while ((i < sLength) && (s.charAt(i) != ".")){i++}  //Busca el punto
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function valFormato(cadena,mascara){
    var Count;
    var ok=true;
    var lonCadena = cadena.length;
    var lonMascara = mascara.length;	

    //Comprobamos que la cadena y la máscara no estén vacías o que sean de distinta longitud
    if ((lonCadena == 0) || (lonMascara == 0) || (lonCadena != lonMascara)) ok = false; 

    //Verificamos el formato de la fecha
    for (Count=0; Count<=cadena.length; Count++){
        cadCar = cadena.substring(Count, Count+1);  //Saca el carácter de la cadena
        masCar = mascara.substring(Count, Count+1); //Saca el carácter de la máscara
        if (masCar=='#'){
           if (numeros.indexOf(cadCar) == -1 ) ok = false;
        }        
        else if (masCar != cadCar) ok = false;
    }
    if (ok==false) return false;   
    else {	   
	  var dd = parseInt(cadena.substring(0,2),10);
	  var mm = parseInt(cadena.substring(3,5),10);    
	  if ((dd < 1) || (dd > 31) || (mm < 1) || (mm >12)) ok=false;
	  else if ((dd > 28) && (mm == 2)) ok=false;
	  else if  ((dd > 30) && ((mm == 4) || (mm == 6) || (mm == 9) || (mm == 11))) ok=false;		          
          if (ok==false) return false;
	  return true;
         }
}

/* Muestra un aviso por pantalla de que ha habido un error, y muestra un mensaje diferente
   en función del tipo de dato sobre el cual se ha producido */
function aviso(campo, s){
    campo.focus();    //Se posiciona en el campo
    campo.select();   //Selecciona el contenido del campo de edicion
    alert(s);         //Muestra el mensaje de error
    return false;
}

function comprueba(campo, tipo, vacio, ex){   
    var mensaje;

    //Asociamos el mensaje de error correspondiente en función del tipo de comprobación a realizar
    if( tipo == esAlfanumerico ) mensaje = pAlfanumerico;
    else if( tipo == esNumerico ) mensaje = pNumerico;
    else if( tipo == esEmail ) mensaje = pEmail;
    else if( tipo == valFormato ) mensaje = pFormato;        

    //Comprueba si el campo esta vacío y si puede estarlo
    if ((vacio == true) && (estaVacio(campo.value))) return true;
    else if ((vacio == false) && (estaVacio(campo.value))) return aviso(campo,pVacio);

    //Deriva la comprobación específica en función del tipo
    if (tipo == esNumerico){
       if (tipo(campo.value) == true) return true;
       else return aviso(campo,mensaje);}
    else if (tipo ==valFormato){
	        if (tipo(campo.value,"##/##/##") == true) return true;
            else return aviso(campo,mensaje);}
    else if (tipo(campo.value) == true) return true;
         else return aviso(campo,mensaje);
}

function verifica(){
  if (! (comprueba(document.f.nombre,esNumerico,false) &&
	    comprueba(document.f.clave,esNumerico,false))) return false;
  return true;
}