var settings =
{
    country:{ update: 'region', url: '/implantation/getRegion' },
    region: { update: 'city', url: '/implantation/getCity' },
    city:   { update: 'entity', url: '/implantation/getEntity'}
}

function initImplantations()
{
  for (var elt in settings)
  {
    ajaxifySelect(elt, settings[elt].url, settings[elt].update+'_span');
  }
}

function ajaxifySelect(elt, url, dest)
{
  $(elt).observe('change',
      function()
      {
        new Ajax.Request(url, {
            evalScripts: true,
            parameters: 'id='+$F(elt),
            onSuccess: function(response)
            {
              $(dest).update(response.responseText);
              tmp = settings[elt].update;
              ajaxifySelect(tmp, settings[tmp].url, settings[tmp].update+'_span');
            }
          });
      }
  );
}

Event.observe(window, 'load', initImplantations);