var wf_dataAtual; // definir valor para a data atual

//************************************************
//Rotinas para associar aos eventos do componente mask
//***********************************************
//Blur<----Ok
function sg_blur(parControle){
var wl_mask = parControle.mask
   if(parControle.value=="")return
   switch(wl_mask){
   case "99/99/9999":
	  if(parControle.value.length<parControle.maxLength) sg_completaDado(parControle,wl_mask) 
      if((parControle.value.length<10)||(parControle.value.length==1)||(parControle.value.length==4)){
		alert("Data inválida.");parControle.focus();return
      }
      var wl_ano=parControle.value.substr(6,4)
      var wl_mes=parControle.value.substr(3,2)
      var wl_dia=parControle.value.substr(0,2)
      if(((wl_dia>30)&&("02,04,06,09,11".indexOf(wl_mes)>=0))||(wl_dia>31)||
		 ((wl_dia>29)&&(wl_mes=="02"))||((wl_dia==29)&&(wl_mes=="02")&&(wl_ano%4!=0)))
			{alert("Dia inválido.");parControle.focus();return}
	  if(wl_mes > 12){alert("Mês inválido.");parControle.focus();return}
	  if((wl_ano < 1900)||(wl_ano > 2050)){ 
	  			 alert("Ano inválido.");
				 parControle.focus();
				 return
				 }
	  break;
	case "99:99":
		if(parControle.value.length<parControle.maxLength)sg_completaDado(parControle,parMask) 
		if(parControle.value.substr(0,2)>23){ alert("Hora inválida."); parControle.focus();return}
		if(parControle.value.substr(3,2)>59){ alert("Minuto inválido."); parControle.focus();return}
		break;
	case "9999.9999.9999-9":
		if(!fg_formataNumeroProcesso(parControle)){return}
		break;
	case "999.999.999-99":
		if(!fg_cpf(parControle)){ alert("Número do CPF inválido.");parControle.focus();return}
		break;
		
	case "999.99999.99-9": case "9.999.999.999-9":
		if(!fg_pisPasep(parControle)){ alert("Número do PIS/PASEP inválido");parControle.focus();return}
		break;
		
	case "99.999.999/9999-99":
		if(!fg_cgc(parControle)){ alert("Número de CGC inválido.");parControle.focus();return}
		break;
   }
  sg_formatarMascara(parControle,wl_mask)   

 }
 
//Keydown<----ok
function sg_keyDown(parControle){
var wl_mask = parControle.mask
wf_dataAtual = (parControle.dataatual?parControle.dataatual:"")
   var kc;
   var e;
   e = navigator.appName;
   //alert(e);
   if (window.event)
     {
     kc = window.event.keyCode;
  }
  else if (e)
     {
     kc = e.which;
  } 
  switch(kc){
    case 13://enter troca por tab
		if(parControle.readOnly||parControle.disabled)return
		 if (window.event){	 window.event.keyCode=9;}
		 else if (e){e.which=9}
		 break;
	case 40: //Seta P/ Baixo
		 if (window.event){	 window.event.keyCode=9;}
		 else if (e){e.which=9}
		break;
	case 8: case 46://caso delete, backspace
		 if (window.event){	 window.event.keyCode=35;}
		 else if (e){e.which=35}
		if(parControle.readOnly||parControle.disabled)return
		var wl_ojRange = document.selection.createRange();
		if(wl_ojRange.text!=""){
			wl_ojRange.text=""
	        sg_formatarMascara(parControle,wl_mask)
		}else sg_retiraUltimo(parControle)
        break; 
    case 114: //F3
		if(parControle.readOnly||parControle.disabled)return
		if(wl_mask=="99/99/9999"){ 
			parControle.value = wf_dataAtual
			 if (window.event){	 window.event.keyCode=35;}
			 else if (e){e.which=35}
        }else{ 
			if(wl_mask == "99:99"){
				parControle.value = fg_horaAtual()
				 if (window.event){	 window.event.keyCode=35;}
				 else if (e){e.which=35}
			}
        }
		break;
   }
}

 //keypress
function sg_keyPress(parControle){
var wl_mask = parControle.mask		  

wf_dataAtual = (parControle.dataatual?parControle.dataatual:"")
  if(parControle.readOnly||parControle.disabled)return
   var kc;
   var e;
   e = navigator.appName;
   //alert(e);
   if (window.event)
     {
     kc = window.event.keyCode;
  }
  else if (e)
     {
     kc = e.which;
  }   
  var wl_codigoTecla = kc
//alert(parMask.indexOf("."))	

  if(!wl_mask)wl_mask="9999999999999999999999999999";	
  //Verifica se o controle é numérico
  if((!isNaN(wl_mask))&&((wl_mask.indexOf(".")<0)||(wl_mask.indexOf(",")<0))){
  	  if((wl_codigoTecla < 48)||(wl_codigoTecla > 57)){
	  	 if (window.event){	 window.event.keyCode=0;}
		 else if (e){e.which=0}
	  } 
  }else{
      //Evita o zero inicial do leitor de código de barra
      if (wl_mask == "9999.9999.9999-9"){
         if(parControle.value=="")
            if(kc==48){
		 		 if (window.event){	 window.event.keyCode=0;}
		 		else if (e){e.which=0}
               return
		 }
      }  

      sg_formatarMascara(parControle,wl_mask,kc)
		 if (window.event){	 window.event.keyCode=0;}
		 else if (e){e.which=0}
  }

}
 
//************************************************
//Rotinas gerais para componente mask
//*********************************************** 
 //Retira os espaços no começo e no fim da string
function jtrim(parValor) {   
    while (parValor.charAt(0) == ' ') parValor = parValor.substring(1,parValor.length);
    while (parValor.charAt(parValor.length-1,parValor.length) == ' ') parValor = parValor.substring(0,parValor.length-1);
    return parValor;
}
//Remover mascara substituindo tudo que não for alfanumerico usando expressões regulares<--ok
function fg_removeMascara(parValor){
    return parValor.replace(/\W/g,"")
}
//retira o último caracter do campo quando pressionado backspace ou delete
function sg_retiraUltimo(parControle){
    if(!(parControle.readOnly||parControle.disabled))if(parControle.value.length>0)parControle.value=parControle.value.substring(0,parControle.value.length-1) 
}
//coloca a mascara no valor do componente
function sg_formatarMascara(parControle,parMask,parCodigoTecla){
    if(parCodigoTecla)if((parCodigoTecla < 48)||(parCodigoTecla > 57))return;
    var wl_val= fg_removeMascara(parControle.value)+(parCodigoTecla?parCodigoTecla-48:"")
    //var wl_tmp = parMask.replace(/\$|\,9/g,"#");
	var wl_tmp = parMask.replace(/9/g,"#");
    for( i=0; i < wl_val.length; i++){
		wl_tmp = wl_tmp.replace("#",wl_val.charAt(i));
		}
    if(wl_tmp.indexOf("#")>=0)wl_tmp = wl_tmp.substring(0,wl_tmp.indexOf("#"))
    parControle.value = wl_tmp 
    parValor = 0
}
//********************************
//Recurso de autocompletar a informação da data hora<----
//********************************
function sg_completaDado(parControle,parMask){
     if(parMask == "99/99/9999") {
        if(parControle.value.length==2) parControle.value+="/"
        if(parControle.value.length==3) parControle.value+=("00"+wf_dataAtual).substr(5,3)
        
        if(parControle.value.length==5) parControle.value+="/"
        if(parControle.value.length==6) parControle.value+=("20"+wf_dataAtual).substr(8,4)
//		alert(parControle.value.length)
        if(parControle.value.length==8) {
        if(parControle.value.substr(parControle.value.length-2,2) < 40)
            parControle.value = parControle.value.substr(0,6)+"20" + parControle.value.substr(parControle.value.length-2,2)
            else parControle.value = parControle.value.substr(0,6)+"19" + parControle.value.substr(parControle.value.length-2,2)
        }
     }else if(parMask == "99:99" ) { 
    	parControle.value += fg_horaAtual().substr(parControle.value.length)
     }
}
//Autocompleta a informação da hora<----
function fg_horaAtual(){
   var wl_d= new Date();
   var wl_h= "00" +wl_d.getHours().toString()
   var wl_m ="00" +wl_d.getMinutes().toString()
   wl_h= wl_h.substr(wl_h.length-2,2)
   wl_m = wl_m.substr(wl_m.length-2,2)  
   return	wl_h+":"+wl_m
}
//********************************
//Valida e autocompleta campo de processo<---ok
//********************************
function fg_formataNumeroProcesso(parControle)    {  
   var wl_numeroProcesso
   wl_numeroProcesso = parControle.value.replace(/\D/g,"")
   if(wl_numeroProcesso.length == 0)return true
   if(wl_numeroProcesso.length < 14){
      alert("Tamanho do Numero do Processo menor que o mínimo")
      parControle.focus()
	  return false
    }
//alert (wl_numeroProcesso.substr((wl_numeroProcesso.length-11),4))
//   if(wl_numeroProcesso.substr(0,4)< 1900){
   if(wl_numeroProcesso.substr((wl_numeroProcesso.length-11),4)< 1900){
      alert("Ano do Processo deve ser maior do que 1900");parControle.focus();return false
   }else
//	  if(wl_numeroProcesso.substr(0,4)> 2015){
	  if(wl_numeroProcesso.substr((wl_numeroProcesso.length-11),4)> 2015){
 	    alert("Ano do Processo Inválido");parControle.focus();return false
	  }else{
		wl_numeroProcesso = fg_removeMascara(parControle.value)
//  alert (wl_numeroProcesso.substr(0,4))
//	wl_numeroProcesso =  left(Valor,len(Valor)-13) & "-" & mid(right(Valor, 13),1,2) & "." & mid(right(Valor, 11),1,4) & "." & mid(right(Valor, 7),1,1) & "." & mid(right(Valor, 6),1,2) & "." & right(Valor, 4)
	wl_numeroProcesso =  wl_numeroProcesso.substr(0,(wl_numeroProcesso.length-13)) + "-" + wl_numeroProcesso.substr((wl_numeroProcesso.length-13),2) + "." + wl_numeroProcesso.substr((wl_numeroProcesso.length-11),4) + "." + wl_numeroProcesso.substr((wl_numeroProcesso.length-7),1) + "." + wl_numeroProcesso.substr((wl_numeroProcesso.length-6),2) + "." + wl_numeroProcesso.substr((wl_numeroProcesso.length-4),4) // & "." & mid(right(Valor, 11),1,4) & "." & mid(right(Valor, 7),1,1) & "." & mid(right(Valor, 6),1,2) & "." & right(Valor, 4)
//  alert (wl_numeroProcesso)	
//  return false
//		wl_numeroProcesso = wl_numeroProcesso.substr(0,4) + "0000000000000".substr(0,13 - wl_numeroProcesso.length) + wl_numeroProcesso.substr(4,wl_numeroProcesso.length)
		parControle.value = wl_numeroProcesso
//		parControle.value = wl_numeroProcesso.substr(0, 4) + "." + wl_numeroProcesso.substr(4, 4) + "." + wl_numeroProcesso.substr(8, 4) + "-" + wl_numeroProcesso.substr(12, 1)
	  }
//   if(!fg_numeroProcesso(parControle)){
//   	   alert("Número de processo inválido!\nVerifique se o número do processo foi digitado corretamente.");
//	   parControle.focus();
//	   return false
   
//   }
	  return true
} 

//********************************
//Rotinas de validação de dígitos
//********************************
//- - CPF
function fg_cpf(parControle){
    var wl_dsSoma,  wl_dsResto,  vl_numero
    var vl_digito = new Array(2)
    var wl_dsCPF = fg_removeMascara(parControle.value)
    
    if(!wl_dsCPF) return true
    			
    wl_dsCPF = ("00000000000" +wl_dsCPF).substr(wl_dsCPF.length)					
    //Preenche Vetor com Valores do Número do CPF
    vl_numero = wl_dsCPF.split("")
    wl_dsSoma= (vl_numero[8] * 2) + (vl_numero[7] * 3) + (vl_numero[6] * 4) + (vl_numero[5] * 5) + (vl_numero[4] * 6) + (vl_numero[3] * 7) + (vl_numero[2] * 8) + (vl_numero[1] * 9) + (vl_numero[0] * 10)
    wl_dsResto = wl_dsSoma%11
    //Atribui valor para o primerio dígito
    if((wl_dsResto  == 0)||(wl_dsResto == 1)) 
     	 vl_digito[0]=0
    else vl_digito[0] = 11 - wl_dsResto
    
     wl_dsSoma = (vl_digito[0] * 2) + (vl_numero[8] * 3) + (vl_numero[7] * 4) + (vl_numero[6] * 5) + (vl_numero[5] * 6) + (vl_numero[4] * 7) + (vl_numero[3] * 8) + (vl_numero[2] * 9) + (vl_numero[1] * 10) + (vl_numero[0] * 11)
     wl_dsResto = wl_dsSoma%11
    
    //'Atribui Valor para o segundo dígito
    if((wl_dsResto  == 0)||(wl_dsResto == 1)) 
         vl_digito[1]=0
    else vl_digito[1] = 11 - wl_dsResto
    
    //Retorna Valor do Dígito.
    if(parControle.value.substring(parControle.value.length-2,parControle.value.length)!= (vl_digito[0] +""+ vl_digito[1])){
       return false
    }
    return true
}
//- - CGC
function fg_cgc(parControle){
    var wl_dsSoma,  wl_dsResto,  vl_numero
    var vl_digito = new Array(2)
    var wl_dsCGC = fg_removeMascara(parControle.value)
    
    if(!wl_dsCGC) return true
   				
    wl_dsCGC = ("00000000000000" +wl_dsCGC).substr(wl_dsCGC.length)					
    //Preenche Vetor com Valores do Número do CPF
    vl_numero = wl_dsCGC.split("")
    wl_dsSoma = (vl_numero[11] * 2) + (vl_numero[10] * 3) + (vl_numero[9] * 4) + (vl_numero[8] * 5) + (vl_numero[7] * 6) + (vl_numero[6] * 7) +
    		  	(vl_numero[5] * 8) + (vl_numero[4] * 9) + (vl_numero[3] * 2) + (vl_numero[2] * 3) + (vl_numero[1] * 4) + (vl_numero[0] * 5)
    wl_dsResto = wl_dsSoma%11
    //Atribui valor para o primerio dígito
    if((wl_dsResto  == 0)||(wl_dsResto == 1)) 
    	 vl_digito[0]=0
    else vl_digito[0] = 11 - wl_dsResto
   
    wl_dsSoma = (vl_digito[0] * 2) +  (vl_numero[11] * 3) + (vl_numero[10] * 4) + (vl_numero[9] * 5) + (vl_numero[8] * 6) + (vl_numero[7] * 7) + 
      		    (vl_numero[6] * 8) + (vl_numero[5] * 9) + (vl_numero[4] * 2) + (vl_numero[3] * 3) + (vl_numero[2] * 4) + (vl_numero[1] * 5) + (vl_numero[0] * 6)
    wl_dsResto = wl_dsSoma%11
    
    //Atribui Valor para o segundo dígito
    if((wl_dsResto  == 0)||(wl_dsResto == 1)) 
    	 vl_digito[1]=0
    else vl_digito[1] = 11 - wl_dsResto
   
    //Retorna Valor do Dígito.
    if(parControle.value.substring(parControle.value.length-2,parControle.value.length)!= (vl_digito[0] +""+ vl_digito[1])){
       return false
    }
   return true
}
//- - pispasep
function fg_pispasep(parControle){
  var wl_dsSoma,  wl_dsResto,  vl_numero
  var wl_dsPISPASEP = fg_removeMascara(parControle.value)
  
  if(!wl_dsPISPASEP) return true
					
  wl_dsPISPASEP = ("00000000000" +wl_dsPISPASEP).substr(wl_dsPISPASEP.length)					
  //Preenche Vetor com Valores do Número do PISPASEP
  vl_numero = wl_dsPISPASEP.split("")

  wl_dsSoma = (vl_numero[9] * 2) + (vl_numero[8] * 3) + (vl_numero[7] * 4) + (vl_numero[6] * 5) + (vl_numero[5] * 6) + (vl_numero[4] * 7) + (vl_numero[3] * 8) + (vl_numero[2] * 9) + (vl_numero[1] * 2) + (vl_numero[0] * 3)
  wl_dsResto = wl_dsSoma % 11

  if((wl_dsResto  == 0)||(wl_dsResto == 1)) 
	   wl_dsResto=0
  else wl_dsResto = 11 - wl_dsResto

  //Retorna Valor do Dígito.
  if(parControle.value.charAt(parControle.value.length-1)!= (wl_dsResto + "")){
        return false
  }else return true
}

function fg_numeroProcesso(parControle){
  var wl_nrSoma,  wl_nrResto,  vl_numero
  var wl_dsNumeroProcesso = fg_removeMascara(parControle.value)
  
  if(!wl_dsNumeroProcesso) return true
					
  //Preenche Vetor com Valores do Número do processo
  vl_numero = wl_dsNumeroProcesso.split("")

  wl_nrSoma = (vl_numero[11] * 2) + (vl_numero[10] * 3) + (vl_numero[9] * 4) +
              (vl_numero[8] * 5) + (vl_numero[7] * 6) + (vl_numero[6] * 7) +
              (vl_numero[5] * 8) + (vl_numero[4] * 9) + (vl_numero[3] * 2) +
              (vl_numero[2] * 3)+ (vl_numero[1] * 4) + (vl_numero[0] * 5)
  wl_nrResto = wl_nrSoma % 11

  if((wl_nrResto  == 0)||(wl_nrResto == 1)) 
	   wl_nrResto=0
  else wl_nrResto = 11 - wl_nrResto

  //Retorna Valor do Dígito.
  if(parControle.value.charAt(parControle.value.length-1)!= (wl_nrResto + "")){
        return false
  }else return true

 }

