 function atualizaCombo(
    caminho,
    combo_origem,
    combo_destino,
    mensagem_vazio,
    adiciona_campo_branco,
    selected
  ) {
    valor_filtro = $(combo_origem).getValue();
    if(valor_filtro) {
      new Ajax.Request(
        caminho, 
        {
          onLoading:function(request, json){
            Element.show('indicator');
          }, 
          onSuccess:function(transport) {

            if (transport.responseJSON != undefined){
              json = transport.responseJSON;
            } else {
              json = eval(transport.responseText);
            }
            preencheCombo(combo_destino,json,adiciona_campo_branco,selected);
            Element.hide('indicator');
          },
          onFailure:function(transport,json) {

            Element.hide('indicator');
            erroAjax(transport.status);
          },
          parameters: 'filtro=' + valor_filtro
        }
      );
    }
    else {
      limpaCombo(combo_destino,mensagem_vazio);
    }
  }
  
  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');
    }
  }
  
  function limpaCombo(destino,mensagem_vazio) {
    $(destino).options.length = 0;
    $(destino).title = mensagem_vazio;
  }
  
  function preencheCombo(destino,json,adiciona_vazio,selected) {
    d = $(destino);    
    limpaCombo(d,'');
    if(adiciona_vazio) {
      d.options[0] = new Option(
        '',
        '', 
        false, 
        false
      );
    }

    for(a = 0; a < json.chaves.length; a++) {      
      if(adiciona_vazio) {
        i = a+1;
      }
      else {
        i=a;
      }

      if(json.chaves[a]==selected){
        d.options[i] = new Option(
          json.descricoes[a],
          json.chaves[a], 
          false, 
          true
        );
      } else {
        d.options[i] = new Option(
    	  json.descricoes[a],
    	  json.chaves[a], 
    	  false, 
    	  false
        );
      }
			// Caso verdadeiro, limpa todo o select informado e adiciona apenas em branco/unico OPTION
      /*
      if(json.chaves[a]==selected){
      	limpaCombo(destino,'');
      	
      	i=0;
      	
      	// Adiciona um OPTIN em branco caso verdadeiro
      	if(adiciona_vazio) {
		      d.options[i] = new Option(
		        '',
		        '', 
		        false, 
		        false
		      );
		      i++;
      	}
      	
	      d.options[i] = new Option(
	        json.descricoes[a],
	        json.chaves[a], 
	        false, 
	        true
	      );
	      break;
	    } else {
	      d.options[i] = new Option(
	        json.descricoes[a],
	        json.chaves[a], 
	        false, 
	        false
	      );
	    }

      d.options[i] = new Option(
        json.descricoes[a],
        json.chaves[a], 
        false, 
        false
      );*/
    }
  }
