function atualizaEnderecoPorCEP(
  ambiente,
  caminho,
  cep_origem,
  id_endereco,
  id_bairro,
  id_uf,
  id_municipio, 
  esfera, 
  uf_conselho
) {

	var valor_filtro = $(cep_origem).value.replace(/[^0-9]/g, '');
	var url;
	
	if(ambiente == 'prod') {
	    script = 'index.php';
	}
	else if(ambiente == 'homolog') {
	    script = 'frontend_homolog.php';
	}
	else if(ambiente == 'dev') {
      script = 'frontend_dev.php';
	}

	url = ambiente;
	
	new Ajax.Request(url, {
      method: 'get',
      parameters: 'cep='+valor_filtro,
        
      onLoading:function(request, json){
          Element.show('indicator');
      },
        
      onSuccess: function(transport) {

          if (transport.responseJSON) {
              json = transport.responseJSON;
              if(json.resultado) {
                  preencheCampo_cep(caminho, json, id_endereco, id_bairro, id_uf, id_municipio, esfera, uf_conselho);
              } else {
                  alert('CEP não localizado na base de dados do FNDE. Verifique se a informação está correta e, em caso positivo, continue o cadastramento.');
              }
              Element.hide('indicator');          
          
          } else {              
              Element.hide('indicator');
              alert('CEP não localizado na base de dados do FNDE, por favor continue o cadastro');
          }
          
		  },
      onFailure:function(transport,json) {
          Element.hide('indicator');
          erroAjax(transport.status);
      }
  }
  );
}

// Popula os campos com od devidos valores referente ao CEP informado
function preencheCampo_cep(caminho, json, id_endereco, id_bairro, id_uf, id_municipio, esfera, uf_conselho) {
  
  var preenche_campo  = true;
 
  // avisa se o cep não for da mesma uf da esfera municipal
  if (esfera == 2) { //municipal
    if (json.uf != uf_conselho) {
      alert('CEP não corresponde ao município onde se localiza o Conselho');
      preenche_campo = false;
      //habilita_campos_endereco(false);
    }
  }
  
  // avisa se o cep não for da mesma uf da esfera estadual e DF
  if (esfera == 1 || esfera == 7) { //estadual ou DF
    if (json.uf != uf_conselho) {
      alert('CEP não corresponde à Unidade da Federação onde se localiza o Conselho');
      preenche_campo = false;
      //habilita_campos_endereco(false);
    }  
  }
  
  if (preenche_campo) {
    $(id_endereco).value = json.logradouro;
    $(id_bairro).value	 = json.bairro;
    
    // Atualiza o campo UF
    if (esfera == null || esfera == 0) { //se não tiver esfera ou for igual a 0 id união
      limpaCombo(id_uf,'');
      unicoOption(id_uf,json.uf,json.uf,true);
    }
    
    // Atualiza o campo MUNICIPIO
    if (esfera == null || esfera == 0 || esfera == 1 || esfera == 7) {//se não tiver esfera ou for igual a 0 união, 1 estadual, 7 DF
      atualizaCombo(caminho, id_uf, id_municipio, '', true, json.coMunicipioFNDE);
    }    
  }  

}

// Limpa o select todo e adiciona apenas em branco/unico OPTION
function unicoOption(campo,value,descricao,adiciona_vazio) {
	select = $(campo);

	i=0;
	
	// Adiciona um OPTIN em branco caso verdadeiro
	if(adiciona_vazio){
	  select.options[i] = new Option(
	    '',
	    '', 
	    false, 
	    false
	  );
	  
	  i++;
	}

	// Adiciona um OPTION em branco caso verdadeiro
  select.options[i] = new Option(
    value,
    descricao, 
    false, 
    true
  );
}

function erroAjax(status) {
  if (status==401) {
    alert('Usuário não autorizado, redirecionando...');
    document.location = (sf_root+'/login');
  }
  else if (status==404) { 
    alert('Erro de Ajax. Página não encontrada.');
  }
  else {
    alert('Erro de Ajax');
  }
}
