Index: uc_addresses.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/uc_addresses/uc_addresses.module,v
retrieving revision 1.31
diff -u -r1.31 uc_addresses.module
--- uc_addresses.module	14 Dec 2009 17:47:23 -0000	1.31
+++ uc_addresses.module	16 Dec 2009 21:54:13 -0000
@@ -277,6 +277,8 @@
 function uc_addresses_form_uc_cart_checkout_form_alter(&$form, &$form_state) {
   global $user;
 
+  drupal_add_js(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.js');
+
   // This is a good place to clear any addresses we might have
   // leftover from a previous checkout
 
@@ -284,6 +286,8 @@
     $_SESSION['uc_addresses_saved_addresses'] = null;
     unset($_SESSION['uc_addresses_saved_addresses']);
   }
+  unset($_SESSION['delivery_address_save']);
+  unset($_SESSION['billing_address_save']);
 
   // Create the list of addresses the user can select from
   // Each address is just line a full address, but on one line
@@ -462,7 +466,6 @@
       }
     }
     if ($js_zone) {
-      drupal_add_js(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.js');
       drupal_add_js(array('uc_address_default' => array('country' => $default_address->country, 'zone' => $default_address->zone)), 'setting');
     }
   }
@@ -476,24 +479,58 @@
     unset($form['panes']['billing']['billing_address_select']);
   }
 
-  // Add the "Save address" checkbox
-  // TODO: (Tony) I can add these, but don't know how to find out if
-  // the checkbox was checked. For now, all order addresses are
-  // automatically saved.
-
-//     $form['panes']['billing']['billing_address_save_address'] = array(
-//       '#title' => t('Save this address'),
-//       '#type' => 'checkbox',
-//       '#default_value' => 1,
-//       '#weight' => 10
-//       );
-//     $form['panes']['delivery']['delivery_address_save_address'] = array(
-//       '#title' => t('Save this address'),
-//       '#type' => 'checkbox',
-//       '#default_value' => 1,
-//       '#weight' => 10
-//       );
+  $temp_save = array(
+    '#title' => t('Save this address'),
+    '#type' => 'select',
+    '#options' => array(
+      'no' => t("Don't Save"),
+      'new' => t('As new'),
+      'edit' => t('Edit'),
+    ),
+    '#weight' => 10
+  );
+  $temp_name = array(
+    '#title' => t('Save as'),
+    '#type' => 'textfield',
+    '#weight' => 11,
+    '#description' => t('Enter a name for this address (e.g. Home or Work)'),
+    '#maxlength' => 32,
+    '#size' => 32,
+  );
+  
+  $form['panes']['delivery']['delivery_address_save_delivery'] = $temp_save;
+  $form['panes']['delivery']['delivery_address_name'] = $temp_name;
+  $form['panes']['billing']['billing_address_save_billing'] = $temp_save;
+  $form['panes']['billing']['billing_address_name'] = $temp_name;
+  $form['#validate'][] = 'uc_addresses_cart_checkout_validate';
+
+}
 
+function uc_addresses_cart_checkout_validate($form, &$form_state) {
+  $delivery = $form_state['values']['panes']['delivery'];
+  $billing = $form_state['values']['panes']['billing'];
+  if ($delivery['delivery_address_save_delivery'] != 'no') {
+    if ($delivery['delivery_address_save_delivery'] == 'edit') {
+      $old_address = json_decode($delivery['delivery_address_select']);
+      $_SESSION['delivery_address_save']['aid'] = $old_address->aid;
+      $_SESSION['delivery_address_save']['is_default'] = $old_address->is_default;
+    }
+    $_SESSION['delivery_address_save']['name'] = $delivery['delivery_address_name'];
+  }
+  else {
+    unset($_SESSION['delivery_address_save']);
+  }
+  if ($billing['billing_address_save_billing'] != 'no') {
+    if ($billing['billing_address_save_billing'] == 'edit') {
+      $old_address = json_decode($billing['billing_address_select']);
+      $_SESSION['billing_address_save']['aid'] = $old_address->aid;
+      $_SESSION['billing_address_save']['is_default'] = $old_address->is_default;
+    }
+    $_SESSION['billing_address_save']['name'] = $delivery['billing_address_name'];
+  }
+  else {
+    unset($_SESSION['billing_address_save']);
+  }
 }
 
 function _uc_addresses_address_fields_empty($fields, $type)
@@ -553,36 +590,58 @@
   // Add the billing address first. If the user has no addresses,
   // this is the one that will become the default address
 
-  $address->address_name = '';
-  $address->uid = $order->uid;
-  $address->first_name = $order->billing_first_name;
-  $address->last_name = $order->billing_last_name;
-  $address->company = $order->billing_company;
-  $address->street1 = $order->billing_street1;
-  $address->street2 = $order->billing_street2;
-  $address->city = $order->billing_city;
-  $address->zone = $order->billing_zone;
-  $address->postal_code = $order->billing_postal_code;
-  $address->country = $order->billing_country;
-  $address->phone = $order->billing_phone;
-  $address->is_default = 0;
-  _uc_addresses_db_add_address($address, TRUE);
+  if ($_SESSION['billing_address_save']) {
+    $sess = $_SESSION['billing_address_save'];
+    $address->address_name = $sess['name'];
+    $address->uid = $order->uid;
+    $address->first_name = $order->billing_first_name;
+    $address->last_name = $order->billing_last_name;
+    $address->company = $order->billing_company;
+    $address->street1 = $order->billing_street1;
+    $address->street2 = $order->billing_street2;
+    $address->city = $order->billing_city;
+    $address->zone = $order->billing_zone;
+    $address->postal_code = $order->billing_postal_code;
+    $address->country = $order->billing_country;
+    $address->phone = $order->billing_phone;
+    if (isset($sess['aid'])) {
+      $address->aid = $sess['aid'];
+      $address->is_default = $sess['is_default'];
+      _uc_addresses_db_update_address($address);
+    }
+    else {
+      $address->is_default = 0;
+      _uc_addresses_db_add_address($address, TRUE);
+    }
+    unset($_SESSION['billing_address_save']);
+  }
 
   if (uc_order_is_shippable($order)) {
-    $address->address_name = '';
-    $address->uid = $order->uid;
-    $address->first_name = $order->delivery_first_name;
-    $address->last_name = $order->delivery_last_name;
-    $address->company = $order->delivery_company;
-    $address->street1 = $order->delivery_street1;
-    $address->street2 = $order->delivery_street2;
-    $address->city = $order->delivery_city;
-    $address->zone = $order->delivery_zone;
-    $address->postal_code = $order->delivery_postal_code;
-    $address->country = $order->delivery_country;
-    $address->phone = $order->delivery_phone;
-    $address->is_default = 0;
-    _uc_addresses_db_add_address($address, TRUE);
+    if ($_SESSION['delivery_address_save']) {
+      $sess = $_SESSION['delivery_address_save'];
+      $address->address_name = $sess['name'];
+      $address->uid = $order->uid;
+      $address->first_name = $order->delivery_first_name;
+      $address->last_name = $order->delivery_last_name;
+      $address->company = $order->delivery_company;
+      $address->street1 = $order->delivery_street1;
+      $address->street2 = $order->delivery_street2;
+      $address->city = $order->delivery_city;
+      $address->zone = $order->delivery_zone;
+      $address->postal_code = $order->delivery_postal_code;
+      $address->country = $order->delivery_country;
+      $address->phone = $order->delivery_phone;
+      if (isset($sess['aid'])) {
+        $address->aid = $sess['aid'];
+        $address->is_default = $sess['is_default'];
+        _uc_addresses_db_update_address($address);
+      }
+      else {
+        $address->is_default = 0;
+        _uc_addresses_db_add_address($address, TRUE);
+      }
+      unset($_SESSION['delivery_address_save']);
+    }
   }
 }
 
Index: uc_addresses.js
===================================================================
RCS file: /cvs/drupal/contributions/modules/uc_addresses/uc_addresses.js,v
retrieving revision 1.4
diff -u -r1.4 uc_addresses.js
--- uc_addresses.js	14 Dec 2009 17:47:23 -0000	1.4
+++ uc_addresses.js	16 Dec 2009 21:54:12 -0000
@@ -12,4 +12,39 @@
       }
     );
   }
+  $('input[id$=address-name]').parents('tr').hide();
+  $('select[id$=delivery-address-save-delivery]').change(
+    function() {
+      if ($(this).val() != 'no') {
+        $('input[id$=delivery-address-name]').parents('tr').show();
+        if ($(this).val() == 'edit') {
+          eval('var address = ' + $('select[id$=delivery-address-select]').val() + ';');
+          $('input[id$=delivery-address-name]').val(address.address_name);
+        }
+        else {
+          $('input[id$=delivery-address-name]').val('');
+        }
+      }
+      else {
+        $('input[id$=delivery-address-name]').parents('tr').hide();
+      }
+    }
+  );
+  $('select[id$=billing-address-save-billing]').change(
+    function() {
+      if ($(this).val() != 'no') {
+        $('input[id$=billing-address-name]').parents('tr').show();
+        if ($(this).val() == 'edit') {
+          eval('var address = ' + $('select[id$=billing-address-select]').val() + ';');
+          $('input[id$=billing-address-name]').val(address.address_name);
+        }
+        else {
+          $('input[id$=billing-address-name]').val('');
+        }
+      }
+      else {
+        $('input[id$=billing-address-name]').parents('tr').hide();
+      }
+    }
+  );
 }
Index: uc_addresses_address_pane.inc
===================================================================
RCS file: /cvs/drupal/contributions/modules/uc_addresses/uc_addresses_address_pane.inc,v
retrieving revision 1.17
diff -u -r1.17 uc_addresses_address_pane.inc
--- uc_addresses_address_pane.inc	20 Apr 2009 20:54:43 -0000	1.17
+++ uc_addresses_address_pane.inc	16 Dec 2009 21:54:13 -0000
@@ -97,9 +97,6 @@
 	  '#default_value' => $address->is_default,
 	  );
       }
-
-      drupal_add_js(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.js');
-
       return array('description' => $description, 'contents' => $form['address'], 'theme' => 'uc_addresses_pane');
 
     case 'edit':
@@ -164,8 +161,6 @@
 	'#disabled' => $address->is_default,
 	);
 
-      drupal_add_js(drupal_get_path('module', 'uc_addresses') .'/uc_addresses.js');
-
       return array('description' => $description, 'contents' => $form['address'], 'theme' => 'uc_addresses_pane');
 
     case 'process':
