/* 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 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";
var pHora = "ERROR:\nIngrese una hora correcta.\nFormato: HH:MM";

/* 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, ex){   
    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 (ex != 0) {
		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;
         }
}

function valHora(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 hh = parseInt(cadena.substring(0,2),10);
	  var mm = parseInt(cadena.substring(3,5),10);    
	  if ((hh < 0) || (hh > 12)) ok=false;
	  else if ((mm < 0) || (mm > 59)) ok=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;      
    else if( tipo == valHora ) mensaje = pHora;        

    //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, ex) == 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 ==valHora){
	        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(origen){
  if (origen.id=='formalq') {
	  if (! (
		 comprueba(document.getElementById('fechal'),valFormato,false) &&
		 comprueba(document.getElementById('fechas'),valFormato,false) &&
		 comprueba(document.getElementById('adultos'),esNumerico,false,0) &&
		 comprueba(document.getElementById('ninos'),esNumerico,false,0) &&
		 comprueba(document.getElementById('nom'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('ape'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('tel'),esNumerico,false,9) &&
		 comprueba(document.getElementById('ciudad'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('pais'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('obs'),esAlfanumerico,true) &&
	 	 comprueba(document.getElementById('mail'),esEmail,false)
		 )) return false;  
  } else if (origen.id=='formven') {
	  if (! (
		 comprueba(document.getElementById('nom'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('ape'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('tel'),esNumerico,false,0) &&
		 comprueba(document.getElementById('ciudad'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('pais'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('obs'),esAlfanumerico,true) &&
	 	 comprueba(document.getElementById('mail'),esEmail,false)
		 )) return false;  
  } else if (origen.id=='formcon') {
	  if (! (
		 comprueba(document.getElementById('nom'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('ape'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('tel'),esNumerico,false,9) &&
		 comprueba(document.getElementById('ciudad'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('pais'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('obs'),esAlfanumerico,true) &&
	 	 comprueba(document.getElementById('mail'),esEmail,false)
		 )) return false;  
  } else if (origen.id=='formren') {
	  if (! (		 
		 comprueba(document.getElementById('ffecharec'),valFormato,false) &&
		 comprueba(document.getElementById('ffechadev'),valFormato,false) &&
		 comprueba(document.getElementById('fdialleg'),valFormato,false) &&
		 comprueba(document.getElementById('fnumlleg'),esAlfanumerico,false,15) &&
		 comprueba(document.getElementById('fhoralleg'),valHora,false,5) &&
		 comprueba(document.getElementById('fdiasal'),valFormato,false) &&
		 comprueba(document.getElementById('fnumsal'),esAlfanumerico,false,15) &&
		 comprueba(document.getElementById('fhorasal'),valHora,false,5) &&
		 comprueba(document.getElementById('nom'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('ape'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('dir'),esAlfanumerico,false,80) &&
		 comprueba(document.getElementById('ciudad'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('pais'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('fechan'),valFormato,false) &&
		 comprueba(document.getElementById('tel'),esNumerico,false,9) &&
		 comprueba(document.getElementById('fax'),esNumerico,true,9) &&		 
		 comprueba(document.getElementById('licnum'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('licclase'),esAlfanumerico,false,30) &&
		 comprueba(document.getElementById('licfecha'),valFormato,false) &&
		 comprueba(document.getElementById('alojcalle'),esAlfanumerico,true,80) &&
		 comprueba(document.getElementById('alojciudad'),esAlfanumerico,true,80) &&
		 comprueba(document.getElementById('alojurb'),esAlfanumerico,true,80) &&
	 	 comprueba(document.getElementById('mail'),esEmail,true)
		 )) return false;  
  } else if (origen.id=='formami') {
	  if (! (
		 comprueba(document.getElementById('nom'),esAlfanumerico,false,30) &&
	 	 comprueba(document.getElementById('mail'),esEmail,false) &&
	 	 comprueba(document.getElementById('email'),esEmail,false) 
		 )) return false;  
  }
  return true;
}

