/*
|----------------------------------------------------------------------------------------------------|
|  Biblioteca: BuscaCEP()                                                                            |
|   Descrição: Buscador de CEP para funcionar em formulário com campos de endereço.                  |
|  ================================================================================================  |
|      Criado: 20/03/2006 | Por: Mauro Willian                                                       |
|  Modificado: __/__/____ | Por:                                                                     |
|----------------------------------------------------------------------------------------------------|
*/

//##### Variáveis e objeto, globais e privados, da biblioteca #####
var _oAjax			= null;
var _oForm			= null;
var _oCampoCEP		= null;
var _oCampoBairro	= null;
var _oCampoCidade	= null;
var _oCampoEndereco	= null;
var _oCampoEstado	= null;
var _aCidade		= null;
var _varcTipoCidade	= null;
var _iCidadeID		= null;

/*
|----------------------------------------------------------------------------------------------------|
|           Funcao: fctBuscaCEP()                                                                    |
|        Descrição: Dispara a URL que buscará o CEP digitado no campo.                               |
|  ================================================================================================  |
|       Parâmetros: varcPrefixo    = String que contém o prefixo dos campos do formulário.           |
|                   varcSufixo     = String que contém o sufixo dos campos do formulário.            |
|                   varcCidadeTipo = Tipo do retordo da cidade (ID ou Nome).                         |
|                   varcURL        = URL que será usada na busca do CEP.                             |
|                   objeto         = Objeto do tipo FORM.                                            |
|  Tipo de Retorno: void                                                                             |
|----------------------------------------------------------------------------------------------------|
*/
function fctBuscaCEP(varcPrefixo, varcSufixo, varcCidadeTipo, varcURL, objeto)
{
	//Validando os parâmetros
	if (varcPrefixo == null)
		varcPrefixo	= '';
	if (varcSufixo == null)
		varcSufixo	= '';
	if ((varcCidadeTipo == null) || (varcCidadeTipo == ''))
		varcCidadeTipo	= 'nome';
	if ((varcURL == null) || (varcURL == ''))
	{
		alert('URL não informada');
		return;
	}
	
	_varcTipoCidade	= varcCidadeTipo;
	
	if (_oForm == null)
		_oForm	= _RecuperarForm(objeto);
	
	//Recuperando os campos do formulário
	_InstanciarCampos(varcPrefixo, varcSufixo);
	
	if (_oCampoCEP.value.length == 8)
	{
		//Limpando os campos
		_LimparCampos();
		//Desabilitando os campos
		_MudarStatusCampos(1);
		
		//Instanciando o objeto Ajax
		_oAjax	= new Ajax();
		//Configurando o objeto Ajax
		_oAjax.oParametros.Adicionar(new Parametro("varcCidadeTipo", _varcTipoCidade.toLowerCase()));
		_oAjax.oParametros.Adicionar(new Parametro("cep", _oCampoCEP.value));
		_oAjax.url			= varcURL;
		_oAjax.metodo 		= "POST";
		_oAjax.callBack		= _CallBackCEP;
		//_oAjax.Loading	= "imgLoadingFormPrincipal";
		_oAjax.Enviar();
	}
}

/*
|----------------------------------------------------------------------------------------------------|
|           Função: BuscarCidade()                                                                   |
|        Descrição: Dispara a URL que buscará o CEP digitado no campo.                               |
|  ================================================================================================  |
|       Parâmetros: iEstadoID      = ID do estado para listar as cidades.                            |
|                   varcPrefixo    = String que contém o prefixo dos campos do formulário.           |
|                   varcSufixo     = String que contém o sufixo dos campos do formulário.            |
|                   varcCidadeTipo = Tipo do retordo da cidade (ID ou Nome).                         |
|                   objeto         = Objeto do tipo FORM.                                            |
|  Tipo de Retorno: void                                                                             |
|----------------------------------------------------------------------------------------------------|
*/
function fctBuscarCidadeFilial(iEstadoID, varcPrefixo, varcSufixo, varcCidadeTipo, objeto)
{
	_varcTipoCidade	= varcCidadeTipo;
    _oCampoCidadeFilial = document.getElementById("inteFiliaisCidadeID");
	//Verificando se o campo cidade é um objeto
	if (_oCampoCidadeFilial == null)
	{
		if (_oForm == null)
			_oForm	= _RecuperarForm(objeto);
		
		_InstanciarCampos(varcPrefixo, varcSufixo);
	}
	
	//Limpando o campo da cidade
	for (var i = _oCampoCidadeFilial.length; i > 0; i--)
	{
		_oCampoCidadeFilial.options[0]	= null;
	}
	//Verificando se algum estado foi selecionado
	if (parseInt(iEstadoID,10) == 0 || parseInt(iEstadoID,10) == 1) {
		_oCampoCidadeFilial.options[0]	= new Option('Selecione um Estado',0);
		return;
	}

	//Instanciando o objeto Ajax
	if (_oAjax == null)
		_oAjax	= new Ajax();
	//Configurando o objeto Ajax
	_oAjax.oParametros.Adicionar(new Parametro("inteLocalidadeEstadoID", iEstadoID));
	_oAjax.url			= "http_actions/act_listar_cidades.asp";
	_oAjax.metodo 	= "POST";
	_oAjax.callBack	= _CallBackCidadeFilial;
	//_oAjax.Loading	= "imgLoadingFormPrincipal";
	_oAjax.Enviar();
}

/*
|----------------------------------------------------------------------------------------------------|
|           Função: _CallBackCidade()                                                                |
|        Descrição: Função que tratará os dados retornados na requisição AJAX.                       |
|  ================================================================================================  |
|       Parâmetros: Nenhum                                                                           |
|  Tipo de Retorno: void                                                                             |
|----------------------------------------------------------------------------------------------------|
*/
function _CallBackCidadeFilial()
{
	//Verificando o status da página
	if (_oAjax.VerificarStatus() == 4)
	{
	    _oCampoCidadeFilial = document.getElementById("inteFiliaisCidadeID");
		
		//Verificando se a transferencia foi realizada com sucesso
		if (_oAjax.oStatus.numero == 200)
		{
			//Recuperando o resultado como JSON
			
			_aCidade	= eval(_oAjax.getText);
			
			//Populando o campo de cidades
			_oCampoCidadeFilial.options[0]	= new Option('Selecione um Estado',0);
			for (var i = 0; i < _aCidade.length; i += 2)
			{
				_oCampoCidadeFilial.options[_oCampoCidadeFilial.options.length]	= new Option(_aCidade[i+1], unescape(_aCidade[i]));
				_oCampoCidadeFilial.options[_oCampoCidadeFilial.options.length-1].selected	= (parseInt(_oCampoCidadeFilial.options[_oCampoCidadeFilial.options.length-1].value, 10) == parseInt(_iCidadeID, 10)) ? true : false;
			}
		}
	}
}

/*
|----------------------------------------------------------------------------------------------------|
|           Função: BuscarCidade()                                                                   |
|        Descrição: Dispara a URL que buscará o CEP digitado no campo.                               |
|  ================================================================================================  |
|       Parâmetros: iEstadoID      = ID do estado para listar as cidades.                            |
|                   varcPrefixo    = String que contém o prefixo dos campos do formulário.           |
|                   varcSufixo     = String que contém o sufixo dos campos do formulário.            |
|                   varcCidadeTipo = Tipo do retordo da cidade (ID ou Nome).                         |
|                   objeto         = Objeto do tipo FORM.                                            |
|  Tipo de Retorno: void                                                                             |
|----------------------------------------------------------------------------------------------------|
*/
function fctBuscarCidade(iEstadoID, varcPrefixo, varcSufixo, varcCidadeTipo, objeto)
{
	_varcTipoCidade	= varcCidadeTipo;

	//Verificando se o campo cidade é um objeto
	if (_oCampoCidade == null)
	{
		if (_oForm == null)
			_oForm	= _RecuperarForm(objeto);
		
		_InstanciarCampos(varcPrefixo, varcSufixo);
	}
	
	//Limpando o campo da cidade
	for (var i = _oCampoCidade.length; i > 0; i--)
	{
		_oCampoCidade.options[0]	= null;
	}
	//Verificando se algum estado foi selecionado
	if (parseInt(iEstadoID,10) == 0 || parseInt(iEstadoID,10) == 1) {
		_oCampoCidade.options[0]	= new Option('Selecione um Estado',0);
		return;
	}
	//Desabilitando os campos
	_MudarStatusCampos(2);

	//Instanciando o objeto Ajax
	if (_oAjax == null)
		_oAjax	= new Ajax();
	//Configurando o objeto Ajax
	_oAjax.oParametros.Adicionar(new Parametro("inteLocalidadeEstadoID", iEstadoID));
	_oAjax.url			= "http_actions/act_listar_cidades.asp";
	_oAjax.metodo 	= "POST";
	_oAjax.callBack	= _CallBackCidade;
	//_oAjax.Loading	= "imgLoadingFormPrincipal";
	_oAjax.Enviar();
}

//##### Funções CallBack #####

/*
|----------------------------------------------------------------------------------------------------|
|           Função: _CallBackCEP()                                                                   |
|        Descrição: Função que tratará os dados retornados na requisição AJAX.                       |
|  ================================================================================================  |
|       Parâmetros: Nenhum                                                                           |
|  Tipo de Retorno: void                                                                             |
|----------------------------------------------------------------------------------------------------|
*/
function _CallBackCEP()
{
	//Verificando o status da página
	if (_oAjax.VerificarStatus() == 4)
	{
		//Habilitando os campos
		_MudarStatusCampos(1);
		
		//Verificando se a transferencia foi realizada com sucesso
		if (_oAjax.oStatus.numero == 200)
		{
			//Recuperando o resultado como JSON
			var aValores	= eval(_oAjax.getText);
			var varcErro	= unescape(aValores[5]);
			var varcMsg		= 'Nenhum endereço correspondente ao CEP '+ _oCampoCEP.value +' foi encontrado.';
			
			if (varcErro.length > 0)
			{
				alert(varcMsg);
				return;
			}
			
			//Populando os campos do tipo texto
			_oCampoEndereco.value	= unescape(aValores[0]);
			_oCampoBairro.value		= unescape(aValores[1]);
						
			if (_varcTipoCidade.toLowerCase() == 'id')
			{
				_iCidadeID	= aValores[2]
				fctBuscarCidade(aValores[3]);
			}
			else
			{
				_oCampoCidade.value	= aValores[2];
			}
			//Selecionando o estado
			for (var i = 0; i < _oCampoEstado.options.length; i++) {
				_oCampoEstado.options[i].selected = (parseInt(_oCampoEstado.options[i].value, 10) == parseInt(aValores[3], 10)) ? true : false;
			}
		}
	}
}

/*
|----------------------------------------------------------------------------------------------------|
|           Função: _CallBackCidade()                                                                |
|        Descrição: Função que tratará os dados retornados na requisição AJAX.                       |
|  ================================================================================================  |
|       Parâmetros: Nenhum                                                                           |
|  Tipo de Retorno: void                                                                             |
|----------------------------------------------------------------------------------------------------|
*/
function _CallBackCidade()
{
	//Verificando o status da página
	if (_oAjax.VerificarStatus() == 4)
	{
	    
		//Habilitando os campos
		_MudarStatusCampos(2);
		
		//Verificando se a transferencia foi realizada com sucesso
		if (_oAjax.oStatus.numero == 200)
		{
			//Recuperando o resultado como JSON
			
			_aCidade	= eval(_oAjax.getText);
			
			//Populando o campo de cidades
			_oCampoCidade.options[0]	= new Option('Selecione um Estado',0);
			for (var i = 0; i < _aCidade.length; i += 2)
			{
				_oCampoCidade.options[_oCampoCidade.options.length]	= new Option(_aCidade[i+1], unescape(_aCidade[i]));
				_oCampoCidade.options[_oCampoCidade.options.length-1].selected	= (parseInt(_oCampoCidade.options[_oCampoCidade.options.length-1].value, 10) == parseInt(_iCidadeID, 10)) ? true : false;
			}
		}
	}
}

//##### Funções Auxiliares #####

/*
|----------------------------------------------------------------------------------------------------|
|           Funcao: _MudarStatusCampos()                                                             |
|        Descrição: Habilita ou desabilita os campos de acordo com o estado atual dos mesmos.        |
|  ================================================================================================  |
|       Parâmetros: inteTipoAcao = Ação indicando se é cidade ou cep.                                |
|  Tipo de Retorno: void                                                                             |
|----------------------------------------------------------------------------------------------------|
*/
function _MudarStatusCampos(inteTipoAcao)
{
	if (inteTipoAcao == 1)
	{
		_oCampoCEP.disabled				= (_oCampoCEP.disabled) ? false : true;
		_oCampoBairro.disabled		= (_oCampoBairro.disabled) ? false : true;
		_oCampoCidade.disabled		= (_oCampoCidade.disabled) ? false : true;
		_oCampoEndereco.disabled	= (_oCampoEndereco.disabled) ? false : true;
		_oCampoEstado.disabled		= (_oCampoEstado.disabled) ? false : true;
	}
	else
	{
		_oCampoCidade.disabled		= (_oCampoCidade.disabled) ? false : true;
		_oCampoEstado.disabled		= (_oCampoEstado.disabled) ? false : true;
	}
}

/*
|----------------------------------------------------------------------------------------------------|
|           Função: _LimparCampos()                                                                  |
|        Descrição: Limpa os valores dos campos.                                                     |
|  ================================================================================================  |
|       Parâmetros: Nenhum                                                                           |
|  Tipo de Retorno: void                                                                             |
|----------------------------------------------------------------------------------------------------|
*/
function _LimparCampos()
{
	_oCampoBairro.value		= '';
	_oCampoCidade.value		= '';
	_oCampoEndereco.value	= '';
	_oCampoEstado.value		= '';
}

/*
|----------------------------------------------------------------------------------------------------|
|           Função: _RecuperarForm()                                                                 |
|        Descrição: Retorna o objeto form do formulário atual.                                       |
|  ================================================================================================  |
|       Parâmetros: Nenhum                                                                           |
|  Tipo de Retorno: form                                                                             |
|----------------------------------------------------------------------------------------------------|
*/
function _RecuperarForm(obje)
{
	if (obje.tagName.toLowerCase() == 'form')
		return obje;
	else
	{
		var _formulario	= obje.parentNode;
		
		if (_formulario.tagName.toLowerCase() == 'form')
			return _formulario;
		else
			_formulario	= _RecuperarForm(_formulario);
	}
}

/*
|----------------------------------------------------------------------------------------------------|
|           Função: _InstanciarCampos()                                                              |
|        Descrição: Instancia os campos de endereço do formulário.                                   |
|  ================================================================================================  |
|       Parâmetros: Nenhum                                                                           |
|  Tipo de Retorno: void                                                                             |
|----------------------------------------------------------------------------------------------------|
*/
function _InstanciarCampos(varcPrefixo, varcSufixo)
{
	//_oCampoCEP			= eval('oForm.varc'+ varcPrefixo +'CEP'+ varcSufixo);
	_oCampoCEP			= document.getElementById('varc'+ varcPrefixo +'CEP'+ varcSufixo);
	//_oCampoBairro		= eval('oForm.varc'+ varcPrefixo +'Bairro'+ varcSufixo);
	_oCampoBairro		= document.getElementById('varc'+ varcPrefixo +'Bairro'+ varcSufixo);
	//_oCampoCidade		= (_varcTipoCidade.toLowerCase() == 'id') ? eval('oForm.inte'+ varcPrefixo +'CidadeID'+ varcSufixo) : eval('oForm.varc'+ varcPrefixo +'Cidade'+ varcSufixo);
	_oCampoCidade		= (_varcTipoCidade.toLowerCase() == 'id') ? document.getElementById('inte'+ varcPrefixo +'CidadeID'+ varcSufixo) : document.getElementById('varc'+ varcPrefixo +'Cidade'+ varcSufixo);
	//_oCampoEndereco	    = eval('oForm.varc'+ varcPrefixo +'Endereco'+ varcSufixo);
	_oCampoEndereco	    = document.getElementById('varc'+ varcPrefixo +'Endereco'+ varcSufixo);
	if(document.getElementById('sint'+ varcPrefixo +'EstadoID'+ varcSufixo) == null){
        //_oCampoEstado		= eval('oForm.inte'+ varcPrefixo +'EstadoID'+ varcSufixo);
        _oCampoEstado		= document.getElementById('inte'+ varcPrefixo +'EstadoID'+ varcSufixo);
    }else{
        //_oCampoEstado		= eval('oForm.sint'+ varcPrefixo +'EstadoID'+ varcSufixo);
        _oCampoEstado		= document.getElementById('sint'+ varcPrefixo +'EstadoID'+ varcSufixo);
    }
}
