// ---
// Funcoes para Formatação / Edicao / Validacao de Formularios
// ---
// Autor: Leonardo Inacio
// ---







// ---
// Numericos
// ---
// <input type="text" size="10" maxlength="10" name="m_vvalor" id="m_vvalor" class="campogrande" value="" onkeypress='edt_Numeros(this);' onkeyup='msk_Valor(this,13,event);' />
// 

function edt_Numeros( input )

{

	if ((event.keyCode<48)||(event.keyCode>57))

		event.returnValue = false;

}



function msk_Valor( campo ,tammax ,teclapres ) 
{

	var tecla = teclapres.keyCode;

	var vr = campo.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 ( tecla == 8 )

	{

		/* tam = tam - 1; */

		campo.value = '';

		return

	}


	if (tam < tammax && tecla != 8){ tam = vr.length + 1 ; }

		

	if ( tecla == 8 || (tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105) ){

		if ( tam <= 2 ){ 

	 		campo.value = vr ; }

	 	tam = tam - 1;

	 	if ( (tam > 2) && (tam <= 5) ){

	 		campo.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ) ; }

	 	if ( (tam >= 6) && (tam <= 8) ){

	 		campo.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }

	 	if ( (tam >= 9) && (tam <= 11) ){

	 		campo.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }

	 	if ( (tam >= 12) && (tam <= 14) ){

	 		campo.value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }

	 	if ( (tam >= 15) && (tam <= 17) ){

	 		campo.value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ;}

	}

}

// ---








// ---
// MascaraHellas
// ---
// onKeyUp="edt_Formata(this.value, this.id, '##/##/####', event);
// ---

function edt_Formata( valor , id , mascara , evento )

{

	

	//inicializa a variavel que vai conter o valor final

	var valorFinal = "";

	

	//verifica o que foi digitada para que seja verificado se é somente números ou não

	var tecla = evento.keyCode;	

	

	//manetem o tamanho original do campo sem retirar a máscara

	var valorOriginal = valor;

	

	//inicializa um array com todos os caracteres que serão retirado

	var arrNaoPermitidos = new Array("-", ".", "/", "\\", "|", "(", ")", ":", " ", ",");

	

	//retira qualquer máscatra que já tenho sido colocada

	for(i1=0;i1<valor.length;i1++)

	{

		for(i2=0;i2<arrNaoPermitidos.length;i2++)

		{

			if(valor.charAt(i1) == arrNaoPermitidos[i2])

			{

				valor = valor.toString().replace( arrNaoPermitidos[i2], "" );

			}	

		}	

	}	

	

	//merifica se a máscara é mometária ou uma máscara fixa

	if(mascara == "money")

	{

		//retira os zeros da frente do valor

		var temZero = true;

		while(temZero == true)

		{

			if(valor.substring(0,1) == "0")

			{

				valor = valor.substring(1,valor.length);

			}

			else

			{

				temZero = false;

			}	

		}		

		

		//verifica se foi precionado o backspae

		if(tecla == 8)

		{

			valor = valor.substring(0, valor.length);	

		}



		//faz as verificações para a formatação do valor

		if(valor.length == 1)

		{

			valorFinal = "0,0"+valor;	

		}

		else if(valor.length == 2)

		{

			valorFinal = "0,"+valor;	

		}

		else if(valor.length == 4 && valor.substr(0,2) == "00")

		{

			valorFinal = "0,"+valor.substr(2);	

		}

		else if(valor.length == 4 && valor.substr(0,1) == "0" && valor.substr(0,2) != "00")

		{

			valorFinal = valor.substr(1,1)+","+valor.substr(2);	

		}

		else if(valor.length >= 4 || valor.length == 3)

		{

			var parteInteira = valor.substr(0, (valor.length -2));

			var parteDecimal = valor.substr((valor.length -2))  

			var inteiro = "";

			var cont = 1;

			var milhar = ""; 	

			

			for(i = parteInteira.length; i>0 ; i--)

			{					

				if(cont == 4)

				{

					milhar = ".";

					cont = 2;

				}

				else

				{

					milhar = "";

					cont++;

				}	

			

				inteiro = parteInteira.substr((i-1),1)+ milhar + inteiro;

			}

			

			valorFinal = inteiro+","+parteDecimal;

		}

		else

		{

			valorFinal = "0,00";

		}	

	}

	else

	{	

		//verifica se foi precionado o backspae

		if(tecla != 8)

		{			

			//verifica se já não ultrapassou o tamanha máximo da máscara

			if(mascara.length >= valorOriginal.length)

			{			

				//loop em cima do valor do campo sem a máscara

				jaTemMascara = false;

				for(i=0;i<valor.length;i++)

				{			

					//verifica se a string já recebeu alguma máscara ou não

					if(jaTemMascara == false)

					{

						//verifica se o tipo da entrada de dados tem que ser némerica

						if(mascara.charAt(i) == "#")

						{

							//verifica se foi digitado somente números

							if(((tecla > 95) && (tecla < 106)) || ((tecla > 47) && (tecla < 58)) || tecla == 9 || tecla == 16)

							{

								//0 = 96 ou 48

								//1 = 97 ou 49

								//2 = 98 ou 50

								//3 = 99 ou 51

								//4 = 100 ou 52

								//5 = 101 ou 53

								//6 = 102 ou 54

								//7 = 103 ou 55

								//8 = 104 ou 56

								//9 = 105 ou 57

								//tecla == 9 = tab

								valorFinal = valorFinal  + valor.charAt(i);

							}

							else//se não foi digitado um número é retirado o caracter da string

							{

								valorFinal = valorOriginal.substring(0, valorOriginal.length -1);

							}					

						}

						else if(mascara.charAt(i) == "@")//verifica se o tipo da entrada é qualquer caracter


						{

							valorFinal = valorFinal  + valor.charAt(i);

						}

						else//se não for quelaquer caracter é algum elemento da máscara

						{

							//verifica se o próxima depois da máscara é númerica 

							if(mascara.charAt(i + 1) == "#")

							{

								//verifica se foi digitado somente números

								if(((tecla > 95) && (tecla < 106)) || ((tecla > 47) && (tecla < 58)) || tecla == 9 || tecla == 16)

								{

									//0 = 96 ou 48

									//1 = 97 ou 49

									//2 = 98 ou 50

									//3 = 99 ou 51

									//4 = 100 ou 52

									//5 = 101 ou 53

									//6 = 102 ou 54

									//7 = 103 ou 55

									//8 = 104 ou 56

									//9 = 105 ou 57

									//tecla == 9 = tab

									valorFinal = valorFinal + mascara.charAt(i + jaTemMascara)  + valor.charAt(i);			

									jaTemMascara = jaTemMascara + 1;	

								}

								else//se não foi digitado um número é retirado o caracter da string

								{

									valorFinal = valorOriginal.substring(0, valorOriginal.length -1);

								}

							}

							else// se não é númerico então pode ser qualuqer caracter

							{

								valorFinal = valorFinal + mascara.charAt(i + jaTemMascara)  + valor.charAt(i);			

								jaTemMascara = jaTemMascara + 1;

							}					

						}

					}

					else//else da verificação da máscara

					{

						//verifica se foi digitado somente números

						if(mascara.charAt(i + jaTemMascara) == "#")

						{

							//verifica se foi digitado somente números

							if(((tecla > 95) && (tecla < 106)) || ((tecla > 47) && (tecla < 58)) || tecla == 9 || tecla == 16)

							{

								//0 = 96 ou 48

								//1 = 97 ou 49

								//2 = 98 ou 50

								//3 = 99 ou 51

								//4 = 100 ou 52

								//5 = 101 ou 53

								//6 = 102 ou 54

								//7 = 103 ou 55

								//8 = 104 ou 56

								//9 = 105 ou 57

								//tecla == 9 = tab

								valorFinal = valorFinal  + valor.charAt(i);

							}

							else//se não foi digitado um número é retirado o caracter da string

							{

								valorFinal = valorOriginal.substring(0, valorOriginal.length -1);

							}

						}

						else if(mascara.charAt(i + jaTemMascara) == "@")//verifica se o tipo da entrada é qualquer caracter

						{

							valorFinal = valorFinal  + valor.charAt(i);

						}

						else

						{

							//verifica se foi digitado somente números

							if(mascara.charAt(i + jaTemMascara +1) == "#")

							{

								//verifica se foi digitado somente números

								if(((tecla > 95) && (tecla < 106)) || ((tecla > 47) && (tecla < 58)) || tecla == 9 || tecla == 16)

								{

									//0 = 96 ou 48

									//1 = 97 ou 49

									//2 = 98 ou 50

									//3 = 99 ou 51

									//4 = 100 ou 52

									//5 = 101 ou 53

									//6 = 102 ou 54

									//7 = 103 ou 55

									//8 = 104 ou 56

									//9 = 105 ou 57

									//tecla == 9 = tab

									valorFinal = valorFinal + mascara.charAt(i + jaTemMascara)  + valor.charAt(i);			

									jaTemMascara = jaTemMascara + 1;	

								}

								else//se não foi digitado um número é retirado o caracter da string

								{

									valorFinal = valorOriginal.substring(0, valorOriginal.length -1);

								}

							}

							else// se não é númerico então pode ser qualuqer caracter

							{

								valorFinal = valorFinal + mascara.charAt(i + jaTemMascara)  + valor.charAt(i);			

								jaTemMascara = jaTemMascara + 1;

							}							

						}	

					}//fim da verificação da máscara	

				}	

			}

			else

			{

				valorFinal = valorOriginal.substring(0, mascara.length);	

			}//final da verificação do tamanha máximo da string

		}

		else

		{

			//valorFinal = valorOriginal.substring(0, valorOriginal.length -1)

			valorFinal = valorOriginal.substring(0, valorOriginal.length);		

		}//final da verificação do backspace		

	}


	document.getElementById(id).value = valorFinal;

	//faz as verificações para que seja feito o tab automático

	if(mascara != "money")

	{

		

	}

}





// ---
//
// ---
// onblur="vld_Data(this);" 
// ---

function vld_Data( obj )
{

     if (obj.value != "")
	 {

         hoje 		= new Date();
         anoAtual 	= hoje.getFullYear();
         barras 	= obj.value.split("/");

         dia = barras[0];
         mes = barras[1];
         ano = barras[2];

         resultado = ValidarData( dia , mes , ano );

         if ( !resultado )
		 {

              alert( "Data invalida ! \nInforme DD/MM/AAAA");

              obj.value = "";

              obj.focus();

			return false;

         } 
		 else 
		 {
		      return true;
	     }

     }

}



// ---
//
// ---
//Funcionalidade:	Valida a Data retornando True se for uma Data 
//					válida e False se não for.
//					Antes de se usar esta função deve-se garantir que os parâmetros
//					passados sejam numéricos e inteiros.
// PARÂMETROS: 
//		Dia = Dia da Data(caracteres numericos), 
//		Mes = Mes da Data(caracteres numericos), 
//		Ano = Ano da Data(caracteres numericos)
// ---

function ValidarData( dia , mes , ano )
{	
	var v_dia;
	var v_mes;
	var v_ano;

	v_dia = dia;
	v_mes = mes;
	v_ano = ano;

	if (v_dia.length < 2)

	{
		return(false);
	}

	if (v_mes.length < 2)
	{
		return(false);
	}
	

	if (v_ano.length < 4)
	{
		return(false);
	}

	if (((v_ano < 1900) || (v_ano > 2079)) && (v_ano.length != 0))
	{
		return(false);
	}

	if (v_dia > 31 || v_dia < 1)
	{
		return(false);
	}

	if (v_mes > 12 || v_mes < 1)
	{
		return(false);
	}

	if (v_dia == "31") 
	{

		if ((v_mes == "04") || (v_mes == "06") || (v_mes == "09") || (v_mes == "11"))
		{
			return(false);
		}

	}

	// Validação de Ano Bissexto

	if (v_mes == "02")
	{

		if (!(v_ano%4)) 
		{

			if (v_dia > 29)
			{
				return(false);
			}

		}
		else if (v_dia > 28)
		{

			return(false);

		}

	}

	
	// o -if- abaixo testa se algum campo foi preenchido e outro deixado em branco deixando a data incompleta

	if (((v_dia != "") || (v_mes != "") || (v_ano != "")) && ((v_dia == "") || (v_mes == "") || (v_ano == "")))
	{
		return(false);
	}

	return(true);

}
