
/************************************************************************************
	Nome: cValidacaoGeral
	//-------------------------------------------------------------------------------
	Objetivo:	classe javascript de validacao geral, possui metodos de validacao geral
				de tamanho, cnpj, cpf, email, etc.
				é instanciada automaticamente para utilizacao
	//-------------------------------------------------------------------------------
	Parâmetros:	
	//-------------------------------------------------------------------------------
	Retornos:	
*************************************************************************************/
function cValidacaoGeral() 
{
	this.testaCampoTamanho = testaCampoTamanho;
	this.testaDataValida = testaDataValida;
	this.testaExtensaoArquivo = testaExtensaoArquivo;
	this.testaCPFValido = testaCPFValido;
	this.testaCNPJValido = testaCNPJValido;
	this.testaEmailValido = testaEmailValido;
	this.testaHoraValida = testaHoraValida;
	this.testaFormatoDecimal = testaFormatoDecimal;
	this.testaTeclaNumerica = testaTeclaNumerica;
}

/************************************************************************************
	Nome: cValidacaoControles
	//-------------------------------------------------------------------------------
	Objetivo:	classe javascript de validação de controles de formularios
				é instanciada automaticamente para utilização
	//-------------------------------------------------------------------------------
	Parâmetros:	
	//-------------------------------------------------------------------------------
	Retornos:	
*************************************************************************************/
function cValidacaoControles() 
{
	this.testaCampoNulo = testaCampoNulo;
	this.testaDropdownSelecionada = testaDropdownSelecionada;
	this.testaCheckboxRadioMarcado = testaCheckboxRadioMarcado;
}

/************************************************************************************
	Nome: cMascara
	//-------------------------------------------------------------------------------
	Objetivo:	classe javascript com metodos de aplicacao de mascara em controles
				é instanciada automaticamente para utilização
	//-------------------------------------------------------------------------------
	Parâmetros:	
	//-------------------------------------------------------------------------------
	Retornos:	
*************************************************************************************/
function cMascara()
{
	this.testaTeclaNumerica = testaTeclaNumerica;
	this.aplicaMascaraCPF = aplicaMascaraCPF;
	this.aplicaMascaraData = aplicaMascaraData;
	this.aplicaMascaraHora = aplicaMascaraHora;
	this.aplicaMascaraCNPJ = aplicaMascaraCNPJ;
	this.aplicaMascaraValor = aplicaMascaraValor;
	this.aplicaMascaraNumerica = aplicaMascaraNumerica;
}

// objetos instanciados automaticamente para utilizacao
var validacaoGeral = new cValidacaoGeral();
var validacaoControles = new cValidacaoControles();
var mascara = new cMascara();

/************************************************************************************
	Nome: testaCampoNulo
	//-------------------------------------------------------------------------------
	Objetivo:	testar se um campo text, textarea ou password está nulo
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objCampo			- referencia ao campo text, textarea ou password
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
									  valor padrão true
	//-------------------------------------------------------------------------------
	Retornos:	true				- o campo está nulo
				false				- o campo não está nulo
*************************************************************************************/
function testaCampoNulo (p_objCampo, p_boolExibeMensagem)
{

	p_boolExibeMensagem = (p_boolExibeMensagem == null) ? true : p_boolExibeMensagem;

	var strDescCampo = p_objCampo.getAttribute('DESCCAMPO');
	var strObrigatorio = p_objCampo.getAttribute('OBRIGATORIO');

	if (p_objCampo.value.length == 0 && strObrigatorio != null)
	{
	
		if (p_boolExibeMensagem == true)
		{
			alert('O campo ' + strDescCampo + ' deve ser informado obrigatoriamente!');
			p_objCampo.focus();
		}
		return true;
	}
	else 
	{
		return false;
	}
}

/************************************************************************************
	Nome: testaDropdownSelecionada 
	//-------------------------------------------------------------------------------
	Objetivo:	testar se uma dropdown está selecionada, e exibe mensagem
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objDropdown		- referencia ao controle de dropdown
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
									  valor padrão true
	//-------------------------------------------------------------------------------
	Retornos:	true			- dropdown possui itens selecionados
				false			- dropdown nao possui 
*************************************************************************************/
function testaDropdownSelecionada (p_objDropdown, p_boolExibeMensagem)
{

	var strDescCampo = p_objDropdown.getAttribute('DESCCAMPO');
	
	var strObrig 	 = p_objDropdown.getAttribute('OBRIGATORIO');

	p_boolExibeMensagem = (p_boolExibeMensagem == null) ? true : p_boolExibeMensagem;

	if (p_objDropdown.options.length > 0)
	{
		if (p_objDropdown.value.length == 0)
		{
			if (p_boolExibeMensagem == true)
			{
				alert('O campo ' + strDescCampo + ' deve ser selecionado obrigatoriamente!');
				p_objDropdown.focus();
			}
			return false;
		} 
		else 
		{
			return true;
		}
	}
}

/************************************************************************************
	Nome: testaCampoTamanho
	//-------------------------------------------------------------------------------
	Objetivo:	testar se a quantidade de caracteres em um campo está entre os 
				limites mínimo e máximo, e exibe mensagem
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objCampo		- referencia ao controle de dropdown
				p_numQtdMin		- Quantidade mínima de caracteres permitidos, se 0, não testa
				p_numQtdMax		- Quantidade máxima de caracteres permitidos, se 0, não testa
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
								
	//-------------------------------------------------------------------------------
	Retornos:	true			- campo com número de caracteres dentro dos limites
				false			- campo com número de caracteres fora dos limites
*************************************************************************************/
function testaCampoTamanho(p_objCampo, p_numQtdMin, p_numQtdMax, p_boolExibeMensagem)
{
	var strDescCampo = p_objCampo.getAttribute('DESCCAMPO');
	
	p_boolExibeMensagem = (p_boolExibeMensagem == null) ? true : p_boolExibeMensagem;

	if (p_numQtdMin > 0 || p_numQtdMax > 0)
	{
		if (p_objCampo.value.length < p_numQtdMin && p_numQtdMin != 0)
		{
			if (p_boolExibeMensagem == true)
			{
				alert('O campo ' + strDescCampo + ' deve ter no mínimo ' + p_numQtdMin + ' caracteres!');
				p_objCampo.focus();
			}
			return false;
			
		}

		if (p_objCampo.value.length > p_numQtdMax && p_numQtdMax != 0)
		{
			if (p_boolExibeMensagem == true)
			{
				alert('O campo ' + strDescCampo + ' deve ter no máximo ' + p_numQtdMax + ' caracteres!');
				p_objCampo.focus();
			}
			return false;

		}
		return true;
	}
}

/************************************************************************************
	Nome: testaCPFValido
	//-------------------------------------------------------------------------------
	Objetivo:	testar se um campo text possui CPF valido
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objCampo			- referencia ao campo text
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
									  valor padrão true
	//-------------------------------------------------------------------------------
	Retornos:	true				- cpf valido
				false				- cpf invalido
*************************************************************************************/
function testaCPFValido (p_objCampo, p_boolExibeMensagem)
{
	p_boolExibeMensagem = (p_boolExibeMensagem == null) ? true : p_boolExibeMensagem;

	var numCPF='';
	var numI;

	for (numI=0; numI < p_objCampo.value.length; numI++)
	{
		if (p_objCampo.value.charCodeAt(numI) >= 48 && p_objCampo.value.charCodeAt(numI) <= 57)
		{
			numCPF += p_objCampo.value.charAt(numI);
		}
	}
	if (numCPF.length > 11 || numCPF == "00000000000" || numCPF == "11111111111" || numCPF == "22222222222" ||	numCPF == "33333333333" || numCPF == "44444444444" || numCPF == "55555555555" || numCPF == "66666666666" || numCPF == "77777777777" ||	numCPF == "88888888888" || numCPF == "99999999999")
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O CPF informado não é valido! Verifique.');
			p_objCampo.focus();
		}	
		return false;
	} 

	var soma = 0;

	for (i=0; i < 9; i ++) 
	{
		soma += parseInt(numCPF.charAt(i)) * (10 - i);
		resto = 11 - (soma % 11);
	}
	
	if (resto == 10 || resto == 11)
	{
		resto = 0;
	}

	if (resto != parseInt(numCPF.charAt(9)))
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O CPF informado não é valido! Verifique.');
			p_objCampo.focus();
		}	
		return false;
	} 

	soma = 0;
	
	for (i = 0; i < 10; i ++)
	{
		soma += parseInt(numCPF.charAt(i)) * (11 - i);
		resto = 11 - (soma % 11);
	}

	if (resto == 10 || resto == 11)
	{
		resto = 0;
	}
	
	if (resto != parseInt(numCPF.charAt(10)))
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O CPF informado não é valido! Verifique.');
			p_objCampo.focus();
		}	
		return false;
	}		

	return true;
 }

/************************************************************************************
	Nome: testaCNPJValido
	//-------------------------------------------------------------------------------
	Objetivo:	testar se um campo text possui CNPJ valido
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objCampo			- referencia ao campo text
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
									  valor padrão true
	//-------------------------------------------------------------------------------
	Retornos:	true				- cnpj valido
				false				- cnpj invalido
*************************************************************************************/
function testaCNPJValido (p_objCampo, p_boolExibeMensagem)
{
	var numI;
	var numCNPJ='';

  	p_boolExibeMensagem = (p_boolExibeMensagem == null) ? true : p_boolExibeMensagem;

	for (numI=0; numI < p_objCampo.value.length; numI++)
	{
		if (p_objCampo.value.charCodeAt(numI) >= 48 && p_objCampo.value.charCodeAt(numI) <= 57)
		{
			numCNPJ += p_objCampo.value.charAt(numI);
		}
	}
  
	var c  = numCNPJ.substr(0,12);
	var dv = numCNPJ.substr(12,2);
	var d1 = 0;
	
	for (i = 0; i < 12; i++)
    {
		d1 += c.charAt(11-i)*(2+(i % 8));
    }
	
	if (d1 == 0) 
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O CNPJ informado não é valido! Verifique.');
			p_objCampo.focus();
		}	
		return false;
	}

	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(0) != d1)
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O CNPJ informado não é valido! Verifique.');
			p_objCampo.focus();
		}	
		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)
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O CNPJ informado não é valido! Verifique.');
			p_objCampo.focus();
		}	
		return false;
	}
  return true;
}

/************************************************************************************
	Nome: testaEmailValido
	//-------------------------------------------------------------------------------
	Objetivo:	testar se um campo email está no formato válido aaaa@bbbbb.ccc
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objCampo			- referencia ao campo text
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
									  valor padrão true
	//-------------------------------------------------------------------------------
	Retornos:	true				- cnpj valido
				false				- cnpj invalido
*************************************************************************************/
function testaEmailValido (p_objCampo, p_boolExibeMensagem)
{ 
	p_boolExibeMensagem = (p_boolExibeMensagem == null) ? true : p_boolExibeMensagem;

	var ponto;
	var arroba = p_objCampo.value.indexOf('@',0);
	var ponto  = p_objCampo.value.indexOf('.',arroba);

 
    if(arroba == -1 )
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O formato do e-mail informado não é valido! Verifique.');
			p_objCampo.focus();
		}	
		return false;
	}   
    
	if(ponto <= arroba)
    {
		if (p_boolExibeMensagem == true)
		{
			alert('O formato do e-mail informado não é valido! Verifique.');
			p_objCampo.focus();
		}	
		return false;
    }
   return true;
}

/************************************************************************************
	Nome: testaCheckboxRadioMarcado
	//-------------------------------------------------------------------------------
	Objetivo:	testar se um input radio ou checkbox esta marcado
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objCampo			- referencia ao campo text
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
									  valor padrão true
	//-------------------------------------------------------------------------------
	Retornos:	true				- checkbox ou radio marcado
				false				- checkbox ou radio nao esta selecionado
*************************************************************************************/
function testaCheckboxRadioMarcado (p_objCampo, p_boolExibeMensagem)
{
	var numI;
	var strDescCampo = p_objCampo.getAttribute('DESCCAMPO');

	p_objCampo = document.getElementsByName(p_objCampo.name);

	p_boolExibeMensagem = (p_boolExibeMensagem == null) ? true : p_boolExibeMensagem;

	for (numI=0; numI < p_objCampo.length; numI++)
	{
		if (p_objCampo[numI].checked == true)
		{
			return true;
		}
	}
	
	if (p_boolExibeMensagem == true)
	{
		alert('O campo ' + strDescCampo + ' deve ser selecionado obrigatoriamente!');
	}
	return false;
	
}


/************************************************************************************
	Nome: testaTeclaNumerica
	//-------------------------------------------------------------------------------
	Objetivo:	testar se uma tecla numérica foi pressionada
	//-------------------------------------------------------------------------------
	Parâmetros:					
	//-------------------------------------------------------------------------------
	Retornos:	true	- tecla numérica pressionada
				false	- tecla não numérica pressionada
*************************************************************************************/
function testaTeclaNumerica(p_numCodTecla)
{
	event.cancelBubble = true;

	var arrTeclasPermitidas = new Array(8,9,13,35,36,37,39,46);

	for (var i=0; i<arrTeclasPermitidas.length; i++)
	{
		if (parseInt(p_numCodTecla) == parseInt(arrTeclasPermitidas[i]))
		{
			return true;
		}
	}

	if (p_numCodTecla > 47 && p_numCodTecla < 58 || (p_numCodTecla >= 96 && p_numCodTecla <= 105) )
	{
		event.returnValue = true;
		return true;
	}
	else 
	{
		event.returnValue = false;
		return false;
	}
}


/************************************************************************************
	Nome: testaDataValida
	//-------------------------------------------------------------------------------
	Objetivo:	testar se uma data está correta
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objCampo			- referencia ao campo text
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
									  valor padrão true
	//-------------------------------------------------------------------------------
	Retornos:	true				- Data válida
				false				- Data inválida
*************************************************************************************/
function testaDataValida(p_objCampo, p_boolExibeMensagem)
{
	var numDia = p_objCampo.value.substr(0,2);
	var numMes = p_objCampo.value.substr(3,2);
	var numAno = p_objCampo.value.substr(6,4);

	var strDescCampo = p_objCampo.getAttribute('DESCCAMPO');

	p_boolExibeMensagem = (p_boolExibeMensagem == null) ? true : p_boolExibeMensagem;

	if ((p_objCampo.value.substr(2,1) != "/") || (p_objCampo.value.substr(5,1) != "/"))
	{
		numDia = "";
		numMes = "";
		numAno = "";
	}

	var arrayDia = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var arrayMes = new Array("01","02","03","04","05","06","07","08","09","10","11","12");
	var inpData = numDia + numMes + numAno;
	var filter=/^[0-9]{2}[0-9]{2}[0-9]{4}$/;
	if (!filter.test(inpData))
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O campo ' + strDescCampo + ' não é válido!');
			p_objCampo.focus();
		}
		return false;
	}

	// validando mes
	filter=/01|02|03|04|05|06|07|08|09|10|11|12/;
	if (! filter.test(numMes))
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O campo ' + strDescCampo + ' não é válido!');
			p_objCampo.focus();
		}
		return false;
	}
	
	// checa o ano bissexto
	var N = Number(numAno);
	if ( ( N%4==0 && N%100 !=0 ) || ( N%400==0 ) )
  	{
	   arrayDia[1]=29;
  	}

	// checando o dia valido para o mes
	for(var ctr=0; ctr<=11; ctr++)
  	{
		if (arrayMes[ctr]==numMes)
   		{
			if (numDia<= arrayDia[ctr] && numDia >0 )
			{
				inpData = numDia + '/' + numMes + '/' + numAno;
				return true;
			}
			else
			{
				if (p_boolExibeMensagem == true)
				{
					alert('O campo ' + strDescCampo + ' não é válido!');
					p_objCampo.focus();
				}
				return false;
			}
   		}
	}
}

/************************************************************************************
	Nome: testaHoraValida
	//-------------------------------------------------------------------------------
	Objetivo:	testar se uma hora está correta
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objCampo			- referencia ao campo text
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
									  valor padrão true
	//-------------------------------------------------------------------------------
	Retornos:	true				- Hora válida
				false				- Hora inválida
*************************************************************************************/
function testaHoraValida(p_objCampo, p_boolExibeMensagem)
{	
	var strDescCampo = p_objCampo.getAttribute('DESCCAMPO');

	p_boolExibeMensagem = (p_boolExibeMensagem == null) ? true : p_boolExibeMensagem;

	var arrHora = p_objCampo.value.split(':');

	if (parseInt(arrHora[0]) < 0 || parseInt(arrHora[0]) > 23)
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O campo ' + strDescCampo + ' não contém uma hora válida!');
			p_objCampo.focus();
		}
		return false;
	}

	if (parseInt(arrHora[1]) < 0 || parseInt(arrHora[1]) > 59)
	{
		if (p_boolExibeMensagem == true)
		{
			alert('O campo ' + strDescCampo + ' não contém um minuto válido!');
			p_objCampo.focus();
		}
		return false;
	}

	return true;

}


/************************************************************************************
	Nome: testaFormatoDecimal
	//-------------------------------------------------------------------------------
	Objetivo:	testar se uma data está correta
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objCampo			- referencia ao campo text
				p_numTamanho		- Número de caracteres do campo
				p_numDecimais		- Número de casas decimais do campo
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
									  valor padrão true
	//-------------------------------------------------------------------------------
	Retornos:	true				- Data válida
				false				- Data inválida
*************************************************************************************/
function testaFormatoDecimal(p_objCampo,p_boolExibeMensagem) 
{

	var valor='';
	var valido = '0123456789';
	var tecla = event.keyCode;
	p_boolExibeMensagem = true
	var strDescCampo = p_objCampo.getAttribute('DESCCAMPO');
	var strTipoCampo = p_objCampo.getAttribute('TIPO');
	var p_numTamanho = strTipoCampo.substring(strTipoCampo.indexOf("(")+1, strTipoCampo.indexOf(","));
	var p_numDecimais = strTipoCampo.substring(strTipoCampo.indexOf(",")+1, strTipoCampo.indexOf(")"));
	
	if (tecla == 13)
	{ 
		return true;
	}
	
	valor = String.fromCharCode(tecla);  
	
	if ((p_objCampo.value.length == 0) || (valor==','))
		{
			p_objCampo.value = '0,';
			if (p_boolExibeMensagem == true)
			{
				alert("1");
				alert('O campo ' + strDescCampo + ' não está no formato correto!');
				p_objCampo.focus();
			}
			return false;
		}
		if ((valor == ',') && (p_objCampo.value.indexOf(valor) != -1))
		{
			if (p_boolExibeMensagem == true)
			{
				alert("2");
				alert('O campo ' + strDescCampo + ' não está no formato correto!');
				p_objCampo.focus();
			}
			return false;
		}
		if (p_objCampo.value.indexOf(',') != -1)
		{
			if (p_objCampo.value.length > p_numTamanho)
			{
				if (p_boolExibeMensagem == true)
				{
					alert("3");
					alert('O campo ' + strDescCampo + ' não está no formato correto!');
					p_objCampo.focus();
				}
				return false;
			}
			var vet = p_objCampo.value.split(',');
			if (vet[0].length >= (p_numTamanho - p_numDecimais) )
			{
				p_objCampo.value += valor
				if (p_boolExibeMensagem == true)
				{
					alert("4");
					alert('O campo ' + strDescCampo + ' não está no formato correto!');
					p_objCampo.focus();
				}
				return false;
			}
			if (vet[1].length >= p_numDecimais)
			{
				if (vet[0].length == (p_numTamanho - p_numDecimais))
				{
					if (p_boolExibeMensagem == true)
					{
						alert("5");
						alert('O campo ' + strDescCampo + ' não está no formato correto!');
						p_objCampo.focus();
					}
					return false;
				}
				else
				{
					if (p_boolExibeMensagem == true)
					{
					alert("6");
						alert('O campo ' + strDescCampo + ' não está no formato correto!');
						p_objCampo.focus();
					}
					return false;
				}
			}
		}
		else
		{
			if (p_objCampo.value.length >= (p_numTamanho - p_numDecimais))
			{
				if (valor != ',')
				{
					p_objCampo.value += ',' + valor;
					if (p_boolExibeMensagem == true)
					{
						alert("7");
						alert('O campo ' + strDescCampo + ' não está no formato correto!');
						p_objCampo.focus();
					}
					return false;
				} 
			}
		}
}


/************************************************************************************
	Nome: testaExtensaoArquivo
	//-------------------------------------------------------------------------------
	Objetivo:	testar se a extensão de um arquivo está correta
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objCampo			- referencia ao campo text
				p_ListaExtensoes    - lista de extensões válidas para o arquivo selecionado
				p_boolExibeMensagem - true para exibir alert ou false só para testar selecao
									  valor padrão true
	//-------------------------------------------------------------------------------
	Retornos:	true				- Extensão válida
				false				- Extensão inválida
*************************************************************************************/
function testaExtensaoArquivo(p_objCampo, p_ListaExtensoes, p_boolExibeMensagem)
{
	var strArquivo = p_objCampo.value
	var strExtensao, vext   
	var pode = false		
	var strDescCampo = p_objCampo.getAttribute('DESCCAMPO');

	if (strArquivo.length > 0)
    {
		strExtensao = strArquivo.substring(strArquivo.length, strArquivo.length-3)
		vext = p_ListaExtensoes.split(",")			
        for (i=0; i < vext.length; i++)              
		{
			if (vext[i] == strExtensao)
			{
				pode = true;
			}
		}
	}
	else
	{ 
		if (p_boolExibeMensagem == true)
		{
			alert('A extensão do arquivo ' + strArquivo + ' no campo ' + strDescCampo + ' não é valida!');
			p_objCampo.focus();
		}
		return false;
	}				
	if (pode)
		return true;
    else
	{		
		if (p_boolExibeMensagem == true)
		{
			alert('A extensão do arquivo ' + strArquivo + ' no campo ' + strDescCampo + ' não é valida!');
			p_objCampo.focus();
		}
	    return false; 		
    }

}

/************************************************************************************
	Nome: aplicaMascaraCPF
	//-------------------------------------------------------------------------------
	Objetivo:	aplicar mascara de cpf em um campo
	//-------------------------------------------------------------------------------
	Parâmetros:	
	//-------------------------------------------------------------------------------
	Retornos:	
*************************************************************************************/
function aplicaMascaraCPF(){

	var numCodTecla = event.keyCode;
	
	var objCampo = event.srcElement;

	var strValor = new String(objCampo.value);

	//if (testaTeclaNumerica(numCodTecla)==false) { return ; }

	strValor = strValor.replace(".", "");
	strValor = strValor.replace(".", "");
	strValor = strValor.replace("-", "");
	
	numTamanho = strValor.length + 1;
	
	if (numCodTecla != 9 && numCodTecla != 8 && numCodTecla != 37 && numCodTecla != 46 && numCodTecla != 39)
	{
		if (numTamanho > 3 && numTamanho < 7)
			objCampo.value = strValor.substr(0, 3) + '.' + strValor.substr(3, numTamanho);
		if (numTamanho >= 7 && numTamanho <10)
			objCampo.value = strValor.substr(0,3) + '.' + strValor.substr(3,3) + '.' + strValor.substr(6,numTamanho-6);
		if (numTamanho >= 10 && numTamanho < 12)
			objCampo.value = strValor.substr(0,3) + '.' + strValor.substr(3,3) + '.' + strValor.substr(6,3) + '-' + strValor.substr(9,numTamanho-9);
	}
}

/************************************************************************************
	Nome: aplicaMascaraData
	//-------------------------------------------------------------------------------
	Objetivo:	aplicar mascara de data em um campo
	//-------------------------------------------------------------------------------
	Parâmetros:	
	//-------------------------------------------------------------------------------
	Retornos:	
*************************************************************************************/
function aplicaMascaraData()
{

	var numCodTecla = event.keyCode;
	var objCampo = event.srcElement;

	if (testaTeclaNumerica(numCodTecla)==false) { return; }

	var strValor = new String(objCampo.value);

	strValor = strValor.replace("/", "");
	strValor = strValor.replace("/", "");
	numTamanho = strValor.length + 1;

	if (numCodTecla != 9 && numCodTecla != 8 && numCodTecla != 37 && numCodTecla != 46 && numCodTecla != 39)
	{
		if (numTamanho > 2 && numTamanho < 5)
		{
			objCampo.value = strValor.substr(0, 2) + '/' + strValor.substr(2, numTamanho);
		}
		if (numTamanho >= 5 && numTamanho <=10)
		{
			objCampo.value = strValor.substr(0,2) + '/' + strValor.substr(2,2) + '/' + strValor.substr(4,4);
		}
	}
}


/************************************************************************************
	Nome: aplicaMascaraHora
	//-------------------------------------------------------------------------------
	Objetivo:	aplicar mascara de hora em um campo
	//-------------------------------------------------------------------------------
	Parâmetros:	
	//-------------------------------------------------------------------------------
	Retornos:	
*************************************************************************************/
function aplicaMascaraHora(){

	var numCodTecla = event.keyCode;
	var objCampo = event.srcElement;

	if (testaTeclaNumerica(numCodTecla)==false) { return; }

	var strValor = new String(objCampo.value);
	strValor = strValor.replace(":", "");
	strValor = strValor.replace(":", "");

	numTamanho = strValor.length + 1;

	if (numCodTecla != 9 && numCodTecla != 8 && numCodTecla != 37 && numCodTecla != 46 && numCodTecla != 39)
	{
		if (numTamanho > 2 && numTamanho < 5)
			objCampo.value = strValor.substr(0, 2) + ':' + strValor.substr(2, numTamanho);
	}
}

/************************************************************************************
	Nome: aplicaMascaraCNPJ
	//-------------------------------------------------------------------------------
	Objetivo:	aplicar mascara de CNPJ em um campo
	//-------------------------------------------------------------------------------
	Parâmetros:	
	//-------------------------------------------------------------------------------
	Retornos:	
*************************************************************************************/
function aplicaMascaraCNPJ(){

	var numCodTecla = event.keyCode;
	var objCampo = event.srcElement;
	var strValor = new String(objCampo.value);

	if (testaTeclaNumerica(numCodTecla)==false) { return; }

	strValor = strValor.replace(".", "");
	strValor = strValor.replace(".", "");
	strValor = strValor.replace("/", "");
	strValor = strValor.replace("-", "");

	numTamanho = strValor.length + 1 ;
	
	if (numCodTecla != 9 && numCodTecla != 8 && numCodTecla != 37 && numCodTecla != 46 && numCodTecla != 39)
	{
		if (numTamanho > 2 && numTamanho < 6)
			objCampo.value = strValor.substr(0, 2) + '.' + strValor.substr(2, numTamanho);
		if (numTamanho >= 6 && numTamanho < 9)
			objCampo.value = strValor.substr(0,2) + '.' + strValor.substr(2,3) + '.' + strValor.substr(5,numTamanho-5);
		if (numTamanho >= 9 && numTamanho < 13)
			objCampo.value = strValor.substr(0,2) + '.' + strValor.substr(2,3) + '.' + strValor.substr(5,3) + '/' + strValor.substr(8,numTamanho-8);
		if (numTamanho >= 13 && numTamanho < 15)
			objCampo.value = strValor.substr(0,2) + '.' + strValor.substr(2,3) + '.' + strValor.substr(5,3) + '/' + strValor.substr(8,4)+ '-' + strValor.substr(12,numTamanho-12);
	}
}


/************************************************************************************
	Nome: aplicaMascaraValor
	//-------------------------------------------------------------------------------
	Objetivo:	aplicar mascara de valor em um campo
	//-------------------------------------------------------------------------------
	Parâmetros:	
	//-------------------------------------------------------------------------------
	Retornos: NAO ESTA SENDO UTILIZADO	
*************************************************************************************/

function aplicaMascaraValor() {
	
	var tecla = event.keyCode;
	var objCampo = event.srcElement;
	var vr = objCampo.value;
	var strDescCampo = objCampo.getAttribute('DESCCAMPO');
	var strTipoCampo = objCampo.getAttribute('TIPO');
	var tammax = strTipoCampo.substring(strTipoCampo.indexOf("(")+1, strTipoCampo.indexOf(")"));

	if (testaTeclaNumerica(tecla)==false)	{ return; }
	
	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 = tam - 1 ; }
		
	if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ){
		if ( tam <= 2 ){ 
	 		objCampo.value = vr ; }
		
	 	if ( (tam > 2) && (tam <= 5) ){
	 		objCampo.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ) ; }
	 	if ( (tam >= 6) && (tam <= 8) ){
	 		objCampo.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
	 	if ( (tam >= 9) && (tam <= 11) ){
	 		objCampo.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) ){
	 		objCampo.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) ){
		//	objCampo.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 ) ;}
	}
	
}


/************************************************************************************
	Nome: aplicaMascaraNumerica
	//-------------------------------------------------------------------------------
	Objetivo:	aplicar mascara numerica
	//-------------------------------------------------------------------------------
	Parâmetros:	
	//-------------------------------------------------------------------------------
	Retornos:	
*************************************************************************************/
function aplicaMascaraNumerica() 
{
	var valor='';
	var objCampo = event.srcElement;
	var numCodTecla = event.keyCode;

	if (testaTeclaNumerica(numCodTecla)==false)	{ return; }

	var strDescCampo = objCampo.getAttribute('DESCCAMPO');

	var strTipoCampo = objCampo.getAttribute('TIPO');
	
	var numTamanho = strTipoCampo.substring(strTipoCampo.indexOf("(")+1, strTipoCampo.indexOf(","));
	var numDecimais = strTipoCampo.substring(strTipoCampo.indexOf(",")+1, strTipoCampo.indexOf(")"));

	if (numCodTecla==8||numCodTecla==9||numCodTecla==13||numCodTecla==35||numCodTecla==36||numCodTecla==37||numCodTecla==39||numCodTecla==46){return true;}
	
	valor = String.fromCharCode(numCodTecla);  
	
	if ((objCampo.value.length == 0) && (valor==','))
	{
		objCampo.value = '0,';
		return false;
	}

	if ((valor == ',') && (objCampo.value.indexOf(valor) != -1)){ return false; }

	if (objCampo.value.indexOf(',') != -1)
	{
		if (objCampo.value.length > numTamanho)	{ return false;	}
		
		var vet = objCampo.value.split(',');
		if (vet[0].length >= (numTamanho - numDecimais) )
		{
			objCampo.value;
			return true;
		}
		
		if (vet[1].length >= numDecimais)
		{
			if (vet[0].length == (numTamanho - numDecimais))
			{
				return false;
			}
			else
			{
				return false;
			}
		}
	}
	else
	{
		if (objCampo.value.length >= (numTamanho - numDecimais))
		{
			if (valor != ',')
			{	
				objCampo.value += ',';
				return true;
			} 
		}
	}
}



/************************************************************************************
	Nome: validaFormulario
	//-------------------------------------------------------------------------------
	Objetivo:	validar campos obrigatorios e o conteudos destes campos em um formulario
				atraves da utilizacao de tags customizadas
	//-------------------------------------------------------------------------------
	Parâmetros:	p_objForm			- referencia ao formulario
	//-------------------------------------------------------------------------------
	Retornos:	true	- caso a validação esteja ok
				false	- caso o preenchimento ou seleção de um campo nao esteja correto
*************************************************************************************/
function validaFormulario(p_objForm)
{
	var i;

	for (i=0; i<p_objForm.elements.length; i++)
	{	
		var objCampo = p_objForm.elements[i];

		var strTipoCampo = new String(objCampo.getAttribute('TIPO'));
		
		var strObrigatorio = (objCampo.getAttribute('OBRIGATORIO'));
		
		
		if (strObrigatorio != null)
		{
			var strTipoControle = new String(objCampo.type.toUpperCase());
			
			if (strTipoControle == 'TEXT' || strTipoControle == 'TEXTAREA' || strTipoControle == 'PASSWORD')
			{
				if (validacaoControles.testaCampoNulo(objCampo)==true) { return false; }
			}
			
			if (strTipoControle == 'CHECKBOX' || strTipoControle == 'RADIO')
			{
				if (validacaoControles.testaCheckboxRadioMarcado(objCampo)==false) { return false; }
			}
			
			if (strTipoControle == 'SELECT-ONE')
			{
				if (validacaoControles.testaDropdownSelecionada(objCampo, true)==false) { return false; }
			}
		}
		
		if (strTipoCampo.indexOf('VALOR') != -1)
		{
			strTipoCampo = 'VALOR';
		}
		
		if (strTipoCampo == 'TEXTO')
		{
			var numQtdMinima = 0;
			var numQtdMaxima = 0;

			if (objCampo.getAttribute('QTDMINIMA') != null)
			{
				numQtdMinima = objCampo.getAttribute('QTDMINIMA')
			}

			if (objCampo.getAttribute('QTDMAXIMA') != null)
			{
				numQtdMaxima = objCampo.getAttribute('QTDMAXIMA')
			}

			if (numQtdMinima != 0 || numQtdMaxima != 0)
			{
				if (validacaoGeral.testaCampoTamanho(objCampo, numQtdMinima, numQtdMaxima) == false) 
				{ 
					return false; 
				}
			}
		}

		if (strTipoCampo == 'CPF') 
		{
			if (objCampo.value.length > 0)
			{
				if (validacaoGeral.testaCPFValido(objCampo)==false) { return false; }
			}
		}
		
		if (strTipoCampo == 'CNPJ')
		{
			if (objCampo.value.length > 0)
			{
				if (validacaoGeral.testaCNPJValido(objCampo)==false) { return false; }
			}
		}
			
		if (strTipoCampo == 'EMAIL')
		{
			if (objCampo.value.length > 0)
			{
				if (validacaoGeral.testaEmailValido(objCampo)==false) { return false; }
			}
		}

		if (strTipoCampo == 'DATA')
		{	
			if (objCampo.value.length > 0)
			{
				if (validacaoGeral.testaDataValida(objCampo)==false) { return false; }
			}
		}

		if (strTipoCampo == 'HORA')
		{
			if (objCampo.value.length > 0)
			{
				if (validacaoGeral.testaHoraValida(objCampo)==false) { return false; }
			}
		}

	}

	return true; 
}

/************************************************************************************
	Nome: inicializaFormulario
	//-------------------------------------------------------------------------------
	Objetivo:	verificar a atributo customizado TIPO em todos os campos de todos os
				formularios em uma pagina, atribuindo funcoes de mascara para os campos
	//-------------------------------------------------------------------------------
	Parâmetros:	
	//-------------------------------------------------------------------------------
	Retornos:	
*************************************************************************************/
function inicializaFormulario() 
{
	var i, j;
	
	for (i=0; i < document.forms.length; i++)
	{
		for (j=0; j < document.forms[i].elements.length; j++)
		{
			var objCampo = document.forms[i].elements[j];
			
			strTipoCampo = objCampo.getAttribute('TIPO');

			if (strTipoCampo != null)
			{
				if (strTipoCampo.indexOf('NUMERICO') != -1)
				{
					strTipoCampo = 'NUMERICO';
				}
				if (strTipoCampo.indexOf('VALOR') != -1)
				{
					strTipoCampo = 'VALOR';
				}

				switch (strTipoCampo.toUpperCase())
				{
					case 'TEXTO' : 
						if (objCampo.getAttribute('QTDMAXIMA') != null && (strTipoCampo == 'PASSWORD' || strTipoCampo == 'TEXT')) 
						{
							objCampo.maxLength = objCampo.getAttribute('QTDMAXIMA');
						}
						break;
													
					case 'CPF' : 
						objCampo.size = 14;
						objCampo.maxLength = 14;
						objCampo.onkeydown = mascara.aplicaMascaraCPF;
						break;
						
					case 'CNPJ' : 
						objCampo.size = 18;
						objCampo.maxLength = 18;
						objCampo.onkeydown = mascara.aplicaMascaraCNPJ;
						break;
						
					//case 'EMAIL' : 
					//	break;

					case 'NUMERICO' :
						strTipoCampo = objCampo.getAttribute('TIPO');
						
						var numTamanho = strTipoCampo.substring(strTipoCampo.indexOf("(")+1, strTipoCampo.indexOf(","));
						var numDecimais = strTipoCampo.substring(strTipoCampo.indexOf(",")+1, strTipoCampo.indexOf(")"));
						if (parseInt(numDecimais) > 0)
						{
							numTamanho = parseInt(numTamanho) + 1
						}
						
						objCampo.size = numTamanho;
						objCampo.maxLength = numTamanho;
						objCampo.onkeydown = mascara.aplicaMascaraNumerica;
						break;
						
					case 'DATA' : 
						
						objCampo.size = 10;
						objCampo.maxLength = 10;
						objCampo.onkeydown = mascara.aplicaMascaraData;
						break ;

					case 'HORA' : 
						objCampo.size = 5;
						objCampo.maxLength = 5;
						objCampo.onkeydown = mascara.aplicaMascaraHora;
						break ;
					
				case 'VALOR' :
						strTipoCampo = objCampo.getAttribute('TIPO');
						
						var numTamanho = strTipoCampo.substring(strTipoCampo.indexOf("(")+1, strTipoCampo.indexOf(")"));
						if (parseInt(numDecimais) > 0)
						{
							numTamanho = parseInt(numTamanho) + 1
						}
						objCampo.size = numTamanho;
						objCampo.maxLength = numTamanho;
						objCampo.onkeypress = mascara.aplicaMascaraValor;
						break;
					
									
				}
			}
			
		}
	}
}


window.onload = inicializaFormulario; // atribui a funcao inicializa formulario ao evento onload da janela