/*
Nombre del programa 	:	validate.js
Propósito   	  	:	Validar campos de formas HTML.
Descripción	        :	Valida los campos de una forma HTML cualsea el numero de campos.
Predecesor	        :	Cualquier página HTML que mande llamar a la función.
Sucesor	        	:	La página HTML que mandó llamar a la función.
Nombre Analista     	:	David Guzmán
Nombre Diseñador    	:	David Guzman
Códigos de retorno  	:	Devuelve false cuando al validar hay un campo incorrecto.
Nomenclatura		:	a=alfanumerico (letras y números sin incluir acentos).
				i=integer (únicamente números enteros).
				t=texto sin caracteres raros.
				n=numérico (puede contener sólo enteros ó con punto decimal sin restricción).
				f=numérico con punto decimal (únicamente números con puntos decimales con restriccion).
				d=fecha.
                                mandatoriedad{n=no mandatorio|m=mantatorio}.
Bitácora		:	Acción				Autor			Fecha
				Funciones JavaScript		David Guzmán(EDS)	06/MAR/2002
*/



//Esta función nos dice si el campo es de tipo fecha o no.
//Tipos de dato soportado: dd/mm/yyyy y mm/dd/yyyy Kind in (mx,us)
function isDate(objStr,objKind){
   var day="", month="", year="";

   charStr = new String;
   charStr = objStr.value;
   
   if(objStr.value.length!=10){
      alert("La longitud de la fecha no es correcta. Corrígela, por favor.");
      objStr.focus();
      objStr.select();
      return "no";
   }

   if( (charStr.charAt(2)!="/")&&(charStr.charAt(5)!="/") ){
      alert("Esta fecha no es válida. Corrígela, por favor.")
      objStr.focus();
      objStr.select();
      return "no";
   } 

   switch(objKind){
      case "mx" : day = charStr.substring(0,2);
                  month = charStr.substring(3,5);
                  year = charStr.substring(6,10);
                  break;
      case "us" : month = charStr.substring(0,2);
                  day = charStr.substring(3,5);
                  year = charStr.substring(6,10);
                  break;
   }
   if(isNaN(year)==true){
      alert("El año no es correcto. Corrígelo, por favor.");
      objStr.focus();
      objStr.select();
      return "no";
   }   

   if(isNaN(month)==true){
      alert("El mes no es correcto. Corrígelo, por favor.");
      objStr.focus();
      objStr.select();
      return "no";
   }   

   if(isNaN(day)==true){
      alert("El día no es correcto. Corrígelo, por favor.");
      objStr.focus();
      objStr.select();
      return "no";
   }   

   if (day == 0) { 
      alert("El día no es correcto. Corrígelo, por favor.")
      objStr.focus();
      objStr.select();
      return "no";
   }

   if (month == 0 || month > 12) { 
       alert("El mes que introdujiste no existe. Corrígelo, por favor.");
       objStr.focus();
       objStr.select();
       return "no"; 
   }

   if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
     if (day > 31) { 
        alert("En este mes no existen días mayores de 31. Corrígelo, por favor.");
        objStr.focus();
        objStr.select();
        return "no";
     }
   }
   else{
      if (month == 4 || month == 6 || month == 9 || month == 11){
         if (day > 30){
            alert("En este mes no existen días mayores de 30. Corrígelo, por favor.");  
            objStr.focus();
            objStr.select();
            return "no";
         }
      }
      else{
         if (year%4 != 0){
            if (day > 28){ 
               alert("En este mes no existen días mayores de 28. Corrígelo, por favor."); 
               objStr.focus();
               objStr.select();
               return "no"; 
            }      
         } 
         else{
            if (day > 29){ 
               alert("En este mes no existen días mayores de 29. Corrígelo, por favor.");
               objStr.focus();
               objStr.select();
               return "no"; 
            }
         }
      }
   }
}


//Esta función valida que un dato sea numérico y aparte que cumpla con el número 
//de enteros y decimales(restricciones) que el usuario decida.
function isNumericStrict(objElement,intPos,decPos){
   var i=0,j=0;
   var numInt=0, numDec=0;

   //primero validamos el número de enteros...
   do{
      objElement.value.charAt(i);
      if(objElement.value.charAt(i)!=".")
         numInt+=1;
      i++;
   }while( (objElement.value.charAt(i)!=".")&&(i<=objElement.value.length) );
   if(numInt>intPos){
      alert("El número de posiciones enteras para este campo es de " + intPos );
      objElement.focus();
      objElement.select();
      return false;
   }

   //luego validamos el número de decimales...
   i = i+2;
   do{
      objElement.value.charAt(i);
      numDec+=1;
      i++;
   }while(i<=objElement.value.length);
   if(numDec>decPos){
      alert("El número de posiciones decimales para este campo es de " + decPos);
      objElement.focus();
      objElement.select();
      return false;
   }
   return true;

}


//Esta función valida si el dato es alfanumerico
function isAlfaNumeric(objStr){
   var valid = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz1234567890/ "
   var ok = "yes";
   var temp;

   for (var i=0; i<objStr.value.length; i++) {
      temp = "" + objStr.value.substring(i, i+1);
      if (valid.indexOf(temp) == "-1") 
         ok = "no";
   }

   if (ok == "no") {
      alert("Este campo sólo acepta letras y números. Corrígelo, por favor.");
      objStr.focus();
      objStr.select();
      return false;
   }
   
   objStr.value = objStr.value.substring(0,1).toUpperCase() + objStr.value.substring(1,objStr.value.length).toLowerCase();
   return true;
}


//Esta función valida si el dato es entero
function isInteger(objStr){
   var valid = "1234567890"
   var ok = "yes";
   var temp;

   for (var i=0; i<objStr.value.length; i++) {
      temp = "" + objStr.value.substring(i, i+1);
      if (valid.indexOf(temp) == "-1") 
         ok = "no";
   }

   if (ok == "no") {
      alert("Este campo no debe llevar decimales. Corrígelo, por favor.");
      objStr.focus();
      objStr.select();
      return false;
   }
   
   return true;
}


//Esta función valida si el dato es de tipo texto
//y que no contenga caracteres raros...
function isText(objStr){
   var valid = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚabcdefghijklmnñopqrstuvwxyzáéíóú- "
   var ok = "yes";
   var temp;

   for (var i=0; i<objStr.value.length; i++) {
      temp = "" + objStr.value.substring(i, i+1);
      if (valid.indexOf(temp) == "-1") 
         ok = "no";
   }

   if (ok == "no") {
      alert("Solo son aceptadas letras y acentos. Corrígelo, por favor.");
      objStr.focus();
      objStr.select();
      return false;
   }
   
   //objStr.value = objStr.value.substring(0,1).toUpperCase() + objStr.value.substring(1,objStr.length).toLowerCase();
   //objStr.value = objStr.value.substring(0,1).toUpperCase() + objStr.value.substring(1,objStr.length);
   return true;
}


function isPhone(objStr){
   var valid = "1234567890-()+ "
   var ok = "yes";
   var temp;

   for (var i=0; i<objStr.value.length; i++) {
      temp = "" + objStr.value.substring(i, i+1);
      if (valid.indexOf(temp) == "-1") 
         ok = "no";
   }

   if (ok == "no") {
      alert("El número es inválido. Corrígelo, por favor.");
      objStr.focus();
      objStr.select();
      return false;
   }
   
   return true;
}

//Esta función valida si el dato es email
//y que no contenga caracteres raros...
function isEmail(objStr){
   var valid = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_1234567890@."
   var ok = "yes";
   var temp;

   for (var i=0; i<objStr.value.length; i++) {
      temp = "" + objStr.value.substring(i, i+1);
      if (valid.indexOf(temp) == "-1") 
         ok = "no";
   }

   if(objStr.value.indexOf("@")=="-1")
   	ok = "no";
   
   if (ok == "no") {
      alert("No es una dirección de correo válida. Corrígela, por favor.");
      objStr.focus();
      objStr.select();
      return false;
   }
   
   objStr.value.toLowerCase();
   return true;
}


//Esta función valida si el dato es numérico o no...
function isNumeric(objStr){
   if(isNaN(objStr.value)==true){
      alert("El carácter capturado no es numérico. Corrígelo, por favor.");
      objStr.focus();
      objStr.select();
      return false;
   }   
   else
      return true;
}

//La función valida si el dato es vacío...
function isBlank(objStr){

   var len = objStr.value.length;

   for(var i=0; i<len; ++i){
      
      if(objStr.value.charAt(i)!=" ") 
      {	

      	return false;
      }
   }
   
   alert("Este campo es obligatorio. Rellénalo, por favor.");
   objStr.focus();
   objStr.select();
   return true;
}



/**************************************************************************
* Reemplaza el caracter "t" con "u" en el string "s"
***************************************************************************/

function replace(s, t, u) 
{
   /*
   **  Replace a token in a string
   **    s  string to be processed
   **    t  token to be found and removed
   **    u  token to be inserted
   **  returns new String
   */
   i = s.indexOf(t);
   r = "";
   if (i == -1) return s;
   r += s.substring(0,i) + u;
   if ( i + t.length < s.length)
     r += replace(s.substring(i + t.length, s.length), t, u);
   return r;
}


/**************************************************************************
* Compara dos números Si A es mayor a B regresa TRUE, si no regresa FALSE
***************************************************************************/
function isMoreThan(numA, numB)
{
	dif = numA - numB;
	if(dif > 0)
		return true;	
	return false;
}

