// global vars
var allow_empty = true;
var default_address_text = '';

jQuery(document).ready(function() {

  var cities = jQuery('.ajax-address-city');
  var states = jQuery('.ajax-address-state');
  var countries = jQuery('.ajax-address-country');

  // clear existing selects and options
  var n = cities.length;

  for (var i = 1; i <= n; i++) {

    clearSelectOptions2('ajax-address-state', i);
    clearSelectOptions2('ajax-address-city', i);

    // preselect options
    var preselect_state_id = jQuery('.ajax-address-state-preselect').filter('#'+i).attr('value');
    loadStates2(getSelectedOptionValue(jQuery('.ajax-address-country').filter('#'+i).get(0)), preselect_state_id, i);

    var eventData = { idx: ''+i, foo: 'bar' };
    jQuery('.ajax-address-country').filter('#'+i).bind("change", eventData, function(event) {

      // update states
      clearSelectOptions2('ajax-address-state', event.data.idx);
      clearSelectOptions2('ajax-address-city', event.data.idx);
      var country_id = getSelectedOptionValue(event.target);
      loadStates2(country_id, '', event.data.idx);
    });

    jQuery('.ajax-address-state').filter('#'+i).bind("change", {idx: ''+i}, function(event) {
      var preselect_city_id = jQuery('.ajax-address-city-preselect').filter('#'+event.data.idx).attr('value');
      // update cities
      clearSelectOptions2('ajax-address-city', event.data.idx);
      var state_id = getSelectedOptionValue(event.target);
      var idx = event.data.idx;
      jQuery.post('/ajaxWidget/cityOptions', { state_id: state_id, city_id: preselect_city_id, allow_empty: allow_empty, default_address_text: default_address_text }, function(data) {
        updateSelectOptions2('ajax-address-city', idx, data);
      }, 'html');
    });
  }
});

function loadStates2(country_id, preselect_state_id, divIdx) {
  var idx2=divIdx;
  jQuery.post('/ajaxWidget/stateOptions', { country_id: country_id, state_id: preselect_state_id, allow_empty: allow_empty, default_address_text: default_address_text }, function(data, textStatus) {
    updateSelectOptions2('ajax-address-state', divIdx, data);
  }, 'html');
}

function getSelectedOptionValue(select) {
  return jQuery(select).find('option:selected').attr('value');
}

function updateSelectOptions2(clazz, id, data) {
  var select = jQuery('.'+clazz).filter('#'+id);
  clearSelectOptions2(clazz, id);
  select.html(data);
  select.change();
}

function clearSelectOptions2(class_id, id) {
  var v = jQuery('.'+class_id).filter('#'+id);
  v.empty();
}

function selectCountry(country_id, jQueryCountrySelect) {
  var children = jQueryCountrySelect.children();
  var child;
  for (var i = 0; i < children.length; i++) {
    child = children[i];
    if (child.value == country_id) {
      child.selected = 'selected';
      break;
    }
  }
}

