var ativo = null;

//!----------------------------------------------------
// @function	mostraTipo
// @desc		Exibe uma das áreas de acordo com valor já
//				selecionado: física ou jurídica
// @note		Esta função é executada quando o cadastro gera um erro
//				e pode ser utilizada na alteração de dados
//!----------------------------------------------------
function mostraTipo(operacao) {
	var fisJur = getRadioOptions('cadastro', 'FISJUR');
	var objFisJur = document.cadastro.FISJUR;
	if (fisJur != false) {
		if (fisJur[0].checked) {
			objeto = getDocumentObject("pessoaFisica");
			objeto.style.display = "block";
			ativo = objeto;	
			document.cadastro.elements['CNPJ'].disabled = true;
			document.cadastro.elements['CPF'].disabled = false;			
		} else if (fisJur[1].checked) {
			objeto = getDocumentObject("pessoaJuridica");
			objeto.style.display = "block";
			ativo = objeto;		
			document.cadastro.elements['CPF'].disabled = true;
			document.cadastro.elements['CNPJ'].disabled = false;			
		}
	}
	if ((objFisJur[0].checked || objFisJur[1].checked) && operacao == 'editar') objFisJur[0].disabled = objFisJur[1].disabled = true;
}

//!----------------------------------------------------
// @function	trocaFisicaJuridica
// @desc		Alterna a exibição das camadas com campos
//				relativos a pessoa física e jurídica no
//				cadastro de produtores, técnicos, parcerias, etc...
// @param		campo (FormField object)	Campo radio que seleciona o tipo
//!----------------------------------------------------
function trocaFisicaJuridica(campo) {
	var objeto;
	if (ativo != null) {
		ativo.style.display = "none";
	}
	if (campo.value == 'F') {
		objeto = getDocumentObject("pessoaFisica");
		objeto.style.display = "block";
		ativo = objeto;
		document.cadastro.elements['CNPJ'].disabled = true;
		document.cadastro.elements['CPF'].disabled = false;
		requestFocus("cadastro", "CPF");
	} else if (campo.value == 'J') {
		objeto = getDocumentObject("pessoaJuridica");
		objeto.style.display = "block";
		ativo = objeto;
		document.cadastro.elements['CPF'].disabled = true;
		document.cadastro.elements['CNPJ'].disabled = false;		
		requestFocus("cadastro", "RAZAO_SOCIAL");		
	}
}

//!----------------------------------------------------
// @function	copiaEnderecoFaturamento
// @desc		Copia os dados do endereço de faturamento para
//				o endereço de cobrança - utilizada nos cadastros de
//				pessoa/cliente (produtor, parcerias)
// @return		void
//!----------------------------------------------------
function copiaEnderecoFaturamento() {
	var f = document.forms['cadastro'];
	var fn = new Array('CEP', 'TIPO', 'LOG', 'NRO', 'COMP', 'BAIRRO', 'CAIXA_POSTAL', 'MUNICIPIO', 'UF', 'ID_MUNICIPIO');
	var rd = new Array('CEP', 'LOG', 'NRO', 'COMP', 'BAIRRO', 'CAIXA_POSTAL');
	var ck = f.elements['CARREGA_END'].checked;
	// copia os valores do endereço de faturamento ou seta valor vazio para os mesmos
	for (var i=0; i<fn.length; i++) {
		// id município
		if (i == 9) {
			f.elements['ID_MUNICIPIO_COBRANCA'].value = (ck ? f.elements['ID_MUNICIPIO'].value : '');
		// tipo de logradouro
		} else if (i == 1) {
			if (ck) 
				selectOptionByCaption(f, 'ENDERECO_COB_TIPO', f.elements['ENDERECO_TIPO'].options[f.elements['ENDERECO_TIPO'].selectedIndex].text); 
			else 
				f.elements['ENDERECO_COB_TIPO'].options[0].selected = true;
		// demais campos
		} else {
			eval("f.elements['ENDERECO_COB_" + fn[i] + "'].value = " + (ck ? "f.elements['ENDERECO_" + fn[i] + "'].value;" : "'';"));
		}	
	}
	// marca/desmarca como readonly os campos (exceto MUNICIPIO e UF)
	for (var i=0; i<rd.length; i++) {
		eval("f.elements['ENDERECO_COB_" + rd[i] + "'].readOnly = " + (ck ? "true;" : "false;"));
	}
	requestFocus(f, (ck ? (typeof(f.elements['FONE1_DDD']) != 'undefined' ? 'FONE1_DDD' : 'NOME_CONTATO') : 'ENDERECO_COB_CEP'));
}

//!----------------------------------------------------
// @function	doPessoaSubmit
// @desc		Valida a submissão dos dados de pessoa física ou jurídica no cadastro de uma pessoa (produtor, técnico, parceria, etc...)
// @return		void
//!----------------------------------------------------
function doPessoaSubmit() {
	var fisjur;
	fisjur = getRadioOptions('cadastro', 'FISJUR');
	if (fisjur[0].checked) {
		if (isEmpty("cadastro", "SEXO") || isEmpty("cadastro", "CPF")) {  
			// || isEmpty("cadastro", "RAZAO_COBRANCA") - Retirei esse teste do IF acima pois o campo RAZAO_COBRANCA não é habilitado quando o checkbox PF é marcado. Carlos em 05/01/2007
			alert("Preencha ao menos os campos SEXO, CPF e RAZÃO DE COBRANÇA na área de dados de pessoa física!");
			requestFocus("cadastro", "CPF");
			return false;
		}		
	}
	else if (fisjur[1].checked) {
		if (isEmpty("cadastro", "RAZAO_SOCIAL") || isEmpty("cadastro", "CNPJ")) {
			alert("Preencha ao menos os campos RAZÃO SOCIAL e CNPJ na área de dados de pessoa jurídica!");
			requestFocus("cadastro", "RAZAO_SOCIAL");
			return false;
		}
	}	
	return true;
}

//!----------------------------------------------------
// @function	retornoBuscaCepPessoa
// @desc		Função que trata o retorno da busca por CEP de pessoa utilizando JSRS
// @param		retorno String	Retorno da consulta por CEP
// @return		void
// @note		Esta função aplica no formulário os dados retornados da consulta
//!----------------------------------------------------
function retornoBuscaCepPessoa(retorno) {
	var retSpl;
	var focusField = null;
	var frm = document.cadastro;
	if (retorno != "") {
		retSpl = retorno.split('|');		
		if (retSpl[0] != "") frm.ENDERECO_MUNICIPIO.value = retSpl[0]; else frm.ENDERECO_MUNICIPIO.value = "";
		if (retSpl[1] != "") frm.ENDERECO_UF.value = retSpl[1]; else frm.ENDERECO_UF.value = "";
		if (retSpl[2] != "") selectOptionByCaption('cadastro', 'ENDERECO_TIPO', retSpl[2]);
		else {
			frm.ENDERECO_TIPO.options[0].selected = true; if (!focusField) focusField = 'ENDERECO_TIPO';
		}
		if (retSpl[3] != "") frm.ENDERECO_LOG.value = retSpl[3];
		else {
			frm.ENDERECO_LOG.value = ""; if (!focusField) focusField = 'ENDERECO_LOG';
		}
		if (retSpl[4] != "") frm.ENDERECO_COMP.value = retSpl[4]; else frm.ENDERECO_COMP.value = "";
		if (retSpl[5] != "") frm.ENDERECO_BAIRRO.value = retSpl[5]; else frm.ENDERECO_BAIRRO.value = "";
		if (retSpl[6] != "") frm.ID_MUNICIPIO.value = retSpl[6]; else frm.ID_MUNICIPIO.value = "";
		if (!focusField) focusField = 'ENDERECO_NRO';
		requestFocus('cadastro', focusField);
	} else {
		alert("O CEP informado não está cadastrado!");
		requestFocus("cadastro", "ENDERECO_CEP");
	}
}

//!----------------------------------------------------
// @function	retornoBuscaCepCobranca
// @desc		Função que trata o retorno da busca por CEP de cobrança utilizando JSRS
// @param		retorno String	Retorno da consulta por CEP
// @return		void
// @note		Esta função aplica no formulário os dados retornados da consulta
//!----------------------------------------------------
function retornoBuscaCepCobranca(retorno) {
	var retSpl;
	var focusField = null;
	var frm = document.cadastro;
	if (retorno != "") {
		retSpl = retorno.split('|');
		if (retSpl[0] != "") frm.ENDERECO_COB_MUNICIPIO.value = retSpl[0]; else frm.ENDERECO_COB_MUNICIPIO.value = "";
		if (retSpl[1] != "") frm.ENDERECO_COB_UF.value = retSpl[1]; else frm.ENDERECO_COB_UF.value = "";
		if (retSpl[2] != "") selectOptionByCaption('cadastro', 'ENDERECO_COB_TIPO', retSpl[2]); else frm.ENDERECO_COB_TIPO.options[0].selected = true;
		if (retSpl[3] != "") frm.ENDERECO_COB_LOG.value = retSpl[3]; else frm.ENDERECO_COB_LOG.value = "";
		if (retSpl[4] != "") frm.ENDERECO_COB_COMP.value = retSpl[4]; else frm.ENDERECO_COB_COMP.value = "";
		if (retSpl[5] != "") frm.ENDERECO_COB_BAIRRO.value = retSpl[5]; else frm.ENDERECO_COB_BAIRRO.value = "";
		if (retSpl[6] != "") frm.ID_MUNICIPIO_COBRANCA.value = retSpl[6]; else frm.ID_MUNICIPIO_COBRANCA.value = "";
		requestFocus("cadastro", "ENDERECO_COB_NRO");		
	} else {
		alert("O CEP informado não está cadastrado!");
	}
}

//!----------------------------------------------------
// @function	verificaDataExpiracao
// @desc		Função que verifica a validade da Data de Expiração e não deixa passar se for menor que data atual
// @return		void
//!----------------------------------------------------
function verificaDataExpiracao() {
	if (comparaData(document.cadastro.DATA_EXPIRACAO.value)) return true;
	else {
		alert ('A Data de Expiração não pode ser menor que a data atual!'); return false;
	}
}

//!----------------------------------------------------
// @function	copiaCampoTexto
// @desc		Função que copia o valor de um objeto para o destino
// @param		obj Object	objeto contendo o valor a ser copiado
// @param		destino Object	objeto a receber o valor
// @return		void
//!----------------------------------------------------
function copiaCampoTexto(obj, destino) {
	if (destino) destino.value = obj.value;
}

//!----------------------------------------------------
// @function	desativaCamposEdicao
// @desc		Desativa os campos na edição de acordo com o perfil ativo
// @param		nomePerfilAtivo string Perfil do usuário logado
// @return		void
//!----------------------------------------------------
function desativaCamposEdicao(nomePerfilAtivo) {
	var cadObj = document.cadastro;
	switch(nomePerfilAtivo) {
		case 'PRODUTOR':
			cadObj.elements['CPF'].disabled = true;
			cadObj.elements['CNPJ'].disabled = true;
			break;
		case 'TECNICO':
			cadObj.elements['CPF'].disabled = true;
			cadObj.elements['DATA_EXPIRACAO'].disabled = true;
			cadObj.elements['PERCENTUAL_COMISSAO'].disabled = true;
			break;
		case 'FORNECEDOR':
			cadObj.elements['CNPJ'].disabled = true;
			cadObj.elements['CPF'].disabled = true;
			break;
		case 'ADMINISTRADOR':
		case 'FINANCEIRO':
		case 'AREA_TECNICA':
		case 'GERENTE_TECNICO':
		case 'SUPORTE':
		case 'AGENTE_COMERCIAL':
		case 'OPEC':
		case 'GERENTE_COMERCIAL':
			cadObj.elements['CPF'].disabled = true;
			cadObj.elements['CNPJ'].disabled = true;
			break;
	}

}

//!----------------------------------------------------
// @function	validaFloat
// @desc		Verifica se os campos que necessitam de valor float estão com a máscara correta
// @param		campo		string	Elemento
// @param		label		string	Descrição para o Alert
// @param		esquerda	int		numeros antes do .
// @param		direita		int		numeros depois do .
// @return		void
//!----------------------------------------------------
function validaFloat(campo, label, esquerda, direita) {
	var i = 0;
	esquerda = esquerda - 2;
	if (!eval("/^\\d{1," + esquerda + "}(\\.\\d{0," + direita + "})?$/.test(document.getElementById(campo).value)") && document.getElementById(campo).value != '') {
		alert("A precisão numérica para " + label + " está incorreta\r\nUtilize até " + direita + " casas decimais separadas por ponto (.)");
		document.getElementById(campo).focus();
		return false;
	}
	return true;
}
