$(document).ready(setupCountrySelect);

function setupCountrySelect()
{
  $('select.countrySelector').change(function(){
    getRegionSelect($(this), 0);
  });
  
  $('select.countrySelector').each(function(){
    
    if($(this).val() != 0)
    {
      getRegionSelect($(this), 1);
    }
    
  });
}

/**
 * get region list via AJAX call and insert into form
 */
function getRegionSelect(parent_country_select, first_run)
{
  // get identifier for this group by chopping off '_country_id' from parent id
  var group_id_pre = parent_country_select.attr('id').split('_country_id')[0];
  
  //console.log(group_id_pre);
  //event_parent[events_0][event_address][country_id]
  var group_name_pre_arr = parent_country_select.attr('name').replace(/\]\[/g, '|').replace('[', '|').replace(']', '|').split('|');
  var group_name_pre = '';
  
  for(var i = 0; i < group_name_pre_arr.length - 2; i++)
  {
    if(i == 0)
    {
      group_name_pre += group_name_pre_arr[i];
    }
    else
    {
      group_name_pre += '['+group_name_pre_arr[i]+']';
    }
  };
  
  
  //console.log(group_name_pre);
  
  // clear region
  if($('div#'+group_id_pre+'_regionWrap').length == 0)
  {
    parent_country_select.after('<div id="'+group_id_pre+'_regionWrap"></div>');
  }
    
  $('div#'+group_id_pre+'_regionWrap').html('Select a region <img src="/images/form-ajax-loader.gif" alt="loading..." class="formLoader" />');
  
  // clear city
  if($('div#'+group_id_pre+'_cityWrap').length == 0)
  {
    $('div#'+group_id_pre+'_regionWrap').after('<div id="'+group_id_pre+'_cityWrap"></div>');
  }
  
  $('div#'+group_id_pre+'_cityWrap').html('Select a region');

  var preset = '';
  
  if(first_run == 1)
  {
    if($('#' + group_id_pre + '_region_id_orig').length > 0)
    {
      preset = $('#' + group_id_pre + '_region_id_orig').val();
    }
    
    if(preset.length == 0 && $('#' + group_id_pre + '_other_region_orig').length > 0)
    {
      preset = $('#' + group_id_pre + '_other_region_orig').val();
    }
  }

  // console.log(group_id_pre);
  is_international_country = isInternationalCountry(parent_country_select.val());
  
  widget_name = group_name_pre + (is_international_country ? '[other_region]' : '[region_id]');
  widget_id   = group_id_pre + (is_international_country ? '_other_region' : '_region_id');
        
  //console.log('preset: ' + preset);
  $('div#'+group_id_pre+'_regionWrap').load(
    '/address/getRegionSelect?id=' + parent_country_select.val() + '&select_name=' + widget_name + '&preset=' + encodeURIComponent(preset),
    function(response, status, xhr){
      if ( status == 'error')
      {
        $('div#'+group_id_pre+'_cityWrap').html('Select a country');
        $('div#'+group_id_pre+'_regionWrap').html('Select a country');
      }
      
      // add listener to selector
      $('select#'+group_id_pre+'_region_id').change(function(){
        getCitySelect($(this), 0, is_international_country);
      });
      
      // trigger first run if needed
      if(first_run == 1 || is_international_country)
      {
        widget_id   = group_id_pre + (is_international_country ? '_other_region' : '_region_id');
        getCitySelect($('#'+ widget_id), 1, is_international_country);
      }
    }
  );
}

/**
 * get city list or other city field via AJAX call and
 * insert into form
 */
function getCitySelect(parent_region_select, first_run, is_international_country)
{
  // get identifier for this group by chopping off '_country_id' from parent id
  var group_id_pre = parent_region_select.attr('id').split( (is_international_country ? '_other_region' :'_region_id'))[0];
  
  //console.log(group_id_pre);
  
  var group_name_pre_arr = parent_region_select.attr('name').replace(/\]\[/g, '|').replace('[', '|').replace(']', '|').split('|');
  var group_name_pre = '';
  
  for(var i = 0; i < group_name_pre_arr.length - 2; i++)
  {
    if(i == 0)
    {
      group_name_pre += group_name_pre_arr[i];
    }
    else
    {
      group_name_pre += '['+group_name_pre_arr[i]+']';
    }
  };
  
  //console.log(group_name_pre);
  
  // clear city
  if($('div#'+group_id_pre+'_cityWrap').length == 0)
  {
    $('div#'+group_id_pre+'_regionWrap').after('<div id="'+group_id_pre+'_cityWrap"></div>');
  }
  
  $('div#'+group_id_pre+'_cityWrap').html('Select a region');

  var preset = '';
  
  if(first_run == 1)
  {
    //if($('#' + group_id_pre + '_city_id_orig').length > 0)
    //{
    //  preset = $('#' + group_id_pre + '_city_id_orig').val();
    //}
    
    if( (preset.length == 0 || is_international_country) && $('#' + group_id_pre + '_other_city_orig').length > 0)
    {
      preset = $('#' + group_id_pre + '_other_city_orig').val();
    }
  }
  
  widget_name = group_name_pre + '[other_city]';
  
  //console.log('preset: ' + preset);
  $('div#'+group_id_pre+'_cityWrap').load(
    '/address/getCitySelect?id=' + encodeURIComponent(parent_region_select.val()) + '&select_name=' + widget_name + '&preset=' + encodeURIComponent(preset)
  );
}

/**
 * Retrieve whether an international country is being used
 */
function isInternationalCountry(value)
{
  return value != 'CA' && value != 'US';
}
