/* Array de textos para campos obligatorios */
var required = new Array();
//required['invoiceYear'] = "El año de la factura es obligatorio";

/* Array de textos para campos con formato */
var format = new Array();
//format['invoiceYear'] = "El valor del año de la factura no es correcto (debe tener 4 dígitos)";
function showError(pestanya,message,frase){
    xGetElementById(pestanya).innerHTML = frase
    xGetElementById(message).style.display='inline'
}
function checkRequired(field) {
   
    if (e = xGetElementById(field)) {
        if (Trim(e.value) == "") {
            return false;
        }
    }
    return true;
}

function checkRequiredFields() {
    var msg = "";
    var args = checkRequiredFields.arguments;
    for (i = 0; i < args.length; i++) {   
        if (! checkRequired(args[i])) {
            msg += '- ' +required[args[i]];
            if(i != args.length -1){
                //msg += '<br/>'
                msg += '\n'
            }
        }   
    }
    return msg;
}

/*function checkDate(field) {
    if (e = xGetElementById(field)) {
        campo = e.value;        
        if(campo.charAt(2)=='/' && campo.charAt(5)=='/' ){
        }else{return false}

    }
    return true;
}*/
function checkYear(field) {
    if (e = xGetElementById(field)) {
    }
    return true;
}
function checkInteger(field) {
    var reg1 = /(^-?\d\d*$)/;   // valido
    if (e = xGetElementById(field)) {
        if (Trim(e.value) != "") {
            return reg1.test(e.value);
        }
    }
    return true;
}
function checkDecimal(field) {
    var reg1 = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/; // valido
    if (e = xGetElementById(field)) {
        if (Trim(e.value) != "") {
            return reg1.test(e.value);
        }
    }
    return true;
}
function checkEmail(field) {
    var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
    var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; // valid
    
    if (e = xGetElementById(field)) {
        if (Trim(e.value) != "") {
            return ((! reg1.test(e.value)) && (reg2.test(e.value)));
        }
    }
    return true;
}

function checkFieldsFormat() {
    var msg = "";
    var args = checkFieldsFormat.arguments;
    for (i = 0; i < args.length; i++) {
        if (args[i][1] == "date") {
            if (! checkDate(args[i][0])) {msg += '\n-' + format[args[i][0]];}
        } else if (args[i][1] == "integer") {
            if (! checkInteger(args[i][0])) {msg += '\n-' + format[args[i][0]];}
        } else if (args[i][1] == "year") {
            if (! checkYear(args[i][0])) {msg += '\n-' + format[args[i][0]];}
        } else if (args[i][1] == "decimal") {
            if (! checkDecimal(args[i][0])) {msg += '\n-' + format[args[i][0]];}
        } else if (args[i][1] == "email") {
            if (! checkEmail(args[i][0])) {msg += '\n-' + format[args[i][0]];}
        }
    }
    return msg;
}


function validateInt(field){
    var checkStr = xGetElementById(field).value;
    var i = 0;
    while(i < checkStr.length)
	{
            ch = checkStr.charAt(i); 
            valor = parseInt(ch);
            if (isNaN(valor)) {             	
		return false;
            }else{
                i++;}
        }
      return true;
    }

//comprobar formato hh:mm
function checkHourFormat(hour){
    hh = parseInt(hour.substring(0,2));
    mm = parseInt(hour.substring(3,5));
    if(hour.length != 5){
        return false;
    }else if(hour.charAt(2) != ':'){
        return false;
    }else if(isNaN(hh)){
        return false;
    }else if(isNaN(mm)){
        return false;
    }else if(hh<0 || hh>23 || mm<0 || mm>59){
        return false;
    }else return true;
}

/*function checkEmail(field) {
    var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
    var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; // valid
    if (e = xGetElementById(field)) {
        if (Trim(e.value) != "") {
            return ((! reg1.test(e.value)) && (reg2.test(e.value)));
        }
    }
    return true;
}*/

function checkDate(field) {
var msg="";
    if (e = xGetElementById(field)) {
       campo = e.value;      
       dia=campo.split("/")[0];
       mes=campo.split("/")[1];
       anyo=campo.split("/")[2];
    if( (isNaN(dia)==true) || (isNaN(mes)==true) || (isNaN(anyo)==true) )
    {
        msg = "La fecha introducida debe estar formada sólo por números (dd/mm/yyyy)";
        return msg;
    }
    if(dia.length!=2 || mes.length!=2 || anyo.length!=4)
    {
        msg = "La fecha introducida debe teber el formato (dd/mm/yyyy)";
        return msg;
    }
    if(anyoBisiesto(anyo))
           febrero=29;
       else
           febrero=28;
       /**
       * si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
       */
       if ((mes<1) || (mes>12))
       {
           msg = "El mes introducido no es valido. Por favor, introduzca un mes correcto";       
           return msg;
       }
       /**
       * si el mes introducido es febrero y el dia es mayor que el correspondiente 
       * al año introducido > alertamos y detenemos ejecucion
       */
       if ((mes==2) && ((dia<1) || (dia>febrero)))
       {
           msg = "El dia introducido no es valido. Por favor, introduzca un dia correcto"; 
           return msg;
       }
       /**
       * si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
       */
       if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
       {
           msg = "El dia introducido no es valido. Por favor, introduzca un dia correcto"; 
           return msg;
       }
       /**
       * si el mes introducido es de 30 dias y el dia introducido es mayor de 301 > alertamos y detenemos ejecucion
       */
       if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
       {
           msg = "El dia introducido no es valido. Por favor, introduzca un dia correcto"; 
           return msg;
       }
       /**
       * si el mes año introducido es menor que 1900 o mayor que 2010 > alertamos y detenemos ejecucion
       * NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
       */
       if ((anyo<1900) || (anyo>2050))
       {
           msg = "El año introducido no es valido. Por favor, introduzca un año entre 1900 y 2050"; 
           return msg;
       } 
       /**
       * en caso de que todo sea correcto > enviamos los datos del formulario
       * para ello debeis descomentar la ultima sentencia
       */
       else
          return true;    
    }else{
        xGetElementById(field).value=''
        return false;
    }
}
function anyoBisiesto(anyo)
    {
        /**
        * si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925
        */
        if (anyo < 100)
            var fin = anyo + 1900;
        else
            var fin = anyo ;

        /*
        * primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto
        * es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
        */
        if (fin % 4 != 0)
            return false;
        else
        {
            if (fin % 100 == 0)
            {
                /**
                * si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
                */
                if (fin % 400 == 0)
                {
                    return true;
                }
                /**
                * si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
                */
                else
                {
                    return false;
                }
            }
            /**
            * si es divisible por 4 y no es divisible por 100 > el año es bisiesto
            */
            else
            {
                return true;
            }
        }
}

function getDaysDiff(fec1, fec2){
    //funcion que devuelve la diferencia de las dos fechas en dias
    fecIni = xGetElementById(fec1).value;
    fecFin = xGetElementById(fec2).value;
    if(fecIni != '' && fecFin !=''){
        diaI = fecIni.substring(0,2)
        mesI = fecIni.substring(3,5)
        anyoI = fecIni.substring(6,10)
        var dateI = new Date(anyoI,mesI-1,diaI);

        diaF = fecFin.substring(0,2)
        mesF = fecFin.substring(3,5)
        anyoF = fecFin.substring(6,10)
        var dateF = new Date(anyoF,mesF-1,diaF);

        var tiempoRestante = dateF.getTime() - dateI.getTime() //tiempo en milisegundos
        var dias = Math.floor(tiempoRestante / (1000 * 60 * 60 * 24)) //pasamos los milisegundos a dias
        return dias
    }
    return -1
}   

function compareDates(fec1,fec2){
  fecIni = xGetElementById(fec1).value;
  fecFin = xGetElementById(fec2).value;

  var MAYOR = 1;//rango de fechas normal,la 1º fecha es anterior a la segunda
  var MENOR= -1;//la 2º fecha es anterior a la primera
  var IGUAL= 0;//ambas fechas son iguales

 if(fecIni != '' && fecFin !=''){
     diaI = fecIni.substring(0,2)
     mesI = fecIni.substring(3,5)
     anyoI = fecIni.substring(6,10)
     var dateI = new Date(anyoI,mesI-1,diaI);
                
     diaF = fecFin.substring(0,2)
     mesF = fecFin.substring(3,5)
     anyoF = fecFin.substring(6,10)
     var dateF = new Date(anyoF,mesF-1,diaF);

    if(dateF.getTime() < dateI.getTime()){ errtype = MENOR; return errtype;}
    else if(dateF.getTime() > dateI.getTime()){ errtype = MAYOR; return errtype;}
    else if(dateF.getTime() == dateI.getTime()){ errtype = IGUAL;return errtype;}
}
}

    //Comprobar si es nie o nif y llamar a la funcion de chequear nif
    function checkNIE(nie){

        if(nie.substr(0,1) == 'X'){
            nie = 0 + nie.substr(1,8)                            
        }

        return checkNif(nie);
    }

    function checkNif(nif){
            dni=nif.substring(0,nif.length-1)
            let=nif.charAt(nif.length-1)
            if (!isNaN(let))
             {              
              return false
             }
            else
             {
              cadena="TRWAGMYFPDXBNJZSQVHLCKET"
              posicion = dni % 23
              letra = cadena.substring(posicion,posicion+1)
              if (letra!=let.toUpperCase())
               {                
                return false
               }
             }
            return true;
    }

    /*Comprobar el CIF de facturacion*/
    function checkCIFFacture(texto){
        
        if(texto.substr(0,2) == 'ES'){
            texto = texto.substr(2,9);
        }
        return checkCIF(texto);

    }

    function checkCIF(texto){
        
        var pares = 0;
        var impares = 0;
        var suma;
        var ultima;
        var unumero;
        var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I");
        var xxx;
        
        texto = texto.toUpperCase();

        var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g);
         if (!regular.exec(texto)) return false;

         ultima = texto.substr(8,1);

         for (var cont = 1 ; cont < 7 ; cont ++){
             xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0";
             impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
             pares += parseInt(texto.substr(cont,1));
         }
         xxx = (2 * parseInt(texto.substr(cont,1))).toString() + "0";
         impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
         
         suma = (pares + impares).toString();
         unumero = parseInt(suma.substr(suma.length - 1, 1));
         unumero = (10 - unumero).toString();
         if(unumero == 10) unumero = 0;
        
         if ((ultima == unumero) || (ultima == uletra[unumero]))
             return true;
         else
             return false;

    } 
                                       
function checkUrl(cadena)   
  { 
    var http = "http:??";              
                                         
    var es_url;                       
    if(cadena.length <= 7)            
      es_url = false;                  
    else  
      es_url = http.indexOf(cadena.substring(0, 7)) == - 1;   
    return(es_url);   
  }  

