--- eventrepeat.module	Fri Oct 05 16:12:43 2007
+++ eventrepeat.module	Wed Oct 10 17:13:12 2007
@@ -440,7 +440,7 @@
       if (isset($_POST['edit']) && (!empty($_POST['edit']))) {
         $node = $form['#node'];
       }
-      elseif (isset($form['nid']['#value'])) {
+      elseif (!empty($form['nid']['#value'])) {
         $node = node_load($form['nid']['#value']);
       }
 
@@ -963,7 +963,7 @@
   // make other repeat pattern updates on occurrences by accident.
   // The "this" options is also the most destructive of the three.
   // The "future" maps a bit better to how iCal works.
-  if ($node->eventrepeat_rid) {
+  if (!empty($node->eventrepeat_rid)) {
     $form['eventrepeat_rid'] = array(
       '#type' => 'hidden',
       '#value' => $node->eventrepeat_rid);
@@ -1573,7 +1573,7 @@
         //update the event start and end time TODO: event times are
         //getting adjusted here (possible cause of double shift)
         db_query("UPDATE {event} SET event_start = '%s', event_end = '%s' WHERE nid = %d", $start_time, $end_time, $old_date->nid);
-        $last_rendered = $new_date->date;
+        $last_rendered = $end_time;
       }
 
       //update the last rendered value for the updated sequence
@@ -1591,8 +1591,8 @@
 
         //calculate the repeat_last_rendered value from the event start date
         $last_rendered = event_explode_date($last_rendered->event_start);
-        $last_rendered['hour'] = '23';
-        $last_rendered['minute'] = $last_rendered['second'] = '59';
+        //$last_rendered['hour'] = '23';
+        //$last_rendered['minute'] = $last_rendered['second'] = '59';
         $last_rendered = event_implode_date($last_rendered);
       }
       //no new dates means that the sequence is completely rendered,
@@ -1621,9 +1621,9 @@
   else {
     // calculate the repeat_last_rendered value from the event start
     // date and sets it to 23:59:59 on that day
-    $lastrendered = event_explode_date($node->event['start_orig']);
-    $lastrendered['hour'] = '23';
-    $lastrendered['minute'] = $lastrendered['second'] = '59';
+    $lastrendered = event_explode_date($node->event['end_orig']);
+    //$lastrendered['hour'] = '23';
+    //$lastrendered['minute'] = $lastrendered['second'] = '59';
     $lastrendered = event_implode_date($lastrendered);
 
     //insert the new repeat sequence into the event_repeat table, and
@@ -1730,7 +1730,7 @@
   }
 
   //explode the EXDATE if it exists, and implode
-  if ($RRULE[1]) {
+  if (!empty($RRULE[1])) {
     $EXDATE = explode(',', substr($RRULE[1], 7));
     foreach ($EXDATE as $key => $value) {
       $EXDATE[$key] = substr($value, 0, 4) .'-'. substr($value, 4, 2) .'-'. substr($value, 6, 2) .' 23:59:59';
@@ -1828,7 +1828,7 @@
 
         //calculate the day of the week, month, and day of the month
         //for the start date of this sequence
-        $date = event_explode_date($repeat_data->event['start']);
+        $date = event_explode_date($repeat_data->event_start);
 
         $BYDAY = (int) gmdate('w', mktime(12, 0, 0, $date['month'], $date['day'], $date['year']));
         $BYMONTH = $date['month'];
@@ -1941,7 +1941,7 @@
       }
 
       //eliminate any exception dates from the query
-      if ($repeatpattern['repeat_RRULE'][0]['EXDATE']) {
+      if (!empty($repeatpattern['repeat_RRULE'][0]['EXDATE'])) {
         $where[] = "(DATE_FORMAT(date, '%Y-%m-%d') NOT IN('". $repeatpattern['repeat_RRULE'][0]['EXDATE'] ."'))";
       }
 
@@ -1998,10 +1998,12 @@
           $event_start_time = event_explode_date($repeat_data->event_start);
           $event_end_time = event_explode_date($repeat_data->event_end);
           $event_date = event_explode_date($date_to_render->date);
+          $event_duration = event_duration($event_start_time, $event_end_time);
+          $event_date_end = event_date_later($event_date, $event_duration);
 
           $repeat_data->event_start = event_implode_date(array_merge($event_date, array('hour' => $event_start_time['hour'], 'minute' => $event_start_time['minute'], 'second' => $event_start_time['second'])));
 
-          $repeat_data->event_end = event_implode_date(array_merge($event_date, array('hour' => $event_end_time['hour'], 'minute' => $event_end_time['minute'], 'second' => $event_end_time['second'])));
+          $repeat_data->event_end = event_implode_date(array_merge($event_date_end, array('hour' => $event_end_time['hour'], 'minute' => $event_end_time['minute'], 'second' => $event_end_time['second'])));
           $repeat_data->start_in_dst = event_is_dst($repeat_data->timezone, $repeat_data->event_start);
           $repeat_data->end_in_dst = event_is_dst($repeat_data->timezone, $repeat_data->event_end);
 
@@ -2013,7 +2015,7 @@
           db_query("INSERT INTO {event_repeat_nodes} (rid, nid) VALUES (%d, %d)", $repeatpattern['rid'], $repeat_data->nid);
 
           //update repeat last rendered for later saving to the repeat pattern
-          $repeatpattern['repeat_last_rendered'] = $date_to_render->date;
+          $repeatpattern['repeat_last_rendered'] = event_implode_date(event_date_later($date_to_render->date,$event_duration));
 
           //here we're testing how many nodes are left to render, if
           //the pattern is using COUNT.  if we've rendered the last
@@ -2528,9 +2530,9 @@
     $next_to_render = _eventrepeat_get_next_date($projection->rid);
     $rows[] = array(
       array("data" => $projection->rid),
-      array("data" => format_date($projection->repeat_start, 'small', '', 0)),
-      array("data" => ($projection->repeat_end > 0) ? format_date($projection->repeat_end, 'small', '', 0) : check_plain($projection->repeat_end)),
-      array("data" => format_date($projection->repeat_last_rendered, 'small', '', 0)),
+      array("data" => format_date(is_string($projection->repeat_start) ? strtotime($projection->repeat_start) : $projection->repeat_start, 'small', '', 0)),
+      array("data" => format_date(is_string($projection->repeat_end) ? strtotime($projection->repeat_end) : $projection->repeat_end, 'small', '', 0)),
+      array("data" => format_date(is_string($projection->repeat_last_rendered) ? strtotime($projection->repeat_last_rendered) : $projection->repeat_last_rendered, 'small', '', 0)),
       array("data" => ($next_to_render != 0) ? event_format_date($next_to_render) : 0),
       array("data" => l($node->title, 'node/'. $node->nid)),
       array("data" => $counts[$projection->rid]),      
