// ----------------------------------------------------------------------
//           FormCheq.js (c) ChaTo [www.chato.cl] 1998
//           basado en FormChek.js (c) Eric Krock 1997 Netscape Corp.
// ----------------------------------------------------------------------
// Rutinas para verificacion de formularios, basado en FormChek.js
// Parte del curso "TEJEDORES DEL WEB" http://www.TejedoresDelWeb.com/
// ---------------------------------------------------------------------- 

var defaultEmptyOK = false
var checkNiceness = true;
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñü"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"
var whitespace = " \t\n\r";
var phoneChars = "()-+ ";
var mMessage = "Error: no puede dejar este espacio vacio"
var pPrompt = "Error: ";
var pAlphanumeric = "ingrese un texto que contenga solo letras y/o numeros";
var pAlphabetic   = "ingrese un texto que contenga solo letras";
var pInteger = "ingrese un numero entero";
var pNumber = "ingrese un numero";
var pPhoneNumber = "ingrese un número de teléfono";
var pEmail = "ingrese una dirección de correo electrónico válida";
var pName = "ingrese un texto que contenga solo letras, numeros o espacios";
var pNice = "no puede utilizar comillas aqui";

function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isWhitespace (s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        // si el caracter en que estoy no aparece en whitespace,
        // entonces retornar falso
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}


function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";

    // Buscar por el string, si el caracter no esta en "bag", 
    // agregarlo a returnString
    
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}


function stripCharsNotInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }

    return returnString;
}


function stripWhitespace (s)
{   return stripCharsInBag (s, whitespace)
}

function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}

function stripInitialWhitespace (s)
{   var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
    return s.substring (i, s.length);
}

function isLetter (c)
{
    return( ( uppercaseLetters.indexOf( c ) != -1 ) ||
            ( lowercaseLetters.indexOf( c ) != -1 ) )
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if (!isDigit(c)) return false;
        } else { 
            if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}


function isNumber (s)
{   var i;
    var dotAppeared;
    dotAppeared = false;
    if (isEmpty(s)) 
       if (isNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isNumber.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
	
		if(c == "," ){ c="."}
	
        if( i != 0 ) {
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c)) return false;
        } else { 
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}

function isAlphabetic (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is letter.
        var c = s.charAt(i);

        if (!isLetter(c))
        return false;
    }
    return true;
}

function isAlphanumeric (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }

    return true;
}


function isName (s)
{
    if (isEmpty(s)) 
       if (isName.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    
    return( isAlphanumeric( stripCharsInBag( s, whitespace ) ) );
}

function isPhoneNumber (s)
{   var modString;
    if (isEmpty(s)) 
       if (isPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isPhoneNumber.arguments[1] == true);
    modString = stripCharsInBag( s, phoneChars );
    return (isInteger(modString))
}

function isEmail (s)
{
    if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function isNice(s)
{
        var i = 1;
        var sLength = s.length;
        var b = 1;
        while(i<sLength) {
                if( (s.charAt(i) == "\"") || (s.charAt(i) == "'" ) ) b = 0;
                i++;
        }
        return b;
}

function statBar (s)
{   window.status = s
}

function warnEmpty (theField)
{   theField.focus()
    alert(mMessage)
    statBar(mMessage)
    return false
}

function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    statBar(pPrompt + s)
    return false
}


function checkField (theField, theFunction, emptyOK, s)
{   
    var msg;
    if (checkField.arguments.length < 3) emptyOK = defaultEmptyOK;
    if (checkField.arguments.length == 4) {
        msg = s;
    } else {
        if( theFunction == isAlphabetic ) msg = pAlphabetic;
        if( theFunction == isAlphanumeric ) msg = pAlphanumeric;
        if( theFunction == isInteger ) msg = pInteger;
        if( theFunction == isNumber ) msg = pNumber;
        if( theFunction == isEmail ) msg = pEmail;
        if( theFunction == isPhoneNumber ) msg = pPhoneNumber;
        if( theFunction == isName ) msg = pName;
    }
    
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;

    if ((emptyOK == false) && (isEmpty(theField.value))) 
        return warnEmpty(theField);

    if ( checkNiceness && !isNice(theField.value))
        return warnInvalid(theField, pNice);

    if (theFunction(theField.value) == true) 
        return true;
    else
        return warnInvalid(theField,msg);

}



function nif(dni) {

	if (!/^[A-Za-z0-9]{9}$/.test(dni)) {
		bien2=false
	}else{
	  numero = dni.substr(0,dni.length-1);
	  let = dni.substr(dni.length-1,1);
	  numero = numero % 23;
	  letra='TRWAGMYFPDXBNJZSQVHLCKET';
	  letra=letra.substring(numero,numero+1);
	  if (letra!=let) 
		bien2=false
	  else
		bien2=true;
	}

return bien2
}



function DiferenciaFechas (f1,f2) {   
  
 
   CadenaFecha1 = f2 
   CadenaFecha2 = f1
      
   
   var fecha1 = new fecha( CadenaFecha1 )      
   var fecha2 = new fecha( CadenaFecha2 )   
      
   
   var miFecha1 = new Date( fecha1.anio, fecha1.mes, fecha1.dia )   
   var miFecha2 = new Date( fecha2.anio, fecha2.mes, fecha2.dia )   
  
   
   var diferencia = miFecha1.getTime() - miFecha2.getTime()   
   var dias = Math.floor(diferencia / (1000 * 60 * 60 * 24))   
   var segundos = Math.floor(diferencia / 1000)   
    
      
   return dias  
}   
  
function diferencia_anio (f1,f2) {   
  
 
   CadenaFecha1 = f2 
   CadenaFecha2 = f1
      
   var fecha1 = new fecha( CadenaFecha1 )      
   var fecha2 = new fecha( CadenaFecha2 )   
      
   var miFecha1 = new Date( fecha1.anio, fecha1.mes, fecha1.dia )   
   var miFecha2 = new Date( fecha2.anio, fecha2.mes, fecha2.dia )   
   
   var diferencia = fecha1.anio - fecha2.anio   
  
      
   return diferencia  
}  
  
function fecha( cadena ) {   
  
   
   var separador = "/"  
  
   
   if ( cadena.indexOf( separador ) != -1 ) {   
        var posi1 = 0   
        var posi2 = cadena.indexOf( separador, posi1 + 1 )   
        var posi3 = cadena.indexOf( separador, posi2 + 1 )   
        this.dia = cadena.substring( posi1, posi2 )   
        this.mes = cadena.substring( posi2 + 1, posi3 )   
        this.anio = cadena.substring( posi3 + 1, cadena.length )   
   } else {   
        this.dia = 0   
        this.mes = 0   
        this.anio = 0      
   }   
}  


function validar_email(email){
	
	var p=true
	
	if(email!=''){
		p=isEmail(email)
	}
	
	if(p==false){
		alert("El email introducido no es válido.")	
	}
}


function replacechars(entry) {
	
	var temp =entry
	var cad="a"
	cad = temp.replace(',','.')

return cad;
}


        function validaFecha(cadena) {
            var fecha;
            var dia;
            var mes;
            var anio;
            fecha = cadena.toString();
            //Obtener y validar el día
            var primerSep=fecha.indexOf("\/");
            if(primerSep==1||primerSep==2){
                dia=parseInt(fecha.substring(0,primerSep));
                if(dia==NaN||dia<1||dia>31)return false;
            } else return false;
            //Obtener y validar el mes
            var segundoSep=fecha.substring(primerSep+1,fecha.length).indexOf("\/");
            if (segundoSep == 1 || segundoSep == 2) {
                mes=parseInt(fecha.substring(primerSep+1,primerSep+segundoSep+1));
                if(mes==NaN||mes<1||mes>12)return false;
            } else return false;
            //Obtener y validar el año
            anio = parseInt(fecha.substring(primerSep+segundoSep+ 2, fecha.length));
            if (anio == NaN) return false;
            //Comprobar si el año es bisiesto
            var bisiesto;
            if (anio % 4 == 0) {
                if (anio % 100 == 0 && anio % 400 != 0) bisiesto = false;
                else bisiesto = true;
            } else bisiesto = false;
            //Validar que el dia es válido teniendo en cuenta el mes
            if ((mes == 2 || mes == 4 || mes == 6 || mes == 9 || mes == 11) && (dia > 30)) return false;
            if ((mes == 2 && bisiesto && dia > 29) || (mes == 2 && !bisiesto && dia > 28)) return false;
            //Si llegamos aqui es que la fecha es válida
            return true; 
        }