 // Referencia para um campo do formulario:
 var fieldRef = null;
 
 // Funcao de callback responsavel pelo tratamento de erros de valores em campos numeros:
 function fnErrorNotNumber() {
   if (fieldRef!=null) {
     var pos = 0;
     for (pos=0;pos<fieldRef.value.length;pos++) {
         var ch = fieldRef.value.charAt(pos);
         if (!(ch>='0' && ch<='9')) {
           break;
         }
     }
     fieldRef.value = fieldRef.value.substring(0,pos);
   }
 }
 
 function fnErrorDateFormat() {
     fieldRef.value = fieldRef.value.substring(0,fieldRef.value.length-1);
 }
 
 function fnDateFormatter(i) {
   //alert("i="+i);
   if ((i==1 && fieldRef.value.length==2)|| (i==4 && fieldRef.value.length==5)) {
     fieldRef.value+="/";
   } 
 }
 
 function fnErrorHourFormat() {
     fieldRef.value = fieldRef.value.substring(0,fieldRef.value.length-1);
 }
 
 function fnHourFormatter(i) {
   //alert("i="+i);
   if ((i==1 && fieldRef.value.length==2)) {
     fieldRef.value+=":";
   } 
 }

 function fnErrorZipcodeFormat() {
     fieldRef.value = fieldRef.value.substring(0,fieldRef.value.length-1);
 }
 
 function fnZipcodeFormatter(i) {
   //alert("i="+i);
   if (i==4 && fieldRef.value.length==5) {
     fieldRef.value+="-";
   } 
 }
 
 function fnErrorPhoneFormat() {
     fieldRef.value = fieldRef.value.substring(0,fieldRef.value.length-1);
 }

 /*
  * Esta funcao faz um parsing de uma string de parametro 'val'
  * a partir do parametro informado verificando se esta conforme
  * a expressao regular (0-9)+  .
  * Caso em algum campo nao respeita, a funcao de call-back para
  * tratamento de erros fnError e sem parametros sera chamada.
  * Retorna um valor booleano, sendo true caso o parsing tiver sido
  * efetuado com sucesso, false caso o contrario.
  */
 function nosignNumberValueParser(val,fnError) {
    if (val!=null) {
	    var val_len = val.length;
	    var lookahead = '';
	    
        for (var i=0;i<val_len;i++) {
              lookahead = val.charAt(i);
             // alert("lookahead="+lookahead);   
              if (!(lookahead>='0' && lookahead<='9' || lookahead=='@')) {
                    if (fnError!=null) {
                      fnError();
                    }
                    return false;
              }         
        }  // for 
    }
    
    return true;
 }
 
 /*
  * Esta funcao faz um parsing de uma string de parametro 'dateval'
  * a partir do parametro informado verificando se esta conforme
  * a data no formato dd/mm/aaaa.
  * Caso em algum campo nao respeita, a funcao de call-back para
  * tratamento de erros fnError e sem parametros sera chamada.
  * Retorna um valor booleano, sendo true caso o parsing tiver sido
  * efetuado com sucesso, false caso o contrario.
  */
 function dataValueParser(dateval,fnError,fnExec) {
    if (dateval!=null) {
    
       var val_len = dateval.length;
       var lookahead = '';
       var old_lookahead = '';
       
       for (var i=0;i<val_len;i++) {
           lookahead = dateval.charAt(i);
           //alert("pos="+i+",lookahead="+lookahead);
           
           if (!lookahead=='@') {
	           switch (i) {
	           
	              case 0:
	                      if (!(lookahead>='0' && lookahead<='3')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                      } 
	                      break;
	                      
	              case 1:
	                      if (!(((old_lookahead>='0' && old_lookahead<='2') && (lookahead>='0' && lookahead<='9')) || (old_lookahead=='3' && (lookahead>='0' && lookahead<='1')))) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                      }
	                    
	                      break;
	                      
	              case 2:
	              case 5:
	                      if (!(lookahead=='/')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                      }
	                      break;
	              
	              case 3:
	                      if (!(lookahead>='0' && lookahead<='1')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                      }
	                      break;
	                      
	              case 4:
	                     if (!((old_lookahead=='0' && (lookahead>='1' && lookahead<='9')) || ((old_lookahead=='1') && (lookahead>='0' && lookahead<='2')))) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                     }
	                     break;
	             
	             case 6:
	                    if (!(lookahead>='1' && lookahead<='9')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                    }
	                    break;
	             case 7:
	             case 8:
	             case 9:
	                    if (!(lookahead>='0' && lookahead<='9')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                    }
	                    break;
	           } // switch
	       }
           
           old_lookahead = lookahead;
           if (fnExec!=null) {
            fnExec(i);
           }
     } // for.
     
    }
    
    return true;
}


 /*
  * Esta funcao faz um parsing de uma string de parametro 'cpfval'
  * a partir do parametro informado verificando se esta conforme
  * a data no formato de CPF xxxxxxxxx-yy, onde yy e o digito verificador do CPF.
  * Caso em algum campo nao respeita, a funcao de call-back para
  * tratamento de erros fnError e sem parametros sera chamada.
  * Retorna um valor booleano, sendo true caso o parsing tiver sido
  * efetuado com sucesso, false caso o contrario.
  */
 function CPFParser(cpfval,fnError,fnExec) {
 
    if (cpfval!=null) {
    
       var val_len = cpfval.length;
       var lookahead = '';
       var old_lookahead = '';
       
       for (var i=0;i<val_len;i++) {
           lookahead = cpfval.charAt(i);
         //  alert("pos="+i+",lookahead="+lookahead);
           switch (i) {
           
              case 0:
              case 1:
              case 2:
              case 3:
              case 4:
              case 5:
              case 6:
              case 7:
              case 8:
              case 10:
              case 11:
                      if (!(lookahead>='0' && lookahead<='9')) {
		                    if (fnError!=null) {
		                      fnError();
		                    }
		                    return false;
                      } 
                      break;
                      
              case 8:
                      if (!(lookahead=='-')) {
		                    if (fnError!=null) {
		                      fnError();
		                    }
		                    return false;
                      }
                      break;
              
           } // switch
           
           old_lookahead = lookahead;
          if (fnExec!=null) {
           fnExec(i);
          }
     } // for.
     
    }
    
    return true;
}

 /*
  * Esta funcao faz um parsing de uma string de parametro 'dateval'
  * a partir do parametro informado verificando se esta conforme
  * a data no formato dd/mm/aaaa.
  * Caso em algum campo nao respeita, a funcao de call-back para
  * tratamento de erros fnError e sem parametros sera chamada.
  * Retorna um valor booleano, sendo true caso o parsing tiver sido
  * efetuado com sucesso, false caso o contrario.
  */
 function phoneParser(phoneval,fnError) {
 
    if (phoneval!=null) {
    
       var val_len = phoneval.length;
       var lookahead = '';
       var old_lookahead = '';
       
       for (var i=0;i<val_len;i++) {
           lookahead = phoneval.charAt(i);
           if ( (!((lookahead>='0' && lookahead<='9') || lookahead=='-'))) {
                if (fnError!=null) {
                  fnError();
                }
                return false;
          } 
          old_lookahead = lookahead;
	   } // for.
     
    }
    
    return true;
}


 function zipcodeParser(zipcodeval,fnError,fnExec) {
    if (zipcodeval!=null) {
    
       var val_len = zipcodeval.length;
       var lookahead = '';
       var old_lookahead = '';
       
       for (var i=0;i<val_len;i++) {
           lookahead = zipcodeval.charAt(i);
          // alert("pos="+i+",lookahead="+lookahead);
          
          if (lookahead!='@') {
          
	           switch (i) {
	           
	              case 0:
	              case 1:
	              case 2:
	              case 3:
	              case 4:
	              case 6:
	              case 7:
	              case 8:
	                      if (!(lookahead>='0' && lookahead<='9')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                      } 
	                      break;
	                      
	              case 5:
	                      if (!(lookahead=='-')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                      }
	                      break;
	              
	           } // switch
	       }
           
           old_lookahead = lookahead;
          if (fnExec!=null) {
           fnExec(i);
          }
     } // for.
     
    }
    return true;
}
 
 /*
  * Esta funcao faz um parsing de uma string de parametro 'hourval'
  * a partir do parametro informado verificando se esta conforme
  * a hora no formato HH:mm.
  * Caso em algum campo nao respeita, a funcao de call-back para
  * tratamento de erros fnError e sem parametros sera chamada.
  * Retorna um valor booleano, sendo true caso o parsing tiver sido
  * efetuado com sucesso, false caso o contrario.
  */
 function hourValuParser(hourval,fnError,fnExec) {
 
	 if (hourval!=null) {
		    
	       var val_len = hourval.length;
	       var lookahead = '';
	       var old_lookahead = '';
	       
	       for (var i=0;i<val_len;i++) {
	           lookahead = dateval.charAt(i);
	           //alert("pos="+i+",lookahead="+lookahead);
	           
	           switch (i) {
	           
	              case 0:
	                      if (!(lookahead>='0' && lookahead<='2')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                      } 
	                      break;
	                      
	              case 1:
	                      if (!(old_lookahead>='0' && old_lookahead<='2') && (lookahead>='0' && lookahead<='4')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                      }
	                    
	                      break;
	                      
	              case 3:
	                      if (!(lookahead==':')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                      }
	                      break;
	              
	              case 3:
	                      if (!(lookahead>='0' && lookahead<='5')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                      }
	                      break;
	                      
	              case 4:
	                     if (!(old_lookahead>='0' && old_lookahead<='5') && (lookahead>='0' && lookahead<='9')) {
			                    if (fnError!=null) {
			                      fnError();
			                    }
			                    return false;
	                     }
	                     break;
	           } // switch
	           
	           old_lookahead = lookahead;
	           if (fnExec!=null) {
	            fnExec(i);
	           }
	     } // for.
	     
	    }
	    
	    return true;
}

 
