//ESTE ARCHIVO CONTIENE FUNCIONALIDADES PARA VALIDAR LOS CAMPOS DE TIPO TEXTO UTILIZADOS EN LOS JSP

//FUNCION QUE PERMITE EL INGRESO SOLAMENTE DE NUMEROS ENTEROS EN EL CAMPO TEXTO. 
//SE DEBE LLAMAR LA FUNCION DE LA SIGUIENTE MANERA: onkeypress="return validarNumeroEntero(event)"

function validarNumeroEntero(e) {
    /* 9 = Tabular ::: 37 = Flecha Izquierda ::: 38 = Flecha Arriba ::: 39 = Flecha Derecha ::: 40 = Flecha Abajo ::: 46 = Delete */
        
    if (e.keyCode == 9 || e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40){
      return true;
    } else {
      tecla = (document.all) ? e.keyCode : e.which;
      
      if (tecla == 8)
        return true;
      else {
        if ( tecla >= 48 && tecla <= 57)
          return true;
        else
          return false;
      }
      patron = /\d/;
      te = String.fromCharCode(tecla);
      return patron.test(te);
    }
}

function trimStr(cadena) {
    for(i=0; i<cadena.length; i++) {
        if(cadena.charAt(i) == " ") {
            cadena=cadena.substring(i+1, cadena.length);
        } else {
            break;
        }
    }
    for(i=cadena.length-1; i>=0; i=cadena.length-1) {
        if(cadena.charAt(i)==" ") {
            cadena=cadena.substring(0,i);
        } else {
            break;
        }
    }
    return cadena;
}

function midStr(str, start, len) {
// Make sure start and len are within proper bounds
    if (start < 0 || len < 0) return "";
    
    var iEnd, iLen = String(str).length;
    if (start + len > iLen) {
          iEnd = iLen;
    } else {
          iEnd = start + len;
    }
    return String(str).substring(start,iEnd);
}

function inStr(strCadenaContenedora, charCaracterABuscar) {
    for (i=0; i < strCadenaContenedora.length; i++) {
        if (charCaracterABuscar == midStr(strCadenaContenedora, i, 1)) {
            return i;
        }
    }
    return -1;
}

function validarLetras(e) {
if (e.keyCode == 9 || e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40){
      return true;
    } else {
        tecla = (document.all) ? e.keyCode : e.which;
        if (tecla==8) {
            return true; //Tecla de retroceso (para poder borrar)
        }
        patron =/[A-Z a-z]/; // Solo acepta letras
        te = String.fromCharCode(tecla);
        return patron.test(te); 
    }
}

function validarCorreo (parCorreo) {
    var Correo = "";
    var NoValido = "";
    var UbicacionArroba = 0;
    var UbicacionPunto = 0;
    var SubCadenaDominio = "";
    var SubFinDominio = "";
    if (parCorreo.value != "") { //hago la comprobacion.
        Correo = trimStr(parCorreo.value);
        //nos fijamos que tenga mas de 4 caracteres de longitud (no existen mails de 4)
        if ((Correo.length) < 5) {
            NoValido = "- No puede tener menos de 5 caracteres. \n";
        }
        //nos fijamos que contenga el caracter "@"
        UbicacionArroba = inStr(Correo, "@");
        if (UbicacionArroba == -1) {
            NoValido = NoValido + "- No contiene '@'. \n";
        }
        //nos fijamos que contenga el caracter "."
        UbicacionPunto = inStr(Correo, ".");
        if (UbicacionPunto == -1) {
            NoValido = NoValido + "- No contiene '.'. \n";
        }
        //nos fijamos que exista un . despues de la "@"
        //cuidado con los mails que son de este estilo algo.algo@hotmail.com
        //para eso ponemos como comienzo de busqueda, el caracter de la "@"
        //si no hay @ en la cadena, UbicacionArroba tomará el valor -1, entonces..
        if ((UbicacionArroba != -1) && (UbicacionPunto != -1)) {
            SubCadenaDominio = Correo.substring(UbicacionArroba,Correo.length);
            UbicacionPunto = inStr(SubCadenaDominio, ".");
            UbicacionArroba = inStr(SubCadenaDominio, "@");
            if (SubCadenaDominio.length == Correo.length) {
                NoValido = NoValido + "- No existe un nombre de usuario válido. \n";
            }
            if (UbicacionPunto == -1) {
                NoValido = NoValido + "- No existe un '.' despues del '@'. \n";
            }
            if (UbicacionPunto == (UbicacionArroba + 1)) {
                NoValido = NoValido + "- No existe un dominio correctamente definido. \n";
            }
            SubFinDominio = SubCadenaDominio.substring(UbicacionPunto,SubCadenaDominio.length);
            if (SubFinDominio.length == 1) {
                NoValido = NoValido + "- No existe un final del dominio correctamente definido. \n";
            }
            /* if (UbicacionArroba > UbicacionPunto) {
                NoValido = NoValido + "No existe un '.' despues del '@'. \n";
            } */
        } else {
            NoValido = NoValido + "- No contiene tanto el '@' como el '.'. \n";
        }
        if (NoValido == "") {
            //NoValido = "Email valido";
            //alert(NoValido);
        } else {
            alert("Email invalido. Los motivos son los siguientes: \n\n" + NoValido);
            //alert(NoValido);
            parCorreo.value= "";
            //parCorreo.focus();
            //return 0;
        }
    }
    //tam = document.forms[numForm].elements[campo].value.length;
}


function validarCorreo2(parCorreo) {
    var Correo = "";
    var NoValido = "";
    var UbicacionArroba = 0;
    var UbicacionPunto = 0;
    var SubCadenaDominio = "";
    var SubFinDominio = "";
    if (parCorreo.value != "") { //hago la comprobacion.
        Correo = trimStr(parCorreo.value);
        //nos fijamos que tenga mas de 4 caracteres de longitud (no existen mails de 4)
        if ((Correo.length) < 5) {
            NoValido = "- No puede tener menos de 5 caracteres. \n";
        }
        //nos fijamos que contenga el caracter "@"
        UbicacionArroba = inStr(Correo, "@");
        if (UbicacionArroba == -1) {
            NoValido = NoValido + "- No contiene '@'. \n";
        }
        //nos fijamos que contenga el caracter "."
        UbicacionPunto = inStr(Correo, ".");
        if (UbicacionPunto == -1) {
            NoValido = NoValido + "- No contiene '.'. \n";
        }
        //nos fijamos que exista un . despues de la "@"
        //cuidado con los mails que son de este estilo algo.algo@hotmail.com
        //para eso ponemos como comienzo de busqueda, el caracter de la "@"
        //si no hay @ en la cadena, UbicacionArroba tomará el valor -1, entonces..
        if ((UbicacionArroba != -1) && (UbicacionPunto != -1)) {
            SubCadenaDominio = Correo.substring(UbicacionArroba,Correo.length);
            UbicacionPunto = inStr(SubCadenaDominio, ".");
            UbicacionArroba = inStr(SubCadenaDominio, "@");
            if (SubCadenaDominio.length == Correo.length) {
                NoValido = NoValido + "- No existe un nombre de usuario válido. \n";
            }
            if (UbicacionPunto == -1) {
                NoValido = NoValido + "- No existe un '.' despues del '@'. \n";
            }
            if (UbicacionPunto == (UbicacionArroba + 1)) {
                NoValido = NoValido + "- No existe un dominio correctamente definido. \n";
            }
            SubFinDominio = SubCadenaDominio.substring(UbicacionPunto,SubCadenaDominio.length);
            if (SubFinDominio.length == 1) {
                NoValido = NoValido + "- No existe un final del dominio correctamente definido. \n";
            }
            /* if (UbicacionArroba > UbicacionPunto) {
                NoValido = NoValido + "No existe un '.' despues del '@'. \n";
            } */
        } else {
            NoValido = NoValido + "- No contiene tanto el '@' como el '.'. \n";
        }
        if (NoValido == "") {
            //NoValido = "Email valido";
            //alert(NoValido);
            return "1";
        } else {
            alert("Email invalido. Los motivos son los siguientes: \n\n" + NoValido);
            //alert(NoValido);
            //parCorreo.value= "";
            parCorreo.focus();
            return "0";
        }
    }
    //tam = document.forms[numForm].elements[campo].value.length;
}

//FUNCION QUE PERMITE EL INGRESO SOLAMENTE DE NUMEROS DECIMALES, TENIENDO EN CUENTA LA CANTIDAD DE DECIMALES REQUERIDOS.
//SE DEBE LLAMAR LA FUNCION DE LA SIGUIENTE MANERA: onkeypress="return validarNumeroDecimal(event, nombreCampo, this.form)"

function validarNumeroDecimal(e, campo, numDec, numForm) {
    /* 9 = Tabular ::: 37 = Flecha Izquierda ::: 38 = Flecha Arriba ::: 39 = Flecha Derecha ::: 40 = Flecha Abajo ::: 46 = Delete */
    
    var tam = 0;
    var val = 0;
    tam = document.forms[numForm].elements[campo].value.length;
    val = document.forms[numForm].elements[campo].value;
    
    posDec = -1;
    //VERIFICAR SI EL NUMERO QUE SE HA INGRESADO HASTA EL MOMENTO TIENE SEPARADOR DECIMAL
    posDec = val.indexOf('.');
    
    tecla = (document.all) ? e.keyCode : e.which;
    
    //alert('key: ' + e.keyCode + ' tam: ' + tam + 'tecla: ' + tecla);
    if (e.keyCode == 9 || e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40){
      return true;
    } else {
        if (tecla == 46)
        {
            if(tam==0)
                return false;
            
            if(posDec==-1)
            {
                return true;    
            }
            else
            {
                return false;
            }
        }
        
        if (e.keyCode == 9 || e.keyCode == 37 || e.keyCode == 39)
        {
          return true;
        } 
        else 
        {	
          
          
          if (tecla == 8)
            return true;
          else 
          {
              if (tecla == 46)
              {
                return true;    
              }
              else 
              {
                if ( tecla >= 48 && tecla <= 57)
                {
                    if(posDec!=-1)
                    {
                        valor = val.split('.');
                        
                        if(valor[1].length==numDec * 1)
                        {
                            return false;
                        }
                        else
                        {
                            return true;
                        }
                    }
                    else
                    {
                        return true;
                    }
                }
              }        
          }
          patron = /\d/;
          te = String.fromCharCode(tecla);
          return patron.test(te);
        }
    }
}

/*
Para poder utilizar el metodo verificarRangoNotas se debe agregar el siguiente metodo fnRangoNotas, 
dentro de la pagina JSP para poder especificar en el Array los campos que se desean validar.

----- Descripcion metodo verificarRangoNotas -------
arrNotas : Arreglo bidimensional que contiene el nombre de los campos y el nombre de reconocimiento para el usuario en la interfaz 
notaMin : nota minima que debe tener cada uno de los campos a validar
notaMax : nota maxima que debe tener cada uno de los campos a validar
numForm : numero del form en el que se encuentran los campos

function fnRangoNotas()
{
    //LAS SIGUIENTES VARIABLES SE DEBEN ESPECIFICAR DE FORMA DIFERENTE EN CADA JSP
    
    //Arreglo bidimensional de los campos notas.
    arrNotas = new Array(1);
    
    //aqui se define asi new Array('PROPERTI DEL CAMPO','NOMBRE EN INTERNACIONALIZACION QUE RECONOCE EL CAMPO');
    arrNotas[0] = new Array('fltNota1','<bean:message key="mensaje.general.alertaDeshabilitacion"/>');
    
    //Se debe declarar una variable en el java - JSP que se llame notaMinima y recupere de alguna forma la nota minima permitida para el reglamento actual
    notaMin = '<%=notaMinima%>';
    
    //Se debe declarar una variable en el java - JSP que se llame notaMaxima y recupere de alguna forma la nota maxima permitida para el reglamento actual
    notaMax = '<%=notaMaxima%>';
    
    //Se debe declarar una variable en el java - JSP que se llame blnAplicaNotas y recupere de alguna forma si el reglamento maneja notas Cuantitativas
    blnAplica = '<%=blnAplicaNotas%>';
    
    //Se debe especificar al numero asociado al form en el que se encuentran los campos a validar
    var numForm = 0;
    
    //Mensaje que se va a mostrar cuando se ejecute el alert
    msj = '<bean:message key="mensaje.general.error.rangoNotas"/>';
    
    if(blnAplica==1)
    {
        if(verificarRangoNotas(arrNotas, notaMin, notaMax,numForm))
        {
            document.forms[numForm].submit();
        }
    } 
    else 
    {
        document.forms[numForm].submit();
    }
}
*/
function verificarRangoNotas(arrNotas,notaMin,notaMax,numForm,msj)
{
    var error =  msj + ":\n\n";
    var blnError = 0;
    var notaAux = 0;
    
    for(var x=0;x<arrNotas.length;x++)
    {
            notaAux = document.forms[numForm].elements[arrNotas[x][0]].value;
            
            if( ( (notaAux * 1) < (notaMin * 1) ) ||  ( (notaAux * 1) > (notaMax * 1) )  )
            {
                blnError = 1;
                error += " * " + arrNotas[x][1] + "\n";
            }
    }
    
    if(blnError==1)
    {
        alert(error);
        return false;
    }
    
    return true;
}


//FUNCION QUE PERMITE EL INGRESO SOLAMENTE DE NUMEROS DECIMALES, TENIENDO EN CUENTA LA CANTIDAD DE DECIMALES REQUERIDOS.
//SE DEBE LLAMAR LA FUNCION DE LA SIGUIENTE MANERA: onkeypress="return validarNumeroDecimal(event, nombreCampo, this.form)"

function validarNumeroDecimal(e, campo, numDec, form) {
    /* 9 = Tabular ::: 37 = Flecha Izquierda ::: 38 = Flecha Arriba ::: 39 = Flecha Derecha ::: 40 = Flecha Abajo ::: 46 = Delete */
    var tam = 0;
    var val = 0;
    tam = document.forms[form.name].elements[campo].value.length;
    val = document.forms[form.name].elements[campo].value;
    
    posDec = -1;
    //VERIFICAR SI EL NUMERO QUE SE HA INGRESADO HASTA EL MOMENTO TIENE SEPARADOR DECIMAL
    posDec = val.indexOf('.');
    
    tecla = (document.all) ? e.keyCode : e.which;
    
    //alert('key: ' + e.keyCode + ' tam: ' + tam + 'tecla: ' + tecla);
    if (e.keyCode == 9 || e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40 || e.keyCode == 46){
      return true;
    } else {
        if (tecla == 46)
        {
            if(tam==0)
                return false;
            
            if(posDec==-1)
            {
                return true;    
            }
            else
            {
                return false;
            }
        }
        
        if (e.keyCode == 9 || e.keyCode == 37 || e.keyCode == 39)
        {
          return true;
        } 
        else 
        {	
          
          
          if (tecla == 8)
            return true;
          else 
          {
              if (tecla == 46)
              {
                return true;    
              }
              else 
              {
                if ( tecla >= 48 && tecla <= 57)
                {
                    if(posDec!=-1)
                    {
                        valor = val.split('.');
                        
                        if(valor[1].length==numDec * 1)
                        {
                            return false;
                        }
                        else
                        {
                            return true;
                        }
                    }
                    else
                    {
                        return true;
                    }
                }
              }        
          }
          patron = /\d/;
          te = String.fromCharCode(tecla);
          return patron.test(te);
        }
    }
}

  /*
  FUNCION QUE PERMITE VALIDAR UN VALOR DECIMAL, EN UN RANGO DE VALORES ESPECIFICADO, RECIBE:
    e= evento
    campo = nombre del campo
    forma = Objeto Form
    vlrInferior = valor inferior a validar
    vlrSuperior = valor superior a validar
    msgError = Mensaje de error cuando no cumple con la condicion  
    tipo = Define si el valor es tipo porcentaje o normal, donde: porcentaje=1, normal=2
  */
  
  function validarValorDecimalEnRangos(e, campo, forma, vlrInferior, vlrSuperior, msgError) {
    var val = 0;
    for ( x=0; x<document.forms[forma.name].elements.length; x++) {
      if( document.forms[forma.name].elements[x].name == campo)
        val = document.forms[forma.name].elements[x].value;
    }
    if ( (val >= vlrInferior) && (val <= vlrSuperior) ) {
     return true;
    } else {
      alert( msgError + " " + vlrInferior + " - " + vlrSuperior );
      for ( x=0; x<document.forms[forma.name].elements.length; x++) {
        if( document.forms[forma.name].elements[x].name == campo)
          document.forms[forma.name].elements[x].value = vlrInferior;
      }
    }
  }

  function inicializarValorEnCampo (campo, forma, valor) {
    for ( x=0; x<document.forms[forma.name].elements.length; x++) {
      if( document.forms[forma.name].elements[x].name == campo)
        document.forms[forma.name].elements[x].value = valor;
    }
  }

