<!--

	/**
	 * Autor: Ricardo José Ramalho Moreira ( ricardojrm@gmail.com )
	 * Licença: GNU
	 * Nota: O uso desse script é totalmente gratuito sobre a impossição de não alterar
	 * os créditos do mesmo. Aqueles que corrigirem bugs ou melhorarem algo no código, por
	 * favor, me contate por e-mail relatando as modifações, bem como seu nome e e-mail oficial
	 * para que seja dada os devidos créditos.
	 *
	 * Atenciosamente,
	 * Ricardo José Ramalho Moreira
	 * Programador WEB
	 *
	 * Descrição:
	 *
	 * Esta função é a função principal que valida todos os campos de um formulário.
	 * Sua ideía é baseada na pseudo propriedade 'validar' de cada elemento do formulário.
	 * Quando você insere essa propriedade em algum elemento dentro do formulário alvo,
	 * ela se encarregará de descobrir qual o tipo do elemento, e baseado na opção passada
	 * como parâmetro, realizará a sua validação.
	 *
 	 * Versão: 1.6.3
	 *
	 * Changelog:   16/02/2006 - Sutil modificação na função principal validar_form. Ela agora passa a usar o método getAttribute( String )
	 *				para obter os valores dos atributos dos objetos. Assim ela passa a ser compatível com mais browsers.
	 *				02/02/2006 - O parâmetro param_confirm passa a ser false como padrão.
	 *				28/12/2005 - Sutil modificação na função principal validar_form. Ela agora passa a ter o parâmetro param_confirm,
	 *				onde podemos setar agora se deve aparecer ou não a mensagem de confirmação quando for submeter o formulário. Por
	 *				padrão, essa variável é true.
	 *				09/09/2005 - Sutil modificação na função isNome( param_campo , param_event ) para que aceite
	 * 				o caractere ç e não aceite os caracteres ' e " e os /, *, -, +, . com a tecla SHIFT pressionada.
	 * 				31/08/2005 - Criado a função isURL( param_value ), mas ainda não está sendo processada.
	 *				31/08/2005 - Resolvido um pequeno bug na função isNumber( event ). Quando se pressionada a combinação de teclas
	 *				SHIFT + ALT, por default, o focus atual será direcionado pro objeto anterior ao objeto atual. Essa situação
	 *				não ocorria, gerando um certo aborrecimento se pra usuários mais experientes, agora o problema foi corrigido
	 *				com uma pequena alteração em seu código fonte.
	 *				31/08/2005 - O código da função isNome( this , event ) foi totalmente refeito, resolvendo assim
	 *				o bug onde o destacamento do campo era desabilitado ao inserir qualquer caractere, onde
	 *				o correto seria que este destacamento só fosse desabilitado quando o focus saisse do campo atual
	 *				e o valor inserido nele fsse diferente do anterior.
	 */

	function validar_form( param_form , param_destacar , param_return , param_confirm ) {

		if ( param_confirm == null ) { param_confirm = false; }
		var total_campos = param_form.length;
		var i = -1;

		while ( ++i < total_campos ) {

			// Se o campo estiver desabilitado, então pule para o próximo...
			if ( param_form[ i ].disabled == true ) { continue; }

			// Se o campo não precisa ser validade, então pule para o próximo...
			else if ( param_form[ i ].getAttribute( "validar" ) == null ) { continue; }

			// Adiciona o método resetar_destacamento() em todos os inputs automáticamente.
			// COM BUG - Precisa-se descobrir uma maneira de adicionar os comandos já setados no evento onchange e concatená-los
			// em um novo evento nochange.
			if ( document.layers ) { param_form[ i ].setAttribute( "onChange" , "resetar_destacamento( this )" ); }
			else { param_form[ i ].onchange = function() { resetar_destacamento( this ); }; }

			switch ( param_form[ i ].getAttribute( "validar" ) ) {

				/* SE NÃO HOUVER NENHUM CAMPO RADIO SETADO */
				case "radio":

					if ( param_form[ i ].checked == true ) { break; }

					else {

						j = -1;

						var flag_check = true;

						while ( ++j < total_campos ) {

							if ( ( param_form[ j ].type == "radio" ) && ( param_form[ j ].name == param_form[ i ].name ) && param_form[ j ].checked == true ) { flag_check = false; }

						}

						if ( flag_check ) {

							return alertar( param_form[ i ] , param_destacar , param_return , __SELELCIONE__ALGUMA__OPCAO__ + param_form[i].getAttribute( 'nome' ) + "." );
						
						}

						break;

					}

				/* SE O CAMPO PRECISAR SER PREENCHIDO */
				case "upload":

					if ( isNull( param_form[ i ].value ) && isNull( param_form[ i ].src ) ) {
					
						return alertar( param_form[ i ] , param_destacar , param_return );
					
					}

					break;

				/* SE O CAMPO PRECISAR SER PREENCHIDO */
				case "texto":

					if ( isNull( param_form[ i ].value ) ) {

						return alertar( param_form[ i ] , param_destacar , param_return );

					}

					else if ( param_form[ i ].value.length < param_form[ i ].minlength ) {

						return alertar( param_form[ i ] , param_destacar , param_return , __CAMPO__ + param_form[ i ].getAttribute( "nome" ) + __MINIMO__ + param_form[ i ].minlength + __CARACTERES__ );

					}

				case "confirmar" :

					if ( param_form[ i ].confirmar != null ) {

						if ( isNull( document.getElementById( param_form[ i ].confirmar ).value ) || !( isSame( param_form[ i ] , document.getElementById( param_form[ i ].confirmar ) ) ) ) { return alertar( param_form[ i ] , param_destacar , param_return , __CAMPOS__ + param_form[ i ].getAttribute( 'nome' ) + " e " + document.getElementById( param_form[ i ].confirmar ).getAttribute( 'nome' ) + __DIFERENTES__ ); }

					}

					break;

				/* SE O CAMPO FOR UMA URL */
				case "url":

					if ( isNull( param_form[ i ].value ) ) {

						return alertar( param_form[ i ] , param_destacar , param_return );

					}

					else if ( !( isURL( param_form[ i ].value ) ) ) {

						return alertar( param_form[ i ] , param_destacar , param_return , __CAMPO__ + param_form[i].getAttribute( 'nome' ) + __INVALIDO__ );

					}

					break;

				/* SE O CAMPO FOR UM E-MAIL */
				case "email":

					if ( isNull( param_form[ i ].value ) ) {
					
						return alertar( param_form[ i ] , param_destacar , param_return );
					
					}

					else if ( !( isEmail( param_form[ i ].value ) ) ) {
					
						return alertar( param_form[ i ] , param_destacar , param_return , __CAMPO__ + param_form[ i ].getAttribute( 'nome' ) + __INVALIDO__ );
					
					}
					
					break;

				case "data": break;

				/* SE O CAMPO FOR UM REGISTRO GERAL */

				case "rg":

					// Se o valor do campo for vazio...
					if ( isNull( param_form[ i ].value ) ) {

						return alertar( param_form[ i ] , param_destacar , param_return );

					}

					// Se o valor do campo não for númerico...
					else if ( !( isNumber2( param_form[ i ].value ) ) ) {

						return alertar( param_form[ i ] , param_destacar , param_return , __RG__INVALIDO__ );

					}

					break;

				case "cpf":

					// Se o valor do campo for vazio...
					if ( isNull( param_form[ i ].value ) ) {

						return alertar( param_form[ i ] , param_destacar , param_return );

					}

					// Se o valor do campo não for um cpf válido...
					else if ( !( isCPF( param_form[ i ].value ) ) ) {

						return alertar( param_form[ i ] , param_destacar , param_return , __CPF__INVALIDO__ );

					}

					break;

				case "cnpj":

					// Se o valor do campo for vazio...
					if ( isNull( param_form[ i ].value ) ) {

						return alertar( param_form[ i ] , param_destacar , param_return );

					}

					else {

						if ( isCNPJ( param_form[ i ].value ) == false ) {

							return alertar( param_form[ i ] , param_destacar , param_return , __CNPJ__INVALIDO__ );

						}

					}

					break;

				/* SE O CAMPO FOR UM CEP*/

				case "cep":

					// Se o valor do campo for vazio...
					if ( isNull( param_form[ i ].value ) ) {

						return alertar( param_form[ i ] , param_destacar , param_return );

					}

					// Se o cep informado for menor que oito dígitos ou contiver alguma outro caractere diferente de um dígito...
					else if ( param_form[ i ].value.replace( "-" , "" ).length < 8 || param_form[ i ].value.replace( "-" , "" ).match( /[0-9]+/ig ) == false ) {

						return alertar( param_form[ i ] , param_destacar , param_return , __CEP__INVALIDO__ );

					}

					break;

				/* SE O CAMPO PRECISAR SER SELECIONADO */
				case "selecao":

					if ( isNull( param_form[ i ].value ) || param_form[ i ].value == "0" || param_form[ i ].selectedIndex == null ) {
					
						return alertar( param_form[ i ] , param_destacar , param_return );
					
					}

					break;

				case "selecao-all":

					if ( param_form[ i ].length <= 0 ) {

						return alertar( param_form[ i ] , param_destacar , param_return );

					}

					break;

				default: continue;
			}
		}

		if ( !( param_confirm ) ) { return true; }
		
		else if ( !( confirm( __CONFIRM__ ) ) ) { return false; }
		
		else { return true; }

	}

	function isSame( param_input , param_input_confirm ) {
		if ( param_input.value != param_input_confirm.value ) { return false; }
		else { return true; }
	}

	function isNull( param_valor ) {
		if ( param_valor == "" || param_valor == null ) {	return true; }
		else { return false; }
	}

	function alertar( param_input , param_destacar , param_return , param_msg ) {

		if ( param_return != null ) {

			if ( param_destacar != null && param_destacar == true ) { destacar_campo( param_input ); }

			param_return.focus();

			if ( isNull( param_msg ) ) { param_return.value = "Especifique o campo: " + param_input.getAttribute( "nome" ); }

			else { param_return.value = param_msg; }

		}

		else {

			if ( param_destacar != null && param_destacar == true ) { destacar_campo( param_input ); }

			param_input.focus();

			if ( !( isNull( param_msg ) ) ) { window.alert( param_msg ); }

			else { window.alert( "Especifique o campo: " + param_input.getAttribute( "nome" ) ); }

		}

		return false;

	}

function isCNPJ(s)
{
	var i;
	s = limpa_string(s);
	var c = s.substr(0,12);
	var dv = s.substr(12,2);
	var d1 = 0;
	for (i = 0; i < 12; i++)
	{
		d1 += c.charAt(11-i)*(2+(i % 8));
	}
        if (d1 == 0) return false;
        d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(0) != d1)
	{
		return false;
	}

	d1 *= 2;
	for (i = 0; i < 12; i++)
	{
		d1 += c.charAt(11-i)*(2+((i+1) % 8));
	}
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(1) != d1)
	{
		return false;
	}
        return true;
}

function isCPF(s){
	var i;
	s = limpa_string(s);
	var c = s.substr(0,9);
	var dv = s.substr(9,2);
	var d1 = 0;
	for (i = 0; i < 9; i++)	{
		d1 += c.charAt(i)*(10-i);
	}
        if (d1 == 0) return false;
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(0) != d1)	{
		return false;
	}

	d1 *= 2;
	for (i = 0; i < 9; i++)	{
		d1 += c.charAt(i)*(11-i);
	}
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(1) != d1)	{
		return false;
	}
        return true;
}

	function disableIfNull( param_campo , param_target ) {
		if ( param_campo.value != null && param_campo.value != "" ) { param_target.disabled = false; }
		else { param_target.disabled = true; }
	}

	function destacar_campo( param_campo ) {

		if ( param_campo.getAttribute( 'confirmar' ) != null && document.getElementById( param_campo.getAttribute( 'confirmar' ) ) != null ) {

			document.getElementById( param_campo.getAttribute( 'confirmar' ) ).style.borderColor = "#CC0000";
			document.getElementById( param_campo.getAttribute( 'confirmar' ) ).style.backgroundColor = "#FDE4E3";

		}

		param_campo.style.borderColor = "#CC0000";
		param_campo.style.backgroundColor = "#FDE4E3";

	}

	function resetar_destacamento( param_campo ) {

		if ( document.all ) {

			if ( param_campo.getAttribute( 'confirmar' ) != null && document.getElementById( param_campo.getAttribute( 'confirmar' ) ) != null ) {

				document.getElementById( param_campo.getAttribute( 'confirmar' ) ).style.borderColor = document.getElementById( param_campo.getAttribute( 'confirmar' ) ).runtimeStyle.backgroundColor;
				document.getElementById( param_campo.getAttribute( 'confirmar' ) ).style.backgroundColor = document.getElementById( param_campo.getAttribute( 'confirmar' ) ).runtimeStyle.borderColor;

			}

			param_campo.style.backgroundColor = param_campo.runtimeStyle.backgroundColor;
			param_campo.style.borderColor = param_campo.runtimeStyle.borderColor;

		}

		else {

			if ( param_campo.getAttribute( 'confirmar' ) != null && document.getElementById( param_campo.getAttribute( 'confirmar' ) ) != null ) {

				document.getElementById( param_campo.getAttribute( 'confirmar' ) ).style = document.getElementById( param_campo.getAttribute( 'confirmar' ) ).runtimeStyle;

			}

			//var style = getComputedStyle( param_campo , "" );
			//var style = param_campo.runtimeStyle;

			//alert( style );

			param_campo.style.setProperty( "backgroundColor" , style.getPropertyValue( "backgroundColor" ) , "" );
			param_campo.style.setProperty( "borderColor" , style.getPropertyValue( "borderColor" ) , "" );
			
		}

	}

	function addPropriedadeForm( param_form , param_prop , param_value ) {
		var total_campos = param_form.length;
		var i = -1;

		while ( ++i < total_campos ) {
			param_form[i].onChange = param_value;
		}

	}

	function isCEP( cep ) {

		if ( ( cep.indexOf("-") > -1 && cep.length > 9 ) || ( cep.indexOf("-") == -1 && cep.length > 8 ) ) { return false; }

		var pat = /((\d{5})(-)(\d{3}))|(\d{8})/;

		var cepdiv = cep.match(pat);

		if ( cepdiv == null ) { return false; }

		return true;
	}

	function limpa_string(S){
		// Deixa so' os digitos no numero
		var Digitos = "0123456789";
		var temp = "";
		var digito = "";
			for (var i=0; i<S.length; i++){
			  digito = S.charAt(i);
			  if (Digitos.indexOf(digito)>=0){temp=temp+digito}
			}
			return temp
	}

	function isNome( param_campo , param_event ) {

		//if ( param_event.keyCode != 16 ) alert( param_event.keyCode);

		var deny = new Array( "48" , "49" , "50" , "51" , "52" , "53" , "54" , "55" , "56" , "57" , "96" , "97" , "98" , "99" , "100" , "101" , "102" , "103" , "104" , "105" , "106" , "107" , "109" , "110" , "111" , "187" , "188" , "189" , "190" , "192" , "191" , "193" , "194", "220" , "221" , "226" );
		var shiftKey = new Array( "8" , "9" , "16" , "33" , "34" , "35" , "36" , "43" , "45" , "46" , "54" , "144" , "186" , "219" , "222" );

		if ( param_event.shiftKey == false ) {
			var i = -1;
			var j = deny.length;
			while ( ++i < j ) {
				if ( param_event.keyCode == deny[i] ) {
					( document.all ) ? param_event.returnValue = false : param_event.preventDefault();
					return false;
				}
			}
		}
		else {
			var i = -1;
			var j = shiftKey.length;
			while ( ++i <= j ) {
				if ( param_event.keyCode == shiftKey[i] ) { return true; }
			}
			if ( ( param_event.keyCode == 106 || param_event.keyCode == 107 || param_event.keyCode == 109 || param_event.keyCode == 111 || param_event.keyCode == 194 ) || String.fromCharCode( param_event.keyCode ).match( /[^a-z-A-Z ]/ ) ) {
				( document.all ) ? param_event.returnValue = false : param_event.preventDefault();
				return false;
			}
			else { return true; }

		}
		/*
		if ( param_event != null && ( param_event.keyCode < 33 || param_event.keyCode > 40 ) ) {
			param_campo.value = param_campo.value.replace( /[^a-zA-Z çáéíóúüãõâêîôû]/ig , "" );
			resetar_destacamento( param_campo );
		}*/
	}

	function isLogin( param_campo ) {
		//param_campo.value = param_campo.value.replace( /[^a-zA-Z çáéíóúüãõâêîôû]/ig , "" );
	}

	function isSenha( param_campo ) {
		//param_campo.value = param_campo.value.replace( /[^a-zA-Z çáéíóúüãõâêîôû]/ig , "" );
	}

	function isNick( param_campo ) {
		//param_campo.value = param_campo.value.replace( /[^a-zA-Z çáéíóúüãõâêîôû]/ig , "" );
	}

	function isURL( param_value ) {
		return true;
	}

	function isEmail( param_value ) {
		if ( param_value.match( /^([a-zA-Z0-9_\-])+(\.([a-zA-Z0-9_\-])+)*@((\[(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))\]))|((([a-zA-Z0-9])+(([\-])+([a-zA-Z0-9])+)*\.)+([a-zA-Z])+(([\-])+([a-zA-Z0-9])+)*))$/gi ) != null ) { return true; }
		else { return false; }
	}

	function isArquivo( param_campo ) {
		//param_campo.value = param_campo.value.replace( /[^a-zA-Z çáéíóúüãõâêîôû]/ig , "" );
	}

	function isEndereco( param_campo ) {
		param_campo.value = param_campo.value.replace( /[^a-zA-Z0-9º.\,\- çáéíóúüãõâêîôû]/ig , "" );
	}

	// Esta função só permite que um valor INT seja inserido no campo input.
	function isInt( param_campo , param_unsigned ) {
	}

	// Esta função só permite que um valor SMALLINT seja inserido no campo input.
	function isSmallInt( param_campo , param_unsigned ) {

		var valor = param_campo.value;

		if ( param_unsigned ) {
			if ( param_campo.value > 65535 ) { param_campo.value = 65535;	}
			else if ( param_campo.value < 0 ) { param_campo.value = 0;	}
		}
		else {
			 if ( param_campo.value < -32768 ) { param_campo.value = -32768;  }
			 else if ( param_campo.value > 32767 ) { param_campo.value = 32767;  }
		}

	}

	// Esta função só permite que um valor TINYINT seja inserido no campo input.
	function isTinyInt( param_campo , param_unsigned ) {

		var valor = param_campo.value;

		if ( param_unsigned ) {
			if ( param_campo.value > 255 ) { param_campo.value = 255;	}
			else if ( param_campo.value < 0 ) { param_campo.value = 0;	}
		}
		else {
			 if ( param_campo.value < -128 ) { param_campo.value = -128;  }
			 else if ( param_campo.value > 127 ) { param_campo.value = 127;  }
		}

	}

	function isNumber2( param_valor ) {
		if ( param_valor.match( /[^0-9]/ig ) ) { return false; }
		return true;
	}

	// Esta função só permite que digitos sejam inseridos no campo input.
	// Qualquer outra tecla digitada que não seja digito, não será exibida.
	function isNumber( param_event ) {

		var tecla = param_event.keyCode;
		//alert( tecla );
		if (param_event.shiftKey == false) {
			//alert( tecla );
			if ( tecla != 46 && tecla != 37 && tecla != 39 && tecla != 9 && tecla != 8 && ( ( tecla < 48 || tecla > 57 ) && ( tecla < 96 || tecla > 105 ) ) ) {
			//alert( tecla );
				( document.all ) ? param_event.returnValue = false : param_event.preventDefault();
			}

		}
		else if ( param_event.shiftKey == true && tecla != 46 && tecla != 9 ) {
			( document.all ) ? param_event.returnValue = false : param_event.preventDefault();
		}

	}

	// Esta função só permite que uma quantidade de caracteres
	// do tipo TEXT seja inserido no campo input.
	function isText( param_event , param_campo ) {
		if ( param_campo.value.length > 65535 ) {
			param_event.returnValue = false;
		}
	}

	function formatar(src, mask){

		var i = src.value.length;
  		var saida = mask.substring(0,1);
  		var texto = mask.substring(i)

			if (texto.substring(0,1) != saida){
				src.value += texto.substring(0,1);
  			}
	}
	//-->

