=== modified file 'shipping/uc_quote/uc_quote.module'
--- shipping/uc_quote/uc_quote.module	2009-02-04 22:14:23 +0000
+++ shipping/uc_quote/uc_quote.module	2009-02-10 19:57:35 +0000
@@ -69,6 +69,11 @@
     'type' => MENU_CALLBACK,
     'file' => 'uc_quote.pages.inc',
   );
+  $items['uc-quote/js'] = array(
+    'page callback' => 'uc_quote_zone_select_js',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK,
+  );
 
   return $items;
 }
@@ -183,15 +188,22 @@
     $form['shipping']['default_address']['street1'] = uc_textfield(uc_get_field_name('street1'), $address->street1, FALSE, NULL, 64);
     $form['shipping']['default_address']['street2'] = uc_textfield(uc_get_field_name('street2'), $address->street2, FALSE, NULL, 64);
     $form['shipping']['default_address']['city'] = uc_textfield(uc_get_field_name('city'), $address->city, FALSE);
-    if (isset($_POST['country'])) {
-      $country = $_POST['country'];
+    $form['shipping']['default_address']['country'] = uc_country_select(uc_get_field_name('country'), $address->country);
+
+    $form['shipping']['default_address']['country']['#ahah'] = array(
+      'path' => 'uc-quote/js',
+      'wrapper' => 'edit-zone-wrapper',
+      'effect' => 'fade',
+    );
+
+    if (isset($form_state['zone'])) {
+      $form['shipping']['default_address']['zone'] = $form_state['zone'];
     }
     else {
-      $country = $address->country;
+      $form['shipping']['default_address']['zone'] = uc_zone_select(uc_get_field_name('zone'), $address->zone, NULL, $address->country);
     }
-    $form['shipping']['default_address']['zone'] = uc_zone_select(uc_get_field_name('zone'), $address->zone, NULL, $country);
+
     $form['shipping']['default_address']['postal_code'] = uc_textfield(uc_get_field_name('postal_code'), $address->postal_code, FALSE, NULL, 10, 10);
-    $form['shipping']['default_address']['country'] = uc_country_select(uc_get_field_name('country'), $address->country);
 
     $types = uc_quote_shipping_type_options();
     if (is_array($types)) {
@@ -213,6 +225,30 @@
   }
 }
 
+function uc_quote_zone_select_js() {
+  // The form is generated in an include file which we need to include manually.
+  include_once 'modules/node/node.pages.inc';
+
+  $form_state = array('storage' => NULL, 'submitted' => FALSE);
+  $form_build_id = $_POST['form_build_id'];
+  $form = form_get_cache($form_build_id, $form_state);
+
+  $args = $form['#parameters'];
+  $form_id = array_shift($args);
+  $form_state['values'] = $form['#post'] = $_POST;
+  $form['#programmed'] = $form['#redirect'] = FALSE;
+
+  $form_state['zone'] = uc_zone_select(uc_get_field_name('zone'), NULL, NULL, $form_state['values']['country']);
+  $form_state['rebuild'] = TRUE;
+
+  drupal_process_form($form_id, $form, $form_state);
+  $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id);
+
+  $output = theme('status_messages') . drupal_render($form['shipping']['default_address']['zone']);
+
+  drupal_json(array('status' => TRUE, 'data' => $output));
+}
+
 function uc_quote_content_extra_fields($type_name) {
   $type = node_get_types('type', $type_name);
   $extra = array();

=== modified file 'uc_store/uc_store.module'
--- uc_store/uc_store.module	2009-02-05 22:28:31 +0000
+++ uc_store/uc_store.module	2009-02-09 21:00:58 +0000
@@ -1213,7 +1213,7 @@
     '#required' => $required,
   );
 
-  drupal_add_js(drupal_get_path('module', 'uc_store') .'/uc_country_select.js');
+  //drupal_add_js(drupal_get_path('module', 'uc_store') .'/uc_country_select.js');
 
   return $select;
 }

