	function isNum( caractere ) 
	{
		var strValidos = "0123456789"	 
		if ( strValidos.indexOf( caractere ) == -1 )
		{
			return false;	 
		}
		return true; 
	}

	function soNumero(campo, event) 
	{
		
		// 8  backspace			9  Tab				33 PageUp				34 PageDown	
		// 35 End				36 Home 			37 seta para esquerda	38 seta para cima 
		// 39 seta para direita 40 seta para baixo	46 Delete
	 		
		var key;	 
		var tecla;	 
		
		var teclasPermitidas = new Array(8,9,0); 
	 
		CheckTAB=true;
	 
		if(navigator.appName.indexOf("Netscape")!= -1)	 
			tecla= event.which;	 
		else	 
			tecla= event.keyCode;	 
			key = String.fromCharCode(tecla);	 
			//alert( 'key: ' + tecla + ' -> campo: ' + campo.value);	 
	 
		if ( tecla == 13 )		 
			return false;		 
		
		var i;		
		for(i=0;i<teclasPermitidas.length;i++)
		{				
			if (tecla == teclasPermitidas[i])
			{		 
				return true;
			}
		}
		 
		return ( isNum(key));		 
	}
	
	function formataCnpj(obj)
	{
		numero = _extraiNumero(obj.value)
		if (numero.length > 3) {			
			formataCampo(obj, "XX.XXX.XXX/XXXX-XX")
		} else {
			if (obj.value != numero)
			{
				obj.value = numero
			}
		}
	}
	
	function formataCep(obj)
	{	
		numero = _extraiNumero(obj.value)
		if (numero.length > 3) {
			formataCampo(obj, "XXXXX-XXX")
		} else {
			if (obj.value != numero)
			{
				obj.value = numero
			}
		}
	}
	
	function formataCampo(obj, mascara)
	{
		var valor = ''
		var tamValor = 0
		var tamMascara = 0
		var resultado = ''
		var aux1 = ''
		var aux2 = ''
		var posMas = 1
		var posVal = 1
		var tecla = obj.value.substr( obj.value.length - 1, 1)
		var masclen = mascara.length
	
		if(obj.value.length > mascara.length)
		{
			valor = _extraiNumero(obj.value.substring(0, obj.value.length-(obj.value.length-mascara.length)))
		} else {
			valor = _extraiNumero(obj.value)
		}
	
		//muda formatação somente quando receber uma tecla válida 
		if( !_teclaValida(tecla) && (obj.value != ''))
		{
			tamValor = valor.length
			tamMascara = mascara.length
			while((posVal <= tamValor) && (posMas <= tamMascara))
			{
				// percorre caracter por caracter no valor dado (do fim p/ começo)
				aux1 = valor.substring(tamValor - posVal, (tamValor - posVal) + 1)
				// percorre caracter por caracter na máscara (do fim p/ começo)
				aux2 = mascara.substring(tamMascara - posMas, (tamMascara - posMas) + 1)
				if(aux2 == 'X')
				{
					resultado = aux1 + resultado
					posVal = posVal + 1
				}else if((aux2 == '-') || (aux2 == '/') || (aux2 == '.' ) || (aux2 == '(') || (aux2 == ')') || (aux2 == ',')) // símbolos presentes nas máscaras
				{
					resultado = aux2 + resultado
				}
				posMas = posMas + 1
			}
			//  colocando "posMas" e "posVal" em suas posições atuais
			posVal = posVal - 1
			posMas = posMas - 1
			// caso especial para número de telefone (máscara começa com símbolo)
			if((posMas == tamMascara - 1) && (mascara.substring(0, 1) == '('))
			{
				resultado = '(' + resultado
			}
			
			if (obj.value != resultado)
			{
				if ( (resultado.length>=obj.maxLength) && (masclen>=resultado.length) )
				{
					if (masclen == resultado.length)
					{
						obj.maxLength = masclen
					} else{
						obj.maxLength = resultado.length+1
					}
				}
				obj.value = resultado
			}
			
		}
	}
	
	function _somenteNumero(numero)
	{
		// numeros aceitos 0,1,2,3,4,5,6,7,8,9,37,38,39,40,46
		ER=/(^[0-2]$|^3[789]{0,1}$|^4[06]{0,1}$|^[5-9]$)/
		return ER.test(numero)
	}
	
	//  teclas que podem ser pressionadas
	function _teclaValida(tecla)
	{
		// 8  backspace			9  Tab				33 PageUp				34 PageDown	
		// 35 End				36 Home 			37 seta para esquerda	38 seta para cima 
		// 39 seta para direita 40 seta para baixo	46 Delete
		ER=/(^[8-9]$|^3[3-9]{1}$|^4[06]{1}$)/
		return ER.test(numero)
	}
	
	// retorna somente números [0..9]
	function _extraiNumero(dado)
	{
		var aux = ''
		for(n=0; n < dado.length; n++){
			if(_somenteNumero(dado.substr(n,1))){
				aux += dado.substr(n,1)
			}
		}
		return aux
	}
	
	function validaEmail(obj, alerta)
	{
		var str = obj.value;
	
		// @ deve estar pelo menos na posição 1 de str,
		// deve estar pelo menos na posição 3 de str e não pde pode estar na última posição de str.
		if(str.length>0 && (str.indexOf('@') < 1 || str.indexOf('.') < 3 || (str.length < 5) || (str.substr(str.length-1, 1) == '.')))
		{
			// exibe mensagem ao usuário.
			if(alerta)
			{
				alert('E-mail inválido: ' + str);
				obj.value=''			
			}
			if(obj != null)
			{
				obj.focus();
			}
			return false;
		} else {
			return true;
		}
	}
	
	function validaCNPJ(obj, cnpj, alerta) 
	{	
		cnpj = _extraiNumero(cnpj)
		
		
		var a = new Array();
		var b = new Number;
		var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
		for (i=0; i<12; i++){
			a[i] = cnpj.charAt(i);
			b += a[i] * c[i+1];
		}
		if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
		b = 0;
		for (y=0; y<13; y++) {
			b += (a[y] * c[y]);
		}
		if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
		if ((cnpj.charAt(12) != a[12]) || (cnpj.charAt(13) != a[13]))
		{
			
			
			if(alerta)
			{
				obj.value='';
				alert('CNPJ inválido: ' + cnpj);				
			}
			
			if(obj != null)
			{
				obj.focus();
			}
			
			return false;
		}
		
		return true;
	}
	
	
	function formataTelefone(obj)
	{
		numero = _extraiNumero(obj.value)
		if (numero.length >= 10) {
			formataCampo(obj, "(XX)XXXX-XXXX")
		} else if (numero.length == 9) {
			formataCampo(obj, "(XX)XXX-XXXX")
		} else if (numero.length == 8) {
			formataCampo(obj, "XXXX-XXXX")
		} else if (numero.length > 4) {
			formataCampo(obj, "XXX-XXXX")
		} else {
			if (obj.value != numero)
			{
				obj.value = numero
			}
		}
	}
