Index: merci.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/merci/merci.module,v
retrieving revision 1.1.2.34
diff -u -r1.1.2.34 merci.module
--- merci.module	13 Dec 2009 02:27:22 -0000	1.1.2.34
+++ merci.module	17 Dec 2009 03:34:10 -0000
@@ -1109,7 +1109,6 @@
     
     //DIFF?
     $type_settings = merci_content_type_rules($content_type);
-    $hours_of_operation = merci_load_hours_of_operation($content_type);
     $return = array();
 
     // Convert start/end dates to local time.
@@ -2226,12 +2225,12 @@
 		   form_set_error('field_merci_date][0][value][date', t('Reservations cannot start on a %day.', array('%day' => $start_name)));
 		 }
 		 else {
-		   $start_time = date_format($start_object, 'H:s');
+		   $start_time = date_format($start_object, 'H:i');
 		   if ($start_time < $start_hours['open']) {
-			 form_set_error('field_merci_date][0][value][time', t('Reservations cannot start on a %day before %start.', array('%day' => $start_name, '%start' => date("g:i a", strtotime($start_hours['open'])))));
+			 form_set_error('field_merci_date][0][value][time', t('Reservations cannot start on a %day before %start.', array('%day' => $start_name, '%start' => merci_format_time($start_hours['open']))));
 		   }
 		   elseif ($start_time > $start_hours['close']) {
-			 form_set_error('field_merci_date][0][value][time', t('Reservations cannot start on a %day after %end.', array('%day' => $start_name, '%end' => date("g:i a", strtotime($start_hours['close'])))));
+			 form_set_error('field_merci_date][0][value][time', t('Reservations cannot start on a %day after %end.', array('%day' => $start_name, '%end' => merci_format_time($start_hours['close']))));
 		   }
 		 }
 	 
@@ -2240,13 +2239,12 @@
 		   form_set_error('field_merci_date][0][value2][date', t('Reservations cannot end on a %day.', array('%day' => $end_name)));
 		 }
 		 else {
-		   $end_time = date_format($end_object, 'H:s');
+		   $end_time = date_format($end_object, 'H:i');
 		   if ($end_time < $end_hours['open']) {
-			 form_set_error('field_merci_date][0][value2][time', t('Reservations cannot end on a %day before %start.', array('%day' => $end_name, '%start' => $end_hours['open'])));
+			 form_set_error('field_merci_date][0][value2][time', t('Reservations cannot end on a %day before %start.', array('%day' => $end_name, '%start' => merci_format_time($end_hours['open']))));
 		   }
 		   elseif ($end_time > $end_hours['close']) {
-		     //TODO - Format time to 12PM
-			 form_set_error('field_merci_date][0][value2][time', t('Reservations cannot end on a %day after %end.', array('%day' => $end_name, '%end' => $end_hours['close'])));
+			 form_set_error('field_merci_date][0][value2][time', t('Reservations cannot end on a %day after %end.', array('%day' => $end_name, '%end' => merci_format_time($end_hours['close']))));
 		   }
 		 }
 	   }
@@ -2382,14 +2380,26 @@
 					 $message.= '<th>' . date( 'm/d/Y' , $date_timestamp ) . '</th>';
 				  
 					 $time = $hours_date['open'];
+					 if ($minutes = (int) substr($time, 3)) {
+					   $hour = (substr($time, 0, 2) + 1);
+					   $quarters = (int)((60-$minutes)/15);
+					   $time = ($hour < 10 ? '0'. $hour : $hour) .':00';
+					   if ($quarters > 0) {
+					     $message.= '<th colspan="'. $quarters .'">&nbsp;</th>';
+					   }
+					 }
+					 $end_time = substr($hours_date['close'], 0, 2) .':00';
 					 
-					 while ( $time < $hours_date['close'] )
+					 while ( $time < $end_time )
 					 {
 					 
-					   $message.= '<th colspan="4">' . date( 'g:i a' , strtotime( $time ) ) . '</th>';
+					   $message.= '<th colspan="4">' . merci_format_time($time) . '</th>';
+					   
+					   $time = date( 'H:i' , strtotime( $time . ' +1 hour' ) );
+					   if (substr($time, 0, 2) == '00') {
+					     $time = '24'. substr($time, 2);
+					   }
 					   
-					   $time = date( 'H:i' , strtotime( $time . ' +1 hour' ) ); 
-					 
 					 }
 									 
 					 $message.= '</tr></thead><tbody>';
@@ -2404,6 +2414,16 @@
 						 $message.= '</th>';
 						 
 						 $time = $hours_date['open'];
+						 if ($minutes = (int) substr($time, 3)) {
+						   $hour = substr($time, 0, 2);
+						   $quarters = (int)(($minutes+14)/15);
+						   if ($quarters == 4) {
+						     $time = ($hour <= 8 ? '0' : '') . ($hour + 1) .':00';
+						   }
+						   else {
+						     $time = $hour .':'. ($quarters ? $quarters*15 : '00');
+						   }
+						  }
 						 
 						 while ( $time < $hours_date['close'] )
 						 {
@@ -2414,6 +2434,9 @@
 							   $message.= '<td class="available"></td>';
 											 
 						   $time = date( 'H:i' , strtotime( $time . ' +15 minutes' ) ); 
+						   if ($time == '00:00') {
+						     $time = '24:00';
+						   }
 						 
 						 } // while
 						 
@@ -3087,3 +3110,33 @@
 function merci_has_accessories($content_type) {
   return db_fetch_object(db_query("SELECT * FROM {vocabulary_node_types} WHERE type = '%s'", $content_type));
 }
+
+/**
+ * Calculates the short hour/minute time format based on the site settings.
+ */
+function merci_time_format()
+{
+  static $time_only_format = NULL;
+  if (empty($time_only_format)) {
+    $short_date_format = variable_get('date_format_short', 'm/d/Y - H:i');
+    $time_only_format = date_limit_format($short_date_format, array('hour', 'minute'));
+  }
+  return $time_only_format;
+}
+
+/**
+ * Formats a time value into the site's preferred format.
+ * 
+ * @param object $hours_minutes
+ *   A string of the form 'H:MM' or 'HH:MM'
+ * @return
+ *   A string in 12- or 24-hour format with no leading zero.
+ */
+function merci_format_time($hours_minutes)
+{
+  $return = date(merci_time_format(), strtotime($hours_minutes));
+  if ($return[0] == '0') {
+    return substr($return, 1);
+  }
+  return $return;
+}
