function PG_KDN(campo, teclaPress){
		var tecla = teclaPress.keyCode;
		var valor = campo.value;
		
		if(tecla == 13){//Tecla Enter
			PG_KUP(campo, teclaPress);
			PG_BLR(campo);
			return true;
		}
		
		//Teclas Backspace, Delete, direcionais e Tab.
		if(tecla == 8 || tecla == 46 || tecla == 37 || tecla == 39 || tecla == 9)
			return true;
		
		
		//Tamanho Excedeu o limite
		if(valor.length >= 21)
			return false;
			
		//Só pode digitar barra neste ponto
		if(valor.length == 15 &&
		(tecla != 193 && tecla != 111) ){
			return false;
		}
		
		//Tecla "/"
		if(tecla == 193 || tecla == 111){
			
			return valor.length == 15;
		}
			
		//Tecla "-"
		if(tecla == 109){
			var primPonto = valor.indexOf(".");
			var segPonto = -1;
			if(primPonto > 0){
				segPonto = valor.indexOf(".", primPonto+1);
			}
			var traco = valor.indexOf("-");
			return ( segPonto > 0 && traco < 0 );
		}
		
				
		//Tecla "."
		if(tecla == 194 || tecla == 190){
			var primPonto = valor.indexOf(".");
			var segPonto = -1;
			var traco = valor.indexOf("-");
			if(primPonto > 0){
				segPonto = valor.indexOf(".", primPonto+1);
			}
			return ( segPonto < 0 && traco < 0 );
		}
		//Teclas numéricas
		return ( (tecla >= 96 && tecla <= 105) || (tecla >= 48 && tecla <= 57) );
	}
	
	function atualizaPosicoes(valor){
		var posPrimPonto = valor.indexOf(".");
		var posSegPonto = -1;
		var posTraco = valor.indexOf("-");
		if(posPrimPonto > 0){
			posSegPonto = valor.indexOf(".", posPrimPonto+1);
		}
		
		var posBarra = valor.indexOf("/");
		
		return (new Array(posPrimPonto, posSegPonto, posTraco, posBarra));
	}
	
	
	function PG_KUP(campo, teclaPress){
		var valorAtual = campo.value;
		var blocoAtual;
		var pos = atualizaPosicoes(valorAtual);//{ponto1, ponto2, traço, barra}
		
		//Limpa traço antes dos dois pontos
		if((pos[2] != -1 && pos[2] < pos[0]) || (pos[2] != -1 && pos[2] < pos[1])){
			valorAtual = "" + valorAtual.substring(0, pos[2]) + valorAtual.substring(pos[2]+1, valorAtual.length);
			pos = atualizaPosicoes(valorAtual);
		}
		//Digitacao normal (esperada)
		if(pos[0] < 0){
			blocoAtual = 1;
		}else{
			if(pos[1] < 0){
				blocoAtual = 2;
			}else{
				if(pos[2] < 0){
					blocoAtual = 3;
				}else{
					if(pos[3] < 0){
						blocoAtual = 4;
					}else{
						blocoAtual = 5;
					}
				}
			}
		}
		//inserindo os caracteres de separacao('.' e '-') caso sejam digitados apenas numeros
		var inicio = "";
		if(blocoAtual == 1 && valorAtual.length > 3){
			valorAtual = valorAtual.substring(0,3) + "." + (valorAtual.substring(3, valorAtual.length)).replace(/\D/g,'');
			blocoAtual = 2;
			pos = atualizaPosicoes(valorAtual);
		}
		if(blocoAtual == 2 && valorAtual.length > 6){
			inicio = (valorAtual.substring(0,6)).replace(/\D/g,'')
			valorAtual = inicio.substring(0,3) + "." + inicio.substring(3,5) + "." + (valorAtual.substring(6, valorAtual.length)).replace(/\D/g,'');
			blocoAtual = 3;
			pos = atualizaPosicoes(valorAtual);
		}
		if(blocoAtual == 3 && valorAtual.length > 13){
			inicio = (valorAtual.substring(0,13)).replace(/\D/g,'')
			valorAtual = inicio.substring(0,3) + "." + inicio.substring(3,5) + "." + inicio.substring(5,12) + "-" + (valorAtual.substring(13, valorAtual.length)).replace(/\D/g,'');
			blocoAtual = 4;
			pos = atualizaPosicoes(valorAtual);
		}
		var retorno = completaCampo(valorAtual, blocoAtual);
		if(retorno.length > 21){
			retorno = retorno.substring(0, 21);
		}
		campo.value = aplicaMascaraNuProcesso(retorno);
	}
	
	//Completa com zeros no momento em que é digitado um caractere de separação
	function completaCampo(valor, blocoAtual){
		var ultimoDigito = valor.substring(valor.length-1, valor.length);
		var retorno = "";
		var pos = atualizaPosicoes(valor);
		var valorPrimBloco = "";
		var valorSegBloco = "";
		var valorTerBloco = "";
		var valorQuaBloco = "";
		if(blocoAtual == 1){
			return valor;
		}else if(blocoAtual == 2 && ultimoDigito == "."){
			valorPrimBloco = completaZeros(valor.substring(0, pos[0]), 3);
			if(valor.length > pos[0]+1)
				valorSegBloco = valor.substring(pos[0]+1, valor.length);
			return("" + valorPrimBloco + "." + valorSegBloco);
		}else if(blocoAtual == 3 && ultimoDigito == "."){
			valorPrimBloco = completaZeros(valor.substring(0, pos[0]), 3);
			valorSegBloco = completaZeros(valor.substring(pos[0]+1, pos[1]), 2);
			if(valor.length > pos[1]+1)
				valorTerBloco = valor.substring(pos[1]+1, valor.length);
			return ("" + valorPrimBloco + "." + valorSegBloco + "." + valorTerBloco);
		}else if(blocoAtual == 4 && ultimoDigito == "-"){
			valorPrimBloco = completaZeros(valor.substring(0, pos[0]), 3);
			valorSegBloco = completaZeros(valor.substring(pos[0]+1, pos[1]), 2);
			valorTerBloco = completaZeros(valor.substring(pos[1]+1, pos[2]), 6);
			if(valor.length > pos[2]+1)
				valorQuaBloco = valor.substring(pos[2]+1, valor.length);
			return ("" + valorPrimBloco + "." + valorSegBloco + "." + valorTerBloco + "-" + valorQuaBloco);
		}
		return valor;
	}
	function aplicaMascaraNuProcesso(valor){
		
		var temBarra = valor.indexOf("/");
	
		var valorLimpo = valor.replace(/\D/g,'');
		var digito = "";
		if(valor.length > 0){
			digito = valor.substring(valor.length - 1, valor.length);
			if(digito != "-" && digito != ".")
				digito = "";
		}else{
			return valor;
		}
		if(valorLimpo.length > 3){
			valorLimpo = valorLimpo.substring(0,3) + "." + valorLimpo.substring(3, valorLimpo.length);
		}
		if(valorLimpo.length > 6){
			valorLimpo = valorLimpo.substring(0,6) + "." + valorLimpo.substring(6, valorLimpo.length);
		}
		if(valorLimpo.length > 13){
			valorLimpo = valorLimpo.substring(0,13) + "-" + valorLimpo.substring(13, valorLimpo.length);
		}
		if(valorLimpo.length > 15){
			valorLimpo = valorLimpo.substring(0,15) + "/" + valorLimpo.substring(15, valorLimpo.length);
		}
		else{
			if(temBarra >= 0){
				valorLimpo = valorLimpo + "/";
			}
		}
		valorLimpo = "" + valorLimpo + digito;
		if(valorLimpo.length > 21){
			valorLimpo = valorLimpo.substring(0, 21);
		}
		return (valorLimpo);
	}
	
	function completaZeros(nro, tam) {
		nro = nro.replace(/\D/g,'');
		if (nro.length < tam)
			for (i = nro.length; i < tam; i++)
				nro = '0' + nro;
		return nro;
	}
	
	function PG_BLR(campo){
		var valor = campo.value
		var pos = atualizaPosicoes(valor);//{ponto1, ponto2, traço, barra}
		var digito = "";
		
		if(pos[0] < 0){
			blocoAtual = 1;
		}else{
			if(pos[1] < 0){
				blocoAtual = 2;
			}else{
				if(pos[2] < 0){
					blocoAtual = 3;
				}else{
					if(pos[3] < 0){
						blocoAtual = 4;
					}else{
						blocoAtual = 5;
					}
				}
			}
		}
		if(blocoAtual == 3 && valor.length > 7){
			digito = valor.substring(valor.length - 1, valor.length);
			valor = valor.substring(0, valor.length - 1);
			valor = "" + valor.substring(0,7) + completaZeros(valor.substring(7, valor.length), 6) + digito;
		}
		valor = aplicaMascaraNuProcesso(valor);
		if( (valor.length < 15 && valor.length != 0) || valor.charAt(valor.length-1) == '/' ){
			if(campo.className.indexOf('erro')==-1){
	        	campo.className=campo.className+' erro';
	        }
			return;
		}
		if(campo.className.indexOf('erro')!=-1){
	      	campo.className=campo.className.substring(0,campo.className.indexOf('erro'));
	    }
		campo.value = valor;
	}
	
	function validaNuProcessoPG(campo){
		var valor = aplicaMascaraNuProcesso(campo.value);
		
		var temBarra = valor.indexOf("/") != -1;
		
		if(!temBarra){
		  if(valor.length != 15 || valor.length == 0){
			alert('O número de processo digitado não é válido. Número digitado: ' + campo.value + ' .');
			campo.focus();
			return false;
		  }
		}
		else{
		  if(valor.length < 17){
			alert('O número de processo digitado não é válido. Número digitado: ' + campo.value + ' .');
			campo.focus();
			return false;
		  }			
		}
		
		return true;
	}
	
	function PG_MOV(ctrl, e){
		if(ctrl.className.indexOf('erro')!= -1){
			C_mostraHint(e, 'O número de processo digitado não é válido. Número digitado: ' + ctrl.value + ' .');
		}
	}
	
	function PG_MMOV(ctrl, event){
		if(ctrl.className.indexOf('erro')!= -1){
			C_moveHint(event);
		}
	}
	
	function PG_MOUT(ctrl, event){
		if(ctrl.className.indexOf('erro')!= -1){
			C_escondeHint();
		}
	}