/*
* Author(s)   : Jordi Raya
* Date        : 19/02/2003
* Version     : 1.07
* Last update : 20/10/2003
* File        : validador.js
* Description : Funciones de validación de campos de formularios
*   El comportamiento de las validaciones, junto con una descripción de los parámetros, pueden observarse en el archivo validador.htm
*   Necesita un archivo con los mensajes de error que se vayan a utilizar, tipo validador_errores_es.js
*   Necesita el archivo formato.js para construir los objetos de tipo Formato que se utilizen
*   Las funciones públicas devolverán true o false en función del parámetro msg, o una Array con los mensajes de error si msg es null
*/

// cadenas de validación

var cadenaAlfabeto      = "ABCÇDEFGHIJKLMNÑOPQRSTUVWXYZabcçdefghijklmnñopqrstuvwxyzÁÉÍÓÚÀÈÌÒÌÙÄËÏÖÜÂÊÎÔÛáéíóúàèìòìäëïöüâêîôû";
var cadenaAlfabetoASCII = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var cadenaLetrasNombres = "ABCÇDEFGHIJKLMNÑOPQRSTUVWXYZabcçdefghijklmnñopqrstuvwxyzÁÉÍÓÚÀÈÌÒÌÙÄËÏÖÜÂÊÎÔÛáéíóúàèìòìäëïöüâêîôû-'";
var cadenaNumeros       = "1234567890";
var cadenaEmail         = cadenaNumeros + cadenaAlfabetoASCII + "@._-";
var cadenaASCII         = "";
for (n=32; n<128; n++){ cadenaASCII += String.fromCharCode(n); }

// funciones públicas de validación alfanuméricas

function isTexto(obj,nom,obl,msg,foc,spa){
  var args = isTexto.arguments;	
  var cad = getInputString(obj);	
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  errors = addErrors(checkCommonText(cad,nom,obl,spa,null,null,6,7,args),errors); 
  return processErrors(obj,msg,foc,errors);  	  	
}

function isTextoASCII(obj,nom,obl,msg,foc,spa){
  var args = isTextoASCII.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  errors = addErrors(checkCommonText(cad,nom,obl,spa,cadenaASCII,errorCaracteresNoValidos,6,7,args),errors);
  return processErrors(obj,msg,foc,errors); 
}

function isAlfanumerico(obj,nom,obl,msg,foc,spa){
  var args = isAlfanumerico.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  errors = addErrors(checkCommonText(cad,nom,obl,spa,cadenaAlfabeto + cadenaNumeros + " ",errorSoloAlfanumerico,6,7,args),errors);
  return processErrors(obj,msg,foc,errors); 
}

function isAlfanumericoASCII(obj,nom,obl,msg,foc,spa){
  var args = isAlfanumericoASCII.arguments;
  var cad = getInputString(obj);  
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  errors = addErrors(checkCommonText(cad,nom,obl,spa,cadenaAlfabetoASCII + cadenaNumeros + " ",errorSoloAlfanumericoASCII,6,7,args),errors);   
  return processErrors(obj,msg,foc,errors);  
}

function isAlfanumericoFormato(obj,nom,obl,msg,foc,spa,formato){
  var args = isAlfanumericoFormato.arguments;
  var cad = getInputString(obj);  
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  var cadComparar = null;
  if (formato != null){
    cadComparar = cadenaNumeros + formato.getIdioma().getAlfabeto();
  }  
  errors = addErrors(checkCommonText(cad,nom,obl,spa,cadComparar,errorCaracteresNoValidos,7,8,args),errors);  
  return processErrors(obj,msg,foc,errors);
}

function isAlfabetico(obj,nom,obl,msg,foc,spa){	
  var args = isAlfabetico.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  errors = addErrors(checkCommonText(cad,nom,obl,spa,cadenaAlfabeto + " ",errorSoloAlfabetico,6,7,args),errors); 
  return processErrors(obj,msg,foc,errors);
}

function isAlfabeticoASCII(obj,nom,obl,msg,foc,spa){	
  var args = isAlfabeticoASCII.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  errors = addErrors(checkCommonText(cad,nom,obl,spa,cadenaAlfabetoASCII + " ",errorSoloAlfabeticoASCII,6,7,args),errors);   
  return processErrors(obj,msg,foc,errors);
}

function isAlfabeticoFormato(obj,nom,obl,msg,foc,spa,formato){
  var args = isAlfabeticoFormato.arguments;
  var cad = getInputString(obj);  
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  var cadComparar = null;
  if (formato != null){
    cadComparar = formato.getIdioma().getAlfabeto();
  }  
  errors = addErrors(checkCommonText(cad,nom,obl,spa,cadComparar,errorCaracteresNoValidos,7,8,args),errors);  
  return processErrors(obj,msg,foc,errors);
}

function isNombre(obj,nom,obl,msg,foc,spa){	
  var args = isNombre.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  errors = addErrors(checkCommonText(cad,nom,obl,spa,cadenaLetrasNombres + " ",errorCaracteresNoValidos,6,7,args),errors);    
  return processErrors(obj,msg,foc,errors);  
}

function isNumerico(obj,nom,obl,msg,foc,spa){
  var args = isNumerico.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  errors = addErrors(checkCommonText(cad,nom,obl,spa,cadenaNumeros + " ",errorSoloNumerico,6,7,args),errors);   
  return processErrors(obj,msg,foc,errors);
}

function isValidoInclusivo(obj,nom,obl,msg,foc,spa,cadValidacion){
  var args = isValidoInclusivo.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }
  errors = addErrors(checkCommonText(cad,nom,obl,spa,cadValidacion + " ",errorCaracteresNoValidos,7,8,args),errors);   
  return processErrors(obj,msg,foc,errors);
}

function isValidoExclusivo(obj,nom,obl,msg,foc,spa,cadInvalidacion){
  var args = isValidoExclusivo.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  } 
  if (spa != null){
    errors = addErrors(checkSpaces(cad,nom,spa),errors);
  }
  if (cadInvalidacion != null){
    errors = addErrors(checkNotInString(cad,nom,cadInvalidacion,errorCaracteresNoValidos),errors);
  }
  if ((args.length > 7) && (args[7] != null)){
    errors = addErrors(checkMinLength(cad,nom,args[7]),errors);    
  }  	
  if ((args.length > 8) && (args[8] != null)){
    errors = addErrors(checkMaxLength(cad,nom,args[8]),errors);	
  }  
  return processErrors(obj,msg,foc,errors);
}


// funciones públicas de validación numéricas

function isEntero(obj,nom,obl,msg,foc,formato){	
  var args = isEntero.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  }  
  if (formato == null){
    formato = new Formato();
  }
  errors = addErrors(checkUnsigned(cad,nom),errors);
  errors = addErrors(checkInString(cad,nom,cadenaNumeros + formato.getSeparadorMiles(),errorCaracteresNoValidos),errors);
  errors = addErrors(checkFormatInteger(cad,nom,formato),errors);      
  if (errors.length == 0){   
    if ((args.length > 6) && (args[6] != null)){
      errors = addErrors(checkMinIntegerValue(cad,nom,args[6]),errors);    
    }  	
    if ((args.length > 7) && (args[7] != null)){
      errors = addErrors(checkMaxIntegerValue(cad,nom,args[7]),errors);	
    }      
  }
  if ((args.length > 8) && (args[8] != null)){
    errors = addErrors(checkMinLength(cad,nom,args[8]),errors);    
  }  	
  if ((args.length > 9) && (args[9] != null)){
    errors = addErrors(checkMaxLength(cad,nom,args[9]),errors);	
  }   
  return processErrors(obj,msg,foc,errors);
}

function isEnteroSigno(obj,nom,obl,msg,foc,formato){	
  var args = isEnteroSigno.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  }  
  if (formato == null){
    formato = new Formato();
  }
  var signo = getSign(cad);  
  cad = getUnsignedPart(cad); 
  errors = addErrors(checkInString(cad,nom,cadenaNumeros + formato.getSeparadorMiles(),errorCaracteresNoValidos),errors);
  cad = signo + cad;
  errors = addErrors(checkFormatInteger(cad,nom,formato),errors);      
  if (errors.length == 0){   
    if ((args.length > 6) && (args[6] != null)){
      errors = addErrors(checkMinIntegerValue(cad,nom,args[6]),errors);    
    }  	
    if ((args.length > 7) && (args[7] != null)){
      errors = addErrors(checkMaxIntegerValue(cad,nom,args[7]),errors);	
    }      
  }
  if ((args.length > 8) && (args[8] != null)){
    errors = addErrors(checkMinLength(cad,nom,args[8]),errors);    
  }  	
  if ((args.length > 9) && (args[9] != null)){
    errors = addErrors(checkMaxLength(cad,nom,args[9]),errors);	
  }   
  return processErrors(obj,msg,foc,errors);
}

function isDecimal(obj,nom,obl,msg,foc,formato){	
  var args = isDecimal.arguments;
  var cad = getInputString(obj);      
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  }  
  if (formato == null){
    formato = new Formato();
  }
// comprobacion y tratamiento de entero  
  if ( (args.length > 8) && (args[8] == 0) && (!isCharInString(cad,formato.getSimboloDecimal())) ){
    errors = addErrors(checkUnsigned(cad,nom),errors);
    errors = addErrors(checkInString(cad,nom,cadenaNumeros + formato.getSeparadorMiles(),errorCaracteresNoValidos),errors);
    errors = addErrors(checkFormatInteger(cad,nom,formato),errors);
    if (errors.length == 0){   
      if ((args.length > 6) && (args[6] != null)){
        errors = addErrors(checkMinIntegerValue(cad,nom,args[6]),errors);    
      }  	
      if ((args.length > 7) && (args[7] != null)){
        errors = addErrors(checkMaxIntegerValue(cad,nom,args[7]),errors);	
      }      
    }
    if ((args.length > 8) && (args[8] != null)){
      errors = addErrors(checkMinLength(cad,nom,args[8]),errors);    
    }  	
    if ((args.length > 9) && (args[9] != null)){
      errors = addErrors(checkMaxLength(cad,nom,args[9]),errors);	
    }
    return processErrors(obj,msg,foc,errors);     
  }  
// fin de la comprobacion    
  errors = addErrors(checkUnsigned(cad,nom),errors);
  errors = addErrors(checkInString(cad,nom,cadenaNumeros + formato.getSimboloDecimal() + formato.getSeparadorMiles(),errorCaracteresNoValidos),errors);
  errors = addErrors(checkFormatDecimal(cad,nom,formato),errors);          
  if (errors.length == 0){
    var decimalPart = getDecimalPart(cad,formato);
    var numeroDecimales = decimalPart.length;
    if (numeroDecimales == 0){
      errors[errors.length] = changeMsg(errorDecimalSinDecimales,nom,null,null,null,null);
    }   
    if ((args.length > 6) && (args[6] != null)){
      errors = addErrors(checkMinIntegerValue(cad,nom,args[6],formato),errors);    
    }  	
    if ((args.length > 7) && (args[7] != null)){
      errors = addErrors(checkMaxIntegerValue(cad,nom,args[7],formato),errors);	
    }
    if ((args.length > 8) && (args[8] != null)){
      errors = addErrors(checkMinDecimalLength(cad,numeroDecimales,nom,args[8]),errors);    
    }  	
    if ((args.length > 9) && (args[9] != null)){
      errors = addErrors(checkMaxDecimalLength(cad,numeroDecimales,nom,args[9]),errors);	
    }      
  }  
  if ((args.length > 10) && (args[10] != null)){
    errors = addErrors(checkMinLength(cad,nom,args[10]),errors);    
  }  	
  if ((args.length > 11) && (args[11] != null)){
    errors = addErrors(checkMaxLength(cad,nom,args[11]),errors);	
  }    
  return processErrors(obj,msg,foc,errors);
}

function isDecimalSigno(obj,nom,obl,msg,foc,formato){	
  var args = isDecimalSigno.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  }  
  if (formato == null){
    formato = new Formato();
  }
  var signo = getSign(cad);  
  cad = getUnsignedPart(cad); 
// comprobacion y tratamiento de entero  
  if ( (args.length > 8) && (args[8] == 0) && (!isCharInString(cad,formato.getSimboloDecimal())) ){   
    errors = addErrors(checkInString(cad,nom,cadenaNumeros + formato.getSeparadorMiles(),errorCaracteresNoValidos),errors);
    cad = signo + cad;
    errors = addErrors(checkFormatInteger(cad,nom,formato),errors);      
    if (errors.length == 0){   
      if ((args.length > 6) && (args[6] != null)){
        errors = addErrors(checkMinIntegerValue(cad,nom,args[6]),errors);    
      }  	
      if ((args.length > 7) && (args[7] != null)){
        errors = addErrors(checkMaxIntegerValue(cad,nom,args[7]),errors);	
      }      
    }
    if ((args.length > 8) && (args[8] != null)){
      errors = addErrors(checkMinLength(cad,nom,args[8]),errors);    
    }  	
    if ((args.length > 9) && (args[9] != null)){
      errors = addErrors(checkMaxLength(cad,nom,args[9]),errors);	
    }   
    return processErrors(obj,msg,foc,errors);
  }
// fin de la comprobacion  
  errors = addErrors(checkInString(cad,nom,cadenaNumeros + formato.getSimboloDecimal() + formato.getSeparadorMiles(),errorCaracteresNoValidos),errors);
  cad = signo + cad;  
  errors = addErrors(checkFormatDecimal(cad,nom,formato),errors);          
  if (errors.length == 0){
    var decimalPart = getDecimalPart(cad,formato);
    var numeroDecimales = decimalPart.length;
    if (numeroDecimales == 0){
      errors[errors.length] = changeMsg(errorDecimalSinDecimales,nom,null,null,null,null);
    }   
    if ((args.length > 6) && (args[6] != null)){
      errors = addErrors(checkMinIntegerValue(cad,nom,args[6],formato),errors);    
    }  	
    if ((args.length > 7) && (args[7] != null)){
      errors = addErrors(checkMaxIntegerValue(cad,nom,args[7],formato),errors);	
    }
    if ((args.length > 8) && (args[8] != null)){
      errors = addErrors(checkMinDecimalLength(cad,numeroDecimales,nom,args[8]),errors);    
    }  	
    if ((args.length > 9) && (args[9] != null)){
      errors = addErrors(checkMaxDecimalLength(cad,numeroDecimales,nom,args[9]),errors);	
    }      
  }  
  if ((args.length > 10) && (args[10] != null)){
    errors = addErrors(checkMinLength(cad,nom,args[10]),errors);    
  }  	
  if ((args.length > 11) && (args[11] != null)){
    errors = addErrors(checkMaxLength(cad,nom,args[11]),errors);	
  }    
  return processErrors(obj,msg,foc,errors);
}


// funciones públicas de formato establecido

function isFecha(obj,nom,obl,msg,foc,formato){
  var args = isFecha.arguments;
  var cad = getInputString(obj);	
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  }
  if (formato == null){
    formato = new Formato();	
  }
  errors = addErrors(checkSpaces(cad,nom,false),errors);
  errors = addErrors(checkInString(cad,nom,cadenaNumeros + formato.getSeparadorFecha(),errorCaracteresNoValidos),errors);
  errors = addErrors(checkMinLength(cad,nom,6),errors);
  errors = addErrors(checkMaxLength(cad,nom,10),errors);
  var cadDia  = "";
  var cadMes  = "";
  var cadAnyo = "";
  var check = true;
  if (errors.length == 0){    
    var totalSeparadores = countChars(cad,formato.getSeparadorFecha());
    if (totalSeparadores == 2){
      var cifras = cad.split(formato.getSeparadorFecha());
      if (cifras.length == 3){
        cadDia  = cifras[formato.getPosicionDia()];
        cadMes  = cifras[formato.getPosicionMes()];
        cadAnyo = cifras[formato.getPosicionAnyo()];
        if (!isNumerico(cadDia,null,true,false,false,false,formato.getMinLongitudDia(),formato.getMaxLongitudDia())){ check = false; }   
        if (!isNumerico(cadMes,null,true,false,false,false,formato.getMinLongitudMes(),formato.getMaxLongitudMes())){ check = false; }   
        if (!isNumerico(cadAnyo,null,true,false,false,false,formato.getMinLongitudAnyo(),formato.getMaxLongitudAnyo())){ check = false; }
        if (!check){
          errors[errors.length] = changeMsg(errorFormatoFecha,nom,null,null,null,null); 
        }
      }  
    } else {
       errors[errors.length] = changeMsg(errorFormatoFecha,nom,null,null,null,null);   
    } 
  }  
  if (errors.length == 0){
    erorrs = addErrors(checkFecha(nom,nom,nom,cadDia,cadMes,cadAnyo),errors);
  }
  if (errors.length == 0){
    if ((args.length > 6) && (args[6] != null)){
      errors = addErrors(checkMinDate(cad,nom,args[6],formato),errors);    
    }  	
    if ((args.length > 7) && (args[7] != null)){
      errors = addErrors(checkMaxDate(cad,nom,args[7],formato),errors);	
    }       
  }
  return processErrors(obj,msg,foc,errors);
}

function isFechaMult(objDia,objMes,objAnyo,nomDia,nomMes,nomAnyo,nom,obl,msg,foc,formato){
  var args = isFechaMult.arguments;
  var errors = new Array();
  var cadDia  = getInputString(objDia);
  var cadMes  = getInputString(objMes);
  var cadAnyo = getInputString(objAnyo);	  
  if (obl == false){
    if ((cadDia == "") && (cadMes == "") && (cadAnyo == "")){
      return processErrors(objDia,msg,foc,errors);
    }
  }
  if (formato == null){
    formato = new Formato();
  }
  errors = addErrors(isNumerico(cadDia,nomDia,true,null,false,false,formato.getMinLongitudDia(),formato.getMaxLongitudDia()),errors);
  errors = addErrors(isNumerico(cadMes,nomMes,true,null,false,false,formato.getMinLongitudMes(),formato.getMaxLongitudMes()),errors);
  errors = addErrors(isNumerico(cadAnyo,nomAnyo,true,null,false,false,formato.getMinLongitudAnyo(),formato.getMaxLongitudAnyo()),errors);  
  if (errors.length == 0){
    erorrs = addErrors(checkFecha(nomDia,nomMes,nomAnyo,cadDia,cadMes,cadAnyo),errors);
  }
  if (errors.length == 0){
    var cadFecha = "";
    var cifra0 = "";
    var cifra1 = "";
    var cifra2 = "";
    if (formato.getPosicionDia() == 0){
      cifra0 = cadDia;
    } else if (formato.getPosicionDia() == 1){
      cifra1 = cadDia;   
    } else if (formato.getPosicionDia() == 2){
      cifra2 = cadDia;
    }
    if (formato.getPosicionMes() == 0){
      cifra0 = cadMes;
    } else if (formato.getPosicionMes() == 1){
      cifra1 = cadMes;   
    } else if (formato.getPosicionMes() == 2){
      cifra2 = cadMes;
    }    
    if (formato.getPosicionAnyo() == 0){
      cifra0 = cadAnyo;
    } else if (formato.getPosicionAnyo() == 1){
      cifra1 = cadAnyo;   
    } else if (formato.getPosicionAnyo() == 2){
      cifra2 = cadAnyo;
    }    
    cadFecha = cifra0 + formato.getSeparadorFecha() + cifra1 + formato.getSeparadorFecha() + cifra2;    
    if ((args.length > 11) && (args[11] != null)){
      errors = addErrors(checkMinDate(cadFecha,nom,args[11],formato),errors);    
    }  	
    if ((args.length > 12) && (args[12] != null)){
      errors = addErrors(checkMaxDate(cadFecha,nom,args[12],formato),errors);	
    }       
  }  
  return processErrors(objDia,msg,foc,errors);
}

function isEmail(obj,nom,obl,msg,foc){
  var args = isEmail.arguments;	
  var cad = getInputString(obj);	
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  } 
  errors = addErrors(checkSpaces(cad,nom,false),errors);
  errors = addErrors(checkInString(cad,nom,cadenaEmail,errorCaracteresNoValidos),errors);  
  var totalArrobas = countChars(cad,'@');
  if (totalArrobas > 1){
    errors[errors.length] = changeMsg(errorMasDeUnaArroba,nom,null,null,null,null);
  }
  if (totalArrobas == 0){
    errors[errors.length] = changeMsg(errorNoHayArroba,nom,null,null,null,null);
  }
  if (errors.length == 0){
    var cuenta   = cad.substring(0,cad.indexOf('@'));
    var dominio  = cad.substring(cad.indexOf('@')+1,cad.length);
    var posPunto = dominio.lastIndexOf('.');
    if (cuenta.length < 1){
      errors[errors.length] = changeMsg(errorLongitudIncorrectaCuenta,nom,null,null,null,null);
    }
    if (dominio.length < 4){
      errors[errors.length] = changeMsg(errorLongitudIncorrectaDominio,nom,null,null,null,null);
    }            
    if (posPunto == -1){
      errors[errors.length] = changeMsg(errorNoPuntoEnDominio,nom,null,null,null,null)
    }     
// comprobacion de posible IP en dominio
    if (errors.length == 0){
      if ((isNumerico(removeChars(dominio,'.'),null,true,false,false,false)) && (!isIP(dominio,null,null,false,false))){
        errors[errors.length] = changeMsg(errorPosibleIPDominioIncorrecta,nom,null,null,null,null);
      }
    }    
// comprobacion de dominio    
    if ((errors.length == 0) && (!isIP(dominio,null,null,false,false))){
      var caracteresAntesPunto   = dominio.substring(0,posPunto);
      var caracteresDespuesPunto = dominio.substring(posPunto+1,dominio.length);      
      var check = true;
      if (caracteresAntesPunto.length < 1){
      	check = false;    	
      }           
      if ((caracteresDespuesPunto.length < 2) || (caracteresDespuesPunto.length > 3)){
      	check = false;
      }            	      
      if (!isInString(caracteresAntesPunto,cadenaNumeros + cadenaAlfabetoASCII +"-.")){
      	check = false;
      }     	      
      if (!isInString(caracteresDespuesPunto,cadenaAlfabetoASCII)){
      	check = false;
      }      	      
      if (!check){
        errors[errors.length] = changeMsg(errorValidacionDominio,nom,null,null,null,null);
      }
    }
  }     
  if ((args.length > 5) && (args[5] != null)){
    errors = addErrors(checkMinLength(cad,nom,args[5]),errors);    
  }  	
  if ((args.length > 6) && (args[6] != null)){
    errors = addErrors(checkMaxLength(cad,nom,args[6]),errors);	
  }    
  return processErrors(obj,msg,foc,errors);  	  	
}

function isIP(obj,nom,obl,msg,foc){
  var args = isIP.arguments;	
  var cad = getInputString(obj);	
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  } 
  errors = addErrors(checkSpaces(cad,nom,false),errors);
  errors = addErrors(checkInString(cad,nom,cadenaNumeros + ".",errorCaracteresNoValidos),errors);
  errors = addErrors(checkMinLength(cad,nom,7),errors);  
  errors = addErrors(checkMaxLength(cad,nom,15),errors);
  if ((errors.length == 0) && (countChars(cad,'.') == 3)){
    var numeros = cad.split('.');
    if (numeros.length == 4){
      for(n=0; n<numeros.length; n++){
        var valor = parseInt(numeros[n],10);
        if ((valor < 0) || (valor > 255)){
          errors[errors.length] = changeMsg(errorRangoIP,nom,null,null,null,null);
          break;
        }	
      }
    } else {
      errors[errors.length] = changeMsg(errorValidacionIP,nom,null,null,null,null);
    }  
  } else {
    errors[errors.length] = changeMsg(errorFormatoIP,nom,null,null,null,null);
  }
  return processErrors(obj,msg,foc,errors);
}

function isIPMult(num1,num2,num3,num4,nomNum1,nomNum2,nomNum3,nomNum4,nomIP,obl,msg,foc){
  var errors = new Array();
  var cadNum1 = getInputString(num1);
  var cadNum2 = getInputString(num2);
  var cadNum3 = getInputString(num3);
  var cadNum4 = getInputString(num4);      
  if (obl == false){
    if ((cadNum1 == "") && (cadNum2 == "") && (cadNum3 == "") && (cadNum4 == "")){
      return processErrors(num1,msg,foc,errors);
    }
  }   
  errors = addErrors(isEntero(cadNum1,nomNum1,true,null,false,null,0,255,1,3),errors);
  errors = addErrors(isEntero(cadNum2,nomNum2,true,null,false,null,0,255,1,3),errors);
  errors = addErrors(isEntero(cadNum3,nomNum3,true,null,false,null,0,255,1,3),errors);
  errors = addErrors(isEntero(cadNum4,nomNum4,true,null,false,null,0,255,1,3),errors);
  return processErrors(num1,msg,foc,errors);
}

function isNIF(obj,nom,obl,msg,foc){
  var args = isNIF.arguments;	
  var cad = getInputString(obj);	
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  }
  errors = addErrors(checkSpaces(cad,nom,false),errors); 
  errors = addErrors(checkMinLength(cad,nom,2),errors);  	
  errors = addErrors(checkMaxLength(cad,nom,9),errors);	
  if (errors.length == 0){
    var check = true;
    var numero = cad.substring(0,cad.length-1);    
    var letra = cad.substring(cad.length-1,cad.length);
    errors = addErrors(checkInString(numero,nom,cadenaNumeros,errorSoloNumerosNIF),errors);
    errors = addErrors(checkInString(letra,nom,cadenaAlfabetoASCII,errorSoloLetrasNIF),errors);
    if (parseInt(numero,10) == 0){
      check = false;
    }
    var index = parseInt(numero,10) % 23;
    var letrasNIF = new Array('T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E','T');  
    if (letra.toUpperCase() != letrasNIF[index]){
      check = false;
    }
    if (!check){
      errors[errors.length] = changeMsg(errorValidacionNIF,nom,null,null,null,null);
    }  
  }
  return processErrors(obj,msg,foc,errors);  	  	
}

function isCIF(obj,nom,obl,msg,foc){
  var args = isCIF.arguments;	
  var cad = getInputString(obj);	
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  }
  errors = addErrors(checkSpaces(cad,nom,false),errors); 
  errors = addErrors(checkMinLength(cad,nom,9),errors);  	
  errors = addErrors(checkMaxLength(cad,nom,9),errors);	
  errors = addErrors(checkInString(cad,nom,cadenaNumeros + cadenaAlfabetoASCII,errorCaracteresNoAdmitidosCIF),errors);
  if (errors.length == 0){
// sacado de http://www.q3.nu/trucomania/truco.cgi?337&ing  	
    var check = false;
    cad = cad.toUpperCase();
    var letrasCIF = new Array('J','A','B','C','D','E','F','G','H','I'); 
    var sumap = 0;
    var sumai = 0;
    var p;
    var r;
    var dc;        
    sumap = parseInt(cad.substring(2,3)) + parseInt(cad.substring(4,5)) + parseInt(cad.substring(6,7));
    for(n=1; n<=8; n++){
      p = 2 * parseInt(cad.substring(n,n+1));
      if (p > 9) {
        sumai += parseInt((p / 10),10) + (p % 10);
      } else {
        sumai += p;
      }
      n ++;
    }
    r = sumap + sumai; // r es el resultado de las sumas de los productos
    dc = r % 10;       // calculamos el digito de control que es el modulo de la suma de los productos
    dc = 10 - dc;      // complemento a 10 del digito de control
    if (dc == 10) {    // si el digito de control es 10 se le asigna el 0
      dc = 0;
    }
    if ( !isDigit(cad.charAt(8)) ){
      if (letrasCIF[dc] == cad.charAt(8).toUpperCase()){
        check = true;
      }	    	   
    } else {
      if (dc == parseInt(cad.substring(8,9))){
        check = true;
      } 
    }
    if (!check){
      errors[errors.length] = changeMsg(errorValidacionCIF,nom,null,null,null,null);
    }   
  }
  return processErrors(obj,msg,foc,errors);  	  	
}

function isCodigoPostal(obj,nom,obl,msg,foc){
  var args = isCodigoPostal.arguments;
  var cad = getInputString(obj);
  var errors = new Array();
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); } 
  errors = addErrors(isNumerico(cad,nom,true,null,false,false,5,5),errors);
  if (errors.length == 0){
    var check = true;
    var codigoProvincia = parseInt(cad.substring(0,2),10);
    if ((codigoProvincia < 1) || (codigoProvincia > 52)){
      check = false;
    }
    if (cad.substring(2,5) == "000"){
      check = false;
    }
    if (!check){
      errors[errors.length] = changeMsg(errorValidacionCodigoPostal,nom,null,null,null,null);
    }
  }
  return processErrors(obj,msg,foc,errors);  	
}

function isCuentaBancaria(obj,nom,obl,msg,foc){
  var errors = new Array();
  var cad = getInputString(obj);
  if ((obl == false) && (cad == "")){ return processErrors(obj,msg,foc,errors); }  
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  } 
  errors = addErrors(isNumerico(cad,nom,true,null,false,false,20,20),errors);
  if (errors.length == 0){
    var check = true;
    var cadBanco    = cad.substring(0,4);
    var cadSucursal = cad.substring(4,8);
    var cadDigitos  = cad.substring(8,10);
    var cadCuenta   = cad.substring(10,20);
    if ((cadBanco == "0000") || (cadSucursal == "0000") || (cadCuenta == "0000000000")){
      check = false;
    } 
    var digit1 = calculateControlDigit("00" + cadBanco + cadSucursal);
    var digit2 = calculateControlDigit(cadCuenta);
    var digitosCalculados = new String(digit1) + new String(digit2);
    if (digitosCalculados != cadDigitos){
      check = false;
    }
    if (!check){
      errors[errors.length] = changeMsg(errorValidacionCuentaBancaria,nom,null,null,null,null);
    }
  }
  return processErrors(obj,msg,foc,errors); 
}

function isCuentaBancariaMult(banco,sucursal,digitos,cuenta,nomBanco,nomSucursal,nomDigitos,nomCuenta,nomCuentaBancaria,obl,msg,foc){
  var errors = new Array();
  var cadBanco    = getInputString(banco);
  var cadSucursal = getInputString(sucursal);
  var cadDigitos  = getInputString(digitos);
  var cadCuenta   = getInputString(cuenta);      
  if (obl == false){
    if ((cadBanco == "") && (cadSucursal == "") && (cadDigitos == "") && (cadCuenta == "")){
      return processErrors(banco,msg,foc,errors);
    }
  }
  errors = addErrors(isNumerico(cadBanco,nomBanco,true,null,false,false,4,4),errors);
  errors = addErrors(isNumerico(cadSucursal,nomSucursal,true,null,false,false,4,4),errors);
  errors = addErrors(isNumerico(cadDigitos,nomDigitos,true,null,false,false,2,2),errors);
  errors = addErrors(isNumerico(cadCuenta,nomCuenta,true,null,false,false,10,10),errors);
  if (errors.length == 0){
    var check = true;
    if ((cadBanco == "0000") || (cadSucursal == "0000") || (cadCuenta == "0000000000")){
      check = false;
    } 
    var digit1 = calculateControlDigit("00" + cadBanco + cadSucursal);
    var digit2 = calculateControlDigit(cadCuenta);
    var digitosCalculados = new String(digit1) + new String(digit2);
    if (digitosCalculados != cadDigitos){
      check = false;
    }
    if (!check){
      errors[errors.length] = changeMsg(errorValidacionCuentaBancariaMult,nomCuentaBancaria,null,null,null,null);
    }             
  }
  return processErrors(banco,msg,foc,errors);    	
}


// funciones privadas agrupadas por comodidad

function checkCommonText(cad,nom,obl,spa,cadComparar,cadError,min,max,args){
  var errors = new Array()
  if (obl != null){
    errors = addErrors(checkCompulsory(cad,nom,obl),errors);
  } 
  if (spa != null){
    errors = addErrors(checkSpaces(cad,nom,spa),errors);
  }
  if ((cadComparar != null) && (cadError != null)){
    errors = addErrors(checkInString(cad,nom,cadComparar,cadError),errors);
  }
  if ((args.length > min) && (args[min] != null)){
    errors = addErrors(checkMinLength(cad,nom,args[min]),errors);    
  }  	
  if ((args.length > max) && (args[max] != null)){
    errors = addErrors(checkMaxLength(cad,nom,args[max]),errors);	
  }  
  return errors;
}


// funciones privadas de tratamiento de cadenas (pueden reaprovecharse)

function reverseString(cad){
  var cadReversed = "";
  for(n=cad.length; n>=0; n--){
    cadReversed += cad.charAt(n);
  }
  return cadReversed;
}

function countChars(cad,car){
  var cont = 0;
  for (n=0; n<cad.length; n++){
    if (cad.charAt(n) == car){
      cont ++;
    }
  }
  return cont;	
}

function removeChars(cad,car){
  var cadCleaned = "";
  for (n=0; n<cad.length; n++){
    if(cad.charAt(n) != car){
      cadCleaned += cad.charAt(n);
    }
  }
  return cadCleaned;
}


// funciones privadas de funcionamiento interno

function addErrors(errorsArr,errorsTotalArr){
  for (n=0; n<errorsArr.length; n++){
    errorsTotalArr[errorsTotalArr.length] = errorsArr[n];	
  }
  return errorsTotalArr;
}

function getInputString(obj){
  var cad = ""
  if (obj.value){
    cad = obj.value;
  } else {
    if (obj.value == "" ){ 
      cad = obj.value
    } else {
      cad = obj;
    }	
  }
  return cad;
}

function changeMsg(descError,nom,longitud,longitudCorrecta,valor,valorCorrecto){  
  var cad = descError.replace(/NOMBRE_CAMPO/g, nom);
  if (longitud != null){
    cad = cad.replace(/LONGITUD_CAMPO/g,longitud)
  }
  if (longitudCorrecta != null){  	
    cad = cad.replace(/LONGITUD_CORRECTA/g,longitudCorrecta)
  }  
  if (valor != null){
    cad = cad.replace(/VALOR_CAMPO/g,valor)
  }  
  if (valorCorrecto != null){
    cad = cad.replace(/VALOR_CORRECTO/g,valorCorrecto)
  }    
  return cad;  	
}

function processErrors(obj,msg,foc,errors){
  var cad = "";	
  if (errors.length > 0){
    for (n=0; n<errors.length; n++){
      cad += errors[n];
      if (n != errors.length -1){
        cad += "\n";
      }
    }
    if (msg == true){ alert(cad); }
    if ((foc == true) && (obj != null)){ obj.focus(); } 
    if (msg == null){ return errors; }   
    return false;  
  }
  if (msg == null){ return errors; }	     	
  return true;
}


// funciones privadas de tratamiento numérico 

function getIntegerValue(cad){	
  var cadenaCleaned = "";
  var cadenaOriginal = new String(cad);
  var cadena = getUnsignedPart(cadenaOriginal);
  var signo = getSign(cadenaOriginal);  
  for (n=0; n<cadena.length; n++){
    if (isDigit(cadena.charAt(n))){
      cadenaCleaned += cadena.charAt(n);
    }
  }
  return parseInt(signo + cadenaCleaned,10);
}

function getDecimalValue(cad,formato){
  var cadenaOriginal = new String(cad);
  if (cadenaOriginal.lastIndexOf(formato.getSimboloDecimal()) == -1) {
    cadenaOriginal = cadenaOriginal + formato.getSimboloDecimal() + "00";
  }	
  var integerPart = getIntegerPart(cadenaOriginal,formato);
  var decimalPart = getDecimalPart(cadenaOriginal,formato); 
  var cadena = getIntegerValue(integerPart) +"."+ decimalPart;
  return parseFloat(cadena,10);   
} 

function getIntegerPart(cad,formato){
  var posicionDecimal = cad.lastIndexOf(formato.getSimboloDecimal());
  return cad.substring(0,posicionDecimal);
}

function getDecimalPart(cad,formato){
  var posicionDecimal = cad.lastIndexOf(formato.getSimboloDecimal());
  return cad.substring(posicionDecimal+1,cad.length);
}

function getSign(cad){
  if ((cad.charAt(0) == "+") || (cad.charAt(0) == "-")){
    return cad.charAt(0); 
  }
  return ""; 
}

function getUnsignedPart(cad){
  if ((cad.charAt(0) == "+") || (cad.charAt(0) == "-")){ 	
    return cad.substring(1,cad.length);
  }
  return cad;
}


// funciones privadas de tratamiento de fechas

function getDateValue(cad,formato){
  var cifras  = cad.split(formato.getSeparadorFecha());
  var cadDia  = cifras[formato.getPosicionDia()];
  var cadMes  = cifras[formato.getPosicionMes()];
  var cadAnyo = cifras[formato.getPosicionAnyo()];
  var dia = parseInt(cadDia,10);
  var mes = parseInt(cadMes,10);
  var anyo = parseInt(cadAnyo,10);
  mes = mes - 1;
  if (anyo < 100){
    anyo = anyo + 1900;
  }  
  return new Date(anyo,mes,dia);  
}


// funciones privadas de comprobación

function checkCompulsory(cad,nom,obl){	
  var errors = new Array()
  if ((obl == true) && (cad == "")){
    errors[errors.length] = changeMsg(errorCampoObligatorioVacio,nom,null,null,null,null);
  }
  return errors;	
}

function checkSpaces(cad,nom,spa){
  var errors = new Array();
  if (spa == false){
    for(n=0; n<cad.length; n++){
      if(cad.charAt(n) == " "){
        errors[errors.length] = changeMsg(errorNoAdmiteEspacios,nom,null,null,null,null);
        break;
      }
    }
  }
  return errors;	
}

function checkMinLength(cad,nom,min){
  var errors = new Array();
  if (cad.length < min){
    errors[errors.length] = changeMsg(errorNoAlcanzaLongitudMinima,nom,cad.length,min,null,null);      
  }
  return errors;	
}

function checkMaxLength(cad,nom,max){
  var errors = new Array();
  if (cad.length > max){
    errors[errors.length] = changeMsg(errorExcedeLongitudMaxima,nom,cad.length,max,null,null);      
  }
  return errors;	
}

function checkMinDecimalLength(cad,numDecs,nom,min){
  var errors = new Array();
  if (numDecs < min){
    errors[errors.length] = changeMsg(errorNoAlcanzaDecimalesMinimos,nom,numDecs,min,null,null);      
  }
  return errors;	
}

function checkMaxDecimalLength(cad,numDecs,nom,max){
  var errors = new Array();
  if (numDecs > max){
    errors[errors.length] = changeMsg(errorExcedeDecimalesMaximos,nom,numDecs,max,null,null);      
  }
  return errors;
}

function checkMinIntegerValue(val,nom,min){
  var errors = new Array();
  if (getIntegerValue(val) < getIntegerValue(min)){
    errors[errors.length] = changeMsg(errorNoAlcanzaValorMinimo,nom,null,null,val,min);      
  }
  return errors;	
}

function checkMaxIntegerValue(val,nom,max){
  var errors = new Array();	
  if (getIntegerValue(val) > getIntegerValue(max)){
    errors[errors.length] = changeMsg(errorExcedeValorMaximo,nom,null,null,val,max);      
  }
  return errors;	
}

function checkMinDecimalValue(val,nom,min,formato){
  var errors = new Array();
  if (getDecimalValue(val,formato) < getDecimalValue(min,formato)){
    errors[errors.length] = changeMsg(errorNoAlcanzaValorMinimo,nom,null,null,val,min);      
  }
  return errors;	
}

function checkMaxDecimalValue(val,nom,max,formato){
  var errors = new Array();	
  if (getDecimalValue(val,formato) > getDecimalValue(max,formato)){
    errors[errors.length] = changeMsg(errorExcedeValorMaximo,nom,null,null,val,max);      
  }
  return errors;	
}

function checkMinDate(val,nom,min,formato){
  var errors = new Array();
  if ( getDateValue(val,formato).getTime() < getDateValue(min,formato).getTime() ){
    errors[errors.length] = changeMsg(errorNoAlcanzaFechaMinima,nom,null,null,val,min);
  }
  return errors;
}

function checkMaxDate(val,nom,max,formato){
  var errors = new Array();
  if ( getDateValue(val,formato).getTime() > getDateValue(max,formato).getTime() ){
    errors[errors.length] = changeMsg(errorExcedeFechaMaxima,nom,null,null,val,max);
  }
  return errors;
}

function checkUnsigned(cad,nom){	
  var errors = new Array();
  if (getSign(cad) != ""){
    errors[errors.length] = changeMsg(errorSignoEnUnsigned,nom,null,null,null,null)
  }
  return errors;
}  

function checkInString(cad,nom,cadComparar,cadError){
  var errors = new Array();
  var check = true;
  for(n=0; n<cad.length; n++){
    for(m=0; m<cadComparar.length; m++){
      if(cad.charAt(n) == cadComparar.charAt(m)){
      	break;
      }  
    }
    if (m == cadComparar.length){ 
      check = false;
      break;
    }
  }
  if (!check){
    errors[errors.length] = changeMsg(cadError,nom,null,null,null,null);
  }  
  return errors;	
}

function checkNotInString(cad,nom,cadComparar,cadError){
  var errors = new Array();
  var check = true;	
  for(n=0; n<cad.length; n++){
    for(m=0; m<cadComparar.length; m++){
      if(cad.charAt(n) == cadComparar.charAt(m)){
        errors[errors.length] = changeMsg(cadError,nom,null,null,null,null);
        return errors;
      }
    }
  }
  return errors;	
}

function checkFormatInteger(cad,nom,formato){
  var errors = new Array();
  if ((formato == null) || (formato.getSeparadorMiles() == null)){ return errors; }	
  cad = getUnsignedPart(cad);
  cad = formato.getSeparadorMiles() + reverseString(cad);  
  var cont = 1;
  for(n=1; n<cad.length; n++){
    if (cont == 4){	
      if (cad.charAt(n) != formato.getSeparadorMiles()){
        errors[errors.length] = changeMsg(errorFormatoIncorrectoEnteros,nom,null,null,null,null);
        break;
      }
      if ((n == cad.length-1) && (!isDigit(cad.charAt(n)))){
        errors[errors.length] = changeMsg(errorFormatoIncorrectoEnteros,nom,null,null,null,null);
        break;        
      }
      cont = 0;
    } else {
      if (!isDigit(cad.charAt(n))){
        errors[errors.length] = changeMsg(errorFormatoIncorrectoEnteros,nom,null,null,null,null);
        break;
      }    
    }   
    cont ++;
  }
  return errors;
}

function checkFormatDecimal(cad,nom,formato){
  var errors = new Array();
  if ((formato == null) || (formato.getSimboloDecimal() == null)){ return errors; }
  if (cad.lastIndexOf(formato.getSimboloDecimal()) == -1){
    errors[errors.length] = changeMsg(errorDecimalSinSimbolo,nom,null,null,null,null);
    return errors;
  }
  var integerPart = getIntegerPart(cad,formato);
  var decimalPart = getDecimalPart(cad,formato);
  if (formato.getSeparadorMiles() != null){
    integerPart = getUnsignedPart(integerPart);
    integerPart = formato.getSeparadorMiles() + reverseString(integerPart);    
    var cont = 1;
    for(n=1; n<integerPart.length; n++){
      if (cont == 4){	
        if (integerPart.charAt(n) != formato.getSeparadorMiles()){      	
          errors[errors.length] = changeMsg(errorFormatoIncorrectoDecimales,nom,null,null,null,null);
          break;
        }
        if ((n == integerPart.length - 1) && (!isDigit(integerPart.charAt(n)))){     	
          errors[errors.length] = changeMsg(errorFormatoIncorrectoDecimales,nom,null,null,null,null);
          break;        
        }
        cont = 0;
      } else {    	
        if (!isDigit(integerPart.charAt(n))){
          errors[errors.length] = changeMsg(errorFormatoIncorrectoDecimales,nom,null,null,null,null);
          break;
        }    
      }   
      cont ++;
    }
  }  
  errors = addErrors(checkInString(decimalPart,nom,cadenaNumeros,errorSoloNumerosEnParteDecimal),errors);  
  return errors;  
}

function checkFecha(nomDia,nomMes,nomAnyo,cadDia,cadMes,cadAnyo){
  var errors = new Array();
  var dia  = parseInt(cadDia,10);
  var mes  = parseInt(cadMes,10);
  var anyo = parseInt(cadAnyo,10);
  if (dia < 1){
    errors[errors.length] = changeMsg(errorDiaNoAlcanzaValorMinimo,nomDia,null,null,cadDia,"1");
  }
  if (dia > 31){
    errors[errors.length] = changeMsg(errorDiaExcedeValorMaximo,nomDia,null,null,cadDia,"31");
  }
  if (mes < 1){
    errors[errors.length] = changeMsg(errorMesExcedeValorMaximo,nomMes,null,null,cadMes,"1");
  }
  if (mes > 12){
    errors[errors.length] = changeMsg(errorMesExcedeValorMaximo,nomMes,null,null,cadMes,"12");
  }
  if (errors.length == 0){
    if ( ((mes==4) || (mes==6) || (mes==9) || (mes==11)) && (dia==31) ) {
      errors[errors.length] = changeMsg(errorNumeroDiasIncorrecto,nomDia,null,null,cadDia,"30");
    }
    if (mes == 2){
      var isBisiesto = ( (anyo % 4 == 0) && ((anyo % 100 != 0) || (anyo % 400 == 0)) );
      var maxDiasFebrero = isBisiesto? 29 : 28;
      if (dia > maxDiasFebrero) {
	errors[errors.length] = changeMsg(errorNumeroDiasIncorrecto,nomDia,null,null,cadDia,maxDiasFebrero);
      }
    }
  }
  return errors;  
}


// funciones privadas de comprobación interna (devuelven true/false)

function isInString(cad,cadComparar){
  var check = true;
  for(n=0; n<cad.length; n++){
    for(m=0; m<cadComparar.length; m++){
      if(cad.charAt(n) == cadComparar.charAt(m)){
      	break;
      }  
    }
    if (m == cadComparar.length){ 
      check = false;
      break;
    }
  }  
  return check;	
}

function isCharInString(cad,char){
  for(n=0; n<cad.length; n++){
    if(cad.charAt(n) == char){
      return true;
    }
  }
  return false;	
}

function isDigit(car){
  return ((car >= "0") && (car <= "9"));
}


// funciones privadas de cálculo

function calculateControlDigit(num){
  var numero = new Array();
  var multiplicador = new Array(1,2,4,8,5,10,9,7,3,6);
  var total = 0;
  for (n=0; n<num.length; n++){
    numero[n] = num.charAt(n);
  }
  for (n=0; n<numero.length; n++) {
    total += parseInt(numero[n],10) * multiplicador[n];
  }
  var digit = 11 - (total % 11);  
  if (digit == 11) { return 0; }
  if (digit == 10) { return 1; }
  return digit;    	
}

// Funciones para que sólo acepte las teclas necesarias

function EsSoloNumero(cadena, evento)
{
	var tecla = (document.all) ? evento.keyCode : evento.which;
	
	if (tecla > 47 && tecla < 58)
	{
		return true;
	}
	
	return false;
}

function EsSoloLetras()
{
	
}

function EsSoloAlfanumerico()
{
	
}
