
  var dropdowns = new function() {

    /*
    @public
    */
    this.init = function() {
      $('#country').bind('change', handleCountryChange);
      $('#gateway').bind('change', handleGatewayChange);
      $('#direction').bind('change', handleDirectionChange);
      $('#select16').bind('change', handleReturnTransferChange);

      // Load previous selection
      handleCountryChange();
      handleReturnTransferChange();
    }

    /*
    @private
    */
    function handleReturnTransferChange() {
      var returnTransDD = document.getElementById('select16');
      var returnTransMode = returnTransDD.options[returnTransDD.selectedIndex].value;

      $('#date2_date, #date2_month, #date2_year, #select12, #select13').each(function() {
        if(this.disabled != null) {
          this.disabled = returnTransMode == 'N';
        }
        $('#anchor3').css('display', (returnTransMode == 'N'? 'none' : ''));
      });
    }

    /*
    @private
    */
    function handleDirectionChange() {
      var transferDD = document.getElementById('direction');
      var currentDirection = transferDD.options[transferDD.selectedIndex].value;
      if(currentDirection == 'RA') {
        $('#country').siblings('label').text('país de salida:');
        $('#gateway').siblings('label').text('aeropuerto de salida:');
        $('#resort').siblings('label').text('destino de salida:');
        $('#select8').siblings('label').text('vuelo de salida:');
        $('#select12').siblings('label').text('vuelo de llegada:');
      }
      else {
        $('#country').siblings('label').text('país de llegada:');
        $('#gateway').siblings('label').text('aeropuerto de llegada:');
        $('#resort').siblings('label').text('destino de llegada:');
        $('#select8').siblings('label').text('vuelo de llegada:');
        $('#select12').siblings('label').text('vuelo de salida:');
      }
    }

    /*
    @private
    */
    function handleCountryChange() {
      document.getElementById('resort').options.length = 0;
      document.getElementById('gateway').options.length = 0;
      var countryDD = document.getElementById('country');
      var countryId = countryDD.options[countryDD.selectedIndex].value;
      Http.get({
        url: DD_CSV_URL + 'getGateways.php?countryId=' + countryId + '&language=' + encodeURIComponent(LANGUAGE) + '&subset=' + encodeURIComponent(SUBSET),
        callback: countryChangeCallback
      });
    }

    /*
    @private
    */
    function countryChangeCallback(response) {
      if(response.status == Http.Status.OK) {
        if(response.responseText) {
          var results = convertResultToArray(response.responseText);
          if(results.length > 0) {
            createOptions(results, document.getElementById('gateway'), lGateway);

            // Load previous selection
            if(lGateway != '') {
              handleGatewayChange();
            }
          }
          else {
            alert('No se encuentra ningún aeropuerto en el país elegido');
          }
        }
      }
    }

    /*
    @private
    */
    function handleGatewayChange(response) {
      var gatewayDD = document.getElementById('gateway');
      var gatewayCode = gatewayDD.options[gatewayDD.selectedIndex].value;
      Http.get({
        url: DD_CSV_URL + 'getResorts.php?gatewayCode=' + gatewayCode + '&language=' + encodeURIComponent(LANGUAGE) + '&subset=' + encodeURIComponent(SUBSET),
        callback: gatewayChangeCallback
      });
    }

    /*
    @private
    */
    function gatewayChangeCallback(response) {
      if(response.status == Http.Status.OK) {
        if(response.responseText) {
         var results = convertResultToArray(response.responseText);
         if(results.length > 0) {
           createOptions(results, document.getElementById('resort'), lResort);
         }
         else {
           alert('No se encuentra destino vacacional en el aeropuerto elegido');
         }
        }
      }
    }

    /*
    @private
    */
    function createOptions(data, elm, select) {
      elm.options.length = 0;

      var opt = document.createElement('OPTION');
      opt.value = '';
      opt.innerHTML = '--por favor elija--';
      elm.appendChild(opt);

      if(typeof data == 'object' && data.length > 0) {
        for(var i = 0, k = data.length; i < k; ++i) {
          var opt = document.createElement('OPTION');
          opt.value = data[i][1];
          opt.innerHTML = data[i][0];
          if(select == data[i][1]) opt.selected = true;
          elm.appendChild(opt);
        }
      }
    }

    /*
    @private
    */
    function convertResultToArray(s) {
      var result = new Array();

      if(s != '') {
        var items = s.split('|');
        for(var i = 0, k = items.length; i < k; ++i) {
          var properties = items[i].split('^');
          result[result.length] = properties;
        }
      }
      return result;
    }
  }

  $(document).ready(dropdowns.init);