? event.patch
? event_37.patch
Index: event.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/event/event.info,v
retrieving revision 1.4
diff -u -p -r1.4 event.info
--- event.info	18 Jun 2007 22:53:41 -0000	1.4
+++ event.info	30 Dec 2007 03:27:11 -0000
@@ -2,4 +2,4 @@
 name = Event
 description = Calendaring API, calendar display and export
 package = Event
-
+core = 6.x
Index: event.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/event/event.install,v
retrieving revision 1.24
diff -u -p -r1.24 event.install
--- event.install	4 Sep 2007 10:34:53 -0000	1.24
+++ event.install	30 Dec 2007 03:27:15 -0000
@@ -13,7 +13,7 @@ function event_requirements($phase) {
 
     $requirements['mysql_event'] = array(
       'title' => $t('MySQL database for event module'),
-      'value' => ($phase == 'runtime') ? l($version, 'admin/logs/status/sql') : $version,
+      'value' => ($phase == 'runtime') ? l($version, 'admin/reports/status/sql') : $version,
       );
 
     if (version_compare($version, '4.1.1') < 0) {
@@ -25,72 +25,99 @@ function event_requirements($phase) {
   return $requirements;
 }
 
+/**
+ * Implementation of hook_schema().
+ */
+function event_schema() {
+  $schema['event'] = array(
+    'fields' => array(
+      'nid' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0),
+      'event_start' => array(
+        'type' => 'datetime',
+        'not null' => TRUE),
+      'event_end' => array(
+        'type' => 'datetime',
+        'not null' => TRUE),
+      'timezone' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0),
+      'start_in_dst' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0),
+      'end_in_dst' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0),
+      'has_time' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 1),
+      'has_end_date' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 1)
+    ),
+    'indexes' => array(
+      'event_start' => array('event_start'),
+      'event_end' => array('event_end'),
+      'timezone' => array('timezone')
+    ),
+    'primary key' => array('nid'),
+  );
+  $schema['event_timezones'] = array(
+    'fields' => array(
+      'timezone' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0),
+      'name' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => ''),
+      'offset' => array(
+        'type' => 'datetime',
+        'not null' => TRUE,
+        'default' => 0),
+      'offset_dst' => array(
+        'type' => 'datetime',
+        'not null' => TRUE,
+        'default' => 0),
+      'dst_region' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0),
+      'is_dst' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0)
+    ),
+    'primary key' => array('timezone'),
+  );
+
+  return $schema;
+}
+
+/**
+ * Implementation of hook_install().
+ */
 function event_install() {
-  switch ($GLOBALS['db_type']) {
-    case 'mysql':
-    case 'mysqli':
-      db_query("CREATE TABLE {event} (
-                nid int(10) unsigned NOT NULL default '0',
-                event_start datetime NOT NULL,
-                event_end datetime NOT NULL,
-                timezone int NOT NULL default '0',
-                start_in_dst int NOT NULL default '0',
-                end_in_dst int NOT NULL default '0',
-                has_time int NOT NULL default '1',
-                has_end_date int NOT NULL default '1',
-                PRIMARY KEY (nid),
-                KEY event_start (event_start),
-                KEY event_end (event_end),
-                KEY timezone (timezone)
-                ) /*!40100 DEFAULT CHARACTER SET utf8 */;");
-      db_query("CREATE TABLE {event_timezones} (
-                timezone int NOT NULL default '0',
-                name varchar(255) NOT NULL default '',
-                offset TIME NOT NULL default '0',
-                offset_dst TIME NOT NULL default '0',
-                dst_region int NOT NULL default '0',
-                is_dst int NOT NULL default '0',
-                PRIMARY KEY (timezone)
-                ) /*!40100 DEFAULT CHARACTER SET utf8 */;");
-      db_query("ALTER TABLE {users} ADD timezone_id int NOT NULL default '0'");
-      $zones = event_install_timezones();
-      foreach ($zones as $zone => $value) {
-        db_query("INSERT INTO {event_timezones} (timezone, name, offset, offset_dst, dst_region) VALUES (%d, '%s', '%s', '%s', %d)", $zone, $value['timezone'], $value['offset'], $value['offset_dst'], $value['dst_region']);
-      }
-      variable_del('event_range_prev');
-      variable_del('event_range_next');
-      break;
-    case 'pgsql':
-      db_query("CREATE TABLE {event} (
-                nid integer NOT NULL default '0',
-                event_start timestamp NOT NULL,
-                event_end timestamp NOT NULL,
-                timezone integer NOT NULL default '0',
-                start_in_dst integer NOT NULL default '0',
-                end_in_dst integer NOT NULL default '0',
-                has_time integer NOT NULL default '1',
-                has_end_date integer NOT NULL default '1',
-                PRIMARY KEY (nid)
-                ) ");
-      db_query("CREATE TABLE {event_timezones} (
-                timezone integer NOT NULL default '0',
-                name varchar(255) NOT NULL default '',
-                \"offset\" interval NOT NULL default '0 seconds',
-                offset_dst interval NOT NULL default '0 seconds',
-                dst_region integer NOT NULL default '0',
-                is_dst integer NOT NULL default '0',
-                PRIMARY KEY (timezone)
-                ) ");
-      db_query('CREATE INDEX {event}_event_start_idx ON {event} (event_start)');
-      db_query('CREATE INDEX {event}_event_end_idx ON {event} (event_end)');
-      db_query('CREATE INDEX {event}_timezone_idx ON {event} (timezone)');
-      db_query("ALTER TABLE {users} ADD timezone_id int NOT NULL default '0'");
-      $zones = event_install_timezones();
-      foreach ($zones as $zone => $value) {
-        db_query("INSERT INTO {event_timezones} (timezone, name, \"offset\", offset_dst, dst_region) VALUES (%d, '%s', '%s', '%s', %d)", $zone, $value['timezone'], $value['offset'], $value['offset_dst'], $value['dst_region']);
-      }
-      break;
+  drupal_install_schema('event');
+  $ret = array();
+  db_add_field($ret, 'users', 'timezone_id', array('type' => 'int', 'not null' => TRUE, 'default' => 0));
+  $zones = event_install_timezones();
+  foreach ($zones as $zone => $value) {
+    db_query("INSERT INTO {event_timezones} (timezone, name, offset, offset_dst, dst_region) VALUES (%d, '%s', '%s', '%s', %d)", $zone, $value['timezone'], $value['offset'], $value['offset_dst'], $value['dst_region']);
   }
+  variable_del('event_range_prev');
+  variable_del('event_range_next');
+  
   // Create default event type
   $type = array(
     'type' => 'event',
@@ -114,9 +141,9 @@ function event_install() {
  * Implementation of hook_uninstall().
  */
 function event_uninstall() {
-  db_query('DROP TABLE {event}');
-  db_query('DROP TABLE {event_timezones}');
-  db_query('ALTER TABLE {users} DROP timezone_id');
+  $ret = array();
+  drupal_uninstall_schema('event');
+  db_drop_field($ret, 'users', 'timezone_id');
   variable_del('event_timezone_input');
   variable_del('event_timezone_display');
   variable_del('event_ampm');
@@ -128,7 +155,7 @@ function event_uninstall() {
   variable_del('event_range_prev');
   variable_del('event_range_next');
   foreach (node_get_types() as $type => $info) {
-  	variable_del('event_nodeapi_'. $type);
+    variable_del('event_nodeapi_'. $type);
   }
 
   drupal_set_message(t('Event module successfully uninstalled'));
Index: event.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/event/event.module,v
retrieving revision 1.346
diff -u -p -r1.346 event.module
--- event.module	20 Dec 2007 20:25:34 -0000	1.346
+++ event.module	30 Dec 2007 03:27:17 -0000
@@ -26,6 +26,41 @@ function event_include_files() {
  */
 
 /**
+ * Implementation of hook_theme()
+ * @ingroup event_core
+ */
+function event_theme() {
+  return array(
+    'event_calendar_month' => array(
+      'arguments' => array('op', 'header', 'rows', 'attributes', 'caption')),
+    'event_calendar_week' => array(
+      'arguments' => array('op', 'header', 'rows', 'attributes', 'caption')),
+    'event_calendar_day' => array(
+      'arguments' => array('op', 'header', 'rows', 'attributes', 'caption')),
+    'event_calendar_table' => array(
+      'arguments' => array('op', 'header', 'rows', 'attributes', 'caption')),
+    'event_calendar_list' => array(
+      'arguments' => array('op', 'header', 'rows')),
+    'event_node_day' => array('arguments' => array('node')),
+    'event_node_week' => array('arguments' => array('node')),
+    'event_node_month' => array('arguments' => array('node')),
+    'event_node_table' => array('arguments' => array('node')),
+    'event_node_list' => array('arguments' => array('node', 'module')),
+    'event_calendar_date_box' => array('arguments' => array('date', 'view')),
+    'event_empty_day' => array('arguments' => array('date', 'view')),
+    'event_nodeapi' => array('arguments' => array('node')),
+    'event_filter_control' => array('arguments' => array('form')),
+    'event_nav_next' => array('arguments' => array('url', 'attributes')),
+    'event_nav_prev' => array('arguments' => array('url', 'attributes')),
+    'event_links' => array('arguments' => array('links', 'view')),
+    'event_ical_link' => array('arguments' => array('path')),
+    'event_more_link' => array('arguments' => array('path')),
+    'event_upcoming_item' => array('arguments' => array('node', 'types')),
+    'event_upcoming_block' => array('arguments' => array('items')),
+  );
+}
+
+/**
  * Provides the links that should be displayed when viewing events.
  *
  * @ingroup event_core
@@ -51,6 +86,9 @@ function event_link($type, $node = NULL,
     // calendar links
     // build a full list of links...
     $base = 'event/'. _event_format_url($node->event['start_exploded']) .'/';
+    if (!isset($node->filter)) {
+      $node->filter = '';
+    }
     $links['event_month'] = array('title' => t('Month'),
       'href' => $base .'month/'. $node->filter,
       'attributes' => array('title' => t('Month view')));
@@ -97,75 +135,95 @@ function event_link($type, $node = NULL,
  *
  * @ingroup event_core
  */
-function event_menu($may_cache) {
-  global $user;
-
+function event_menu() {
   $items = array();
-  if ($may_cache) {
-    $items[] = array('path' => 'event',
-                     'title' => t('Events'),
-                     'callback' => 'event_page',
-                     'access' => user_access('access content'),
-                     'type' => MENU_CALLBACK);
-    $items[] = array('path' => 'event/type',
-                     'title' => t('Filter by content type'),
-                     'callback' => 'event_type',
-                     'access' => user_access('access content'),
-                     'type' => MENU_CALLBACK);
-    $items[] = array('path' => 'event/term',
-                     'title' => t('Filter by taxonomy'),
-                     'callback' => 'event_term',
-                     'access' => user_access('access content'),
-                     'type' => MENU_CALLBACK);
-    $items[] = array('path' => 'event/feed',
-                     'title' => t('Event rss feed'),
-                     'callback' => 'event_feed',
-                     'access' => user_access('access content'),
-                     'type' => MENU_CALLBACK);
-    $items[] = array('path' => 'event/dst',
-                     'title' => t('Event dst view'),
-                     'callback' => 'event_dst',
-                     'access' => user_access('access content'),
-                     'type' => MENU_CALLBACK);
-    $items[] = array('path' => 'event/ical',
-                     'title' => t('Event ical feed'),
-                     'callback' => 'event_ical',
-                     'access' => user_access('access content'),
-                     'type' => MENU_CALLBACK);
-    $items[] = array('path' => 'admin/settings/event',
-                     'title' => t('Events'),
-                     'callback' => 'system_admin_menu_block_page',
-                     'description' => t('Set up how your site handles events.'),
-                     'access' => user_access('administer site configuration'));
-    $items[] = array('path' => 'admin/settings/event/timezone',
-                     'title' => t('Timezone handling'),
-                     'callback' => 'drupal_get_form',
-                     'callback arguments' => array('event_admin_timezone_settings'),
-                     'description' => t('Change how timezone information is saved and displayed.'),
-                     'access' => user_access('administer site configuration'));
-    $items[] = array('path' => 'admin/settings/event/overview',
-                     'title' => t('Event overview'),
-                     'callback' => 'drupal_get_form',
-                     'callback arguments' => array('event_admin_overview_settings'),
-                     'description' => t('Change how event summary information is displayed.'),
-                     'access' => user_access('administer site configuration'));
-  }
-  else {
-    if (arg(0) == 'node' && is_numeric(arg(1))) {
-      $type = db_result(db_query(db_rewrite_sql("SELECT n.type FROM {node} n WHERE n.nid = %d"), arg(1)));
-      if (event_is_enabled($type)) {
-        event_include_files();
-        $items[] = array('path' => 'node/'.arg(1).'/ical',
-                           'title' => t('Event ical'),
-                           'callback' => 'event_node_ical',
-                           'access' => user_access('access content'),
-                           'type' => MENU_CALLBACK);
-      }
-    }
-  }
+  $items['event'] = array(
+    'title' => 'Events',
+    'page callback' => 'event_page',
+    'access callback' => 'user_access',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK
+  );
+  $items['event/type'] = array(
+    'title' => 'Filter by content type',
+    'page callback' => 'event_type',
+    'access callback' => 'user_access',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK
+  );
+  $items['event/term'] = array(
+    'title' => 'Filter by taxonomy',
+    'page callback' => 'event_term',
+    'access callback' => 'user_access',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK
+  );
+  $items['event/feed'] = array(
+    'title' => 'Event rss feed',
+    'page callback' => 'event_feed',
+    'access callback' => 'user_access',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK
+  );
+  $items['event/dst'] = array(
+    'title' => 'Event dst view',
+    'page callback' => 'event_dst',
+    'access callback' => 'user_access',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK
+  );
+  $items['event/ical'] = array(
+    'title' => 'Event ical feed',
+    'page callback' => 'event_ical',
+    'access callback' => 'user_access',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK
+  );
+  $items['admin/settings/event'] = array(
+    'title' => 'Events',
+    'page callback' => 'system_admin_menu_block_page',
+    'description' => 'Set up how your site handles events.',
+    'access callback' => 'user_access',
+    'access arguments' => array('administer site configuration'),
+    'file' => 'system.admin.inc',
+    'file path' => drupal_get_path('module', 'system')
+  );
+  $items['admin/settings/event/timezone'] = array(
+    'title' => 'Timezone handling',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('event_admin_timezone_settings'),
+    'description' => 'Change how timezone information is saved and displayed.',
+    'access callback' => 'user_access',
+    'access arguments' => array('administer site configuration')
+  );
+  $items['admin/settings/event/overview'] = array(
+    'title' => 'Event overview',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('event_admin_overview_settings'),
+    'description' => 'Change how event summary information is displayed.',
+    'access callback' => 'user_access',
+    'access arguments' => array('administer site configuration')
+  );
+
+  // http://drupalbin.com/312
+  $items['node/%/ical'] = array(
+    'title' => 'Event ical',
+    'page callback' => 'event_node_ical',
+    'access callback' => 'event_ical_access',
+    'access arguments' => array(1),
+    'type' => MENU_CALLBACK
+  );
   return $items;
 }
 
+/*
+ * Access function for node/%/ical
+ */
+function event_ical_access($nid) {
+  $type = db_result(db_query("SELECT n.type FROM {node} n WHERE n.nid = %d", $nid));
+  return user_access('access content') && event_is_enabled($type);
+}
+
 /**
  * Implementation of hook_user.
  * @ingroup event_core
@@ -323,8 +381,9 @@ function event_page($year = NULL, $month
   $breadcrumbs[] = l(t('Home'), NULL);
   $breadcrumbs[] = l(t('Events'), 'event');
   $links = array();
+  $filter = array();
 
-  if ($types) {
+  if (!empty($types)) {
     // The '+' character in a query string may be parsed as ' '.
     $types = preg_split('/[+ ]/', $types);
     foreach ($types as $type) {
@@ -335,18 +394,19 @@ function event_page($year = NULL, $month
       }
     }
 
-    if (is_array($filter)) {
+    if (!empty($filter)) {
       $links['event_all'] = array('title' => t('View all'), 'href' => 'event/'. $year .'/'. $month .'/'. $day .'/'. $view .'/');
       $title =  t('Filter') .': '. implode(', ', $filter);
       $types = $temp;
     }
     else {
       $types = null;
+      $title = '';
     }
   }
 
   $terms = null;
-  if ($tids && $tids != 'all') {
+  if (!empty($tids) && $tids != 'all') {
     $links['event_all'] = array('title' => t('View all'), 'href' => 'event/'. $year .'/'. $month .'/'. $day .'/day');
     if (preg_match('/^([0-9]+[+ ])+[0-9]+$/', $tids)) {
       // The '+' character in a query string may be parsed as ' '.
@@ -356,6 +416,8 @@ function event_page($year = NULL, $month
       $terms = explode(',', $tids);
     }
   }
+  
+  $output = '';
 
   // add taxonomy filter controls to top of calendar
   if (variable_get('event_taxonomy_control', 'all') == 'all' || (variable_get('event_taxonomy_control', 'all') == 'request' && isset($terms))) {
@@ -423,6 +485,10 @@ function event_page($year = NULL, $month
       // block update
       $date = _event_user_date();
       if (arg(0) == 'event' && is_numeric(arg(1))) {
+        echo 'test arg';
+        if ($node == menu_get_object()) {
+          echo 'pass';
+        }
         // follow event calendar
         $date['year'] = (arg(1) ? arg(1) : $time['year']);
         $date['month'] = (arg(2) ? arg(2) : $time['month']);
@@ -445,13 +511,13 @@ function event_page($year = NULL, $month
 
     $output .= theme('event_links', array_merge(module_invoke_all('link', 'event_'. $view, $node, FALSE), $links), $view);
 
-    $output .= theme('event_calendar_'. $view, 'page', $thead, $tbody, array(), $caption);
+    $output .= theme('event_calendar_'. $view, 'page', (!empty($thead) ? $thead : array()), $tbody, array(), $caption);
     $output .= theme('event_ical_link', 'event/ical/'. $node->filter);
 
     // Add RSS feed and icon to events page
-    drupal_add_feed(url('event/feed', NULL, NULL, TRUE), t('Events at %site', array('%site' => variable_get('site_name', 'drupal'))));
+    drupal_add_feed(url('event/feed', array('absolute' => TRUE)), t('Events at %site', array('%site' => variable_get('site_name', 'drupal'))));
 
-    drupal_set_title(t('Events') . ($title ? ' - '. $title : ''));
+    drupal_set_title(t('Events') . (!empty($title) ? ' - '. $title : ''));
     drupal_set_breadcrumb($breadcrumbs);
     return $output;
   }
@@ -674,8 +740,8 @@ function event_calendar_table($op, $date
     $dow = _event_day_of_week($cur_date) + 1;
 
     $tbody[][] = array('colspan' => 3,
-      'class' => strtolower("$month_name ". $weekdays[$dow]['day'] . ($cur_date == $today ? ' today' : '') . ($cur_date['day'] == $date['day'] ? ' selected' : '')),
-      'id' => strtolower($month_name . $cur_date['date']),
+      'class' => strtolower("$month_name ". (!empty($weekdays[$dow]['day']) ? $weekdays[$dow]['day'] : '') . ($cur_date == $today ? ' today' : '') . ($cur_date['day'] == $date['day'] ? ' selected' : '')),
+      'id' => strtolower($month_name . (!empty($cur_date['date']) ? $cur_date['date'] : '')),
       'data' => event_render_day($cur_date, 'table', $types, $terms, $rewrite_parameter));
     $cur_date = event_date_later($cur_date, 1);
   }
@@ -725,7 +791,7 @@ function event_calendar_list($op, $date,
  * @return A formatted rss feed.
  */
 function event_calendar_rss($date, $duration, $types = NULL, $terms = NULL, $title = NULL, $rewrite_parameter = array()) {
-  global $base_url, $locale;
+  global $base_url, $language;
 
   $end_date =  event_date_later($date, $duration);
 
@@ -742,12 +808,12 @@ function event_calendar_rss($date, $dura
   }
 
   $filtered = event_filter_nodes($nodes, $types, $terms);
-
+  $items = '';
   foreach ($filtered as $node) {
     $body = '<div class="start">'. t('Start') .': '. $node->event['start_format'] .'</div>'."\n";
     $body .= '<div class="end">'. t('End') .': '. $node->event['end_format'] .'</div>'."\n";
     $body .= check_markup($node->teaser);
-    $link = url("node/$node->nid", NULL, NULL, 1);
+    $link = url('node/'. $node->nid, array('absolute' => TRUE));
     // Allow modules to add additional item fields
     $extra = node_invoke_nodeapi($node, 'rss item');
     $extra = array_merge($extra, array(array('key' => 'pubDate', 'value' =>  date('r', $node->changed))));
@@ -763,7 +829,7 @@ function event_calendar_rss($date, $dura
   else {
     $output .= "<rss version=\"2.0\" xml:base=\"". $base_url ."\">\n";
   }
-  $output .= format_rss_channel(variable_get('site_name', 'drupal') . t(' - Events Feed'), url('event/feed', NULL, NULL, TRUE), $description, $items, $locale);
+  $output .= format_rss_channel(variable_get('site_name', 'drupal') . t(' - Events Feed'), url('event/feed', array('absolute' => TRUE)), $description, $items, $language);
   $output .= "</rss>\n";
 
   return $output;
@@ -785,7 +851,7 @@ function event_calendar_rss($date, $dura
  * @return A formatted ical feed.
  */
 function event_calendar_ical($date, $duration, $types = NULL, $terms = NULL, $title = NULL, $rewrite_parameter = array()) {
-  global $base_url, $locale;
+  global $base_url, $language;
 
   $end_date = event_date_later($date, $duration);
 
@@ -843,8 +909,8 @@ function _event_node_ical($node) {
   }
   $event['summary'] = $node->title;
   $event['description'] = check_markup($node->teaser ? $node->teaser : $node->body);
-  $event['uid'] = url("node/$node->nid", NULL, NULL, 1);
-  $event['url'] = url("node/$node->nid", NULL, NULL, 1);
+  $event['uid'] = url("node/$node->nid", array('absolute' => TRUE));
+  $event['url'] = url("node/$node->nid", array('absolute' => TRUE));
 
   return $event;
 }
@@ -1326,7 +1392,7 @@ function event_filter_nodes($nodes, $typ
 }
 
 function event_taxonomy_filter($node, $terms) {
-  if ($tids = taxonomy_node_get_terms($node->nid)) {
+  if ($tids = taxonomy_node_get_terms($node)) {
     foreach ($tids as $tid => $term) {
       if (in_array($tid, $terms)) {
         return TRUE;
@@ -1369,7 +1435,7 @@ function event_render_day_single($date, 
  * @return A string containing all of the events taking place.
  */
 function event_render_day($date, $view, $types, $terms, $rewrite_parameter = array()) {
-
+  $output = '';
   $nodes = event_calendar_data($date, $view, $types, $terms, 'lookup', array(), $rewrite_parameter);
   if (count($nodes)) {
     $output = theme('event_calendar_date_box', $date, $view);
@@ -1592,16 +1658,16 @@ function event_validate_form_date($form_
       form_set_error($prefix . 'year', t('The year has to be a number.'));
     }
     if (isset($form_values[$prefix . 'year']) && ($form_values[$prefix . 'year'] < 1000 || $form_values[$prefix . 'year'] > 9999)) {
-      form_set_error($prefix . 'year', t("Only years from 1000 to 9999 are supported."));
+      form_set_error($prefix . 'year', t('Only years from 1000 to 9999 are supported.'));
     }
     if (isset($form_values[$prefix . 'month']) && $form_values[$prefix . 'month'] > 12) {
-      form_set_error($prefix . 'month', t("A year has only 12 months in the Gregorian calendar."));
+      form_set_error($prefix . 'month', t('A year has only 12 months in the Gregorian calendar.'));
     }
     if (isset($form_values[$prefix . 'day']) && $form_values[$prefix . 'day'] > 31) {
       form_set_error($prefix . 'day', t("Months with more than 31 day don't exist."));
     }
     if (isset($form_values[$prefix . 'day']) && !is_numeric($form_values[$prefix . 'day'])) {
-      form_set_error($prefix . 'day', t("A day needs to be a number."));
+      form_set_error($prefix . 'day', t('A day needs to be a number.'));
     }
     if (variable_get('event_ampm', '0')) {
       if (isset($form_values[$prefix . 'hour']) && $form_values[$prefix . 'hour'] > 12) {
@@ -1645,12 +1711,14 @@ function _event_nav($date, $dir, $view, 
   if (($dir == 'prev' && event_is_later($date, $range)) || ($dir == 'next' && event_is_later($range, $date))) {
     $inc = ($dir == 'prev' ? -1 : 1);
     $duration = ($duration ? $duration : 1);
+    
+    $attributes = array();
 
     // we have to separeate block navigation from normal month view
     // what happens with $attributes if its not declared? its still passed to theme below
     if ($view == 'block') {
       $view = 'month';
-      $attributes = array('class' => 'updateblock');
+      $attributes['class'] = 'updateblock';
     }
 
     switch ($view) {
@@ -1705,7 +1773,7 @@ function _event_get_taxonomy_control($cu
 * @param $autosubmit Adds 'onChange' form submit javascript command to control.
 * @return An array representing the form.
 */
-function event_taxonomy_filter_form($curterm, $autosubmit) {
+function event_taxonomy_filter_form($form_state, $curterm, $autosubmit) {
 
   $types = event_get_types();
   $vs = array();
@@ -1769,7 +1837,7 @@ function _event_get_type_control($curtyp
 * @param $autosubmit Adds 'onChange' form submit javascript command to control.
 * @return An array representing the form.
 */
-function event_type_filter_form($curtype, $autosubmit) {
+function event_type_filter_form($form_state, $curtype, $autosubmit) {
   $results = event_get_types('all');
 
   $items['all'] = t('(all)');
@@ -1846,7 +1914,7 @@ function event_block($op = 'list', $delt
             return $block;
           case 'event-upcoming-'. $type:
             $result = event_block_upcoming(variable_get('event_upcoming_limit', '6'), array($type));
-            $block['subject'] = strtr(format_plural($result['count'], 'Upcoming @name', 'Upcoming @count @names'), array('@name' => $type));
+            $block['subject'] = format_plural($result['count'], 'Upcoming @name', 'Upcoming @count @names', array('@name' => $type));
             $block['content'] = $result['content'];
             return $block;
         }
@@ -1954,209 +2022,249 @@ function _event_block_upcoming($limit = 
 /**
  * Implementation of hook_form_alter
  */
-function event_form_alter($form_id, &$form) {
+function event_form_alter(&$form, $form_state, $form_id) {
   global $user;
 
   $node = isset($form['#node']) ? $form['#node'] : NULL;
 
-  switch ($form_id) {
+  if ($form_id == 'node_type_form') {
     // node settings form
-    case 'node_type_form':
-      $type = (isset($form['old_type']) && isset($form['old_type']['#value'])) ? $form['old_type']['#value'] : NULL;
-      $form['workflow']['event_nodeapi'] = array(
-        '#type' => 'radios',
-        '#title' => t('Show in event calendar'),
-        '#default_value' => variable_get('event_nodeapi_'. $type, 'never'),
-        '#options' => array('all' => t('All views'), 'solo' => t('Only in views for this type'), 'never' => t('Never')),
-        '#description' => t('All views: This content type will be available for display on all calendar views, including with other events.<br />Only in views for this type: This content type will only appear in calendar views specific to this type and never with other events.<br />Never: This content type will not be associated with the events calendar.')
-      );
-      break;
+    $type = (isset($form['old_type']) && isset($form['old_type']['#value'])) ? $form['old_type']['#value'] : NULL;
+    $form['workflow']['event_nodeapi'] = array(
+      '#type' => 'radios',
+      '#title' => t('Show in event calendar'),
+      '#default_value' => variable_get('event_nodeapi_'. $type, 'never'),
+      '#options' => array('all' => t('All views'), 'solo' => t('Only in views for this type'), 'never' => t('Never')),
+      '#description' => t('All views: This content type will be available for display on all calendar views, including with other events.<br />Only in views for this type: This content type will only appear in calendar views specific to this type and never with other events.<br />Never: This content type will not be associated with the events calendar.')
+    );
+  }
+  else if (isset($form['type']) && $form_id == $form['type']['#value'] .'_node_form') {
     // node edit form
-    case $form['type']['#value'] .'_node_form':
-      if (variable_get('event_nodeapi_'. $form['type']['#value'], 'never') != 'never') {
-
-        $form['event']['has_time'] = array(
-          '#type' => 'checkbox',
-          '#title' => t('Event has time'),
-          '#default_value' => !isset($node->event['has_time']) ? 1 : $node->event['has_time'],
-          '#weight' => -16,
-          '#description' => t('Is time important for this event? Uncheck if event takes all day.')
-        );
-
-        $form['event']['has_end_date'] = array(
-          '#type' => 'checkbox',
-          '#title' => t('Event has end date'),
-          '#default_value' => $node->event['has_end_date'],
-          '#weight' => -14,
-          '#description' => t('Check if you want to specify end date for this event, then choose end date below.')
-        );
+    if (variable_get('event_nodeapi_'. $form['type']['#value'], 'never') != 'never') {
+      if (isset($form_state['node_preview'])) {
+        $node->event = event_preview($node);
+      }
+      $form['event']['has_time'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Event has time'),
+        '#default_value' => !isset($node->event['has_time']) ? 1 : $node->event['has_time'],
+        '#weight' => -16,
+        '#description' => t('Is time important for this event? Uncheck if event takes all day.')
+      );
 
-        // We need to check if the timezone ID was set
-        if (variable_get('date_default_timezone_id', 0) === 0) {
-          drupal_set_message(t('Please <a href="!url">select the default timezone</a> for your website before creating events.', array('!url' => url('admin/settings/date-time'))), 'error');
-        }
+      $form['event']['has_end_date'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Event has end date'),
+        '#default_value' => !isset($node->event['has_end_date']) ? 0 : $node->event['has_end_date'],
+        '#weight' => -14,
+        '#description' => t('Check if you want to specify end date for this event, then choose end date below.')
+      );
 
-        /**
-         *  Check to see if jscalendar is installed
-         *  If so, display it, otherwise default to normal drop-down list selectors
-         */
-        if (module_exists('jscalendar')) {
-          if (isset($node->event)) {
-            $start_default = $node->event['start_orig'];
-            $end_default = $node->event['end_orig'];
-          }
-          else {
-            $start_default = _event_user_time();
-            $start_default = $start_default['year'] .'-'. $start_default['month'] .'-'. $start_default['day'] .' '. $start_default['hour'] .':'. $start_default['minute'];
-            $end_default = $start_default;
-          }
+      // We need to check if the timezone ID was set
+      if (variable_get('date_default_timezone_id', 0) === 0) {
+        drupal_set_message(t('Please <a href="!url">select the default timezone</a> for your website before creating events.', array('!url' => url('admin/settings/date-time'))), 'error');
+      }
 
-          $form['event']['event_start'] = array(
-            '#title' => t('Start date'),
-            '#type' => 'textfield',
-            '#default_value' => $start_default,
-            '#attributes' => array('class' => 'jscalendar'),
-            '#jscalendar_ifFormat' => '%Y-%m-%d %H:%M',
-            '#jscalendar_showsTime' => 'true',
-            '#jscalendar_timeFormat' => variable_get('event_ampm', '0') == 0 ? '24' : '12',
-            '#size' => 19,
-            '#maxlength' => 19,
-            '#weight' => -15,
-            '#description' => t('YYYY-MM-DD HH:MM'),
-            );
-          $form['event']['event_end'] = array(
-            '#title' => t('End Date'),
-            '#type' => 'textfield',
-            '#default_value' => $end_default,
-            '#attributes' => array('class' => 'jscalendar'),
-            '#jscalendar_ifFormat' => '%Y-%m-%d %H:%M',
-            '#jscalendar_showsTime' => 'true',
-            '#jscalendar_timeFormat' => variable_get('event_ampm', '0') == 0 ? '24' : '12',
-            '#size' => 19,
-            '#maxlength' => 19,
-            '#weight' => -13,
-            '#description' => t('YYYY-MM-DD HH:MM'),
-            );
-        }
-        else {
-          $form['event']['start'] = array(
-            '#type' => 'fieldset',
-            '#title' => t('Start date'),
-            '#weight' => -15
-            );
-          $form['event']['start']['date'] = event_form_date(isset($node->event['start_orig']) ? $node->event['start_orig'] : _event_user_time(), 'start', $node->event['start_offset']);
-
-          $form['event']['end'] = array(
-            '#type' => 'fieldset',
-            '#title' => t('End date'),
-            '#weight' => -13
-            );
-          $form['event']['end']['date'] = event_form_date(isset($node->event['end_orig']) ? $node->event['end_orig'] : _event_user_time(), 'end', $node->event['end_offset']);
-        }
-
-        if (variable_get('event_timezone_input', 'site') == 'input') {
-          $form['event']['timezone'] = array(
-            '#type' => 'select',
-            '#title' => t('Time zone'),
-            '#default_value' => ($node->event['timezone'] ? $node->event['timezone'] : variable_get('date_default_timezone_id', 0)),
-            '#options' => event_zonelist(),
-            '#description' => t('Select the time zone this event occurs in.'),
-            '#weight' => -12
-            );
-        }
-        elseif (variable_get('configurable_timezones', 1) && $user->uid && strlen($user->timezone) && (variable_get('event_timezone_input', 'site') == 'user')) {
-          $form['event']['timezone'] = array(
-            '#type' => 'hidden',
-            '#value' => $user->timezone_id,
-            );
+      /**
+       *  Check to see if jscalendar is installed
+       *  If so, display it, otherwise default to normal drop-down list selectors
+       */
+      if (module_exists('jscalendar')) {
+        if (isset($node->event)) {
+          $start_default = $node->event['start'];
+          $end_default = $node->event['end'];
         }
         else {
-          $form['event']['timezone'] = array(
-            '#type' => 'hidden',
-            '#value' => variable_get('date_default_timezone_id', 0),
-            );
-        }
-
-        if (isset($form['#validate'])) { 
-          $form['#validate'] = array('event_form_validate' => array()) + $form['#validate'];
-        }
+          $start_default = _event_user_time();
+          $start_default = $start_default['year'] .'-'. $start_default['month'] .'-'. $start_default['day'] .' '. $start_default['hour'] .':'. $start_default['minute'];
+          $end_default = $start_default;
+        }
+
+        $form['event']['event_start'] = array(
+          '#title' => t('Start date'),
+          '#type' => 'textfield',
+          '#default_value' => $start_default,
+          '#attributes' => array('class' => 'jscalendar'),
+          '#jscalendar_ifFormat' => '%Y-%m-%d %H:%M',
+          '#jscalendar_showsTime' => 'true',
+          '#jscalendar_timeFormat' => variable_get('event_ampm', '0') == 0 ? '24' : '12',
+          '#size' => 19,
+          '#maxlength' => 19,
+          '#weight' => -15,
+          '#description' => t('YYYY-MM-DD HH:MM'),
+          );
+        $form['event']['event_end'] = array(
+          '#title' => t('End Date'),
+          '#type' => 'textfield',
+          '#default_value' => $end_default,
+          '#attributes' => array('class' => 'jscalendar'),
+          '#jscalendar_ifFormat' => '%Y-%m-%d %H:%M',
+          '#jscalendar_showsTime' => 'true',
+          '#jscalendar_timeFormat' => variable_get('event_ampm', '0') == 0 ? '24' : '12',
+          '#size' => 19,
+          '#maxlength' => 19,
+          '#weight' => -13,
+          '#description' => t('YYYY-MM-DD HH:MM'),
+          );
       }
-      break;
-    case 'system_date_time_settings':
-      $zones = event_zonelist('offset');
-      $form['date_default_timezone'] = array(
-        '#type' => 'select',
-        '#title' => t('Default time zone'),
-        '#default_value' => variable_get('date_default_timezone_id', 0) .'|'. variable_get('date_default_timezone', 0),
-        '#options' => $zones,
-        '#description' => t('Select the default site time zone.')
+      else {
+        $form['event']['start'] = array(
+          '#type' => 'fieldset',
+          '#title' => t('Start date'),
+          '#weight' => -15,
         );
-        $submit['event_extra_setting_form_submit'] = array();
-        $form['#submit'] = $form['#submit'] + $submit;
-      break;
-    case 'user_edit':
-      if (variable_get('configurable_timezones', 1)) {
-        $account = user_load(array('uid' => arg(1)));
-        $zones = event_zonelist('offset');
-        $form['timezone']['timezone'] = array(
+        $form['event']['start']['date'] = event_form_date(isset($node->event['start']) ? $node->event['start'] : _event_user_time(), 'start');
+
+        $form['event']['end'] = array(
+          '#type' => 'fieldset',
+          '#title' => t('End date'),
+          '#weight' => -13
+        );
+        $form['event']['end']['date'] = event_form_date(isset($node->event['end']) ? $node->event['end'] : _event_user_time(), 'end');
+      }
+
+      if (variable_get('event_timezone_input', 'site') == 'input') {
+        $form['event']['timezone'] = array(
           '#type' => 'select',
           '#title' => t('Time zone'),
-          '#default_value' => strlen($account->timezone) ? ($account->timezone_id .'|'. $account->timezone) : (variable_get('date_default_timezone_id', 0) .'|'. variable_get('date_default_timezone', 0)),
-          '#options' => $zones,
-          '#description' => t('Select your current local time. Dates and times throughout this site will be displayed using this time zone.'),
+          '#default_value' => (isset($node->event['timezone']) ? $node->event['timezone'] : variable_get('date_default_timezone_id', 0)),
+          '#options' => event_zonelist(),
+          '#description' => t('Select the time zone this event occurs in.'),
+          '#weight' => -12
+          );
+      }
+      elseif (variable_get('configurable_timezones', 1) && $user->uid && strlen($user->timezone) && (variable_get('event_timezone_input', 'site') == 'user')) {
+        $form['event']['timezone'] = array(
+          '#type' => 'hidden',
+          '#value' => $user->timezone_id,
+          );
+      }
+      else {
+        $form['event']['timezone'] = array(
+          '#type' => 'hidden',
+          '#value' => variable_get('date_default_timezone_id', 0),
           );
-        $submit['event_extra_user_form_submit'] = array();
-        $form['#submit'] = $form['#submit'] + $submit;
       }
+
+      $form['#validate'][] = 'event_form_validate'; 
+    }
+  }
+  else if ($form_id == 'system_date_time_settings')
+  {
+    $zones = event_zonelist('offset');
+    $form['locale']['date_default_timezone'] = array(
+      '#type' => 'select',
+      '#title' => t('Default time zone'),
+      '#default_value' => variable_get('date_default_timezone_id', 0) .'|'. variable_get('date_default_timezone', 0),
+      '#options' => $zones,
+      '#description' => t('Select the default site time zone.')
+      );
+    $form['#submit'][] = 'event_extra_setting_form_submit';
+  }
+  else if ($form_id == 'user_profile_form')
+  {
+    if (variable_get('configurable_timezones', 1)) {
+      $account = user_load(array('uid' => arg(1)));
+      $zones = event_zonelist('offset');
+      $form['timezone']['timezone'] = array(
+        '#type' => 'select',
+        '#title' => t('Time zone'),
+        '#default_value' => strlen($account->timezone) ? ($account->timezone_id .'|'. $account->timezone) : (variable_get('date_default_timezone_id', 0) .'|'. variable_get('date_default_timezone', 0)),
+        '#options' => $zones,
+        '#description' => t('Select your current local time. Dates and times throughout this site will be displayed using this time zone.'),
+        );
+      $form['#submit'][] = 'event_extra_user_form_submit';
+    }
   }
 }
 
-function event_form_validate($form_id, $form_values, $form) {
-  event_validate_form_date($form_values, 'start');
-  event_validate_form_date($form_values, 'end');
+function event_form_validate($form, &$form_state) {
+  event_validate_form_date($form_state['values'], 'start');
+  event_validate_form_date($form_state['values'], 'end');
 
   if (!module_exists('jscalendar')) {
     if (variable_get('event_ampm', '0') == 1) {
-      if ($form_values['start_ampm'] == 'pm') {
-        $form_values['start_hour'] += 12;
+      if ($form_state['values']['start_ampm'] == 'pm') {
+        $form_state['values']['start_hour'] += 12;
       }
-      if ($form_values['end_ampm'] == 'pm') {
-        $form_values['end_hour'] += 12;
+      if ($form_state['values']['end_ampm'] == 'pm') {
+        $form_state['values']['end_hour'] += 12;
       }
     }
 
     $start_datetime = array(
-      'year' => $form_values['start_year'],
-      'month' => $form_values['start_month'],
-      'day' => $form_values['start_day'],
-      'hour' => $form_values['start_hour'],
-      'minute' => $form_values['start_minute'],
+      'year' => $form_state['values']['start_year'],
+      'month' => $form_state['values']['start_month'],
+      'day' => $form_state['values']['start_day'],
+      'hour' => $form_state['values']['start_hour'],
+      'minute' => $form_state['values']['start_minute'],
     );
 
     $end_datetime = array(
-      'year' => $form_values['end_year'],
-      'month' => $form_values['end_month'],
-      'day' => $form_values['end_day'],
-      'hour' => $form_values['end_hour'],
-      'minute' => $form_values['end_minute'],
+      'year' => $form_state['values']['end_year'],
+      'month' => $form_state['values']['end_month'],
+      'day' => $form_state['values']['end_day'],
+      'hour' => $form_state['values']['end_hour'],
+      'minute' => $form_state['values']['end_minute'],
     );
 
-    if (isset($form_values['start_year']) && event_is_later($start_datetime, $end_datetime, 'array')) {
-      form_set_value($form['event']['end']['date']['end_year'], $form_values['start_year']);
-      form_set_value($form['event']['end']['date']['end_month'], $form_values['start_month']);
-      form_set_value($form['event']['end']['date']['end_day'], $form_values['start_day']);
-      form_set_value($form['event']['end']['date']['end_hour'], $form_values['start_hour']);
-      form_set_value($form['event']['end']['date']['end_minute'], $form_values['start_minute']);
+    if (isset($form_state['values']['start_year']) && event_is_later($start_datetime, $end_datetime, 'array')) {
+      form_set_value($form['event']['end']['date']['end_year'], $form_state['values']['start_year'], $form_state);
+      form_set_value($form['event']['end']['date']['end_month'], $form_state['values']['start_month'], $form_state);
+      form_set_value($form['event']['end']['date']['end_day'], $form_state['values']['start_day'], $form_state);
+      form_set_value($form['event']['end']['date']['end_hour'], $form_state['values']['start_hour'], $form_state);
+      form_set_value($form['event']['end']['date']['end_minute'], $form_state['values']['start_minute'], $form_state);
       if (variable_get('event_ampm', '0') == 1) {
-        form_set_value($form['event']['end']['date']['end_ampm'], $form_values['start_ampm']);
+        form_set_value($form['event']['end']['date']['end_ampm'], $form_state['values']['start_ampm'], $form_state);
       }
     }
   }
   else {
-    if (isset($form_values['event_start']) && event_is_later($form_values['event_start'], $form_values['event_end'], 'string')) {
-      form_set_value($form['event']['event_end'], $form_values['event_start']);
+    if (isset($form_state['values']['event_start']) && event_is_later($form_state['values']['event_start'], $form_state['values']['event_end'], 'string')) {
+      form_set_value($form['event']['event_end'], $form_state['values']['event_start'], $form_state);
+    }
+  }
+}
+
+function event_preview($node) {
+  global $user;
+  $event = array();
+  
+  if (!isset($node->event_start)) {
+    if (variable_get('event_ampm', '0')) {
+      if ($node->start_ampm == 'pm' && $node->start_hour < 12) {
+        $node->start_hour += 12;
+      }
+      if ($node->end_ampm == 'pm' && $node->end_hour < 12) {
+        $node->end_hour += 12;
+      }
     }
+    $node->event_start = $node->start_year .'-'. $node->start_month .'-'. $node->start_day .' '. str_pad($node->start_hour, 2, '0', STR_PAD_LEFT) .':'. str_pad($node->start_minute, 2, '0', STR_PAD_LEFT) .':00';
+    $node->event_end = $node->end_year .'-'. $node->end_month .'-'. $node->end_day .' '. str_pad($node->end_hour, 2, '0', STR_PAD_LEFT) .':'. str_pad($node->end_minute, 2, '0', STR_PAD_LEFT) .':00';
+  }
+
+  switch (variable_get('event_timezone_display', 'event')) {
+    case 'site':
+      if (variable_get('date_default_timezone_id', 0) != $node->timezone) {
+        $event['start'] = $event['start_site'];
+        $event['end'] = $event['end_site'];
+        break;
+      }
+    // no break
+    case 'event':
+      $event['start'] = $node->event_start;
+      $event['end'] = $node->event_end;
+      break;
+    case 'user':
+      $event['start'] = $event['start_user'];
+      $event['end'] = $event['end_user'];
+      break;
   }
+
+  $event['timezone'] = $node->timezone;
+  $event['has_time'] = $node->has_time;
+  $event['has_end_date'] = $node->has_end_date;
+  return $event;
 }
 
 /**
@@ -2193,9 +2301,9 @@ function event_nodeapi(&$node, $op, $tea
                        'node_type'          => $node->type));
         break;
       case 'view':
-        if (isset($node->in_preview) && $node->in_preview) {
+        if ($node->build_mode == NODE_BUILD_PREVIEW) {
           global $user;
-          event_nodeapi($node, 'submit');
+          event_nodeapi($node, 'presave');
           $node->event['start'] = $node->event_start;
           $node->event['end'] = $node->event_end;
           $node->event['start_exploded'] = event_explode_date($node->event_start);
@@ -2205,6 +2313,8 @@ function event_nodeapi(&$node, $op, $tea
           $node->event['start_site'] = event_date_later($node->event['start_exploded'], variable_get('date_default_timezone', 0), 'seconds');
           $node->event['end_site'] = event_date_later($node->event['end_exploded'], variable_get('date_default_timezone', 0), 'seconds');
           $node->event['timezone'] = $node->timezone;
+          $node->event['has_time'] = $node->has_time;
+          $node->event['has_end_date'] = $node->has_end_date;
         }
         switch (variable_get('event_timezone_display', 'event')) {
           case 'site':
@@ -2228,6 +2338,8 @@ function event_nodeapi(&$node, $op, $tea
         $node->event['start_time_format'] = event_format_date($node->event['start_exploded'], 'custom', (variable_get('event_ampm', '0') ? 'g:i a' : 'H:i'));
         $node->event['end_format'] = event_format_date($node->event['end_exploded'], 'small');
         $node->event['end_time_format'] = event_format_date($node->event['end_exploded'], 'custom', (variable_get('event_ampm', '0') ? 'g:i a' : 'H:i'));
+
+        include_once(EVENT_PATH .'/event.theme');
         $node->content['event'] = array(
           '#value' => theme('event_nodeapi', $node),
           '#weight' => -10,
@@ -2237,7 +2349,7 @@ function event_nodeapi(&$node, $op, $tea
         $node->body = theme('event_nodeapi', $node) . $node->body;
         $node->teaser = theme('event_nodeapi', $node) . $node->teaser;
         break;
-      case 'submit':
+      case 'presave':
         // $node->event_start is set for jscalendar and eventrepeat module
         if (!isset($node->event_start)) {
           if (variable_get('event_ampm', '0')) {
@@ -2251,7 +2363,6 @@ function event_nodeapi(&$node, $op, $tea
           $node->event_start = $node->start_year .'-'. $node->start_month .'-'. $node->start_day .' '. str_pad($node->start_hour, 2, '0', STR_PAD_LEFT) .':'. str_pad($node->start_minute, 2, '0', STR_PAD_LEFT) .':00';
           $node->event_end = $node->end_year .'-'. $node->end_month .'-'. $node->end_day .' '. str_pad($node->end_hour, 2, '0', STR_PAD_LEFT) .':'. str_pad($node->end_minute, 2, '0', STR_PAD_LEFT) .':00';
         }
-
         $node->start_in_dst = event_is_dst($node->timezone, $node->event_start);
         $node->end_in_dst = event_is_dst($node->timezone, $node->event_end);
         break;
@@ -2623,7 +2734,7 @@ function event_is_dst($dst_region, $time
       break;
   }
 
-  return (int) ($dststart <= $timestamp && $timestamp <= $dstend);
+  return (int) ((isset($dststart) ? $dststart : 0) <= $timestamp && $timestamp <= (isset($dstend) ? $dstend : 0));
 }
 
 /**
@@ -2641,9 +2752,9 @@ function event_is_later($date_a, $date_b
     $date_a = event_explode_date($date_a);
     $date_b = event_explode_date($date_b);
   }
-
-  $date_a = mktime((int)$date_a['hour'], (int)$date_a['minute'], (int)$date_a['second'], (int)$date_a['month'], (int)$date_a['day'], (int)$date_a['year']);
-  $date_b = mktime((int)$date_b['hour'], (int)$date_b['minute'], (int)$date_b['second'], (int)$date_b['month'], (int)$date_b['day'], (int)$date_b['year']);
+  
+  $date_a = mktime((int)$date_a['hour'], (int)$date_a['minute'], isset($date_a['second']) ? (int)$date_a['second'] : 0, (int)$date_a['month'], (int)$date_a['day'], (int)$date_a['year']);
+  $date_b = mktime((int)$date_b['hour'], (int)$date_b['minute'], isset($date_b['second']) ? (int)$date_b['second'] : 0, (int)$date_b['month'], (int)$date_b['day'], (int)$date_b['year']);
 
   if ($date_a >= $date_b) {
     return TRUE;
@@ -2703,8 +2814,8 @@ function event_implode_date($date) {
 /**
  * Special submit handler for the site timezone form.
  */
-function event_extra_setting_form_submit($form_id, &$form_values){
-  $values = explode('|', $form_values['date_default_timezone']);
+function event_extra_setting_form_submit($form, &$form_state){
+  $values = explode('|', $form_state['values']['date_default_timezone']);
   variable_set('date_default_timezone', $values[1]);
   variable_set('date_default_timezone_id', $values[0]);
 }
@@ -2712,8 +2823,8 @@ function event_extra_setting_form_submit
 /**
  * Special submit handler for the user timezone form.
  */
-function event_extra_user_form_submit($form_id, &$form_values){
-  $values = explode('|', $form_values['timezone']);
+function event_extra_user_form_submit($form, &$form_state){
+  $values = explode('|', $form_state['values']['timezone']);
   db_query('UPDATE {users} SET timezone = %d, timezone_id = %d WHERE uid = %d', $values[1], $values[0], arg(1));
 }
 
@@ -2941,7 +3052,7 @@ function event_zonelist($key = 'id') {
     $zones['id'] = array();
     foreach ($tz_array as $id => $zone) {
       $zones['id'][$id] = t($zone['name']);
-      if (event_is_dst(_event_user_time(), $zone['dst_region'])) {
+      if (event_is_dst($zone['dst_region'], _event_user_time())) {
         $offset = explode(':', $zone['offset_dst']);
       }
       else {
@@ -3103,8 +3214,8 @@ function event_timezone_map($offset) {
  * @param $section the page which is requesting help
  * @return the help text
  */
-function event_help($section) {
-  switch ($section) {
+function event_help($path, $arg) {
+  switch ($path) {
     case 'admin/help#event':
       $output = '<p>'. t('The event module allows for any type of content to be event enabled,  meaning content can have a start and end time, and appear in calendars.  The ability to event enable any content type combined with the ability to create new types of content make it possible to create unlimited types of calendars.  The ability to broadly event enable content will allow for creative applications combining information and real world events.') .'</p>';
       $output .= '<p>'. t('The administrator can decide which content types should be events for their site.  In content type configuration, administrators can select the calendar view options: never, all views, or only views for this type. For example, this makes it possible to have a general calendar which shows all meetups and house parties in the same calendar, and have a separate calendar for rallies which only contains the rallies content type. Calendars can be customized to view a specific content type or a category of content, using taxonomies.') .'</p>';
@@ -3115,7 +3226,7 @@ function event_help($section) {
 <li>administer general event options <a href="!admin-settings-event" title="administer events">administer &gt;&gt; settings &gt;&gt; events</a>.</li>
 <li><a href="!node-add" title="list of content types that can be created">create content</a> and set a start and end time, if the administrator has set that content type to be event enabled.</li>
 <li>use <a href="!external-http-drupal-org-handbook-modules-rsvp">RSVP</a> or <a href="!external-http-drupal-org-handbook-modules-signup">signup</a> module to invite users to events.</li>
-', array('!admin-node-configure-types' => url('admin/content/types'), '!admin-settings-event' => url('admin/event/event'), '!node-add' => url('node/add'), '!external-http-drupal-org-handbook-modules-signup' => 'http://drupal.org/project/signup', '!external-http-drupal-org-handbook-modules-rsvp' => 'http://drupal.org/project/rsvp')) .'</ul>';
+', array('!admin-node-configure-types' => url('admin/content/types'), '!admin-settings-event' => url('admin/settings/event'), '!node-add' => url('node/add'), '!external-http-drupal-org-handbook-modules-signup' => 'http://drupal.org/project/signup', '!external-http-drupal-org-handbook-modules-rsvp' => 'http://drupal.org/project/rsvp')) .'</ul>';
       $output .= '<p>'. t('For more information please read the configuration and customization handbook <a href="!event">Event page</a>.', array('!event' => 'http://www.drupal.org/handbook/modules/event/')) .'</p>';
       return $output;
     case 'event/dst':
Index: event.theme
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/event/event.theme,v
retrieving revision 1.61
diff -u -p -r1.61 event.theme
--- event.theme	3 Dec 2007 14:38:48 -0000	1.61
+++ event.theme	30 Dec 2007 03:27:17 -0000
@@ -69,15 +69,15 @@ function theme_event_calendar_list($op, 
 function theme_event_node_day($node) {
   static $zebra;
 	
-  $output .= '<div class="event dayview vevent'. ($zebra++%2? ' odd' : '') .'">'."\n";
+  $output = '<div class="event dayview vevent'. ($zebra++%2? ' odd' : '') .'">'."\n";
 
   if (variable_get('event_type_control', 'all') != 'never') {
     if ((count(event_get_types('all')) + count(event_get_types('solo'))) > 1) {
-      $output .= '<div class="type">'. l('('. $node->event['node_type'] .')', 'event/'. _event_format_url($node->event['start_exploded']) .'/day/'. $node->type, array('title' => t('limit view to events of this type'))).'</div>'."\n";
+      $output .= '<div class="type">'. l('('. $node->event['node_type'] .')', 'event/'. _event_format_url($node->event['start_exploded']) .'/day/'. $node->type, array('attributes' => array('title' => t('limit view to events of this type')))) .'</div>'."\n";
     }
   }
 
-  $output .= '<div class="title summary">'. l($node->title, "node/$node->nid", array('title' => t('view this event'))) .'</div>'."\n";
+  $output .= '<div class="title summary">'. l($node->title, "node/$node->nid", array('attributes' => array('title' => t('view this event')))) .'</div>'."\n";
   if ($node->event['state'] != 'allday' && $node->event['state'] != 'ongoing') {
     $output .= '<div class="start dtstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('Start: ') . $node->event['start_time_format'] .'</div>'."\n";
     if ($node->event['start'] != $node->event['end']) {
@@ -100,8 +100,8 @@ function theme_event_node_day($node) {
 function theme_event_node_week($node) {
   static $stripe, $stripe_map;
 
-  if(!$stripe_map[$node->nid]) {
-    if($stripe >= 10) {
+  if (empty($stripe_map[$node->nid])) {
+    if ($stripe >= 10) {
       $stripe = 1;
     }
     else {
@@ -110,9 +110,10 @@ function theme_event_node_week($node) {
     $stripe_map[$node->nid] = $stripe;
   }
 
-  $output .= '<div class="event weekview vevent">'."\n";
+  $output = '<div class="event weekview vevent">'."\n";
   $output .= '<div class="stripe-'. $stripe_map[$node->nid] .'"></div>'."\n";
-
+  
+  $times = '';
   switch ($node->event['state']) {
     case 'singleday':
       $times = '<div class="start dtstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('Start: ') . $node->event['start_time_format'] .'</div>'."\n";
@@ -138,13 +139,13 @@ function theme_event_node_week($node) {
 
   if (variable_get('event_type_control', 'all') != 'never') {
     if ((count(event_get_types('all')) + count(event_get_types('solo'))) > 1) {
-      $output .= '<div class="type">'. l('('. $node->event['node_type'] .')', 'event/'. _event_format_url($node->event['current_date']) .'/month/'. $node->type, array('title' => t('limit view to events of this type'))).'</div>'."\n";
+      $output .= '<div class="type">'. l('('. $node->event['node_type'] .')', 'event/'. _event_format_url($node->event['current_date']) .'/month/'. $node->type, array('attributes' => array('title' => t('limit view to events of this type')))) .'</div>'."\n";
     }
   }
-  $output .= '<div class="title">'. l($node->title, "node/$node->nid", array('title' => t('view this event'))) .'</div>'."\n";
+  $output .= '<div class="title">'. l($node->title, "node/$node->nid", array('attributes' => array('title' => t('view this event')))) .'</div>'."\n";
   $output .= $times;
   $output .= '<div class="links">'. theme('links', $node->event['links']) ."\n</div>";
-  $output .= '</div>' . "\n";
+  $output .= '</div>'."\n";
   return $output;
 }
 
@@ -157,7 +158,7 @@ function theme_event_node_week($node) {
 function theme_event_node_month($node) {
   static $stripe, $stripe_map;
 
-  if (!$stripe_map[$node->nid]) {
+  if (empty($stripe_map[$node->nid])) {
     if ($stripe >= 10) {
       $stripe = 1;
     }
@@ -167,7 +168,7 @@ function theme_event_node_month($node) {
     $stripe_map[$node->nid] = $stripe;
   }
 
-  $output .= '<div class="event monthview vevent">'."\n";
+  $output = '<div class="event monthview vevent">'."\n";
   $output .= '<div class="stripe-'. $stripe_map[$node->nid] .'"></div>'."\n";
 
   switch ($node->event['state']) {
@@ -190,13 +191,13 @@ function theme_event_node_month($node) {
   }
   if (variable_get('event_type_control', 'all') != 'never') {
     if ((count(event_get_types('all')) + count(event_get_types('solo'))) > 1) {
-      $output .= '<div class="type">'. l('('. $node->event['node_type'] .')', 'event/'.  _event_format_url($node->event['current_date']) .'/month/'.$node->type, array('title' => t('limit view to events of this type'))).'</div>'."\n";
+      $output .= '<div class="type">'. l('('. $node->event['node_type'] .')', 'event/'.  _event_format_url($node->event['current_date']) .'/month/'. $node->type, array('attributes' => array('title' => t('limit view to events of this type')))) .'</div>'."\n";
     }
   }
-  $output .= '<div class="title summary">'. l($node->title, "node/$node->nid", array('title' => t('view this event'))) .'</div>'."\n";
+  $output .= '<div class="title summary">'. l($node->title, "node/$node->nid", array('attributes' => array('title' => t('view this event')))) .'</div>'."\n";
   $output .= $times;
   $output .= '<div class="links">'. theme('links', $node->event['links']) ."\n</div>";
-  $output .= '</div>' . "\n";
+  $output .= '</div>'."\n";
 
   return $output;
 }
@@ -213,7 +214,7 @@ function theme_event_node_table($node) {
   drupal_add_js(drupal_get_path('module', 'event') .'/event.js');
   $link_count++;
 
-  if (!$stripe_map[$node->nid]) {
+  if (empty($stripe_map[$node->nid])) {
     if ($stripe >= 10) {
       $stripe = 1;
     }
@@ -223,27 +224,27 @@ function theme_event_node_table($node) {
     $stripe_map[$node->nid] = $stripe;
   }
 
-  $output .= '<div class="event tableview vevent">'."\n";
+  $output = '<div class="event tableview vevent">'."\n";
   $output .= '<div class="stripe-'. $stripe_map[$node->nid] .'"></div>'."\n";
   if (variable_get('event_type_control', 'all') != 'never') {
-    if (!$module && (count(event_get_types('all')) + count(event_get_types('solo'))) > 1) {
-      $output .= '<div class="type">'. l('('. $node->event['node_type'] .')', 'event/'. _event_format_url($node->event['start_exploded']) .'/table/'.$node->type, array('title' => t('limit view to events of this type'))).'</div>'."\n";
+    if (empty($module) && (count(event_get_types('all')) + count(event_get_types('solo'))) > 1) {
+      $output .= '<div class="type">'. l('('. $node->event['node_type'] .')', 'event/'. _event_format_url($node->event['start_exploded']) .'/table/'. $node->type, array('attributes' => array('title' => t('limit view to events of this type')))) .'</div>'."\n";
     }
   }
-  $output .= '<div class="title summary">'. l($node->title, "node/$node->nid", array('title' => t('view this event'))) .'</div>'."\n";
+  $output .= '<div class="title summary">'. l($node->title, "node/$node->nid", array('attributes' => array('title' => t('view this event')))) .'</div>'."\n";
 
   switch ($node->event['state']) {
     case 'singleday':
       $output .= '<div class="start dtstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('Start: ') . $node->event['start_time_format'] .'</div>'."\n";
       if ($node->event['start'] != $node->event['end']) {
-        $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z"). '">' . t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
+        $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
       }
       break;
     case 'start':
       $output .= '<div class="start dtstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('Start: ') . $node->event['start_time_format'] .'</div>'."\n";
       break;
     case 'end':
-      $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z"). '">' . t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
+      $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
       break;
     case 'allday':
     case 'ongoing':
@@ -255,7 +256,7 @@ function theme_event_node_table($node) {
   if ($node->event['state'] != 'singleday' && $node->event['state'] != 'allday') {
     $output .= '<div class="start dtstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('Start: ') . $node->event['start_time_format'] .'</div>'."\n";
     if ($node->event['start'] != $node->event['end']) {
-      $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z"). '">' . t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
+      $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
     }
   }
   $output .= '<div class="content description">'. check_markup($node->teaser) .'</div></div>'."\n";
@@ -263,7 +264,7 @@ function theme_event_node_table($node) {
   $links = $node->event['links'];
   $links['more_info'] = array(
     'title' => t('more info'),
-    'href' => 'node/'.$node->nid,
+    'href' => 'node/'. $node->nid,
     'attributes' => array('onclick' => "popupnotes('info_". $link_count ."'); return false;", 'title' => t('Show detailed information for this event.')),
   );
   $output .= '<div class="links">'. theme('links', $links) ."\n</div>";
@@ -276,7 +277,7 @@ function theme_event_node_list($node, $m
   drupal_add_js(drupal_get_path('module', 'event') .'/event.js');
   $link_count++;
 
-  if (!$stripe_map[$node->nid]) {
+  if (empty($stripe_map[$node->nid])) {
     if ($stripe >= 10) {
       $stripe = 1;
     }
@@ -290,23 +291,23 @@ function theme_event_node_list($node, $m
   $output .= '<div class="stripe-'. $stripe_map[$node->nid] .'"></div>'."\n";
   if (variable_get('event_type_control', 'all') != 'never') {
     if (!$module && (count(event_get_types('all')) + count(event_get_types('solo'))) > 1) {
-      $output .= '<div class="type">'. l('('. $node->event['node_type'] .')', 'event/'. _event_format_url($node->event['start_exploded']) .'/table/'.$node->type, array('title' => t('limit view to events of this type'))).'</div>'."\n";
+      $output .= '<div class="type">'. l('('. $node->event['node_type'] .')', 'event/'. _event_format_url($node->event['start_exploded']) .'/table/'. $node->type, array('attributes' => array('title' => t('limit view to events of this type')))) .'</div>'."\n";
     }
   }
-  $output .= '<div class="title summary">'. l($node->title, "node/$node->nid", array('title' => t('view this event'))) .'</div>'."\n";
+  $output .= '<div class="title summary">'. l($node->title, "node/$node->nid", array('attributes' => array('title' => t('view this event')))) .'</div>'."\n";
 
   switch ($node->event['state']) {
     case 'singleday':
       $output .= '<div class="start dtstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('Start: ') . $node->event['start_time_format'] .'</div>'."\n";
       if ($node->event['start'] != $node->event['end']) {
-        $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z"). '">' . t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
+        $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
       }
       break;
     case 'start':
       $output .= '<div class="start dtstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('Start: ') . $node->event['start_time_format'] .'</div>'."\n";
       break;
     case 'end':
-      $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z"). '">' . t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
+      $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
       break;
     case 'allday':
     case 'ongoing':
@@ -316,9 +317,9 @@ function theme_event_node_list($node, $m
 
   $output .= '<div id="info_'. $link_count .'" class="info vevent">'."\n";
   if ($node->event['state'] != 'singleday' && $node->event['state'] != 'allday') {
-    $output .= '<div class="end dstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z"). '">' . t('Start: ') . $node->event['end_time_format'] .'</div>'."\n";
+    $output .= '<div class="end dstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('Start: ') . $node->event['end_time_format'] .'</div>'."\n";
     if ($node->event['start'] != $node->event['end']) {
-      $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z"). '">' . t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
+      $output .= '<div class="end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z") .'">'. t('End: ') . $node->event['end_time_format'] .'</div>'."\n";
     }
   }
   $output .= '<div class="content description">'. check_markup($node->teaser) .'</div></div>'."\n";
@@ -326,7 +327,7 @@ function theme_event_node_list($node, $m
   $links = $node->event['links'];
   $links['more_info'] = array(
     'title' => t('more info'),
-    'href' => 'node/'.$node->nid,
+    'href' => 'node/'. $node->nid,
     'attributes' => array('onclick' => "popupnotes('info_". $link_count ."'); return false;", 'title' => t('Show detailed information for this event.')),
   );
   $output .= '<div class="links">'. theme('links', $links) ."\n</div>";
@@ -365,16 +366,17 @@ function theme_event_calendar_date_box($
  *   The day to display.
  */
 function theme_event_empty_day($date, $view) {
+  $output = '';
   switch ($view) {
     case 'table':
-      $output = '<div class="day">'. t('%month / %day', array('%month' => $date['month'], '%day' => (int)$date['day'])) .'</div>'."\n";
+      $output .= '<div class="day">'. t('%month / %day', array('%month' => $date['month'], '%day' => (int)$date['day'])) .'</div>'."\n";
       $output .= '<div class="event-empty"></div>'."\n";
       break;
     case 'day':
     case 'list':
      break;
     default:
-      $output = '<div class="day">'. (int) $date['day'] .'</div>'."\n";
+      $output .= '<div class="day">'. (int) $date['day'] .'</div>'."\n";
       $output .= '<div class="event-empty"></div>'."\n";
       break;
   }
@@ -389,15 +391,15 @@ function theme_event_empty_day($date, $v
  */  
 function theme_event_nodeapi($node) {
   $output = '<div class="event-nodeapi">
-    <div class="'. $node->type. '-start dtstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z") .'"><label>'. t('Start: ') .'</label>'. $node->event['start_format'] .'</div></div>'."\n";
-  if ($node->event['start'] != $node->event['end']) {
+    <div class="'. $node->type .'-start dtstart" title="'. event_format_date($node->event['start'], 'custom', "Y-m-d\TH:i:s\Z") .'"><label>'. t('Start: ') .'</label>'. $node->event['start_format'] .'</div></div>'."\n";
+  if (!empty($node->event['has_end_date']) && $node->event['start'] != $node->event['end']) {
     $output .= '<div class="event-nodeapi">
-    <div class="'. $node->type. '-end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z") . '"><label>'. t('End: ') .'</label>'. $node->event['end_format'] .'</div></div>'."\n";
+    <div class="'. $node->type .'-end dtend" title="'. event_format_date($node->event['end'], 'custom', "Y-m-d\TH:i:s\Z") .'"><label>'. t('End: ') .'</label>'. $node->event['end_format'] .'</div></div>'."\n";
   }
   if (variable_get('configurable_timezones', 1)) {
     $zone = event_zonelist_by_id($node->event['timezone']);
     $output .= '<div class="event-nodeapi">
-    <div class="'. $node->type. '-tz"><label>'. t('Timezone: ') .'</label>'. t($zone['name']) .'</div></div>'."\n";
+    <div class="'. $node->type .'-tz"><label>'. t('Timezone: ') .'</label>'. t($zone['name']) .'</div></div>'."\n";
   }
   return $output;
 }
@@ -419,7 +421,7 @@ function theme_event_filter_control($for
  *   The url for the navigation
  */
 function theme_event_nav_next($url, $attributes = array()) {
-  return '<span class="next">'. l('»', $url, $attributes) .'</span>';
+  return '<span class="next">'. l('»', $url, array('attributes' => $attributes)) .'</span>';
 }
 
 /**
@@ -429,7 +431,7 @@ function theme_event_nav_next($url, $att
  *   The url for the navigation
  */
 function theme_event_nav_prev($url, $attributes = array()) {
-  return '<span class="prev">'. l('«', $url, $attributes) .'</span>';
+  return '<span class="prev">'. l('«', $url, array('attributes' => $attributes)) .'</span>';
 }
 
 /**
@@ -451,7 +453,7 @@ function theme_event_links($links, $view
  *   The url for the ical feed
  */
 function theme_event_ical_link($path) {
-  return '<div class="ical-link">'. l('<img src="'. base_path() . drupal_get_path('module', 'event') .'/images/ical16x16.gif" alt="'.t('Add to iCalendar').'" />', $path, array('title' => t('Add this calendar to your iCalendar')), NULL, NULL, TRUE, TRUE) .'</div>';
+  return '<div class="ical-link">'. l('<img src="'. base_path() . drupal_get_path('module', 'event') .'/images/ical16x16.gif" alt="'. t('Add to iCalendar') .'" />', $path, array('attributes' => array('title' => t('Add this calendar to your iCalendar')), 'absolute' => TRUE, 'html' => TRUE)) .'</div>';
 }
 
 /**
@@ -461,7 +463,7 @@ function theme_event_ical_link($path) {
  *   The url to use for the read more link
  */
 function theme_event_more_link($path) {
-  return '<div class="more-link">'. l(t('more'), $path, array('title' => t('More events.'))) .'</div>';
+  return '<div class="more-link">'. l(t('more'), $path, array('attributes' => array('title' => t('More events.')))) .'</div>';
 }
 
 /**
@@ -472,7 +474,7 @@ function theme_event_more_link($path) {
  * TODO: decorate with hcalendar
  */
 function theme_event_upcoming_item($node, $types = array()) {
-  $output = l($node->title, "node/$node->nid", array('title' => $node->title));
+  $output = l($node->title, "node/$node->nid", array('attributes' => array('title' => $node->title)));
   if (count($types) > 1) {
     $output .= '<span class="event-nodetype">('. $node->event['node_type'] .')</span>';
   }
Index: event_database.mysql.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/event/event_database.mysql.inc,v
retrieving revision 1.12
diff -u -p -r1.12 event_database.mysql.inc
--- event_database.mysql.inc	3 Dec 2007 14:38:48 -0000	1.12
+++ event_database.mysql.inc	30 Dec 2007 03:27:18 -0000
@@ -115,7 +115,7 @@ function event_get_events_event($first, 
  */
 function event_get_events_upcoming($time, $types, $limit, $rewrite_parameter = array()) {
   $placeholders = implode(',', array_fill(0, count($types), "'%s'"));
-  $query = "SELECT n.nid, n.uid, n.title, n.type, n.status, n.changed, e.event_start, e.event_end, e.timezone, e.has_time, e.has_end_date, TIMEDIFF(e.event_start, '%s') AS time_left, DATEDIFF(e.event_start, '%s') AS days_left FROM {node} n INNER JOIN {event} e ON n.nid = e.nid WHERE n.status = 1 AND (((e.event_start != e.event_end) AND ('%s' >= e.event_start AND '%s' < e.event_end)) OR ((e.event_start = e.event_end) AND ('%s' <= e.event_start + INTERVAL %d SECOND)) OR e.event_start >= '%s') AND n.type IN ($placeholders) ORDER BY event_start";
+  $query = "SELECT n.nid, n.uid, n.title, n.type, n.status, n.changed, e.event_start, e.event_end, e.timezone, e.has_time, e.has_end_date, TIMEDIFF(e.event_start, '%s') AS time_left, DATEDIFF(e.event_start, '%s') AS days_left FROM {node} n INNER JOIN {event} e ON n.nid = e.nid WHERE n.status = 1 AND (((e.event_start <> e.event_end) AND ('%s' >= e.event_start AND '%s' < e.event_end)) OR ((e.event_start = e.event_end) AND ('%s' <= e.event_start + INTERVAL %d SECOND)) OR e.event_start >= '%s') AND n.type IN ($placeholders) ORDER BY event_start";
   return db_query_range(db_rewrite_sql($query, 'n', 'nid', array_merge(array('event' => TRUE, 'event_get_events' => TRUE, 'event_get_events_upcoming' => TRUE, 'event_types' => $types), $rewrite_parameter)), array_merge(array($time, $time, $time, $time, $time, (60 * 60 * 2), $time), $types), 0, $limit);
 }
 
Index: event_database.mysqli.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/event/event_database.mysqli.inc,v
retrieving revision 1.12
diff -u -p -r1.12 event_database.mysqli.inc
--- event_database.mysqli.inc	3 Dec 2007 14:38:48 -0000	1.12
+++ event_database.mysqli.inc	30 Dec 2007 03:27:18 -0000
@@ -10,7 +10,7 @@ function event_get_event_load($nid) {
   global $user;
   $shift = variable_get('date_default_timezone', 0);
 
-  return db_fetch_object(db_query('SELECT e.event_start, e.event_end, e.timezone, e.has_time, e.has_end_date, tz.offset AS offset, tz.offset_dst AS offset_dst, tz.dst_region, tz.is_dst, e.event_start - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND AS event_start_utc, e.event_end - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND AS event_end_utc, e.event_start - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND + INTERVAL %d SECOND AS event_start_user, e.event_end - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND + INTERVAL %d SECOND AS event_end_user, e.event_start - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND + INTERVAL %d SECOND AS event_start_site, e.event_end - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND + INTERVAL %d SECOND AS event_end_site, tz.name as timezone_name FROM {event} e INNER JOIN {event_timezones} tz ON tz.timezone = e.timezone WHERE nid = %d', $user->timezone, $user->timezone, $shift, $shift, $nid));
+  return db_fetch_object(db_query('SELECT e.event_start, e.event_end, e.timezone, e.has_time, e.has_end_date, tz.offset AS offset, tz.offset_dst AS offset_dst, tz.dst_region, tz.is_dst, e.event_start - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND AS event_start_utc, e.event_end - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND AS event_end_utc, e.event_start - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND + INTERVAL %d SECOND AS event_start_user, e.event_end - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND + INTERVAL %d SECOND AS event_end_user, e.event_start - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND + INTERVAL %d SECOND AS event_start_site, e.event_end - INTERVAL IF(tz.is_dst, tz.offset_dst, tz.offset) HOUR_SECOND + INTERVAL %d SECOND AS event_end_site, tz.name as timezone_name FROM {event} e INNER JOIN {event_timezones} tz ON tz.timezone = e.timezone WHERE nid = %d', (isset($user->timezone) ? $user->timezone : 0), (isset($user->timezone) ? $user->timezone : 0), $shift, $shift, $nid));
 }
 
 /**
@@ -115,7 +115,7 @@ function event_get_events_event($first, 
  */
 function event_get_events_upcoming($time, $types, $limit, $rewrite_parameter = array()) {
   $placeholders = implode(',', array_fill(0, count($types), "'%s'"));
-  $query = "SELECT n.nid, n.uid, n.title, n.type, n.status, n.changed, e.event_start, e.event_end, e.timezone, e.has_time, e.has_end_date, TIMEDIFF(e.event_start, '%s') AS time_left, DATEDIFF(e.event_start, '%s') AS days_left FROM {node} n INNER JOIN {event} e ON n.nid = e.nid WHERE n.status = 1 AND (((e.event_start != e.event_end) AND ('%s' >= e.event_start AND '%s' < e.event_end)) OR ((e.event_start = e.event_end) AND ('%s' <= e.event_start + INTERVAL %d SECOND)) OR e.event_start >= '%s') AND n.type IN ($placeholders) ORDER BY event_start";
+  $query = "SELECT n.nid, n.uid, n.title, n.type, n.status, n.changed, e.event_start, e.event_end, e.timezone, e.has_time, e.has_end_date, TIMEDIFF(e.event_start, '%s') AS time_left, DATEDIFF(e.event_start, '%s') AS days_left FROM {node} n INNER JOIN {event} e ON n.nid = e.nid WHERE n.status = 1 AND (((e.event_start <> e.event_end) AND ('%s' >= e.event_start AND '%s' < e.event_end)) OR ((e.event_start = e.event_end) AND ('%s' <= e.event_start + INTERVAL %d SECOND)) OR e.event_start >= '%s') AND n.type IN ($placeholders) ORDER BY event_start";
   return db_query_range(db_rewrite_sql($query, 'n', 'nid', array_merge(array('event' => TRUE, 'event_get_events' => TRUE, 'event_get_events_upcoming' => TRUE, 'event_types' => $types), $rewrite_parameter)), array_merge(array($time, $time, $time, $time, $time, (60 * 60 * 2), $time), $types), 0, $limit);
 }
 
Index: event_database.pgsql.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/event/event_database.pgsql.inc,v
retrieving revision 1.12
diff -u -p -r1.12 event_database.pgsql.inc
--- event_database.pgsql.inc	3 Dec 2007 14:38:48 -0000	1.12
+++ event_database.pgsql.inc	30 Dec 2007 03:27:18 -0000
@@ -115,7 +115,7 @@ function event_get_events_event($first, 
  */
 function event_get_events_upcoming($time, $types, $limit, $rewrite_parameter = array()) {
   $placeholders = implode(',', array_fill(0, count($types), "'%s'"));
-  $query = "SELECT n.nid, n.title, n.type, n.status, n.changed, e.event_start, e.event_end, e.timezone, e.has_time, e.has_end_date, extract('day' from event_start - '%s')*24 + cast(substring(cast(event_start - '%s' as varchar) from ' (..):') as integer) || substring(cast(event_start - '%s' as varchar) from ' ..(:..:..)') as time_left, 0 AS days_left FROM {node} n INNER JOIN {event} e ON n.nid = e.nid WHERE n.status = 1 AND (((e.event_start != e.event_end) AND ('%s' >= e.event_start AND '%s' < e.event_end)) OR ((e.event_start = e.event_end) AND ('%s' <= e.event_start + '%d seconds')) OR e.event_start >= '%s') AND n.type IN ($placeholders) ORDER BY event_start";
+  $query = "SELECT n.nid, n.title, n.type, n.status, n.changed, e.event_start, e.event_end, e.timezone, e.has_time, e.has_end_date, extract('day' from event_start - '%s')*24 + cast(substring(cast(event_start - '%s' as varchar) from ' (..):') as integer) || substring(cast(event_start - '%s' as varchar) from ' ..(:..:..)') as time_left, 0 AS days_left FROM {node} n INNER JOIN {event} e ON n.nid = e.nid WHERE n.status = 1 AND (((e.event_start <> e.event_end) AND ('%s' >= e.event_start AND '%s' < e.event_end)) OR ((e.event_start = e.event_end) AND ('%s' <= e.event_start + '%d seconds')) OR e.event_start >= '%s') AND n.type IN ($placeholders) ORDER BY event_start";
   return db_query_range(db_rewrite_sql($query, 'n', 'nid', array_merge(array('event' => TRUE, 'event_get_events' => TRUE, 'event_get_events_upcoming' => TRUE, 'event_types' => $types), $rewrite_parameter)), array_merge(array($time, $time, $time, $time, $time, $time, $time, $time, (60 * 60 * 2), $time), $types), 0, $limit);
 }
 
Index: ical.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/event/ical.inc,v
retrieving revision 1.11
diff -u -p -r1.11 ical.inc
--- ical.inc	29 Aug 2007 16:00:32 -0000	1.11
+++ ical.inc	30 Dec 2007 03:27:18 -0000
@@ -31,31 +31,31 @@
  *   Text of a iCalendar file
  */
 function ical_export($events, $calname = NULL) {
-  $output .= "BEGIN:VCALENDAR\nVERSION:2.0\n";
+  $output = "BEGIN:VCALENDAR\nVERSION:2.0\n";
   $output .= "METHOD:PUBLISH\n";
   $output .= 'X-WR-CALNAME:'. variable_get('site_name', '') .' | '. ical_escape_text($calname) ."\n";
   $output .= "PRODID:-//strange bird labs//Drupal iCal API//EN\n";
   foreach ($events as $uid => $event) {
     $output .= "BEGIN:VEVENT\n";
-    $output .= "DTSTAMP;VALUE=DATE:". gmdate("Ymd\THis\Z", time())."\n";
+    $output .= "DTSTAMP;VALUE=DATE:". gmdate("Ymd\THis\Z", time()) ."\n";
     if ($event['start'] == $event['end']) { // all day event
-      $output .= "DTSTART;VALUE=DATE:" . event_format_date($event['start'], 'custom', "Ymd\THis\Z") . "\n";
+      $output .= "DTSTART;VALUE=DATE:" . event_format_date($event['start'], 'custom', "Ymd\THis\Z") ."\n";
       //If allday event, set to day after allday start
       $end_date = event_date_later($event['start'], 1);
-      $output .= "DTEND;VALUE=DATE:" . event_format_date($end_date, 'custom', 'Ymd') . "\n";
+      $output .= "DTEND;VALUE=DATE:" . event_format_date($end_date, 'custom', 'Ymd') ."\n";
     }
-    else if ($event['start'] && $event['end']) {
-      $output .= "DTSTART;VALUE=DATE-TIME:". event_format_date($event['start'], 'custom', "Ymd\THis\Z") . "\n";
-      $output .= "DTEND;VALUE=DATE-TIME:". event_format_date($event['end'], 'custom', "Ymd\THis\Z") . "\n";
+    else if (!empty($event['start']) && !empty($event['end'])) {
+      $output .= "DTSTART;VALUE=DATE-TIME:". event_format_date($event['start'], 'custom', "Ymd\THis\Z") ."\n";
+      $output .= "DTEND;VALUE=DATE-TIME:". event_format_date($event['end'], 'custom', "Ymd\THis\Z") ."\n";
     }
-    else if ($event['start']) {
+    else if (!empty($event['start'])) {
       $output .= "DTSTART;VALUE=DATE-TIME:". event_format_date($event['start'], 'custom', "Ymd\THis\Z") ."\n";
     }
-    $output .= "UID:" . ($event['uid'] ? $event['uid'] : $uid) . "\n";
-    if ($event['url']) $output .= "URL;VALUE=URI:" . $event['url'] . "\n";
-    if ($event['location']) $output .= "LOCATION:" . ical_escape_text($event['location']) . "\n";
-    $output .= "SUMMARY:" . ical_escape_text($event['summary']) . "\n";
-    if ($event['description']) $output .= "DESCRIPTION:" . ical_escape_text($event['description']) . "\n";
+    $output .= "UID:". ($event['uid'] ? $event['uid'] : $uid) ."\n";
+    if (!empty($event['url'])) $output .= "URL;VALUE=URI:" . $event['url'] ."\n";
+    if (!empty($event['location'])) $outpemptyut .= "LOCATION:" . ical_escape_text($event['location']) ."\n";
+    $output .= "SUMMARY:" . ical_escape_text($event['summary']) ."\n";
+    if (!empty($event['description'])) $output .= "DESCRIPTION:" . ical_escape_text($event['description']) ."\n";
     $output .= "END:VEVENT\n";
   }
   $output .= "END:VCALENDAR\n";
@@ -103,7 +103,7 @@ function ical_import($filename) {
   $ifile = @fopen($filename, "r");
   if ($ifile == FALSE) exit('Invalid input file');
   $nextline = fgets($ifile, 1024);
-  if (trim($nextline) != 'BEGIN:VCALENDAR') exit('Invalid calendar file:' . $filename);
+  if (trim($nextline) != 'BEGIN:VCALENDAR') exit('Invalid calendar file:'. $filename);
   while (!feof($ifile)) {
     $line = $nextline;
     $nextline = fgets($ifile, 1024);
@@ -133,7 +133,7 @@ function ical_import($filename) {
         }
         if (empty($end_unixtime) && isset($the_duration)) {
           $end_unixtime = $start_unixtime + $the_duration;
-          $end_time = date ('Hi', $end_unixtime);
+          $end_time = date('Hi', $end_unixtime);
         }
 
         $items[$uid] = array('start' => $start_unixtime,
@@ -148,26 +148,26 @@ function ical_import($filename) {
         break;
       default:
 
-        unset ($field, $data, $prop_pos, $property);
-        ereg ("([^:]+):(.*)", $line, $line);
+        unset($field, $data, $prop_pos, $property);
+        ereg("([^:]+):(.*)", $line, $line);
         $field = $line[1];
         $data = $line[2];
 
         $property = $field;
-        $prop_pos = strpos($property,';');
-        if ($prop_pos !== false) $property = substr($property,0,$prop_pos);
+        $prop_pos = strpos($property, ';');
+        if ($prop_pos !== false) $property = substr($property, 0, $prop_pos);
         $property = strtoupper($property);
 
         switch ($property) {
 
           case 'DTSTART':
             $zulu_time = false;
-            if (substr($data,-1) == 'Z') $zulu_time = true;
+            if (substr($data, -1) == 'Z') $zulu_time = true;
             $data = str_replace('T', '', $data);
             $data = str_replace('Z', '', $data);
             $field = str_replace(';VALUE=DATE-TIME', '', $field);
             if ((preg_match("/^DTSTART;VALUE=DATE/i", $field)) || (ereg ('^([0-9]{4})([0-9]{2})([0-9]{2})$', $data))) {
-              ereg ('([0-9]{4})([0-9]{2})([0-9]{2})', $data, $dtstart_check);
+              ereg('([0-9]{4})([0-9]{2})([0-9]{2})', $data, $dtstart_check);
               $allday_start = $data;
               $start_date = $allday_start;
               $start_unixtime = strtotime($data);
@@ -181,13 +181,13 @@ function ical_import($filename) {
               elseif ($zulu_time) {
                 $tz_dtstart = 'GMT';
               }
-              preg_match ('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $data, $regs);
+              preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $data, $regs);
               $start_date = $regs[1] . $regs[2] . $regs[3];
               $start_time = $regs[4] . $regs[5];
               $start_unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]);
 
               $dlst = date('I', $start_unixtime);
-              $server_offset_tmp = _ical_chooseOffset($start_unixtime, 'Same as Server');
+              $server_offset_tmp = _ical_choose_offset($start_unixtime, 'Same as Server');
               if (isset($tz_dtstart)) {
                 if ($tz = _ical_tz($tz_dtstart)) {
                   $offset_tmp = date('I', $start_unixtime) ? $tz->offset_dst : $tz->offset;
@@ -195,16 +195,19 @@ function ical_import($filename) {
                 else {
                   $offset_tmp = '+0000';
                 }
-              } else if (isset($calendar_tz)) {
+              } 
+              else if (isset($calendar_tz)) {
                 if ($tz = _ical_tz($calendar_tz)) {
                   $offset_tmp = date('I', $start_unixtime) ? $tz->offset_dst : $tz->offset;
-                } else {
+                } 
+                else {
                   $offset_tmp = '+0000';
                 }
-              } else {
+              } 
+              else {
                 $offset_tmp = $server_offset_tmp;
               }
-              $start_unixtime = _ical_calcTime($offset_tmp, $server_offset_tmp, $start_unixtime);
+              $start_unixtime = _ical_calc_time($offset_tmp, $server_offset_tmp, $start_unixtime);
               $start_date = date('Ymd', $start_unixtime);
               $start_time = date('Hi', $start_unixtime);
               unset($server_offset_tmp, $offset_tmp, $tz_dtstart);
@@ -212,7 +215,7 @@ function ical_import($filename) {
             break;
           case 'DTEND':
             $zulu_time = false;
-            if (substr($data,-1) == 'Z') $zulu_time = true;
+            if (substr($data, -1) == 'Z') $zulu_time = true;
             $data = str_replace('T', '', $data);
             $data = str_replace('Z', '', $data);
             $field = str_replace(';VALUE=DATE-TIME', '', $field);
@@ -230,12 +233,12 @@ function ical_import($filename) {
               elseif ($zulu_time) {
                 $tz_dtend = 'GMT';
               }
-              preg_match ('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $data, $regs);
+              preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $data, $regs);
               $end_date = $regs[1] . $regs[2] . $regs[3];
               $end_time = $regs[4] . $regs[5];
               $end_unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]);
 
-              $server_offset_tmp = _ical_chooseOffset($end_unixtime, 'Same as Server');
+              $server_offset_tmp = _ical_choose_offset($end_unixtime, 'Same as Server');
               if (isset($tz_dtend)) {
                 if ($tz = _ical_tz($tz_dtend)) {
                   $offset_tmp = date('I', $end_unixtime) ? $tz->offset_dst : $tz->offset;
@@ -243,16 +246,19 @@ function ical_import($filename) {
                 else {
                   $offset_tmp = '+0000';
                 }
-              } else if (isset($calendar_tz)) {
+              } 
+              else if (isset($calendar_tz)) {
                 if ($tz = _ical_tz($calendar_tz)) {
                   $offset_tmp = date('I', $end_unixtime) ? $tz->offset_dst : $tz->offset;
-                } else {
+                } 
+                else {
                   $offset_tmp = '+0000';
                 }
-              } else {
+              } 
+              else {
                 $offset_tmp = $server_offset_tmp;
               }
-              $end_unixtime = _ical_calcTime($offset_tmp, $server_offset_tmp, $end_unixtime);
+              $end_unixtime = _ical_calc_time($offset_tmp, $server_offset_tmp, $end_unixtime);
               $end_date = date('Ymd', $end_unixtime);
               $end_time = date('Hi', $end_unixtime);
               unset($server_offset_tmp, $offset_tmp, $tz_dtend);
@@ -260,7 +266,7 @@ function ical_import($filename) {
             break;
           case 'DURATION':
             if (!stristr($field, '=DURATION')) {
-              ereg ('^P([0-9]{1,2}[W])?([0-9]{1,2}[D])?([T]{0,1})?([0-9]{1,2}[H])?([0-9]{1,2}[M])?([0-9]{1,2}[S])?', $data, $duration);
+              ereg('^P([0-9]{1,2}[W])?([0-9]{1,2}[D])?([T]{0,1})?([0-9]{1,2}[H])?([0-9]{1,2}[M])?([0-9]{1,2}[S])?', $data, $duration);
               $weeks = str_replace('W', '', $duration[1]);
               $days = str_replace('D', '', $duration[2]);
               $hours = str_replace('H', '', $duration[4]);
@@ -296,8 +302,8 @@ function ical_import($filename) {
   return $items;
 }
 
-function ical_help($section) {
-  switch ($section) {
+function ical_help($path, $arg) {
+  switch ($path) {
   case 'admin/modules#description':
     return t('iCalendar API for Events Modules');
     break;
@@ -312,7 +318,7 @@ function _ical_tz($tz) {
   }
 }
 
-function _ical_chooseOffset($time, $timezone) {
+function _ical_choose_offset($time, $timezone) {
   if (!isset($timezone)) $timezone = '';
   switch ($timezone) {
   case '':
@@ -332,16 +338,16 @@ function _ical_chooseOffset($time, $time
   return $offset;
 }
 
-function _ical_calcTime($have, $want, $time) {
+function _ical_calc_time($have, $want, $time) {
   if ($have == 'none' || $want == 'none') return $time;
-  $have_secs = _ical_calcOffset($have);
-  $want_secs = _ical_calcOffset($want);
+  $have_secs = _ical_calc_offset($have);
+  $want_secs = _ical_calc_offset($want);
   $diff = $want_secs - $have_secs;
   $time += $diff;
   return $time;
 }
 
-function _ical_calcOffset($offset_str) {
+function _ical_calc_offset($offset_str) {
   $sign = substr($offset_str, 0, 1);
   $hours = substr($offset_str, 1, 2);
   $mins = substr($offset_str, 3, 2);
@@ -362,7 +368,7 @@ function ical_quoted_printable_escaped($
  *  encode text using quoted-printable standard
  */
 function ical_quoted_printable_encode($text, $line_max = 76) {
-  $hex       = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
+  $hex       = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
   $lines     = preg_split("/(?:\r\n|\r|\n)/", $text);
   $eol       = "\r\n";
   $linebreak = "=0D=0A";
