Update the Calendar Class
diff --git a/system/libraries/Calendar.php b/system/libraries/Calendar.php
index 23d8ffb..a2d9db1 100644
--- a/system/libraries/Calendar.php
+++ b/system/libraries/Calendar.php
@@ -96,6 +96,13 @@
 	public $next_prev_url		= '';
 
 	/**
+	 * Show days of other months
+	 *
+	 * @var bool
+	 */
+	public $show_other_days = FALSE;
+
+	/**
 	 * Class constructor
 	 *
 	 * Loads the calendar language file and sets the default time reference.
@@ -143,6 +150,15 @@
 				$this->$key = $val;
 			}
 		}
+
+		// Set the next_prev_url to the controller if required but not defined
+		if ($this->show_next_prev === TRUE)
+		{
+			if (empty($this->next_prev_url))
+			{
+				$this->next_prev_url = rtrim($this->CI->config->site_url($this->CI->router->class . '/' . $this->CI->router->method), '/') . '/';
+			}
+		}
 	}
 
 	// --------------------------------------------------------------------
@@ -261,10 +277,10 @@
 
 			for ($i = 0; $i < 7; $i++)
 			{
-				$out .= ($is_current_month === TRUE && $day == $cur_day) ? $this->temp['cal_cell_start_today'] : $this->temp['cal_cell_start'];
-
 				if ($day > 0 && $day <= $total_days)
 				{
+					$out .= ($is_current_month === TRUE && $day == $cur_day) ? $this->temp['cal_cell_start_today'] : $this->temp['cal_cell_start'];
+
 					if (isset($data[$day]))
 					{
 						// Cells with content
@@ -279,14 +295,37 @@
 								$this->temp['cal_cell_no_content_today'] : $this->temp['cal_cell_no_content'];
 						$out .= str_replace('{day}', $day, $temp);
 					}
+
+					$out .= ($is_current_month === TRUE && $day == $cur_day) ? $this->temp['cal_cell_end_today'] : $this->temp['cal_cell_end'];
 				}
 				else
 				{
-					// Blank cells
-					$out .= $this->temp['cal_cell_blank'];
+					if ($this->show_other_days === TRUE)
+					{
+						$out .= $this->temp['cal_cell_start_other'];
+
+						if ($day <= 0)
+						{
+							// Day of previous month
+							$prev_month = $this->adjust_date(((int) $month) - 1, $year);
+							$prev_month_days = $this->get_total_days($prev_month['month'], $prev_month['year']);
+							$out .= str_replace('{day}', $prev_month_days + $day, $this->temp['cal_cell_other']);
+						}
+						else
+						{
+							// Day of next month
+							$out .= str_replace('{day}', $day - $total_days, $this->temp['cal_cell_other']);
+						}
+
+						$out .= $this->temp['cal_cell_end_other'];
+					}
+					else
+					{
+						// Blank cells
+						$out .= $this->temp['cal_cell_start'] . $this->temp['cal_cell_blank'] . $this->temp['cal_cell_end'];
+					}
 				}
 
-				$out .= ($is_current_month === TRUE && $day == $cur_day) ? $this->temp['cal_cell_end_today'] : $this->temp['cal_cell_end'];
 				$day++;
 			}
 
@@ -457,13 +496,16 @@
 			'cal_row_start'				=> '<tr>',
 			'cal_cell_start'			=> '<td>',
 			'cal_cell_start_today'		=> '<td>',
+			'cal_cell_start_other'		=> '<td style="color: #666;">',
 			'cal_cell_content'			=> '<a href="{content}">{day}</a>',
 			'cal_cell_content_today'	=> '<a href="{content}"><strong>{day}</strong></a>',
 			'cal_cell_no_content'		=> '{day}',
 			'cal_cell_no_content_today'	=> '<strong>{day}</strong>',
 			'cal_cell_blank'			=> '&nbsp;',
+			'cal_cell_other'			=> '{day}',
 			'cal_cell_end'				=> '</td>',
 			'cal_cell_end_today'		=> '</td>',
+			'cal_cell_end_other'		=> '</td>',
 			'cal_row_end'				=> '</tr>',
 			'table_close'				=> '</table>'
 		);
@@ -490,7 +532,7 @@
 
 		$today = array('cal_cell_start_today', 'cal_cell_content_today', 'cal_cell_no_content_today', 'cal_cell_end_today');
 
-		foreach (array('table_open', 'table_close', 'heading_row_start', 'heading_previous_cell', 'heading_title_cell', 'heading_next_cell', 'heading_row_end', 'week_row_start', 'week_day_cell', 'week_row_end', 'cal_row_start', 'cal_cell_start', 'cal_cell_content', 'cal_cell_no_content', 'cal_cell_blank', 'cal_cell_end', 'cal_row_end', 'cal_cell_start_today', 'cal_cell_content_today', 'cal_cell_no_content_today', 'cal_cell_end_today') as $val)
+		foreach (array('table_open', 'table_close', 'heading_row_start', 'heading_previous_cell', 'heading_title_cell', 'heading_next_cell', 'heading_row_end', 'week_row_start', 'week_day_cell', 'week_row_end', 'cal_row_start', 'cal_cell_start', 'cal_cell_content', 'cal_cell_no_content', 'cal_cell_blank', 'cal_cell_end', 'cal_row_end', 'cal_cell_start_today', 'cal_cell_content_today', 'cal_cell_no_content_today', 'cal_cell_end_today', 'cal_cell_start_other', 'cal_cell_other', 'cal_cell_end_other') as $val)
 		{
 			if (preg_match('/\{'.$val.'\}(.*?)\{\/'.$val.'\}/si', $this->template, $match))
 			{