/*
Funciones 
NUL() Se pone la primera, si el campo esta en blanco no mira nada, si tiene algo comprueba que son válidos
INI(valor) Se pone la primera, si el campo esta en blanco se inicializa al valor por defecto y no se mira nada mas, sino se comprueba que es válido
RDO(campo,valor)Se pone la primera, si el valor del radio button seleccionado coincide con el valor pasado,comprueba que los datos metidos sean válidos, sino actua como NUL
CHK(campo) Se pone la primera,si esta checked ,comprueba que los datos metidos sean válidos, sino actua como NUL
CHQ() Comprueba si el campo esta marcado

---NUL y (RDO o CHK) no pueden estar en el control del mismo campo ---
TXT() No comprueba nada,admitimos todo tipo de texto
LOG() Solo (a..z,A..Z,0..9,_)
MAX(max) Ke la longitud del campo no exceda de max
MIN(min) Ke la longitud del campo no sea inferior a min
EQL(campo,descripcion) Comprueba ke el valor del campo sea igual al pasado
DNI() Comprueba ke el valor sea un DNI inculiye obtencion de la letra
INT() Comprueba ke el valor sea un numero entero, positivo o negativo, con o sin signo
DEC(max) Comprueba ke el valor sea un numero decimal, positivo o negativo,con o sin signo, y el número máxmimo de decimales que puede tener, 0 para infinitos
DIG() Combrueba que solo contenga dígitos
VMI(min) Comprueba que el valor del campo no sea inferior a min
VMA(max) Comprueba que el valor del campo no sea superior a max
TLF() Comprueba que sean números de télefono , un maximo de 3 separados por " / "
EML() Comprueba que se introduzca un Email
CIF() Comprueba que se introduzca un CIF, o un NIF/DNI o NIE
CMF() Alert para confirmar que el valor del campo es superior al indicado
*/
function fvalida(vform,arrv){
  if (fvalidacion(vform,arrv)){
    alert('bien')
    return true
  }
  else{
    alert('mal')
    return false
  }
  return false
}

function fvalidacion(vform,arrv){
  var i;var j;var aux;
  for (i=0;i<arrv.length;i++){
    if(arrv[i]){  
      aux=arrv[i].split(';')
      if(aux.length > 2 && vform[aux[0]]){
      
        for (j=2;j<aux.length;j++){
          switch  (aux[j]){
            case 'TXT':{        
              //if (!fvTXT(vform[aux[0]]))
              //  return false
              break;
            }
            case 'LOG':{
              if (!fvLOG(vform[aux[0]],aux[1]))
                return false
              break;
            }
            case 'MAX':{
              if (!fvMAX(vform[aux[0]],aux[1],aux[j+1]))
                return false
              j++
              break;
            }  
            case 'MIN':{
              if (!fvMIN(vform[aux[0]],aux[1],aux[j+1]))
                return false
              j++
              break;
            }
            case 'EQL':{
              if (!fvEQL(vform[aux[0]],aux[1],vform[aux[j+1]],aux[j+2]))
                return false
              j++;j++;
              break;
            }
            case 'DNI':{
              if (!fvDNI(vform[aux[0]],aux[1]))
                return false
              break;
            }
            case 'NUL':{
              if (fvNUL(vform[aux[0]]))
                j=aux.length
              break;
            }
            case 'INI':{
              if (fvINI(vform[aux[0]],aux[j+1]))
                j=aux.length
              j++;
              break;
            }
            case 'INT':{
              if (!fvINT(vform[aux[0]],aux[1]))
                return false
              break;
            }
            case 'DEC':{
              if (!fvDEC(vform[aux[0]],aux[1],aux[j+1]))
                return false
              j++;
              break;
            }
            case 'DIG':{
              if (!fvDIG(vform[aux[0]],aux[1]))
                return false
              break;
            }
            case 'TLF':{
              if (!fvTLF(vform[aux[0]],aux[1]))
                return false
              break;
            }
            case 'EML':{
              if (!fvEML(vform[aux[0]],aux[1]))
                return false
              break;
            }
            case 'RDO':{
              if (fvRDO(vform[aux[j+1]],aux[j+2])){
                j++;j++;
              }
              else if (fvNUL(vform[aux[0]]))
                j=aux.length
              else{
                j++;j++;
              } 
              break;
            }
            case 'CHK':{
              if (fvCHK(vform[aux[j+1]]))
                j++
              else if (fvNUL(vform[aux[0]]))
                j=aux.length
              else
                j++
              break;
            }
            case 'CHQ':{
              if (!fvCHQ(vform[aux[0]],aux[1]))
                return false
              j++;
              break;              
            }
            case 'VMI':{
              if (!fvVMI(vform[aux[0]],aux[1],aux[j+1]))
                return false
              j++;
              break;
            }
            case 'VMA':{
              if (!fvVMA(vform[aux[0]],aux[1],aux[j+1]))
                return false
              j++;
              break;
            }
            case 'CMF':{
              if (!fvCMF(vform[aux[0]],aux[1],aux[j+1]))
                return false
              j++;
              break;
            }
            case 'CIF':{
              if (!fvCIF(vform[aux[0]],aux[1]))
                return false
              break;
            }
            case 'FCH':{
              if (!fvFCH(vform[aux[0]],aux[1]))
                return false
              break;
            }
            default:{
              alert('Hay un error en la página y no se puede continuar, consulte con el administrador para subsanar el error.  Gracias')
              return false
            }
          }
        }
      }
      else{
        alert('Hay un error en la página y no se puede continuar, consulte con el administrador para subsanar el error.  Gracias.')
        return false
      }
    }  
  }
  return true
}

function fvTXT(obj){
  return true
}
function fvLOG(obj,campo){
  var i;var j;var ch;
  var chars ='abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789ÁÉÍÓÚÜáéíóúüÇç '
  for (i=0;i<obj.value.length; i++){
    ch = obj.value.charAt(i);	
    for (j=0;j<chars.length;j++) if (ch==chars.charAt(j)) break;
    if (j==chars.length){
	  alert('El campo '+ campo +' sólo puede contener letras, dígitos y espacios')
      obj.focus()
      return false
    }
  }
  return true
}
function fvMAX(obj,campo,max){
  if(obj.value.length<=parseInt(max))
    return true
  else{
  	alert('La longitud del campo "' + campo +'" no debe ser superior a ' + max )
    obj.focus()
    return false
  }
}
function fvMIN(obj,campo,min){
  if(obj.value.length>=parseInt(min))
    return true
  else{
  	alert('La longitud del campo "' + campo +'" debe ser superior o igual a ' + min )
    obj.focus()
    return false
  }
}
function fvEQL(obj,campo,obj2,campo2){
  var iguales = true
  var i
  if(obj.value.length==obj2.value.length){
    for(i=0;i<obj.value.length && obj.value.charAt(i)==obj2.value.charAt(i);i++){}
    if (i<obj.value.length) iguales = false
  }
  else
  	iguales = false
  if (!iguales){
  	alert('El campo "'+ campo +'" y el campo "'+ campo2 +'" deben ser iguales' )
    obj.focus()
  }
  return iguales
}
function fvDNI(obj,campo){
  var correcto = true
  if (obj.value.length!=9)
    correcto = false
  else if (!isint(obj.value.substr(0,8)))
  	correcto = false
  else{ 
    var cadena = 'TRWAGMYFPDXBNJZSQVHLCKET';
    if (cadena.charAt(obj.value.substr(0,8) % 23)!= obj.value.charAt(8).toUpperCase())
      correcto = false
  }
  if (!correcto){
    alert('El formato del campo "'+ campo +'" es incorrecto o la letra no coincide\n Ejemplo 12345678A\nRecuerde: si la longitud del número de su DNI (sin la letra) es de 7 caracteres, debe insertar un 0 delante de su número')
    obj.focus()
  }
  return correcto
}
function fvNUL(obj){
  return (obj.value =='')
}
function fvINI(obj,valor){
  if (obj.value ==''){
    obj.value = valor
    return true
  }
  return (false)
}

function fvINT(obj,campo){
  var ini=0
  var correcto = true
  if (obj.value.length==0)
    correcto = false
  else{ 
    if (obj.value.substr(0,1)=='-' || obj.value.substr(0,1)=='+')
      ini = 1
    if (!isint(obj.value.substr(ini)))
      correcto = false
  }
  if (!correcto){
    alert('El valor del campo "'+ campo +'" debe ser un número entero, sin espacios, ni decimales, ni caracteres')
    obj.focus()
  }
    return correcto
}
function fvDEC(obj,campo,max){
  var chars = "0123456789,"
  var correcto = true
  var coma = 0
  var i; var j; var ch; var cadena
  if (obj.value.length==0)
    correcto = false
  else{
    obj.value=obj.value.replace('.',',')
    if (obj.value.substr(0,1)=='-' || obj.value.substr(0,1)=='+')
      cadena = obj.value.substr(1)
    else
      cadena = obj.value
    for (i=0;i<cadena.length;i++){
      ch = cadena.charAt(i);
      for (j=0;j<chars.length;j++) 
        if (ch==chars.charAt(j)){
          if(ch==',') coma++
          break;
        }
	  if (chars.length==j || coma>1) {
	    correcto = false
	    break;
	  }
	}
  }
  if (correcto && coma && parseInt(max)>0)
    if(obj.value.search(',')!=-1)
      if (obj.value.substr(obj.value.search(',')+1).length > parseInt(max))
        correcto = false
  if(!correcto){
  	cadena = 'El valor del campo "'+ campo +'" debe ser un número decimal con una coma decimal como máximo, sin espacios, ni caracteres'
  	if (parseInt(max)>0)
  	  cadena += ' y con '+ max +' decimales como máximo'
    alert(cadena)
    obj.focus()
  }
  return correcto
}
function fvDIG(obj,campo){
  if (!isint(obj.value)){
    alert ('El campo "'+ campo +'" debe contener solo dígitos del 0 al 9 ')
    obj.focus()
    return false
  }
  return true
}
function fvTLF(obj,campo){
  var aux;var i; var cadena
  var correcto = true
  if (obj.value.length > 33)
    correcto = false
  else{
    aux = obj.value.split(' / ')
    for (i=0;i<aux.length;i++){
      if (aux[i].length != 9 || (!isint(aux[i]))){
      correcto = false
      break;
      }
    }
  }
  if (!correcto){
    cadena = 'El campo "'+ campo +'" puede contener hasta un maximo de 3 números separados por " / " \n'
    cadena += 'Los números no contendran ni espacios ni simbolos intermedios\n Ejemplos:\n'
    cadena += 'Un número :900000000\nDos númeos :900000000 / 600000000\nTres números :900000000 / 600000000 / 900000000'
    alert(cadena)
    obj.focus()
  }
  return correcto
}
function fvEML(obj,campo){
  var aux;var aux2;var aux3;var cadena;var i
  var correcto = true
  aux = obj.value.split(',')
  for (i=0;i<aux.length;i++) if (aux[i].length < 8) break;
  if (i<aux.length || i==0)
  	correcto = false
  else
    for (i=0;i<aux.length && correcto;i++){
      aux2 = aux[i].split('@')
      if (aux2.length!=2)
        correcto = false
      else if(!fvTxtEml(aux2[0]) || !fvTxtEml(aux2[1] || aux2[1].length<6)){
        correcto = false}
      else if (aux2[1].search(/\.\./i)!=(-1)|| aux2[1].search(/\./i)==(-1))
        correcto = false
      else{
        aux3=aux2[1].split('.')
        if (aux3[aux3.length - 1].length < 2)
          correcto = false
      }
    }
  if (!correcto){
    cadena = 'El campo "'+ campo +'" puede contener mas de una dirección de correo, separadas por "," sin espacios\n'
    cadena += 'El campo solo puede contener letas , digitos , puntos y "@" la letra "Ñ" no esta permitida\n'
    cadena += 'La longitud mínima del campo es de 7 caracteres\n Ejemplos:\n'
    cadena += 'Uno :correo@correo.com\nDos :correo1@correo.com,correo2@correo.es'
    alert(cadena)
    obj.focus()
  }
  return correcto
}


function isint(dato){
  var digitos="0123456789";
  var i;var j;var ch
  for (i=0;i<dato.length;i++){
    ch = dato.charAt(i);
    for (j=0;j<digitos.length;j++) if (ch==digitos.charAt(j)) break;
    if (digitos.length==j) return false
  }
  return true
}
function fvTxtEml(dato){
  var i;var j;var ch;
  var chars ='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._-'
  for (i=0;i<dato.length; i++){
    ch = dato.charAt(i);	
    for (j=0;j<chars.length;j++) if (ch==chars.charAt(j)) break;
    if (j==chars.length) return false
  }
  return true
}
function fvRDO(obj,valor){
  var i;var j;var iguales = true
  for (i=0;i<obj.length && !obj[i].checked;i++){}
  if (i==obj.length)
    iguales = false
  else
    if(obj[i].value.length==valor.length){
      for(j=0;j<valor.length && obj[i].value.charAt(j)==valor.charAt(j);j++){}
      if (j<valor.length) iguales = false
    }
    else
      iguales = false
  return iguales
}
function fvCHK(obj){
  return (obj.checked)
}
function fvCHQ(obj,campo){
  if (!obj.checked){
  	alert('Debes marcar la casilla ' + campo);
    obj.focus();
    return false
  }
  return true
}
function fvVMI(obj,campo,min){
  if(parseFloat(obj.value.replace(',','.'))>=parseFloat(min.replace(',','.')))
    return true
  else{
  	alert('El valor del campo "' + campo +'" debe ser superior o igual a ' + min )
    obj.focus()
    return false
  }
}
function fvVMA(obj,campo,max){
  if(parseFloat(obj.value.replace(',','.'))<=parseFloat(max.replace(',','.')))
    return true
  else{
  	alert('El valor del campo "' + campo +'" no debe ser superior a ' + max )
    obj.focus()
    return false
  }
}

function fvCMF(obj,campo,max){
	if(parseFloat(obj.value)>parseFloat(max))
		return confirm('Está asignando un valor al campo "'+campo+'" mayor de "'+max+'" \nAsegurese de que es correcto antes de continuar.');
	else
		return true;
}


function fvCIF(obj,campo){
  var suma;var control;var i;
  var correcto = true
  var cadena = 'TRWAGMYFPDXBNJZSQVHLCKET';

  if (obj.value.length!=9)
    correcto = false
  else {
    for(i=0;i<15;i++) if (obj.value.charAt(0).toUpperCase()=='ABCDEFGHPQSKLMX'.charAt(i)) break;
    if (i==15){
      for(i=0;i<cadena.length;i++) if (obj.value.charAt(8).toUpperCase()==cadena.charAt(i)) break;
      if (i==cadena.length)
        correcto = false
      else
        if (cadena.charAt((obj.value.substr(0,8)) % 23)!= obj.value.charAt(8).toUpperCase())
          correcto = false
        else
          return true
    }
    else if (obj.value.charAt(0).toUpperCase()=='X')
      if (!isint(obj.value.substr(1,7)))
        correcto = false
      else
        if (cadena.charAt(('0'+''+obj.value.substr(1,7)) % 23)!= obj.value.charAt(8).toUpperCase())
          correcto = false
        else
          return true
    else{
      suma =parseInt(obj.value.charAt(2))+parseInt(obj.value.charAt(4))+parseInt(obj.value.charAt(6))
      for(i=1;i<8;i+=2)
        suma += ((2*parseInt(obj.value.charAt(i))) % 10)+ parseInt((''+((2*parseInt(obj.value.charAt(i)))/10)).substr(0,1))
        control = 10 - (suma % 10)
      if ((obj.value.charAt(0).toUpperCase()=='P') || (obj.value.charAt(0).toUpperCase()=='S')){
        correcto = (obj.value.charAt(8).toUpperCase() == String.fromCharCode(64+control))
        }
      else{ 
        if (control == 10)
          control = 0
        correcto= ( obj.value.charAt(8) == control);
      }
    }
  }
  if (!correcto){
    alert('El campo "'+ campo +'" debe contener un CIF o NIF o NIE correcto,sin espacios\n Ejemplos\nCIF: A12345678\nNIF: 12345678A\nNIE: X1234567A')
    obj.focus()
  }
  return correcto
}

function fvFCH(obj,campo){

  var i;var cont;var anterior;
  var correcto;var dia,mes,anno
  correcto = true;
  cont = 0;dia=0;mes=0;anno=0;
  anterior = 0;
  for (i=0;i<obj.value.length;i++)
    if (obj.value.charAt(i)=="/"){
      cont ++
      if (cont == 1 ){
        if (i==0){
          correcto = false
          break
      	}
        if(!isint(obj.value.substr(0,i))){
          correcto = false
          break;
        }
        dia = parseInt(obj.value.substr(0,i));
        anterior = i+1;
      }
      else if (cont == 2 ){
        if(!isint(obj.value.substr(anterior,i-anterior))){
          correcto = false;
          break;
		}
		else{
		  mes = parseInt(obj.value.substr(anterior,i-anterior));
		  anterior = i+1;
		}
		if (!isint(obj.value.substr(anterior,obj.value.length-anterior))){
		  correcto = false;
          break;
		}
		else{
		  anno = parseInt(obj.value.substr(anterior,obj.value.length-anterior));
		  break;
        }
      }
    }
    if(!correcto || anno < 1901 || anno > 2059)
      correcto = false
    else if (mes < 1 || mes > 12)
      correcto = false
    else if (dia < 1 || dia > flongitudMes(mes - 1,anno))  
      correcto = false
    if (!correcto)
      alert('El campo "' + campo + '" contiene una fecha incorrecta.\nLa fecha tiene que tener formato DD/MM/AAAA y no puede ser inferior a 1/1/1901 ni superior a 31/12/2059')
    return correcto
}
  
function flongitudMes(mes,agno)
{
	if(mes==3||mes==5||mes==8||mes==10) return 30;
	else if (mes==1 && bisiesto(agno)) return 29;
	else if (mes==1) return 28;
	else return 31;
}

function bisiesto(agno)
{
	if (((agno%4==0) && (agno%100!=0)) || (agno%400==0)) return true;
	else return false;
}
