/*
-------------------------------------------------------------------------------------------
  Funções para validação de formulário
  
  CheckDate      - Verifica se o dado é do tipo data
  CheckFloat     - Verifica se o dado é do tipo float
  CheckNum       - Verifica se o dado é do tipo numérico
  CheckTime      - Verifica se o dado é do tipo hora
  CheckAlphaNum  - Verifica se o dado é do tipo alfanumérico (somente numeros e letras)
  CheckEMail     - Verifica se o dado é um e-mail válido
  CheckAlpha     - Verifica se o dado é do tipo alfabético (somente letras)

  CheckRequiredFields - Verifica se o campo é requerido  
-------------------------------------------------------------------------------------------
*/
function eCheckDate(sn) {
      s= sn.value;
      if(s.length == 0) return true;
      var i=0;
      tm= new Array();
      tm[0]= '';tm[1]= '';tm[2]='';tm[3]='';
      sep='';
      md = 0 ;

      while (i< s.length) {
          ch= s.substring(i, i + 1);
          if( ch<='9' && ch>='0')
              tm[md] += ch;
          else if (sep=='') {
              if(ch=='.' || ch=='/' || ch=='-') {
                   md++;
                   sep=ch;
              }
          }
          else if (ch==sep) {
             md++;
             if(md>2) return false;
          }
          else return false;

          i++;
      }

      if(tm[3]!='') return false;
      if(tm[0].valueOf()<1 || tm[0].valueOf()>31) return false;
      if(tm[1].valueOf()<1 || tm[1].valueOf()>12) return false; //Month
      if(tm[2].valueOf()<100) return false;

      if ((tm[1]==4 || tm[1]==6 || tm[1]==9 || tm[1]==11) && tm[0]==31)
          return false;
      if (tm[1]==2) {
           isleap = (tm[2] % 4 == 0 && (tm[2] % 100 != 0 || tm[2] % 400 == 0));
           if (tm[0]>29 || (tm[0]==29 && !isleap))
                return false;
      }

      return (tm[3]=='');
}

function CheckDate(theForm){
   for(var i=1; i<CheckDate.arguments.length; i++)
         if (!eCheckDate(theForm.item(CheckDate.arguments[i]))){
            alert("Data Inválida");
            theForm.item(CheckDate.arguments[i]).focus();
            return false;
        }
   return true;
}

function eCheckFloat(sn){
    s= sn.value;
    if(s.length == 0) return true;
    for (var i = 0; i < s.length; i++) {
        ch = s.substring(i, i + 1)
        if (!((ch >= "0" && ch <= "9") || ch=="." || ch==","))
             return false;
        }
   return true;
}

function CheckFloat(theForm){
   for(var i=1; i<CheckFloat.arguments.length; i++)
         if (!eCheckFloat(theForm.item(CheckFloat.arguments[i]))){
            alert("Número Inválido");
            theForm.theForm.item(CheckFloat.arguments[i]).focus();
            return false;
        }
   return true;
};
function eCheckNum(sn){
    s= sn.value;
    if(s.length == 0) return true;
    for (var i = 0; i < s.length; i++) {
        ch = s.substring(i, i + 1)
        if (!(ch >= "0" && ch <= "9"))
             return false;
        }
   return true;
}
function CheckNum(theForm){
   for(var i=1; i<CheckNum.arguments.length; i++)
         if (!eCheckNum(theForm.item(CheckNum.arguments[i]))){
            alert("Número Inválido");
            theForm.item(CheckNum.arguments[i]).focus();
            return false;
        }
   return true;
}

function eCheckTime(sn) {
      s= sn.value;
      if(s.length == 0) return true;
      i=0;
      tm= new Array();
      tm[0]= '';tm[1]= '';tm[2]='';tm[3]= '';tm[4]='';
      md = 0 ;

      while (i< s.length) {
          ch= s.substring(i, i + 1);
          if( ch<='9' && ch>='0')
              tm[md] += ch;
          else if(ch==':') md++;
          else if (ch==' ') {
             if(md<1) return false;
             md++;
          }
          else if(md>=1 && md<=2){
            tmp= s.substring(i, i + 2);
            //tmp = tmp.toUppercase();
            if ( tmp=='AM' || tmp=='PM' || tmp=='am' || tmp=='pm')
            {
               tm[3]= tmp;
               ++i;
               md++;
            }
            else return false;
          }
          else return false;
          i++;
      }

      if(tm[2]!='') return false;
//      if(tm[0].valueOf()<0 || tm[0].valueOf()>23) return false;
//      if(tm[0].valueOf()<13 && tm[3]=='') //Specify am/pm
//          return false;

      if(tm[0].valueOf()>12 && tm[3]!='') //don't Specify am/pm
          return false;

      if( tm[1].valueOf()<0 || tm[1].valueOf()>59) return false;

      if(tm[2]!='')
          if( tm[2].valueOf()<0 || tm[2].valueOf()>59) return false;

      return (tm[2]=='');
}

function CheckTime(theForm){
   for(var i=1; i<CheckTime.arguments.length; i++)
         if (!eCheckTime(theForm.item(CheckTime.arguments[i]))){
            alert("Hora Inválida");
            theForm.item(CheckTime.arguments[i]).focus();
            return false;
        }
   return true;
}
function eCheckAlphaNum(sn){
    s= sn.value;
    if(s.length == 0) return true;
    for (var i = 0; i < s.length; i++) {
        ch = s.substring(i, i + 1)
        if (!((ch >= "A" && ch <= "Z") || (ch >= "a" && ch <= "z")
           || (ch >= "0" && ch <= "9")))
             return false;
        }
   return true;
}
function CheckAlphaNum(theForm){
   for(var i=1; i<CheckAlphaNum.arguments.length; i++)
         if (!eCheckAlphaNum(theForm.item(CheckAlphaNum.arguments[i]))){
            alert("Campo Alfanumérico. Entrada Inválida.");
            theForm.item(CheckAlphaNum.arguments[i]).focus();
            return false;
        }
   return true;
}

function eCheckAlpha(sn){
    s= sn.value;
    if(s.length == 0) return true;
    for (var i = 0; i < s.length; i++) {
        ch = s.substring(i, i + 1)
        if (!((ch >= "A" && ch <= "Z") || (ch >= "a" && ch <= "z" || ch == " ")))
             return false;
        }
   return true;
}

function CheckAlpha(theForm){
   for(var i=1; i<CheckAlpha.arguments.length; i++)
         if (!eCheckAlpha(theForm.item(CheckAlpha.arguments[i]))){
            alert("Campo Alfabético. Entrada Inválida.");
            theForm.item(CheckAlpha.arguments[i]).focus();
            return false;
        }
   return true;
}

function eCheckEMail(sn){
  var goodEmail = sn.value.match(/\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\.nom)|(\.ind)|(\..{2,2}))$)\b/gi);
  if (goodEmail || sn.value==""){return true;}
  else{return false;}
}

function CheckEMail(theForm){
   for(var i=1; i<CheckEMail.arguments.length; i++)
         if (!eCheckEMail(theForm.item(CheckEMail.arguments[i]))){
            alert("E-Mail Inválido!");
            theForm.item(CheckEMail.arguments[i]).focus();
            return false;
        }
   return true;
}

function CheckRequiredFields(theForm)
{
   for(i=1; i<CheckRequiredFields.arguments.length; i++)
   {
     field = theForm.item(CheckRequiredFields.arguments[i]);
     if(field.value=="" || field.value=="__/__/____" || 
		field.value=="__:__:__" || field.value=="__:__" ||
		(field.type=='checkbox' && !field.checked ))
	  {
        alert("Campo Requerido.");
        field.focus();
        return false;
      }
   }
   return true;
}