/*
    This is the source code for the validation function.
    Add the following code just after the </HEAD> in the files where the
    generalised validation functionality is required.
    <SCRIPT language="JavaScript1.2" src="gen_validation.js"></SCRIPT>
*/

    /*
    *   File : gen_validation.js
    *
    *   Author : Prasanth M J
    *
    *   CreativeProgrammers.com -
        *        Turn your Programming Expertise into Achievements!
    *   Visit http://www.creativeprogrammers.com
    *
    *   Email : prasanth@creativeprogrammers.com
    */
//---------------------------------EMail Check ------------------------------------

/*  checks the validity of an email address entered
*   returns true or false
*
*/

  function FormataData(Formulario, Campo, TeclaPres)
  {
    var tecla = TeclaPres.keyCode;
    var strCampo;
    var vr;
    var tam;

    eval("strCampo = document." + Formulario + "." + Campo);

    vr = strCampo.value;
    vr = vr.replace(".", "");
    vr = vr.replace("/", "");
    vr = vr.replace("/", "");
    vr = vr.replace("/", "");
    tam = vr.length + 1;

    //Back Space / Tabulação

    if (tecla != 9 && tecla != 8)
    {
      if (tam == 3)
      {
        strCampo.value = vr.substr(0, tam - 1) + '/' + vr.substr(tam - 1, tam);
        return ;
      }
      if (tam >= 5 && tam <= 10)
      {
        strCampo.value = vr.substr(0, 2) + '/' + vr.substr(2, 2) + '/' + vr.substr(4, 4);
        return ;
      }
    }
  }
  
  function FormataHora(Formulario, Campo, TeclaPres)
  {
    var tecla = TeclaPres.keyCode;
    var strCampo;
    var vr;
    var tam;

    eval("strCampo = document." + Formulario + "." + Campo);

    vr = strCampo.value;
    vr = vr.replace(".", "");
    vr = vr.replace(":", "");
    vr = vr.replace(":", "");
    vr = vr.replace(":", "");
    tam = vr.length + 1;

    //Back Space / Tabulação

    if (tecla != 9 && tecla != 8)
    {
      if (tam == 3)
      {
        strCampo.value = vr.substr(0, tam - 1) + ':' + vr.substr(tam - 1, tam);
        return ;
      }
      if (tam >= 5 && tam <= 10)
      {
        strCampo.value = vr.substr(0, 2) + ':' + vr.substr(2, 2) + ':' + vr.substr(4, 2);
        return ;
      }
    }
  }
  
  
	//Verifca se o formato da data esta é DD/MM/AAAA

	function isValidDate(dateStr) 
	{
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // Ano requer 4 digitos

	var matchArray = dateStr.match(datePat); 
	if (matchArray == null) 
		{
		alert(dateStr + " - Uma data não possui um formato correto. Verifique!!!!!")
		return false;
		}
	day = matchArray[1];
	month = matchArray[3]; 
	year = matchArray[4];
	if (month < 1 || month > 12) 
		{ 
		alert("O valor do mês deve ser um número entre 1 e 12.");
		return false;
		}
	if (day < 1 || day > 31) 
		{
		alert("O valor do dia é um número entre 1 e 31 .");
		return false;
		}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
		{
		alert("O mês de  "+month+" não possui 31 dias!")
		return false;
		}
	if (month == 2) 
		{ 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) 
			{
			alert("Fevereiro de  " + year + " não tem  " + day + " dias!");
			return false;
			}
		}
	return true;
		
	}
	
function validateEmail(email)
{
// a very simple email validation checking.
// you can add more complex email checking if it helps
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null)
      {
            var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
            if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}

/* function validateData
*  Checks each field in a form
*  Called from validateForm function
*/
function validateData(strValidateStr,objValue,strError)
{
    var epos = strValidateStr.search("=");
    var  command  = "";
    var  cmdvalue = "";
    if(epos >= 0)
    {
     command  = strValidateStr.substring(0,epos);
     cmdvalue = strValidateStr.substr(epos+1);
    }
    else
    {
     command = strValidateStr;
    }

    switch(command)
    {
        case "req":
        case "required":
         {
           if(eval(objValue.value.length) == 0)
           {
              if(!strError || strError.length ==0)
              {
                strError = objValue.name + " : Campo obrigatório";
              }//if
              alert(strError);
              return false;
           }//if
           break;
         }//case required
        case "maxlength":
        case "maxlen":
          {
             if(eval(objValue.value.length) >  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = objValue.name + " : "+cmdvalue+" caracteres no mínimo ";
               }//if
               alert(strError + "\n[Tamanho corrente = " + objValue.value.length + " ]");
               return false;
             }//if
             break;
          }//case maxlen
        case "minlength":
        case "minlen":
           {
             if(eval(objValue.value.length) <  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = objValue.name + " : " + cmdvalue + " caracteres no mínimo  ";
               }//if
               alert(strError + "\n[Tamanho corrente = " + objValue.value.length + " ]");
               return false;
             }//if
             break;
            }//case minlen
        case "alnum":
        case "alphanumeric":
           {
              var charpos = objValue.value.search("[^A-Za-z0-9]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
               if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": Somente valores alfanuméricos ";
                }//if
                alert(strError + "\n [Posição do erro " + eval(charpos+1)+"]");
                return false;
              }//if
              break;
           }//case alphanumeric
        case "num":
        case "numeric":
           {
              var charpos = objValue.value.search("[^0-9]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": Somente números ";
                }//if
                alert(strError + "\n [Erro na posição " + eval(charpos+1)+"]");
                return false;
              }//if
              break;
           }//numeric
        case "alphabetic":
        case "alpha":
           {
              var charpos = objValue.value.search("[^A-Za-z]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                  if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": Somente letras ";
                }//if
                alert(strError + "\n [Erro na posiçãoo " + eval(charpos+1)+"]");
                return false;
              }//if
              break;
           }//alpha
                case "alnumhyphen":
                        {
              var charpos = objValue.value.search("[^A-Za-z0-9\-_]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                  if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": Valores permitidos são A-Z,a-z,0-9,- and _";
                }//if
                alert(strError + "\n [Erro na posição " + eval(charpos+1)+"]");
                return false;
              }//if
                        break;
                        }
                case "decimal":
                        {
              var charpos = objValue.value.search("[^0-9\.,]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                  if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": Valores permitidos são 0-9,. e ,";
                }//if
                alert(strError + "\n [Erro na posição " + eval(charpos+1)+"]");
                return false;
              }//if
                        break;
                        }

          	case "datas":
          {
               if(!isValidDate(objValue.value))
               {
                 if(!strError || strError.length ==0)
                 {
                    strError = objValue.name+": Data inválida ";
                 }//if
                 alert(strError);
                 return false;
               }//if
           break;
          }//case datas
                        
          	case "email":
          {
               if(!validateEmail(objValue.value))
               {
                 if(!strError || strError.length ==0)
                 {
                    strError = objValue.name+": Email inválido ";
                 }//if
                 alert(strError);
                 return false;
               }//if
           break;
          }//case email
        case "lt":
        case "lessthan":
         {
            if(isNaN(objValue.value))
            {
              alert(objValue.name+": Tem que ser número ");
              return false;
            }//if
            if(eval(objValue.value) >=  eval(cmdvalue))
            {
              if(!strError || strError.length ==0)
              {
                strError = objValue.name + " : valor tem que ser menor que "+ cmdvalue;
              }//if
              alert(strError);
              return false;
             }//if
            break;
         }//case lessthan
        case "gt":
        case "greaterthan":
         {
            if(isNaN(objValue.value))
            {
              alert(objValue.name+": Tem que ser número ");
              return false;
            }//if
             if(eval(objValue.value) <=  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = objValue.name + " : valor tem que ser maior que "+ cmdvalue;
               }//if
               alert(strError);
               return false;
             }//if
            break;
         }//case greaterthan
        case "regexp":
         {
            if(!objValue.value.match(cmdvalue))
            {
              if(!strError || strError.length ==0)
              {
                strError = objValue.name+": Caracteres inválidos ";
              }//if
              alert(strError);
              return false;
            }//if
           break;
         }//case regexp
        case "dontselect":
         {
            if(objValue.selectedIndex == null)
            {
              alert("ERRO: Comando para item que não é Lista");
              return false;
            }
            if(objValue.selectedIndex == eval(cmdvalue))
            {
             if(!strError || strError.length ==0)
              {
              strError = objValue.name+": Selecione opção ";
              }//if
              alert(strError);
              return false;
             }
             break;
         }//case dontselect
    }//switch
    return true;
}

/*
* function validateForm
* the function that can be used to validate any form
* returns false if the validation fails; true if success
* arguments :
*   objFrm     : the form object
*   arrObjDesc : an array of objects describing the validations to conduct on each
*        input item.
*          The array should consist of one object per input item in the order the input
*          elements are present in the form. Each object consist of zero or more validation
*          objects. Each of these validation object is a pair consisting of the validation
*          descriptor string and an optional Error message.
*/

function validateForm(objFrm,arrObjDesc)
{
 for(var itrobj=0; itrobj < arrObjDesc.length; itrobj++)
 {
   if(objFrm.elements.length <= itrobj)
   {
        alert("ERRO: Elemento fora do array, comunique ao ADM");
        return false;
   }//if
   for(var itrdesc=0; itrdesc < arrObjDesc[itrobj].length ;itrdesc++)
   {
      if(validateData(arrObjDesc[itrobj][itrdesc][0],
                 objFrm[itrobj],arrObjDesc[itrobj][itrdesc][1]) == false)
       {
             objFrm[itrobj].focus();
         return false;
       }//if
   }//for
 }//for
 return true;
}
