/* Função que determina um limite ao tamaho de um textarea e atualiza um campo com tamanho restante*/
function limiteTextArea(textArea, idCampoQtd, qtdMax)
{
	valorRestante = qtdMax - textArea.value.length;
	if(valorRestante < 0 )
	{
		textArea.value = textArea.value.substring(0, qtdMax);
	}
	else
	{
		if(document.getElementById(idCampoQtd))
			document.getElementById(idCampoQtd).innerHTML = valorRestante;
	}
}

/* funcao que desabilita campos de formulario pela lista de ids */
function desabilitaCamposPorId(campos)
{
	for(x = 0; x < campos.length; x++)
	{
		if(campos[x])
		{
			campo = document.getElementById(campos[x]);
			if(campo && campo.disabled != null)
				campo.disabled = true;
		}
	}
}

/* funcao que abilita campos de formulario pela lista de ids */
function abilitaCamposPorId(campos)
{
	for(x = 0; x < campos.length; x++)
	{
		if(campos[x])
		{
			campo = document.getElementById(campos[x]);
			if(campo && campo.disabled != null)
				campo.disabled = false;
		}
	}
}

/* funcao que retorna o valor que esta selecionado em um array de radios */
function valorRadios(radios)
{
	for(x = 0; x < radios.length; x++)
	{
		if(radios && radios[x].checked)
			return radios[x].value;
	} 
	return;
}

function formataCampoFormulario(nomeDado, formato, mascara, campo, evento) {
	formataCampoEntrada(nomeDado, formato, mascara, campo, evento);
}

function formataCampoEntrada(nomeDado, formato, mascara, campo, evento)
{
	var tamanhoMaximo = 100;
	if (evento==null)
		evento=window.event;
	var valorCampo="";
	if (campo) {
		if (campo.maxlength)
			tamanhoMaximo=campo.maxlength;
		else
			tamanhoMaximo=campo.size;
		valorCampo=campo.value;
	}
	
	if(formato == "mascara" && mascara) 
	{
		formataMascara(mascara, campo);
		saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
		return true;
	} else {
		if (nomeDado=="agencia" || nomeDado=="conta") {
			formataAgenciaConta(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="data" && formato=="mesAno") {
			formataMesAno(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="data") {
			formataData(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="hora") {
			formataHora(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="cep") { 
			formataCEP(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="valor") {
			formataValor(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="numerico") {
			formataNumerico(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="mesano") {
			formataCEP(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="cgc") {
			formataCgc(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="cpf") {
			formataCPF(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="percentual") {
			formataPercentual(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="telefone") {
			formataTelefone(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		} 
		if (nomeDado=="cartaocredito") {
			formataCartaoCredito(campo);
			saltaCampo(campo,tamanhoMaximo,campo.tabIndex,evento,valorCampo);
			return true;
		}
	}
	return false;
}

function formataMascara(mascara, campo)
{
	var result = "";
	var maskIdx = mascara.length - 1;
	var error = false;
	var valor = campo.value;
	var valorInicial = valor;
	valor = valor.replace(/[^0123456789Xx]/g,'')
	for (var valIdx = valor.length - 1; valIdx >= 0 && maskIdx >= 0; --maskIdx)
	{
		var chr = valor.charAt(valIdx);
		var chrMask = mascara.charAt(maskIdx);
		switch (chrMask)
		{
		case '#':
			if(!(/\d/.test(chr)))
				error = true;
			result = chr + result;
			--valIdx;
			break;
		case '@':
			result = chr + result;
			--valIdx;
			break;
		default:
			result = chrMask + result;
		}
	}
	if (valorInicial != result) {
		campo.value = result;
		campo.style.color = error ? 'red' : '';
	}
	return result;
}
