/*******************************************************
 * MODULO: 	valida.js
 * DESCRIPCION:	Funciones de validacion
 * AUTOR: 	Ruben Suarez Alvarez.
 * ULTIMA REVISION: 12-09-2001
 *******************************************************/

//***********************
// Constantes para los tipos de validación
//***********************
var OBLIGA  	= 1;
var NUMERO  	= 2;
var MENOR   	= 4;
var MAYOR   	= 8;
var RANGO   	= 16;
var POSITIVO 	= 32;
var FECHA	    = 64;
var EMAIL       = 128;
var IGUAL       = 256;
var HORA        = 512;
var LONGITUD    = 1024;
var FORMATO     = 2048;
var CARACTERES  = 4096;

var LETRASUPPER = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚÜ";
var LETRASLOWER = "abcdefghijklmnñopqrstuvwxyzáéíóúü";
var ENTEROS = "0123456789";

var __Error__Validacion = "";

//***********************
// Validación básica de campos.
//***********************
function ValidarCampo(Nombre, Valor, TipoValida, ValorInf, ValorSup) {
  var hora;
  var fDia;
  var fMes;
  var fAno;		

  var partes;
  if (TipoValida & OBLIGA) {
    if (Valor == "") {
      __Error__Validacion = ("El campo " + Nombre + " es obligatorio");
      return false;
    }
  }
  else if (Valor == "") return true;

  if (TipoValida & NUMERO) {
    Valor = Trim(Valor);
    if (isNaN(Valor)) {
      __Error__Validacion = ("El campo " + Nombre + " debe ser numérico");			
	  return false;
    }
  }

  if ((TipoValida & NUMERO) && (TipoValida & MENOR) && (TipoValida & IGUAL)) {
    if (!ValidarCampo(Nombre, Valor, NUMERO|MENOR, ValorInf) &&
	    !ValidarCampo(Nombre, Valor, NUMERO|IGUAL, ValorInf)) {
      __Error__Validacion = ("El campo " + Nombre + " debe ser menor o igual que " + ValorInf);			
	  return false;
	}
	else return true;
  }

  if ((TipoValida & NUMERO) && (TipoValida & MAYOR) && (TipoValida & IGUAL)) {
    if (!ValidarCampo(Nombre, Valor, NUMERO|MAYOR, ValorInf) &&
	    !ValidarCampo(Nombre, Valor, NUMERO|IGUAL, ValorInf)) {
      __Error__Validacion = ("El campo " + Nombre + " debe ser mayor o igual que " + ValorInf);			
	  return false;
	}
	else return true;
  }

  if ((TipoValida & NUMERO) && (TipoValida & IGUAL)) {
    if (Valor != ValorInf)  {
      __Error__Validacion = ("El campo " + Nombre + " debe ser igual a " + ValorInf);			
      return false;
    }
  }

  if ((TipoValida & NUMERO) && (TipoValida & MENOR)) {
    if (Valor >= ValorInf)  {
      __Error__Validacion = ("El campo " + Nombre + " debe ser menor que " + ValorInf);			
      return false;
    }
  }

  if ((TipoValida & NUMERO) && (TipoValida & MAYOR)) {
    if (Valor <= ValorInf) {
      __Error__Validacion = ("El campo " + Nombre + "  debe ser mayor que " + ValorInf);			
      return false;
    }
  }

  if ((TipoValida & NUMERO) && (TipoValida & RANGO)) {
    if (Valor < ValorInf ||	Valor > ValorSup ) {
      __Error__Validacion = ("El campo " + Nombre + " debe ser mayor que " + ValorInf + " y menor que " + ValorSup);			
      return false;
    }
  }

  if (TipoValida & POSITIVO) {
    if (Valor < 0) {
      __Error__Validacion = ("El campo " + Nombre + " debe ser positivo");			
      return false;
    }
  }

  if (TipoValida & FECHA) {
    Valor = Trim(Valor);
    var fFechaAux;
	if (Valor.indexOf("/") != -1) {	
      fFechaAux = Valor.split("/");
	  fDia = fFechaAux[0];
	  fMes = fFechaAux[1];
	  fAno = fFechaAux[2];		
	}
	else {
	  fDia = Valor.substring(0,2);
	  fMes = Valor.substring(2,4);
	  fAno = Valor.substring(4,Valor.length);
	}

    // Validacion del formato de la fecha
    if (isNaN(fDia) || isNaN(fMes) || isNaN(fAno) || Trim(fDia) == "" || Trim(fMes) == "" || Trim(fAno) == "" ) {
      __Error__Validacion = ("El campo " + Nombre + " debe ser una fecha con formato: DD/MM/AAAA");
      return false;
    }

	fDia = Number(fDia);
	fMes = Number(fMes);
	fAno = Number(fAno);		

    if (fAno < 100|| fMes > 12 || fDia> 31) {
      __Error__Validacion = ("El campo " + Nombre + " es una fecha incorrecta");
      return false;
    }

    if ((fMes == 4 || fMes == 6 || fMes == 9 || fMes == 11) && fDia > 30)	{
      __Error__Validacion = ("El campo " + Nombre + " es una fecha incorrecta");
      return false;
    }

    // Validacion de años bisiestos, max dias, max meses ...
    if (fMes == 2 && fDia > 29) {
	  __Error__Validacion = ("El campo " + Nombre + " es una fecha incorrecta");
      return false;
   }

    if (!(((fAno % 4 == 0) && !(fAno % 100 == 0)) || (fAno % 400 == 0)) && fDia > 28 && fMes==2) {
      __Error__Validacion = ("El campo " + Nombre + " es una fecha incorrecta");
      return false;
    }
  }

  if ((TipoValida & FECHA) && (TipoValida & MENOR) && (TipoValida & IGUAL)) {
    if (!ValidarCampo(Nombre, Valor, FECHA|MENOR, ValorInf) &&
	    !ValidarCampo(Nombre, Valor, FECHA|IGUAL, ValorInf)) {
      __Error__Validacion = ("El campo " + Nombre + " debe ser una fecha menor o igual que " + ValorInf);			
	  return false;
	}
	else return true;
  }

  if ((TipoValida & FECHA) && (TipoValida & MAYOR) && (TipoValida & IGUAL)) {
    if (!ValidarCampo(Nombre, Valor, FECHA|MAYOR, ValorInf) &&
	    !ValidarCampo(Nombre, Valor, FECHA|IGUAL, ValorInf)) {
      __Error__Validacion = ("El campo " + Nombre + " debe ser una fecha mayor o igual que " + ValorInf);			
	  return false;
	}
	else return true;
  }
  
  if ((TipoValida & FECHA) && (TipoValida & IGUAL)) {
    var fFechaAux = Valor.split("/");
	var fDia = Number(fFechaAux[0]);
	var fMes = Number(fFechaAux[1]);
	var fAno = Number(fFechaAux[2]);		
	
	var fValorInf = ValorInf.split("/");
	var fDiaInf = Number(fValorInf[0]);
	var fMesInf = Number(fValorInf[1]);
	var fAnoInf = Number(fValorInf[2]);		

    if ((fAno != fAnoInf) || (fMes != fMesInf) || (fDia != fDiaInf))  {
	  __Error__Validacion = ("El campo " + Nombre + " debe ser una fecha igual a " + ValorInf);
      return false;
    }
  }

  if ((TipoValida & FECHA) && (TipoValida & MENOR)) {
    var fFechaAux = Valor.split("/");
	var fDia = Number(fFechaAux[0]);
	var fMes = Number(fFechaAux[1]);
	var fAno = Number(fFechaAux[2]);		
	
	var fValorInf = ValorInf.split("/");
	var fDiaInf = Number(fValorInf[0]);
	var fMesInf = Number(fValorInf[1]);
	var fAnoInf = Number(fValorInf[2]);		

    if ((fAno > fAnoInf) || (fAno == fAnoInf && fMes > fMesInf) || (fAno == fAnoInf && fMes == fMesInf && fDia >= fDiaInf))  {
	  __Error__Validacion = ("El campo " + Nombre + " debe ser una fecha inferior a " + ValorInf);
      return false;
    }
  }

  if ((TipoValida & FECHA) && (TipoValida & MAYOR)) {
    var fFechaAux = Valor.split("/");
	var fDia = Number(fFechaAux[0]);
	var fMes = Number(fFechaAux[1]);
	var fAno = Number(fFechaAux[2]);		
	
	var fValorInf = ValorInf.split("/");
	var fDiaInf = Number(fValorInf[0]);
	var fMesInf = Number(fValorInf[1]);
	var fAnoInf = Number(fValorInf[2]);		

    if ((fAno < fAnoInf) || (fAno == fAnoInf && fMes < fMesInf) || (fAno == fAnoInf && fMes == fMesInf && fDia <= fDiaInf))  {
	  __Error__Validacion = ("El campo " + Nombre + " debe ser una fecha superior a " + ValorInf);
      return false;
    }
  }

  if ((TipoValida & FECHA) && (TipoValida & RANGO)) {
    var fFechaAux = Valor.split("/");
	var fDia = Number(fFechaAux[0]);
	var fMes = Number(fFechaAux[1]);
	var fAno = Number(fFechaAux[2]);		
	
	var fValorInf = ValorInf.split("/");
	var fDiaInf = Number(fValorInf[0]);
	var fMesInf = Number(fValorInf[1]);
	var fAnoInf = Number(fValorInf[2]);		

    if ((fAno < fAnoInf) || (fAno == fAnoInf && fMes < fMesInf) || (fAno == fAnoInf && fMes == fMesInf && fDia < fDiaInf))  {
	  __Error__Validacion = ("El campo " + Nombre + " debe ser una fecha comprendida entre " + ValorInf + " y " + ValorSup + " ambas inclusives");
      return false;
    }

	var fValorSup = ValorSup.split("/");
	var fDiaSup = Number(fValorSup[0]);
	var fMesSup = Number(fValorSup[1]);
	var fAnoSup = Number(fValorSup[2]);		

    if ((fAno > fAnoSup) || (fAno == fAnoSup && fMes > fMesSup) || (fAno == fAnoSup && fMes == fMesSup && fDia > fDiaSup))  {
	  __Error__Validacion = ("El campo " + Nombre + " debe ser una fecha comprendida entre " + ValorInf + " y " + ValorSup + " ambas inclusives");
      return false;
    }
  }

  if (TipoValida & EMAIL) {
    arroba = Valor.indexOf("@");
    if (arroba == -1) {
      __Error__Validacion = ("El campo " + Nombre + " no es una direccion de correo valida");
      return false;
    }
    Valor = Valor.split("@");
    if (Valor.length != 2) {
      __Error__Validacion = ("El campo " + Nombre + " no es una direccion de correo valida");
	  return false;
	}
	Valor = Valor[1].split(".");
	if (Valor.length < 2) {
      __Error__Validacion = ("El campo " + Nombre + " no es una direccion de correo valida");
	  return false;
	}
  }

  if (TipoValida & HORA) {
    Valor = Trim(Valor);
    var partes = Valor.split(":");
    if (partes.length == 2) { // Hora en formato HH:MM
      if (isNaN(partes[0]) || partes[0]=="" || partes[0].length>2) { // Formato invalido de hora
        __Error__Validacion = "El campo " + Nombre + " debe ser una hora con formato: HH:MM";
  	    return false;
	  }
      if (isNaN(partes[1]) || partes[1]=="" || partes[1].length>2) { // Formato invalido de minutos
        __Error__Validacion = "El campo " + Nombre + " debe ser una hora con formato: HH:MM";
	    return false;
      }
      hora = (((partes[0].length == 1)?"0"+(partes[0]):partes[0]) + ":" + ((partes[1].length == 1)?"0"+(partes[1]):partes[1]));
      partes = hora.split(":");
	  if (!ValidarCampo("Hora",partes[0],NUMERO|MENOR,24) || !ValidarCampo("Minutos",partes[1],NUMERO|MENOR,60)) {
        __Error__Validacion = "El campo " + Nombre + " debe ser una hora entre las 00:00 y las 23:59";
	    return false;
	  }
//	  return hora;
    }
    else {
      partes = Valor.split(".");
	  if (partes.length == 2) {  // Hora en formato HH.MM
        if (isNaN(partes[0]) || partes[0]=="" || partes[0].length>2) { // Formato invalido de hora
          __Error__Validacion = "El campo " + Nombre + " debe ser una hora con formato: HH:MM";
	      return false;
	    }
        if (isNaN(partes[1]) || partes[1]=="" || partes[1].length>2) { // Formato invalido de minutos
          __Error__Validacion = "El campo " + Nombre + " debe ser una hora con formato: HH:MM";
	      return false;
	    }
        hora = (((partes[0].length == 1)?"0"+(partes[0]):partes[0]) + ":" + ((partes[1].length == 1)?"0"+(partes[1]):partes[1]));
        partes = hora.split(":");
	    if (!ValidarCampo("Hora",partes[0],NUMERO|MENOR,24) || !ValidarCampo("Minutos",partes[1],NUMERO|MENOR,60)) {
          __Error__Validacion = "El campo " + Nombre + " debe ser una hora entre las 00:00 y las 23:59";
	      return false;
	    }
//	    return hora;
	  }
	  else {
	    partes = Valor.split(",");
	    if (partes.length == 2) { // Hora en formato HH,MM
          if (isNaN(partes[0]) || partes[0]=="" || partes[0].length>2) { // Formato invalido de hora
            __Error__Validacion = "El campo " + Nombre + " debe ser una hora con formato: HH:MM";
	        return false;
	      }
          if (isNaN(partes[1]) || partes[1]=="" || partes[1].length>2) { // Formato invalido de minutos
            __Error__Validacion = "El campo " + Nombre + " debe ser una hora con formato: HH:MM";
	        return false;
	      }
          hora = (((partes[0].length == 1)?"0"+(partes[0]):partes[0]) + ":" + ((partes[1].length == 1)?"0"+(partes[1]):partes[1]));
		  partes = hora.split(":");
	      if (!ValidarCampo("Hora",partes[0],NUMERO|MENOR,24) || !ValidarCampo("Minutos",partes[1],NUMERO|MENOR,60)) {
            __Error__Validacion = "El campo " + Nombre + " debe ser una hora entre las 00:00 y las 23:59";
	        return false;
	      }
//	      return hora;
	    }
	    else {
	      if (!isNaN(Valor) && Valor!="") {  // Hora en formato de numero sin separadores
		    if (Valor.length <= 2) {  // Solo se especifica la hora (minutos 0)
	          hora = (((Valor.length == 1)?("0"+Valor):Valor) + ":00");
			  partes = hora.split(":");
  	          if (!ValidarCampo("Hora",partes[0],OBLIGA|NUMERO|MENOR,24) || !ValidarCampo("Minutos",partes[1],OBLIGA|NUMERO|MENOR,60)) {
                __Error__Validacion = "El campo " + Nombre + " debe ser una hora entre las 00:00 y las 23:59";
	            return false;
	          }
//		      return (hora);
		    }
		    else {
		      if (Valor.length <= 4) { // Se especifican hora y minutos sin separador
	            hora = (Valor.substring(0,Valor.length - 2) + ":" + Valor.substring(Valor.length - 2, Valor.length));
			    partes = hora.split(":");
  	            if (!ValidarCampo("Hora",partes[0],OBLIGA|NUMERO|MENOR,24) || !ValidarCampo("Minutos",partes[1],OBLIGA|NUMERO|MENOR,60)) {
                  __Error__Validacion = "El campo " + Nombre + " debe ser una hora entre las 00:00 y las 23:59";
	              return false;
	            }
//			    return (hora);
			  }
			  else {
		        __Error__Validacion = "El campo " + Nombre + " debe ser una hora con formato: HH:MM";
			    return false;
			  }
		    }
		  }
		  else {
		    __Error__Validacion = "El campo " + Nombre + " debe ser una hora con formato: HH:MM";
		    return false;
		  }
	    }
	  }
    }
  }
  if ((TipoValida & HORA) && (TipoValida & MENOR) && (TipoValida & IGUAL)) {
    if (!ValidarCampo(Nombre, Valor, HORA|MENOR, ValorInf) &&
	    !ValidarCampo(Nombre, Valor, HORA|IGUAL, ValorInf)) {
      __Error__Validacion = ("El campo " + Nombre + " debe ser menor o igual que " + ValorInf);			
	  return false;
	}
	else return hora;
  }
  if ((TipoValida & HORA) && (TipoValida & MAYOR) && (TipoValida & IGUAL)) {
    if (!ValidarCampo(Nombre, Valor, HORA|MAYOR, ValorInf) &&
	    !ValidarCampo(Nombre, Valor, HORA|IGUAL, ValorInf)) {
      __Error__Validacion = ("El campo " + Nombre + " debe ser mayor o igual que " + ValorInf);			
	  return false;
	}
	else return hora;
  }
  if ((TipoValida & HORA) && (TipoValida & MENOR)) {
    var nhora = ValorInf.split(":");
  	if (!(ValidarCampo("Hora",partes[0],OBLIGA|NUMERO|MENOR,nhora[0]) ||
	    (ValidarCampo("Hora",partes[0],OBLIGA|NUMERO|IGUAL,nhora[0]) &&
	    ValidarCampo("Minutos",partes[1],OBLIGA|NUMERO|MENOR,nhora[1])))) {
      __Error__Validacion = "El campo " + Nombre + " debe ser una hora menor que " + ValorInf;
	  return false;
	}
  }
  if ((TipoValida & HORA) && (TipoValida & MAYOR)) {
    var nhora = ValorInf.split(":");
  	if (!(ValidarCampo("Hora",partes[0],OBLIGA|NUMERO|MAYOR,nhora[0]) ||
	    (ValidarCampo("Hora",partes[0],OBLIGA|NUMERO|IGUAL,nhora[0]) &&
	    ValidarCampo("Minutos",partes[1],OBLIGA|NUMERO|MAYOR,nhora[1])))) {
      __Error__Validacion = "El campo " + Nombre + " debe ser una hora mayor que " + ValorInf;
	  return false;
	}
  }
  if ((TipoValida & HORA) && (TipoValida & IGUAL)) {
    var nhora = ValorInf.split(":");
  	if (!ValidarCampo("Hora",partes[0],OBLIGA|NUMERO|IGUAL,nhora[0]) || !ValidarCampo("Minutos",partes[1],OBLIGA|NUMERO|IGUAL,nhora[1])) {
      __Error__Validacion = "El campo " + Nombre + " debe ser una hora igual que " + ValorInf;
	  return false;
	}
  }



  
  if ((TipoValida & LONGITUD) && (TipoValida & IGUAL)) {
    if (String(Valor).length != ValorInf)  {
      __Error__Validacion = ("El campo " + Nombre + " debe tener una longitud igual a " + ValorInf);			
      return false;
    }
  }

  if ((TipoValida & LONGITUD) && (TipoValida & MENOR)) {
    if (String(Valor).length >= ValorInf)  {
      __Error__Validacion = ("El campo " + Nombre + " debe tener una longitud menor que " + ValorInf);			
      return false;
    }
  }

  if ((TipoValida & LONGITUD) && (TipoValida & MAYOR)) {
    if (String(Valor).length <= ValorInf) {
      __Error__Validacion = ("El campo " + Nombre + "  debe tener una longitud mayor que " + ValorInf);			
      return false;
    }
  }

  if ((TipoValida & LONGITUD) && (TipoValida & RANGO)) {
    if (String(Valor).length < ValorInf || String(Valor).length > ValorSup ) {
      __Error__Validacion = ("El campo " + Nombre + " debe tener una longitud mayor que " + ValorInf + " y menor que " + ValorSup);			
      return false;
    }
  }

  if (TipoValida & FORMATO) {
    var pos = 0;
    for(var cont = 0; cont < ValorInf.length;) {
	  if (ValorInf.charAt(cont) == "n") {
	    var n = "";
		var i = 1;
		for(;!isNaN(parseInt(ValorInf.charAt(cont + i)));i++)
		  n = n + ValorInf.charAt(cont + i);
	    if (isNaN(Valor.substring(pos, pos + parseInt(n)))) {
          __Error__Validacion = ("El campo " + Nombre + " no cumple el formato " + ValorInf);			
          return false;
		}
		cont += i;
		pos += parseInt(n);
	  }
	  else if (ValorInf.charAt(cont) == "s") {
	    var n = "";
		var i = 1;
		for(;!isNaN(parseInt(ValorInf.charAt(cont + i)));i++)
		  n = n + ValorInf.charAt(cont + i);
		cont += i;
		pos += parseInt(n);
	  }
	  else if (ValorInf.charAt(cont) == "c") {
	    if (Valor.charAt(pos) != ValorInf.charAt(cont + 1)) {
          __Error__Validacion = ("El campo " + Nombre + " no cumple el formato " + ValorInf);			
          return false;
		}
		cont += 2;
		pos ++;
	  }
	  else {
        __Error__Validacion = ("Error en formato " + ValorInf);			
        return false;
	  }
	}
	if (pos != Valor.length) {
      __Error__Validacion = ("El campo " + Nombre + " no cumple el formato " + ValorInf);			
      return false;
	}
  }
  
  if (TipoValida & CARACTERES) {
    for (var cont = 0; cont < String(Valor).length; cont++) {
	  if (String(ValorInf).indexOf(String(Valor).charAt(cont)) == -1) {
        __Error__Validacion = ("El campo " + Nombre + " contiene caracteres no válidos. Los caracteres permitidos son: \n" + ValorInf);			
        return false;
	  }
    }
  }

  if (TipoValida & HORA) return hora;
  if (TipoValida & FECHA) { return ((fDia>=10?fDia:("0"+fDia)) + "/" + (fMes>=10?fMes:("0"+fMes)) + "/" + fAno); }
  
  return true;
}

function MostrarErrorValidacion() {
  alert (__Error__Validacion);
}

function Trim(cadena) {
  cadena = new String(cadena);
  var fin, inicio;
  for (inicio = 0; inicio < cadena.length && cadena.charAt(inicio)==' '; inicio++);
  for (fin = cadena.length; fin > 0 && cadena.charAt(fin-1)==' '; fin--);
  if (inicio == cadena.length || fin <= inicio) return "";
//  alert("Inicio: " + inicio + " Fin: " + fin + "Cadena: " + cadena.substr(inicio,fin-inicio));
  return cadena.substr(inicio,fin-inicio);
}

var MAYUSCULAS    = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
var MINUSCULAS    = "abcdefghijklmnñopqrstuvwxyz";
var ACENTOSMAYUS  = "ÁÉÍÓÚ";
var ACENTOSMINUS  = "áéíóú";
var NUMEROS       = "1234567890";
var ESPECIALES    = ".:,;!¡¿?/()-_<>";
var DIERESISMAYUS = "Ü";
var DIERESISMINUS = "ü";
var TODO          = MAYUSCULAS + MINUSCULAS + ACENTOSMAYUS  + ACENTOSMINUS + NUMEROS + ESPECIALES + DIERESISMAYUS + DIERESISMINUS;

function ValidarEscritura(e,patron) {
  if (patron.indexOf(String.fromCharCode(e.keyCode)) != -1)
    return true;
  e.keyCode = 0;
  return false;

//  if (
//     (e.keyCode < 65 || e.keyCode > 90) && /* A-Z */
//     (e.keyCode < 97 || e.keyCode > 122) && /* a-z */
//     (e.keyCode < 225 || e.keyCode > 122) && /* a-z */
//	 (e.keyCode != 209) && /* Ñ */
//	 (e.keyCode != 241) && /* ñ */
//	 (e.keyCode != 225) && /* á */
//	 (e.keyCode != 233) && /* é */
//	 (e.keyCode != 237) && /* í */
//	 (e.keyCode != 243) && /* ó */
//	 (e.keyCode != 250) && /* ú */
//	 (e.keyCode != 252) && /* ü */
//	 (e.keyCode != 193) && /* Á */
//	 (e.keyCode != 201) && /* É */
//	 (e.keyCode != 205) && /* Í */
//	 (e.keyCode != 211) && /* Ó */
//	 (e.keyCode != 218) && /* Ú */
//	 (e.keyCode != 220) && /* Ü */
//	 (e.keyCode != 46) && /* . */
//	 (e.keyCode != 58) && /* : */
//	 (e.keyCode != 44) && /* , */
//	 (e.keyCode != 59) && /* ; */
//	 (e.keyCode != 33) && /* ! */
//	 (e.keyCode != 161) && /* ¡ */
//	 (e.keyCode != 191) && /* ¿ */
//	 (e.keyCode != 63) && /* ? */
//	 (e.keyCode != 47) && /* / */
//	 (e.keyCode != 40) && /* ( */
//	 (e.keyCode != 41) && /* ) */
//	 (e.keyCode != 45) && /* - */
//	 (e.keyCode != 95) && /* _ */
//	 (e.keyCode != 60) && /* < */
//	 (e.keyCode != 62) /* > */
//	 )
//	 e.keyCode = 0;

//  alert (e.keyCode);
//  e.keyCode = 0;
}

function ValidarEscritura2(e,patron,command) {
  if (e.keyCode==13) 
    eval(unescape(command));
  if (e.keyCode>96 && e.keyCode<123 || e.keyCode == 241) 
    e.keyCode -= 32;
  else	{
   if (patron.indexOf(String.fromCharCode(e.keyCode)) == -1)
     e.keyCode = 0;
  }	 
}	

function ValidarEscrituraConIntros(e, patron) 
{
	if ((patron.indexOf(String.fromCharCode(e.keyCode)) == -1) && (e.keyCode!=13)) 
		e.keyCode = 0;
}


function ComprobarMascara(sTexto, m_strMask)
{
	// Si no se ha definido máscara, cualquier cosa es buena
	if ((m_strMask=="null") || (m_strMask==null) || (m_strMask==""))
		return true;
	if (m_strMask.length==0)
		return true;

	var i=0;
	var j=0;

	// Si la longitud de la máscara difiere de la del texto 
	// ya empezamos mal.
	// Para determinar la longitud real de la máscara
	// defino una cadena auxiliar ignorando las barras invertidas
	// Si me encuentro dos \\ dejo una sóla 
	var sMaskAux="";
	var c='';
	var m='';
	

	for (i=0; i<m_strMask.length; i++)
	{
		m=m_strMask.charAt(i);
		if (m!='\\')
			sMaskAux+=m;
		else
		{
			if (i<m_strMask.length)
			{
				m=m_strMask.charAt(i+1);
				if (m=='\\')
				{
					sMaskAux+='\\';
					i++;
				}
			}
		}

	}		

	var strMask=m_strMask;
	var sCabeza="";
	var sCola="";
	var strValoresPosibles="";
	var bComodinNumerico=false;

	if ((sMaskAux.indexOf('*')==0) || (sMaskAux.indexOf('#')==0))
	{
		bComodinNumerico=(sMaskAux.indexOf('#')==0);
		sMaskAux=sMaskAux.substr(1,sMaskAux.length-1);
		strMask=m_strMask.substr(1,m_strMask.length-1);
		if (sTexto.length>sMaskAux.length)
		{
			if (bComodinNumerico)
			{
				sCabeza=sTexto.substr(0,sTexto.length-strMask.length);
				for (i=0; i<sCabeza.length; i++)
				{
					c=sCabeza.charAt(i);
					strValoresPosibles=ENTEROS;
					if (strValoresPosibles.indexOf(c)==-1)
						return false;
				}
			}
			sTexto=sTexto.substr(sTexto.length-sMaskAux.length,sMaskAux.length);
		}
	}
	else
	{
		if (((sMaskAux.indexOf('*')==(sMaskAux.length-1))||(sMaskAux.indexOf('#')==(sMaskAux.length-1)) )&& (m_strMask.charAt(m_strMask.length-2)!='\\') )
		{
			bComodinNumerico=(sMaskAux.indexOf('#')==(sMaskAux.length-1));
			sMaskAux=sMaskAux.substr(0,sMaskAux.length-1);
			strMask=m_strMask.substr(0,m_strMask.length-1);
			if (sTexto.length>sMaskAux.length)
			{
				if (bComodinNumerico)
				{
					sCola=sTexto.substr(sMaskAux.length,sTexto.length-sMaskAux.length);
					for (i=0; i<sCola.length; i++)
					{
						c=sCola.charAt(i);
						strValoresPosibles=ENTEROS;
						if (strValoresPosibles.indexOf(c)==-1)
							return false;
					}
					
				}
				sTexto=sTexto.substr(0,sMaskAux.length);
			}
		}
	}


	if (sMaskAux.length!=sTexto.length)
		return false;

	j=0;
	for (i=0; i<sTexto.length; i++)
	{
		c=sTexto.charAt(i);
		m=strMask.charAt(j);
		if (m=='\\')
		{
			j++;
			m=strMask.charAt(j);
			if (m!=c)
				return false;
		}

		switch (m)
		{
			case 'A':
				strValoresPosibles="";
				strValoresPosibles+=LETRASUPPER;
				strValoresPosibles+=LETRASLOWER;
				if (strValoresPosibles.indexOf(c)==-1)
					return false;
				break;
			case 'm':
				strValoresPosibles="";
				strValoresPosibles+=LETRASLOWER;
				if (strValoresPosibles.indexOf(c)==-1)
					return false;
				break;
			case 'M':
				strValoresPosibles="";
				strValoresPosibles+=LETRASUPPER;
				if (strValoresPosibles.indexOf(c)==-1)
					return false;
				break;
			case '9':
				strValoresPosibles="";
				strValoresPosibles+=ENTEROS;
				if (strValoresPosibles.indexOf(c)==-1)
					return false;
				break;
			case '@':
				strValoresPosibles="";
				strValoresPosibles+=LETRASUPPER;
				strValoresPosibles+=LETRASLOWER;
				strValoresPosibles+=ENTEROS;
				if (strValoresPosibles.indexOf(c)==-1)
					return false;
				break;
			case '?':
				break;
			default:
				if (m!=c)
					return false;
		}
		j++;
	}
	return true;
}


