
/**********************************************************************
Arquivo de funções em Java Script para validação de campos
Função de formatação de valores numéricos na digitação / telefones / e-mail ...

Objetivos :
	- Inclusão automática de . e ,

Parametros :
	objeto		-> Nome do campo de formulário (Usar this)
	teclapres	-> Tecla pressionada (Usar event)
	tammax		-> Tamanho máximo de caracteres
	decimais	-> Nº de casas decimais

Exemplo:
	OnKeyDown     FormataValor(this,event,17,0);

## Direitos Autorais: Open Tecnologia LTDA 															   ##
## Analista / Projetista: Rodrigo Marques Teixeira													   ##
## Copyright (c) 2007 by Rodrigo Marques Teixeira

/**********************************************************************/ 
function FormataValor(objeto,teclapres,tammax,decimais) 
{

	var tecla			= teclapres.keyCode;
	var tamanhoObjeto	= objeto.value.length;

	if ((tecla == 8) && (tamanhoObjeto == tammax))
	{
		tamanhoObjeto = tamanhoObjeto - 1 ;
	}



if (( tecla == 8 || tecla == 88 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ) && ((tamanhoObjeto+1) <= tammax))
	{

		vr	= objeto.value;
		vr	= vr.replace( "/", "" );
		vr	= vr.replace( "/", "" );
		vr	= vr.replace( ",", "" );
		vr	= vr.replace( ".", "" );
		vr	= vr.replace( ".", "" );
		vr	= vr.replace( ".", "" );
		vr	= vr.replace( ".", "" );
		tam	= vr.length;
		
		if (tam < tammax && tecla != 8)
		{
			tam = vr.length + 1 ;
		}

		if ((tecla == 8) && (tam > 1))
		{
			tam = tam - 1 ;
			vr = objeto.value;
			vr = vr.replace( "/", "" );
			vr = vr.replace( "/", "" );
			vr = vr.replace( ",", "" );
			vr = vr.replace( ".", "" );
			vr = vr.replace( ".", "" );
			vr = vr.replace( ".", "" );
			vr = vr.replace( ".", "" );
		}
	
		//*Cálculo para casas decimais setadas por parametro
		if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 )
		{
			if (decimais > 0)
			{
				if ( (tam <= decimais) )
				{ 
					objeto.value = ("0," + vr) ;
				}
				if( (tam == (decimais + 1)) && (tecla == 8))
				{
					objeto.value = vr.substr( 0, (tam - decimais)) + ',' + vr.substr( tam - (decimais), tam ) ;	
				}
				if ( (tam > (decimais + 1)) && (tam <= (decimais + 3)) &&  ((vr.substr(0,1)) == "0"))
				{
					objeto.value = vr.substr( 1, (tam - (decimais+1))) + ',' + vr.substr( tam - (decimais), tam ) ;
				}
				if ( (tam > (decimais + 1)) && (tam <= (decimais + 3)) &&  ((vr.substr(0,1)) != "0"))
				{
				    objeto.value = vr.substr( 0, tam - decimais ) + ',' + vr.substr( tam - decimais, tam ) ; 
				}
				if ( (tam >= (decimais + 4)) && (tam <= (decimais + 6)) )
				{
			 		objeto.value = vr.substr( 0, tam - (decimais + 3) ) + '.' + vr.substr( tam - (decimais + 3), 3 ) + ',' + vr.substr( tam - decimais, tam ) ;
				}
			 	if ( (tam >= (decimais + 7)) && (tam <= (decimais + 9)) )
				{
			 		objeto.value = vr.substr( 0, tam - (decimais + 6) ) + '.' + vr.substr( tam - (decimais + 6), 3 ) + '.' + vr.substr( tam - (decimais + 3), 3 ) + ',' + vr.substr( tam - decimais, tam ) ;
				}
				if ( (tam >= (decimais + 10)) && (tam <= (decimais + 12)) )
				{
			 		objeto.value = vr.substr( 0, tam - (decimais + 9) ) + '.' + vr.substr( tam - (decimais + 9), 3 ) + '.' + vr.substr( tam - (decimais + 6), 3 ) + '.' + vr.substr( tam - (decimais + 3), 3 ) + ',' + vr.substr( tam - decimais, tam ) ;
				}
				if ( (tam >= (decimais + 13)) && (tam <= (decimais + 15)) )
				{
			 		objeto.value = vr.substr( 0, tam - (decimais + 12) ) + '.' + vr.substr( tam - (decimais + 12), 3 ) + '.' + vr.substr( tam - (decimais + 9), 3 ) + '.' + vr.substr( tam - (decimais + 6), 3 ) + '.' + vr.substr( tam - (decimais + 3), 3 ) + ',' + vr.substr( tam - decimais, tam ) ;
				}
			}
			else if(decimais == 0)
			{
				if ( tam <= 3 )
				{ 
			 		objeto.value = vr ;
				}
				if ( (tam >= 4) && (tam <= 6) )
				{
					if(tecla == 8)
					{
						objeto.value = vr.substr(0, tam);
						window.event.cancelBubble = true;
						window.event.returnValue = false;
					}
					objeto.value = vr.substr(0, tam - 3) + '.' + vr.substr( tam - 3, 3 ); 
				}
				if ( (tam >= 7) && (tam <= 9) )
				{
					if(tecla == 8)
					{
						objeto.value = vr.substr(0, tam);
						window.event.cancelBubble = true;
						window.event.returnValue = false;
					}
					objeto.value = vr.substr( 0, tam - 6 ) + '.' + vr.substr( tam - 6, 3 ) + '.' + vr.substr( tam - 3, 3 ); 
				}
				if ( (tam >= 10) && (tam <= 12) )
				{
			 		if(tecla == 8)
					{
						objeto.value = vr.substr(0, tam);
						window.event.cancelBubble = true;
						window.event.returnValue = false;
					}
					objeto.value = vr.substr( 0, tam - 9 ) + '.' + vr.substr( tam - 9, 3 ) + '.' + vr.substr( tam - 6, 3 ) + '.' + vr.substr( tam - 3, 3 ); 
				}
				if ( (tam >= 13) && (tam <= 15) )
				{
					if(tecla == 8)
					{
						objeto.value = vr.substr(0, tam);
						window.event.cancelBubble = true;
						window.event.returnValue = false;
					}
					objeto.value = vr.substr( 0, tam - 12 ) + '.' + vr.substr( tam - 12, 3 ) + '.' + vr.substr( tam - 9, 3 ) + '.' + vr.substr( tam - 6, 3 ) + '.' + vr.substr( tam - 3, 3 ) ;
				}			
			}
		}
	}
	else if((window.event.keyCode != 8) && (window.event.keyCode != 9) && (window.event.keyCode != 13) && (window.event.keyCode != 35) && (window.event.keyCode != 36) && (window.event.keyCode != 46))
		{
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
}
/********************************************************************** 
Função de formatação de campos tipo texto durante a digitação

Objetivos :
	- Mudar tudo para maiúsculo
	- Não aceitar acentos nem Ç

Parâmetros :
	objeto		-> Nome do campo de formulário (Usar this)

Exemplo : 
	OnKeyPress    FormataTexto(this);
/**********************************************************************/
function FormataTexto(objeto)
{
	var valor = objeto.value;	
	var LetrasArray = new Array();

	LetrasArray[1] = new Array();
	LetrasArray[2] = new Array();
	
	//Primeira Coluna : Letras Acentuadas e Símbolos
	LetrasArray[1][1]='á';
	LetrasArray[1][2]='ã';
	LetrasArray[1][3]='à';
	LetrasArray[1][4]='â';
	LetrasArray[1][5]='ä';
	LetrasArray[1][6]='é';
	LetrasArray[1][7]='è';
	LetrasArray[1][8]='ê';
	LetrasArray[1][9]='ë';
	LetrasArray[1][10]='í';
	LetrasArray[1][11]='ì';
	LetrasArray[1][12]='î';
	LetrasArray[1][13]='ï';
	LetrasArray[1][14]='ó';
	LetrasArray[1][15]='õ';
	LetrasArray[1][16]='ò';
	LetrasArray[1][17]='ô';
	LetrasArray[1][18]='ö';
	LetrasArray[1][19]='ú';
	LetrasArray[1][20]='ù';
	LetrasArray[1][21]='û';
	LetrasArray[1][22]='ü';
	LetrasArray[1][23]='ç';
	LetrasArray[1][24]='Á';
	LetrasArray[1][25]='Ã';
	LetrasArray[1][26]='À';
	LetrasArray[1][27]='Â';
	LetrasArray[1][28]='Ä';
	LetrasArray[1][29]='É';
	LetrasArray[1][30]='È';
	LetrasArray[1][31]='Ê';
	LetrasArray[1][32]='Ë';
	LetrasArray[1][33]='Í';
	LetrasArray[1][34]='Ì';
	LetrasArray[1][35]='Î';
	LetrasArray[1][36]='Ï';
	LetrasArray[1][37]='Ó';
	LetrasArray[1][38]='Õ';
	LetrasArray[1][39]='Ò';
	LetrasArray[1][40]='Ô';
	LetrasArray[1][41]='Ö';
	LetrasArray[1][42]='Ú';
	LetrasArray[1][43]='Ù';
	LetrasArray[1][44]='Û';
	LetrasArray[1][45]='Ü';
	LetrasArray[1][46]='Ç';
	LetrasArray[1][47]='Ñ';
	LetrasArray[1][48]='ñ';
	LetrasArray[1][49]='~';
	LetrasArray[1][50]='^';
	LetrasArray[1][51]='´';
	LetrasArray[1][52]='`';
	
	//Segunda Coluna : Letras Equivalentes sem acentos
	LetrasArray[2][1]='a';
	LetrasArray[2][2]='a';
	LetrasArray[2][3]='a';
	LetrasArray[2][4]='a';
	LetrasArray[2][5]='ä';
	LetrasArray[2][6]='e';
	LetrasArray[2][7]='e';
	LetrasArray[2][8]='e';
	LetrasArray[2][9]='e';
	LetrasArray[2][10]='i';
	LetrasArray[2][11]='i';
	LetrasArray[2][12]='i';
	LetrasArray[2][13]='i';
	LetrasArray[2][14]='o';
	LetrasArray[2][15]='o';
	LetrasArray[2][16]='o';
	LetrasArray[2][17]='o';
	LetrasArray[2][18]='o';
	LetrasArray[2][19]='u';
	LetrasArray[2][20]='u';
	LetrasArray[2][21]='u';
	LetrasArray[2][22]='u';
	LetrasArray[2][23]='c';
	LetrasArray[2][24]='A';
	LetrasArray[2][25]='A';
	LetrasArray[2][26]='A';
	LetrasArray[2][27]='A';
	LetrasArray[2][28]='Ä';
	LetrasArray[2][29]='E';
	LetrasArray[2][30]='E';
	LetrasArray[2][31]='E';
	LetrasArray[2][32]='E';
	LetrasArray[2][33]='I';
	LetrasArray[2][34]='I';
	LetrasArray[2][35]='I';
	LetrasArray[2][36]='I';
	LetrasArray[2][37]='O';
	LetrasArray[2][38]='O';
	LetrasArray[2][39]='O';
	LetrasArray[2][40]='O';
	LetrasArray[2][41]='O';
	LetrasArray[2][42]='U';
	LetrasArray[2][43]='U';
	LetrasArray[2][44]='U';
	LetrasArray[2][45]='U';
	LetrasArray[2][46]='C';
	LetrasArray[2][47]='N';
	LetrasArray[2][48]='n';
	LetrasArray[2][49]='';
	LetrasArray[2][50]='';
	LetrasArray[2][51]='';
	LetrasArray[2][52]='';

	temp = "" + valor + (String.fromCharCode(window.event.keyCode));

	for (i=1; i<=52 ; i++ )
	{
		while (temp.indexOf((LetrasArray[1][i]))>-1)
			{
				pos= temp.indexOf((LetrasArray[1][i]));
				temp = "" + (temp.substring(0, pos) + (LetrasArray[2][i]) + temp.substring((pos + (LetrasArray[1][i].length)), temp.length));
			}
	}
	if((window.event.keyCode) != 13)
		{
			objeto.value = (temp.toUpperCase());
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}

}

/********************************************************************** 
Função de validação de campos do tipo Data

Objetivos :
	- Aceitar somente datas do tipo : dd/mm/aaaa

Parâmetros :
	objeto		-> Nome do campo de formulário (Usar this)

Exemplo : 
	OnChange    ValidaData(this);
/**********************************************************************/ 
function ValidaData(objeto) 
{

	var DataString	= objeto.value;
	var DataArray	= DataString.split("/");
	var Flag=true; 

	if (DataArray.length != 3) 
		Flag=false; 
	else 
		{
			if (DataArray.length==3) 
			{
				var dia = DataArray[0], mes = DataArray[1], ano = DataArray[2]; 

				if (((Flag) && (ano<1000) || ano.length>4)) 
					Flag=false; 
				
				if (Flag) 
				{ 
					verifica_mes = new Date(mes+"/"+dia+"/"+ano); 
					if (verifica_mes.getMonth() != (mes - 1)) 
						Flag=false; 
				} 
			} 
			else 
				Flag=false; 
		} 
return Flag;
} 

/********************************************************************** 
Função de formatação de campos do tipo Data

Objetivos :
	- Mascarar a entrada de dados no formato : dd/mm/aaaa

Parâmetros :
	objeto		-> Nome do campo de formulário (Usar this)
	teclapress	-> Tecla pressionada (Usar event)

Exemplo : 
	OnKeyDown    FormataData(this,event);

Requirido :
	Função ValidaData
/**********************************************************************/ 
function FormataData(x,tecla)
	{
                separador="/"; // Você pode definir o separador. Ex: "/" ou "-" ou "."
                
                tecla=tecla.keyCode; // Identifica a tecla, caso seja backspace
                
                valor=x.value.split(''); // Pega o valor do campo e transforma cada caractere em uma string
                formatado=""; // Variável para carregar formatação temporariamente
                
                i=0; // variável de controle
                
                while(i<valor.length){ // Loop para cada caractere do campo
                        caractere=valor[i]; // Seleciona um caractere para ser formatado
                        numeros=/^\d+$/; // Variavel contendo números positivos
                                // Verifica se é número ou "barra"
                        if(numeros.test(caractere) || caractere==separador){ formatado+=String(caractere);}
                                // Verifica se precisa de barra, se a tecla for backspace, então a barra não é adicionada
                                // Se for para adicionar barra, aumenta ++ variável de controle "i" para pular a barra adicionada
                        if((formatado.length==2 || formatado.length==5) && tecla!=8){formatado+=separador; i++;}
                                
                        i++; // Se houver, passa para o próximo caractere
                }
                
                x.value=formatado; // Atribui o valor formatado ao campo

				if(formatado.length == 10) {

					if (!(ValidaData(x)))
							{
								alert("Atenção: Data Inválida. Digite novamente!");
								x.value = "";
								x.focus();
							}
				}
        }


/********************************************************************** 
Função de validação de campos do tipo Data Hora

Objetivos :
	- Aceitar somente datas do tipo : dd/mm/aaaa hh:mm:ss

Parâmetros :
	objeto		-> Nome do campo de formulário (Usar this)

Exemplo : 
	OnChange    ValidaDataHora(this);
/**********************************************************************/ 
function ValidaDataHora(objeto) 
{        
	var DataHoraString	= objeto.value;
	var Flag			= true;
	
	if(DataHoraString != "" &&((DataHoraString.indexOf("/")!= -1) && (DataHoraString.indexOf(" ")!= -1) && (DataHoraString.indexOf(":")!= -1)))
	{
//		dd/mm/aaaa hh:mm:ss
		var DataArray	= DataHoraString.split("/");  
//		DataArray[0]	= dd;
//		DataArray[1]	= mm;	
//		DataArray[2]	= aaaa hh:mm:ss	;

		var AuxArray	= DataArray[2].split(" ");
//		AuxArray[0]		= aaaa;
//		AuxArray[1]		= hh:mm:ss;
	
		DataArray[2]	= AuxArray[0];
	
		var HoraArray	= AuxArray[1].split(":");
//		HoraArray[0]	= hh;
//		HoraArray[1]	= mm;
//		HoraArray[2]	= ss;

		if(HoraArray[2] >= 0){Flag = true;} 
	}
	else {Flag= false;}

if(Flag)
	{
		//Valida a data
		if (DataArray.length != 3) 
			Flag=false; 
		else 
			{
				if (DataArray.length==3) 
				{
					var dia = DataArray[0], mes = DataArray[1], ano = DataArray[2]; 
	
					if (((Flag) && (ano<1000) || ano.length>4)) 
						Flag=false; 
					
					if (Flag) 
					{ 
						verifica_mes = new Date(mes+"/"+dia+"/"+ano); 
						if (verifica_mes.getMonth() != (mes - 1)) 
							Flag=false; 
					} 
				} 
				else 
					Flag=false; 
			} 
	
		//Valida a hora
		if (HoraArray.length != 3) 
			Flag=false; 
		else 
			{
				if (HoraArray.length==3) 
				{
					var hora = HoraArray[0], min = HoraArray[1], seg = HoraArray[2]; 
					
					if(!((hora>=0 && hora <=23) && (min>=0 && min<=59) && (seg>=0 && seg<=59)))
						Flag=false;
				} 
				else 
					Flag=false; 
			} 
	}		
return Flag;
} 

/********************************************************************** 
Função de formatação de campos do tipo Data Hora

Objetivos :
	- Mascarar a entrada de dados no formato : dd/mm/aaaa hh:mm:ss

Parâmetros :
	objeto		-> Nome do campo de formulário (Usar this)
	teclapress	-> Tecla pressionada (Usar event)

Exemplo : 
	OnKeyPress    FormataDataHora(this);

Requirido :
	Função ValidaDataHora(objeto);
/**********************************************************************/ 
function FormataDataHora(objeto,teclapress)
{
	var tecla = teclapress.keyCode;

	if(((window.event.keyCode == 13) || (window.event.keyCode == 9))&&objeto.value != "")
	{
		if(!(ValidaDataHora(objeto)))
			{
				window.event.cancelBubble = true;
				window.event.returnValue = false;
				alert("Data Hora Inválida");
				objeto.value = "";
				objeto.focus();
			}
	}

	if (( tecla == 8 || tecla == 88 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 )&& objeto.value.length <= (19))
    {
		vr = objeto.value;
		vr = vr.replace( "/", "" );
		vr = vr.replace( "/", "" );
		vr = vr.replace( " ", "" );
		vr = vr.replace( ":", "" );
		vr = vr.replace( ":", "" );
		tam = vr.length;

		if (tam < 14)
			{
				if (tecla != 8) {tam = vr.length + 1 ;}
			}
		else
			{
				window.event.cancelBubble = true;
				window.event.returnValue = false;
			}
		
		if ((tecla == 8) && (tam > 1))
			{
				tam = tam - 1 ;
				objeto.value = vr.substr(0,tam);
				window.event.cancelBubble = true;
				window.event.returnValue = false;
			}
				if ( tam <= 2 && tecla != 8){ 
			 		objeto.value = vr ; }

				if ( (tam >= 2) && (tam <= 4) ){
			 		objeto.value = vr.substr(0, tam - 2) + ':' + vr.substr( tam - 2, 2 ); }

				if ( (tam >= 4) && (tam <= 6) ){
					objeto.value = vr.substr(0, tam - 4 ) + ':' + vr.substr( tam - 4, 2 ) + ':' + vr.substr( tam - 2, 2 ); }

				if ( (tam >= 6) && (tam <= 10) ){
					objeto.value = vr.substr(0, tam - 6 ) + ' ' + vr.substr( tam - 6, 2 ) + ':' + vr.substr( tam - 4, 2 ) + ':' + vr.substr( tam - 2, 2 ); }


				if ( (tam >= 10) && (tam <= 12) ){
					objeto.value = vr.substr(0, tam - 10 ) + '/' + vr.substr( tam - 10, 4 ) + ' ' + vr.substr( tam - 6, 2 ) + ':' + vr.substr( tam - 4, 2 ) + ':' + vr.substr( tam - 2, 2 ) ;}			

				if ( (tam >= 12) && (tam <= 14) ){
					objeto.value = vr.substr(0, tam - 12 ) + '/' + vr.substr( tam - 12, 2 ) + '/' + vr.substr( tam - 10, 4 ) + ' ' + vr.substr( tam - 6, 2 ) + ':' + vr.substr( tam - 4, 2 ) + ':' + vr.substr( tam - 2, 2 ) ;}			

				if ((tam == (14)) && tecla != 8)
					{
						if (!(ValidaDataHora(objeto)))
							{
								if(tecla >=96 && tecla <=105){tecla = tecla - 48;}
								objeto.value = objeto.value + (String.fromCharCode(tecla));
								window.event.cancelBubble = true;
								window.event.returnValue = false;
								alert("Data Hora Inválida");
								objeto.value = "";
								objeto.focus();
							}
					}
	}
	else if((window.event.keyCode != 8) && (window.event.keyCode != 9) && (window.event.keyCode != 13) && (window.event.keyCode != 35) && (window.event.keyCode != 36) && (window.event.keyCode != 46))
		{
			event.returnValue = false;
		}
}

// Formata CPF
function FormataCPF( CPF ) 
{ 
    vr = CPF.value; 
    tam = vr.length; 

    if ( vr.indexOf(".") == -1 ) 
    { 
        if ( tam <= 3 ) 
            CPF.value = vr; 

        if ( (tam > 3) && (tam <= 7) ) 
            CPF.value = vr.substr( 0, 3 ) + '.' + vr.substr( 4, tam ); 

        if ( (tam >= 8) && (tam <= 11) ) 
            CPF.value = vr.substr( 0, 3 ) + '.' + vr.substr( 3, 3 ) + '.' + vr.substr( 5, 3 ) + '-'; 

        if ( (tam >= 11) && (tam <= 18) ) 
            CPF.value = vr.substr( 0, 3 ) + '.' + vr.substr( 3, 3 ) + '.' + vr.substr( 6, 3 ) + '-' + vr.substr( 9, 2 ); 
    } 

    return true; 

} 

// Validando de CPF e CNPJ
function validaCPFCNPJ(cpfcnpjID,campoID) {

    tamanho = cpfcnpjID.length;
    var a = [];                         // Matriz para armazenar os dígitos do CPF separadamente
    var b = [];                         // Matriz para armazenar os produtos do calculo do CPF
    var soma=0;
    var resto=0;
    
    if(tamanho==11){                         // Calculando o CPF
        var cpf;
        var c = [11,10,9,8,7,6,5,4,3,2];     // Matriz usada de base para o calculo do CPF
        cpf = cpfcnpjID;
        
        for(i=0,j=1;i<11;i++,j++){             // Armazena na matriz a[] todos os algarismos do CPF
            a[i] = cpf.charAt(i);             // A função charAT() pega o valor de cada posição da String
        }
                                            // Calculando o primeiro dígito verificador
        for(i=0,j=1;i<9;i++,j++){             // Pegamos do 1º ao 9º algarismo do CPF para fazermos o cálculo
            b[i]=a[i]*c[j];                 // Multiplicação a partir do 1º valor da matriz do cpf (a[0]) com o 2º valor da matriz de c (c[1])
            soma = b[i] + soma;             // Armazena em 'soma' a soma todos os produtos
        }
        
        resto = soma % 11;                     // Armazena em resto o resto da divisão da soma divido por 11
        
        if(resto<2)                         // Se resto for igual menor que 2 o primeiro dígito do CPF deverá ser 0
            diga=0;                         // Armazena em diga o valor 0
        else                                 // Se resto for maior ou igual a 2 deverá ser calculado o digito
            diga=11-resto;                    // Neste caso o diga é igual a 11 menos o resto
                                            // Fim do calculo do primeiro dígito verificador
        resto=0;                            // Zera a variável resto
        soma=0;                                // Zera a variável soma    
        
        for(i=0;i<10;i++){                    // Pegamos do 1º ao 10º (que é o primeiro dígito verificador) algarismo do CPF para fazermos o cálculo
            b[i]=a[i]*c[i];                    // Multiplicação a partir do 1º valor da matriz do cpf (a[0]) com o 1º valor da matriz de c (c[0])
            soma = b[i] + soma;                // Armazena em 'soma' a soma todos os produtos
        }
        
        resto = soma % 11;                    // Armazena em resto o resto da divisão da soma divido por 11
        
        if(resto<2)                            // Se resto for igual menor que 2 o primeiro dígito do CPF deverá ser 0
            digb=0;                            // Armazena em digb o valor 0                            
        else                                // Se resto for maior ou igual a 2 deverá ser calculado o digito
            digb=11-resto;                    // Neste caso o digb é igual a 11 menos o resto
        
        if(a[9]!=diga || a[10]!=digb){        // Comparando agora os dois dígitos
            alert('CPF Inválido');

            campoID.focus();
            campoID.value="";
            return false;
        }
            
    } else if (tamanho==14) { // Calculando o CNPJ
        var cnpj;
        var c = [6,5,4,3,2,9,8,7,6,5,4,3,2]; // Matriz usada de base para o calculo do CNPJ
        cnpj = cpfcnpjID;
        
        for(i=0;i<14;i++)                    // Armazena na matriz a[] todos os algarismos do CNPJ
            a[i] = cnpj.charAt(i);            // A função charAT() pega o valor de cada posição da String
        
        for(i=0,j=1;i<12;i++,j++){            // Calculando o primeiro dígito verificador
            b[i] = a[i]*c[j];                // Pegamos do 1º ao 12º algarismo do CNPJ para fazermos o cálculo
            soma = soma + b[i];                // Armazena em 'soma' a soma todos os produtos
        }
        
        resto = soma % 11;                    // Armazena em resto o resto da divisão da soma divido por 11
        
        if(resto<2)                            // Se resto for igual menor que 2 o primeiro dígito do CNPJ deverá ser 0
            diga=0;                            // Armazena em digb o valor 0
        else                                // Se resto for maior ou igual a 2 deverá ser calculado o digito
            diga=11-resto;                    // Neste caso o digb é igual a 11 menos o resto
        
        resto = 0;                            // Zera a variável resto
        soma = 0;                            // Zera a variável soma
        
        for(i=0;i<13;i++){                    // Calculando o segundo dígito verificador
            b[i] = a[i]*c[i];                // Pegamos do 1º ao 13º algarismo do CNPJ para fazermos o cálculo
            soma = soma + b[i];                // Armazena em 'soma' a soma todos os produtos                
        }
        
        resto = soma % 11;                    // Armazena em resto o resto da divisão da soma divido por 11
        
        if(resto<2)                            // Se resto for igual menor que 2 o primeiro dígito do CNPJ deverá ser 0
            digb=0;                            // Armazena em digb o valor 0
        else                                // Se resto for maior ou igual a 2 deverá ser calculado o digito
            digb=11-resto;                    // Neste caso o digb é igual a 11 menos o resto
            
        if(a[12]!=diga || a[13]!=digb){        // Comparando agora os dois dígitos
            alert('CNPJ Inválido!');
            campoID.focus();
            campoID.value="";
            return false;
        }
    } else if (tamanho==0) {                // No caso de nada dígitado ele poderá passar pelo campo
        return false;                        
    } else {                                // Caso não seja digitado nem 11 nem 14 dígitos
        alert('É necessário informar 11 dígitos para CPF ou 14 dígitos para CNPJ');
        campoID.focus();
        campoID.value="";
        return false;
    }
    return true;
}

// Formatando telefone digitado pelo usuário!
function TelefoneFormat(Campo, e) {
    var key = '';
    var len = 0;
    var strCheck = '0123456789';
    var aux = '';
    var whichCode = (window.Event) ? e.which : e.keyCode;
    
    if (whichCode == 13 || whichCode == 8 || whichCode == 0)
    {
        return true;  // Enter backspace ou FN qualquer um que não seja alfa numerico
    }
    key = String.fromCharCode(whichCode);
    if (strCheck.indexOf(key) == -1){
        return false;  //NÃO E VALIDO
    }
    
    aux =  Telefone_Remove_Format(Campo.value);
    
    len = aux.length;
    if(len>=10)
    {
        return false;    //impede de digitar um telefone maior que 10
    }
    aux += key;
    
    Campo.value = Telefone_Mont_Format(aux);
    return false;
}

function  Telefone_Mont_Format(Telefone)
{
    var aux = len = '';
    
    len = Telefone.length;
    if(len<=9)
    {
        tmp = 5;
    }
    else
    {
        tmp = 6;
    }
    
    aux = '';
    for(i = 0; i < len; i++)
    {
        if(i==0)
        {
            aux = '(';
        }
        aux += Telefone.charAt(i);
        if(i+1==2)
        {
            aux += ')';
        }
        
        if(i+1==tmp)
        {
            aux += '-';
        }
    }
    return aux ;
}

function  Telefone_Remove_Format(Telefone)
{
    var strCheck = '0123456789';
    var len = i = aux = '';
    len = Telefone.length;
    for(i = 0; i < len; i++)
    {
        if (strCheck.indexOf(Telefone.charAt(i))!=-1)
        {
            aux += Telefone.charAt(i);
        }
    }
    return aux;
} 

// Valida Tipo de Caracter que pode ser digitados em um campo!!

function TipoCampo(tipo,obj){
	var str;

	if(tipo == 'num') // campos numéricos
		str = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZçÇáéíóúÁÉÍÓÚàÀâêîôûÂÊÎÔÛãõÃÕäëïöüÄËÏÖÜ@*.,;:~!?/|\\'\"<>()[]{}&%#-_=+";
	if(tipo == 'numd') // campos com números fracionados
		str = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZçÇáéíóúÁÉÍÓÚàÀâêîôûÂÊÎÔÛãõÃÕäëïöüÄËÏÖÜ@*;:~!?/|\\'\"<>()[]{}&%#-_=+";
	else if(tipo == 'data') // campos de data
		str = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZçÇáéíóúÁÉÍÓÚàÀâêîôûÂÊÎÔÛãõÃÕäëïöüÄËÏÖÜ@*.,;:~!?|\\'\"<>()[]{}&%#-_=+";
	else if(tipo == 'cep') // campos de cep
		str = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZçÇáéíóúÁÉÍÓÚàÀâêîôûÂÊÎÔÛãõÃÕäëïöüÄËÏÖÜ@*,;:~!?/|\\'\"<>()[]{}&%#_=+";
	else if(tipo == 'cpfcnpj') // campos de cnpj e cpf
		str = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZçÇáéíóúÁÉÍÓÚàÀâêîôûÂÊÎÔÛãõÃÕäëïöüÄËÏÖÜ@*,;:~!?|\\'\"<>()[]{}&%#_=+";
	else if(tipo == 'fone') // campos de telefone
		str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZçÇáéíóúÁÉÍÓÚàÀâêîôûÂÊÎÔÛãõÃÕäëïöüÄËÏÖÜ@*.,;:~!?/|\\'\"<>[]{}&%#_=+";
	else if(tipo == 'letra') // campos alfabéticos
		str = "1234567890";

	if(obj.value != ''){
		tam = str.length;
		for(x=0;x<tam;x++){
			if(obj.value.indexOf(str.substr(x,1)) != -1){
				obj.value = obj.value.substr(0,obj.value.length-1)
				break;
			}
		}
	}
}


//Chama o Metodo assim: 
// onKeyPress="ConsisteTecla(event.keyCode,this);"
function ConsisteTecla(Tecla,Campo)
{
        if (Tecla > 47 && Tecla < 58)
      {
         event.returnValue = true;
         ConsisteHora(Campo);     
        }
        else
        {
     event.returnValue = false;
        }
}
function ConsisteHora(Campo)
{
      back = '';
            if(Campo.value.length == 2)
      { 
              hrs = (Campo.value.substring(0,2));
                if (hrs >= 00 && hrs <= 23)
                {
                    Campo.value += ":";
                    event.returnValue = true;
                    back = (Campo.value.substring(0,3));
                }
                else
                {
                    Campo.value = "";
                    event.returnValue = false;
                }
            }
            else if(Campo.value.length == 4)
            {
            min = (Campo.value.substring(3,4));
            if (min >= 0 && min < 6)
                {
                    event.returnValue = true; 
                }
                else
                {
                    back = (Campo.value.substring(0,3));
                    Campo.value = "";
                    Campo.value    = back;
                    event.returnValue = false;
                }
            }
        
}

// Valida Formulário de cadastro de anúncio
function  ValidaFormCadastroAnuncio(form_analise_andamento){
if (form_analise_andamento.Pagina.value == "Selecione") {
alert("Atenção: Informe a Página!!");
form_analise_andamento.Pagina.focus();
return (false);
}
if (form_analise_andamento.Secao.value == "Selecione") {
alert("Atenção: Informe a seção!!");
form_analise_andamento.Secao.focus();
return (false);
}
if (form_analise_andamento.Coluna.value == "Selecione") {
alert("Atenção: Informe a coluna!!");
form_analise_andamento.Coluna.focus();
return (false);
}
if (form_analise_andamento.Detalhes.value == "") {
alert("Atenção: Informe os detalhes (texto usado no anúncio) do anúncio!!");
form_analise_andamento.Detalhes.focus();
return (false);
}
if (form_analise_andamento.Telefone1.value == "" && form_analise_andamento.Telefone2.value == "" && form_analise_andamento.Telefone3.value == "" && form_analise_andamento.Telefone4.value == "") {
alert("Atenção: Informe ao menos um telefone!!");
form_analise_andamento.Telefone1.focus();
return (false);
}
return (true);
}


// Valida Formulário de cadastro de análise
function  ValidaFormCadastroAnalise(form_analise){
if (form_analise.MeioComunicacao.value == "Selecione") {
alert("Atenção: Informe o Meio de Comunicação!!");
form_analise.MeioComunicacao.focus();
return (false);
}
if (form_analise.DataPublicacao.value == "") {
alert("Atenção: Informe a data da Publicação!!");
form_analise.DataPublicacao.focus();
return (false);
}
return (true);
}

// Valida Formulário de cadastro de localidades de anúncios
function  ValidaLocalidadeAnuncio(Cidades){
if (Cidades.Nome.value == "") {
alert("Atenção: Informe o nome da localidade a ser cadastrada!!");
Cidades.Nome.focus();
return (false);
}
return (true);
}

// Valida Formulário de cadastro de motivos de devolução de cartas
function  ValidaMotivoDevolucao(MotivoDevolucao){
if (MotivoDevolucao.Nome.value == "") {
alert("Atenção: Informe o nome da motivo a ser cadastrado!!");
MotivoDevolucao.Nome.focus();
return (false);
}
return (true);
}

// Valida Formulário de cadastro de tipos de cartas
function  ValidaTiposCartas(formTiposCartas){
if (formTiposCartas.Nome.value == "") {
alert("Atenção: Informe o nome do tipo de correspondência!");
formTiposCartas.Nome.focus();
return (false);
}
return (true);
}

// Valida Formulário de cadastro de assuntos de protocolo
function  ValidaFormCadastroAssuntoProtocolo(form){
if (form.idDepartamento.value == "" || form.idDepartamento.value == "Selecione") {
alert("Atenção: Informe o departamento no qual o assunto pertence!!");
form.idDepartamento.focus();
return (false);
}
if (form.Nome.value == "") {
alert("Atenção: Informe o nome do assunto a ser cadastrado!!");
form.Nome.focus();
return (false);
}
return (true);
}

// Valida Formulário de cadastro de assuntos de atendimento
function  ValidaFormCadastroAssuntoAtendimento(form){
if (form.idDepartamento.value == "" || form.idDepartamento.value == "Selecione") {
alert("Atenção: Informe o departamento no qual o assunto de atendimento pertence!!");
form.idDepartamento.focus();
return (false);
}
if (form.Nome.value == "") {
alert("Atenção: Informe o nome do assunto a ser cadastrado!!");
form.Nome.focus();
return (false);
}
return (true);
}

// Valida Formulário de cadastro senhas de atendimento
function  ValidaFormCadastroSenhaAtendimento(form){
if (form.idDepartamento.value == "" || form.idDepartamento.value == "Selecione") {
alert("Atenção: Informe o departamento no qual o atendimento será executado!!");
form.idDepartamento.focus();
return (false);
}
if (form.idAssunto.value == "" || form.idAssunto.value == "Selecione") {
alert("Atenção: Informe o assunto do atendimento!!");
form.idAssunto.focus();
return (false);
}
if (form.CPF_CNPJ.value == "") {
alert("Atenção: Informe CPF ou CNPJ da pessoa a ser atendida!!");
form.CPF_CNPJ.focus();
return (false);
}
if (form.Nome.value == "") {
alert("Atenção: Informe o nome da pessoa a ser atendida!!");
form.Nome.focus();
return (false);
}
return (true);
}

// Valida Formulário de busca aos assuntos de protocolos
function  ValidaFormBuscaAssuntoProtocolo(form_busca){
if ((form_busca.idDepartamento.value == "" || form_busca.idDepartamento.value == "Selecione") && form_busca.Nome.value == "") {
alert("Atenção: Informe ao menos um critério para pesquisar!!");
form_busca.idDepartamento.focus();
return (false);
}
return (true);
}

// Valida Formulário de cadastro de protocolos
function  ValidaFormCadastroProtocolo(form){
if (form.idDepartamento.value == "" || form.idDepartamento.value == "Selecione") {
alert("Atenção: Informe o departamento no qual o assunto do protocolo pertence!!");
form.idDepartamento.focus();
return (false);
}
if (form.idProtocoloAssunto.value == "" || form.idProtocoloAssunto.value == "Selecione") {
alert("Atenção: Informe o assunto do protocolo!!");
form.idProtocoloAssunto.focus();
return (false);
}
if (form.Nome.value == "") {
alert("Atenção: Informe o nome do requerente do protocolo!!");
form.Nome.focus();
return (false);
}
if (form.idProtocoloAssunto.value == 41 && form.NomeDenunciado.value == "") {
alert("Atenção: Informe o nome do denunciado (requerido)!!");
form.NomeDenunciado.focus();
return (false);
}
if (form.idProtocoloAssunto.value == 28 && (form.idAutoInfracao.value == "" || form.idAutoInfracao.value == 0)) {
alert("Atenção: Informe o número do auto de infração da defesa a ser protocolada!!");
form.idAutoInfracao.focus();
return (false);
}
if (form.idProtocoloAssunto.value == 28 && form.CPF_CNPJ.value == "") {
alert("Atenção: Informe o número do CPF ou CNPJ requerente à defesa a ser protocolada!!");
form.CPF_CNPJ.focus();
return (false);
}
if (form.idProtocoloAssunto.value == 142 && form.CRECIRT.value == "") {
alert("Atenção: Informe o número do CRECI do novo responsável técnico!!");
form.CRECIRT.focus();
return (false);
}
if (form.idProtocoloAssunto.value == 142 && form.CPF_CNPJRT.value == "") {
alert("Atenção: Informe o número do CPF do novo responsável técnico!!");
form.CPF_CNPJRT.focus();
return (false);
}
if (form.idProtocoloAssunto.value == 142 && form.NomeRT.value == "") {
alert("Atenção: Informe o nome do novo responsável técnico!!");
form.NomeRT.focus();
return (false);
}

return (true);
}

// Valida Formulário de cadastro de grupo de agenda
function ValidaFormCadastroNovoGrupoAgenda(form_cadastro_grupo_agenda){
if (form_cadastro_grupo_agenda.Nome.value == "") {
alert("Atenção: Informe o nome do grupo a ser cadastrado!!");
form_cadastro_grupo_agenda.Nome.focus();
return (false);
}
if (form_cadastro_grupo_agenda.idUsuarioGerenteGrupo.value == "" || form_cadastro_grupo_agenda.idUsuarioGerenteGrupo.value == "Selecione") {
alert("Atenção: Selecione o nome do gerente do grupo a ser cadastrado!!");
form_cadastro_grupo_idUsuarioGerenteGrupo.Nome.focus();
return (false);
}
return (true);
}

// Abrir janelas modais
function openModal(pUrl, pWidth, pHeight) {
	if (window.showModalDialog) {
		return window.showModalDialog(pUrl, window,
		  "dialogWidth:" + pWidth + "px;dialogHeight:" + pHeight + "px");
	} else {
		try {
			netscape.security.PrivilegeManager.enablePrivilege(
			  "UniversalBrowserWrite");
			window.open(pUrl, "wndModal", "width=" + 800
			  + ",height=" + 600 + ",resizable=yes,modal=yes");
			return true;
		}
		catch (e) {
			alert("Script não confiável, não é possível abrir janela modal.");
			return false;
		}
	}
}

// Validação de Endereço de email
function ValidaMail(mail){
        var er = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
        if(typeof(mail) == "string"){
                if(er.test(mail)){ return true; }
        } else if(typeof(mail) == "object"){
                if(er.test(mail.value)){ 
                                        return true; 
                                }
        } else {
        return false;
        }
}