Index: contrib/datepicker/datepicker.js
===================================================================
RCS file: contrib/datepicker/datepicker.js
diff -N contrib/datepicker/datepicker.js
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ contrib/datepicker/datepicker.js	2 Jul 2009 14:13:52 -0000
@@ -0,0 +1,59 @@
+/* $Id$ */
+Drupal.behaviors.datepicker = function(context) {
+  for(field in Drupal.settings.datepicker.fields) {
+    var current_field = Drupal.settings.datepicker.fields[field];
+    $('#edit-event-' + current_field + '-exploded-wrapper>div.container-inline').append($('<a></a>').attr({id : 'event-datepicker-' + current_field, href : '#'}).text(Drupal.t('Select date')));
+    $('#event-datepicker-' + current_field)
+      .datePicker(
+        {
+          createButton:false,
+          startDate:'01/01/2007',
+          endDate:'31/12/2012'
+        }
+      ).bind(
+        'click',
+        function() {
+          updateSelects(this,$(this).dpGetSelected()[0]);
+          $(this).dpDisplay();
+          return false;
+        }
+      ).bind(
+        'dateSelected',
+        function(e, selectedDate, $td, status) {
+          updateSelects(this,selectedDate);
+        }
+      ).bind(
+        'dpClosed',
+        function(e, selected) {
+          updateSelects(this,selected[0]);
+        }
+      );
+      
+    var updateSelects = function (trigger, date) {
+      var selectedDate = new Date(date);
+      var fieldname = trigger.id.replace('event-datepicker-','');
+      $('#edit-event-' + fieldname + '-exploded-day').val(selectedDate.getDate());
+      $('#edit-event-' + fieldname + '-exploded-month option[value=' + selectedDate.asString('mm') + ']').attr('selected', 'selected');
+      $('#edit-event-' + fieldname + '-exploded-year').val(selectedDate.getFullYear());
+    }
+    
+    // listen for when the selects are changed and update the picker
+    $('#edit-event-' + current_field + '-exploded-day, #edit-event-' + current_field + '-exploded-month, #edit-event-' + current_field + '-exploded-year')
+      .bind(
+        'change',
+        function() {
+          var reg_field = new RegExp("^edit-event-([^-]+)-.+",'i');
+          var fieldname = this.id.replace(reg_field,'$1');
+          var d = new Date(
+            $('#edit-event-' + fieldname + '-exploded-year').val(),
+            $('#edit-event-' + fieldname + '-exploded-month').val()-1,
+            $('#edit-event-' + fieldname + '-exploded-day').val()
+          );
+          $('#event-datepicker-' + fieldname).dpSetSelected(d.asString());
+        }
+      );
+    
+    // and update the datePicker to reflect it...
+    $('#edit-event-' + current_field + '-exploded-day').trigger('change');
+  }
+};
Index: contrib/datepicker/datepicker.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/event/contrib/datepicker/datepicker.module,v
retrieving revision 1.1
diff -u -p -r1.1 datepicker.module
--- contrib/datepicker/datepicker.module	28 Jun 2009 22:11:47 -0000	1.1
+++ contrib/datepicker/datepicker.module	2 Jul 2009 13:57:55 -0000
@@ -1,85 +1,38 @@
 <?php
+// $Id$
 
-// $id
-
-
+/**
+ * Implementation of hook_form_alter(). Adds a datepicker for start date
+ * and end date fields.
+ */
 function datepicker_form_alter(&$form, $form_state, $form_id) {
   if (isset($form['type']['#value']) && $form_id == $form['type']['#value'] .'_node_form') {
-    // node edit form
+    // Node edit form
     if (variable_get('event_nodeapi_'. $form['type']['#value'], 'never') != 'never') {
       $path = drupal_get_path('module', 'datepicker');
-      drupal_add_css($path .'/datePicker.css');
-      drupal_add_js($path .'/date.js');
-      drupal_add_js($path .'/jquery.datePicker.js');
-      $form['event']['start_exploded']['#suffix'] = '<a id="event-datepicker-start" href="#">'. t('Select start date') .'</a>';
+      drupal_add_css($path . '/datePicker.css');
+      drupal_add_js($path . '/date.js');
+      drupal_add_js($path . '/jquery.datePicker.js');
+      
+      // Define the fields which should have a datepicker
       datepicker_add_picker('start');
-      $form['event']['end_exploded']['#suffix'] = '<a id="event-datepicker-end" href="#">'. t('Select end date') .'</a>';
       datepicker_add_picker('end');
+
+      // datepicker.js will link each of the added fields to a datepicker
+      drupal_add_js($path . '/datepicker.js','module','footer');
     }
   }
 }
 
-function datepicker_add_picker($value) {
-$js = <<<JAVASCRIPT_CODE
-  $(function() {
-$('#event-datepicker-$value')
-    .datePicker(
-      // associate the link with a date picker
-      {
-        createButton:false,
-        startDate:'01/01/2007',
-        endDate:'31/12/2012'
-      }
-    ).bind(
-      // when the link is clicked display the date picker
-      'click',
-      function()
-      {
-        updateSelects($(this).dpGetSelected()[0]);
-        $(this).dpDisplay();
-        return false;
-      }
-    ).bind(
-      // when a date is selected update the SELECTs
-      'dateSelected',
-      function(e, selectedDate, \$td, state)
-      {
-        updateSelects(selectedDate);
-      }
-    ).bind(
-      'dpClosed',
-      function(e, selected)
-      {
-        updateSelects(selected[0]);
-      }
-    );
-    
-  var updateSelects = function (selectedDate)
-  {
-    var selectedDate = new Date(selectedDate);
-    $('#edit-event-$value-exploded-day').val(selectedDate.getDate());
-    $('#edit-event-$value-exploded-month option[value=' + selectedDate.asString('mm') + ']').attr('selected', 'selected');
-    $('#edit-event-$value-exploded-year').val(selectedDate.getFullYear());
-  }
-  // listen for when the selects are changed and update the picker
-  $('#edit-event-$value-exploded-day, #edit-event-$value-exploded-month, #edit-event-$value-exploded-year')
-    .bind(
-      'change',
-      function()
-      {
-        var d = new Date(
-              $('#edit-event-$value-exploded-year').val(),
-              $('#edit-event-$value-exploded-month').val()-1,
-              $('#edit-event-$value-exploded-day').val()
-            );
-        $('#event-datepicker-$value').dpSetSelected(d.asString());
-      }
-    );
-  
-  // and update the datePicker to reflect it...
-  $('#edit-event-$value-exploded-day').trigger('change');
-});
-JAVASCRIPT_CODE;
-  drupal_add_js($js,'inline','footer');
+/**
+ * Adds a variable with the field name to a Drupal.settings.datepicker.fields
+ * to be able to generate the datepickers on-the-fly.
+ * 
+ * @param $field
+ *   The field name that will be dicriminating when looking for <select>
+ *   elements, it is also used to define the ID of the trigger link
+ */
+function datepicker_add_picker($field) {
+  // Add the field name to Drupal.settings.datepicker.fields
+  drupal_add_js(array('datepicker' => array('fields' => $field)), 'setting');
 }
-
