/**
 * @param $Date &Academic_time Start time of day.
 * @return array[string] Class names.
 */
function CalCssGetDateClasses(&$day_start, $day_of_week, $past = NULL)
{
    $today = Academic_time::NewToday();
    $today_id = $today->Format('Ymd');
    $cell_id = $day_start->Format('Ymd');
    $classes_list = array();
    if ($cell_id == $today_id) {
        $classes_list[] = 'tod';
    }
    if ($day_start->Month() % 2 == 0) {
        $classes_list[] = 'ev';
    }
    if (($day_of_week + 6) % 7 > 4) {
        $classes_list[] = 'we';
    }
    if (NULL === $past && $day_start->Timestamp() < $today->Timestamp() || true === $past) {
        $classes_list[] = 'pa';
    }
    return $classes_list;
}
 /**
  * @param $UriSegment string URI segment.
  * @param $AllowRange bool Whether to allow date ranges (using ':' in between).
  * @return array Return structure:
  *	- 'valid' (bool Whether successful)
  *	- 'start' (Academic_time Start of range specified by @a $UriSegment)
  *	- 'end'  (Academic_time End of range specified by @a $UriSegment)
  *	- 'format' (string Format string which can be passed to GenerateUri())
  *	- 'description' (string Description of the date [range])
  */
 function ReadUri($UriSegment, $AllowRange = TRUE)
 {
     // Use GenerateRegex to get regex
     $regex = $this->GetRegex($AllowRange);
     $format = self::DefaultFormat();
     $description = '';
     $valid = preg_match($regex, $UriSegment, $results) > 0;
     if ($valid) {
         if ($this->mDebug) {
             echo '<p>Result of regular expression process:<br/>' . str_replace("\n", "<br/>\n", var_export($results, true) . '</p>');
         }
         // Initial information extraction
         $start_academic = !empty($results['start_ac']);
         $start_gregorian = !empty($results['start_greg']);
         $start_relative = !empty($results['start_rel']);
         $end_academic = !empty($results['end_ac']);
         $end_gregorian = !empty($results['end_greg']);
         $end_relative = !empty($results['end_rel']);
         $has_start = $start_academic || $start_gregorian || $start_relative;
         $has_end = $end_academic || $end_gregorian || $end_relative;
         if ($has_end) {
             $description .= 'from ';
         }
         $start = Academic_time::NewToday();
         $end = $start;
         // Find the start, its either academic, gregorian, or relative
         if ($start_academic) {
             $format = 'ac';
             if ($end_academic) {
                 $format .= ':ac';
             }
             list($start, $end, $temp_description) = $this->ReadAcademic($start, $results['ac_year'], $results['ac_term'], empty($results['week']) ? '' : $results['week'], empty($results['day']) ? '' : $results['day']);
             $description .= $temp_description;
         } elseif ($start_gregorian) {
             $format = 'gr';
             if ($end_gregorian) {
                 $format .= ':gr';
             }
             list($start, $end, $temp_description) = $this->ReadGregorian($start, $results['year'], $results['month'], empty($results['dom']) ? '' : $results['dom']);
             $description .= $temp_description;
         } elseif ($start_relative) {
             $format = 'gr';
             if ($end_gregorian) {
                 $format .= ':gr';
             }
             $offset = '';
             if (!empty($results['base'])) {
                 switch ($results['base']) {
                     case 'yesterday':
                         $offset = '-1day';
                         break;
                     case 'tomorrow':
                         $offset = '1day';
                         break;
                 }
                 $description .= strtolower($results['base']);
             } else {
                 if (!empty($results['offset'])) {
                     if (!empty($results['offset_unit'])) {
                         $offset .= $results['offset'] . $results['offset_unit'];
                     } else {
                         $offset .= $results['offset'] . 'day';
                     }
                     $results['offset_unit'] = strtolower($results['offset_unit']);
                     if ('s' !== substr($results['offset_unit'], -1, 1)) {
                         $results['offset_unit'] .= 's';
                     }
                     $description .= $results['offset'] . ' ' . $results['offset_unit'] . ' time';
                 }
             }
             if (!empty($offset)) {
                 $start = $start->Adjust($offset);
             }
             // Set the implicit duration if no end is specified
             if (!$has_end) {
                 $end = $start->Adjust('1day');
             }
         }
         // Find the end, its either academic, gregorian, or relative
         if ($end_academic) {
             $description .= ' until ';
             list($dummy, $end, $temp_description) = $this->ReadAcademic($start, $results['end_ac_year'], $results['end_ac_term'], empty($results['end_week']) ? '' : $results['end_week'], empty($results['end_day']) ? '' : $results['end_day']);
             $description .= $temp_description;
         } elseif ($end_gregorian) {
             $description .= ' until ';
             list($dummy, $end, $temp_description) = $this->ReadGregorian($start, $results['end_year'], $results['end_month'], empty($results['end_dom']) ? '' : $results['end_dom']);
             $description .= $temp_description;
         } elseif ($end_relative) {
             $format .= ':re';
             $end = $start;
             $offset = '';
             if (!empty($results['end_base'])) {
                 $end = Academic_time::NewToday()->Adjust('1day');
                 switch ($results['end_base']) {
                     case 'yesterday':
                         $offset .= '-1day';
                         break;
                     case 'tomorrow':
                         $offset .= '1day';
                         break;
                 }
                 $description .= ' until ' . strtolower($results['end_base']);
             } else {
                 if (!empty($results['end_offset'])) {
                     if (!empty($results['end_offset_unit'])) {
                         $offset .= $results['end_offset'] . $results['end_offset_unit'];
                     } else {
                         $results['end_offset_unit'] = 'day';
                         $offset .= $results['end_offset'] . 'day';
                     }
                     $results['end_offset_unit'] = strtolower($results['end_offset_unit']);
                     if ('s' === substr($results['end_offset_unit'], -1, 1)) {
                         if (1 == $results['end_offset']) {
                             $results['end_offset_unit'] = substr($results['end_offset_unit'], 0, -1);
                         }
                     } else {
                         if (1 != $results['end_offset']) {
                             $results['end_offset_unit'] .= 's';
                         }
                     }
                     $description .= ' for ' . $results['end_offset'] . ' ' . $results['end_offset_unit'];
                 }
             }
             if (!empty($offset)) {
                 $end = $start->Adjust($offset);
             }
         }
         // If the end is before the start, use the start for 1 day
         if ($start->Timestamp() >= $end->Timestamp()) {
             $end = $start->Adjust('1day');
         }
     } else {
         // Invalid, so puke back saying it was unrecognised
         $description = 'Unrecognised ' . ($AllowRange ? 'date range' : 'date');
     }
     // Return the final array
     return array('valid' => $valid, 'format' => $format, 'start' => $valid ? $start : NULL, 'end' => $valid ? $end : NULL, 'description' => $description);
 }
}
?>
">
<?php 
// Legend
if (isset($Legend) && is_array($Legend) && !empty($Legend)) {
    echo '<tr><th colspan="8" class="term">Legend</th></tr>';
    foreach ($Legend as $legend_info) {
        list($classes_array, $description) = $legend_info;
        $classnames = join(' ', $classes_array);
        echo "<tr><th /><td colspan=\"7\" class=\"{$classnames}\">{$description}</td></tr>";
    }
}
$day_of_week_headings = array('S', 'M', 'T', 'W', 'T', 'F', 'S');
$term_date_alteration = '4days';
$today = Academic_time::NewToday();
// 	$today = $today->Adjust('1month');
// 	$day_start = $today->StartOfWeek();
$day_start = $today->Adjust('-' . $today->AcademicDay() . 'days')->StartOfWeek($WeekStart);
$term_name = '';
$today_id = $today->Format('Ymd');
for ($week_counter = 0; $week_counter < 52; ++$week_counter) {
    $term_altered_date = $day_start->Adjust($term_date_alteration);
    $this_term_name = $term_altered_date->AcademicTermNameUnique() . ' ' . $term_altered_date->AcademicYearName(2);
    $week_number = $term_altered_date->AcademicWeek();
    if ($this_term_name != $term_name) {
        $term_name = $this_term_name;
        $this_term_name .= ' (' . $day_start->Format('M') . ')';
        ?>
	<tr><th colspan="8" class="term"><?php 
        echo $this_term_name;
    protected function _Load()
    {
        $value = $this->value;
        if (null === $value) {
            $value = Academic_time::NewToday();
        } else {
            $value = new Academic_time($value);
        }
        ?>
<div	class="input_date_display"<?php 
        ?>
	onclick="<?php 
        echo xml_escape('return input_date_click("' . $this->name . '");');
        ?>
"<?php 
        ?>
	><?php 
        if ($this->date) {
            ?>
<span class="day" id="<?php 
            echo $this->id . '__day';
            ?>
"><?php 
            echo $value->Format('l');
            ?>
</span> <?php 
            ?>
week <span class="week" id="<?php 
            echo $this->id . '__wk';
            ?>
"><?php 
            echo $value->AcademicWeek();
            ?>
</span> <?php 
            ?>
of <span class="term" id="<?php 
            echo $this->id . '__term';
            ?>
"><?php 
            echo ucfirst($value->AcademicTermNameUnique());
            echo ' ' . $value->StartOfTerm()->Year();
            ?>
</span> <?php 
        }
        if ($this->time) {
            ?>
at <span class="hour" id="<?php 
            echo $this->id . '__hr';
            ?>
"><?php 
            echo $value->Hour();
            ?>
</span><?php 
            ?>
:<span class="minute" id="<?php 
            echo $this->id . '__min';
            ?>
"><?php 
            echo $value->Minute();
            ?>
</span> <?php 
        }
        ?>
</div><?php 
        $days = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
        ?>
<div	class="input_date_selector"<?php 
        ?>
	id="<?php 
        echo $this->id . '__selector';
        ?>
"<?php 
        ?>
	><?php 
        // Init script
        ?>
<script type="text/javascript"><?php 
        echo xml_escape('onLoadFunctions.push(function() {' . 'input_date_init(' . js_literalise($this->name) . ');' . '});', false);
        ?>
</script><?php 
        ?>
<div><?php 
        // Day of the week
        ?>
<select	id="<?php 
        echo $this->id . '__day_select';
        ?>
"<?php 
        ?>
	name="<?php 
        echo $this->name . '[day]';
        ?>
"<?php 
        ?>
	onchange="<?php 
        echo xml_escape('return input_date_day_changed("' . $this->name . '");');
        ?>
"<?php 
        ?>
><?php 
        foreach ($days as $val => $day) {
            ?>
<option value="<?php 
            echo $val;
            ?>
"<?php 
            if ($val == $value->DayOfWeek(1)) {
                ?>
 selected="selected"<?php 
            }
            ?>
><?php 
            echo $day;
            ?>
</option><?php 
        }
        ?>
</select><?php 
        // Week of the term
        ?>
<span>week</span><?php 
        ?>
<select	id="<?php 
        echo $this->id . '__wk_select';
        ?>
"<?php 
        ?>
	name="<?php 
        echo $this->name . '[wk]';
        ?>
"<?php 
        ?>
	onchange="<?php 
        echo xml_escape('return input_date_day_changed("' . $this->name . '");');
        ?>
"<?php 
        ?>
><?php 
        $weeks = $value->AcademicTermWeeks();
        for ($wk = 1; $wk <= $weeks; ++$wk) {
            ?>
<option value="<?php 
            echo $wk;
            ?>
"<?php 
            if ($wk == $value->AcademicWeek()) {
                ?>
 selected="selected"<?php 
            }
            ?>
><?php 
            echo $wk;
            ?>
</option><?php 
        }
        ?>
</select><?php 
        // Term
        ?>
<span>of</span><?php 
        ?>
<select	id="<?php 
        echo $this->id . '__term_select';
        ?>
"<?php 
        ?>
	name="<?php 
        echo $this->name . '[term]';
        ?>
"<?php 
        ?>
	onchange="<?php 
        echo xml_escape('return input_date_term_changed("' . $this->name . '");');
        ?>
"<?php 
        ?>
><?php 
        $sel_year = $value->AcademicYear();
        $sel_term = $value->AcademicTerm();
        $year = $sel_year;
        $term = 0;
        ?>
<option value="earlier">(more)</option><?php 
        for ($i = 0; $i < 6; ++$i) {
            $cur = new Academic_time(Academic_time::StartOfAcademicTerm($year, $term));
            ?>
<option value="<?php 
            echo "{$year}-{$term}";
            ?>
"<?php 
            if ($term == $sel_term && $year == $sel_year) {
                ?>
 selected="selected"<?php 
            }
            ?>
><?php 
            echo xml_escape(ucfirst($cur->AcademicTermNameUnique()) . ' ' . $cur->Year());
            ?>
</option><?php 
            ++$term;
            if ($term == 6) {
                $term = 0;
                ++$year;
            }
        }
        ?>
<option value="later">(more)</option><?php 
        ?>
</select><?php 
        // Time of day
        if ($this->time) {
            ?>
<span>at</span><?php 
            ?>
<select	id="<?php 
            echo $this->id . '__hr_select';
            ?>
"<?php 
            ?>
	name="<?php 
            echo $this->name . '[hr]';
            ?>
"<?php 
            ?>
	onchange="<?php 
            echo xml_escape('return input_date_time_changed("' . $this->name . '");');
            ?>
"<?php 
            ?>
><?php 
            for ($hr = 0; $hr < 24; ++$hr) {
                ?>
<option value="<?php 
                echo $hr;
                ?>
"<?php 
                if ($hr == $value->Hour()) {
                    ?>
 selected="selected"<?php 
                }
                ?>
><?php 
                echo sprintf('%02d', $hr);
                ?>
</option><?php 
            }
            ?>
</select><?php 
            ?>
<span>:</span><?php 
            ?>
<select	id="<?php 
            echo $this->id . '__min_select';
            ?>
"<?php 
            ?>
	name="<?php 
            echo $this->name . '[min]';
            ?>
"<?php 
            ?>
	onchange="<?php 
            echo xml_escape('return input_date_time_changed("' . $this->name . '");');
            ?>
"<?php 
            ?>
><?php 
            $minute = $value->Minute();
            $minute_interval = 5;
            for ($min = 0; $min < 60; $min += $minute_interval) {
                ?>
<option value="<?php 
                echo $min;
                ?>
"<?php 
                if ($min <= $minute && $min + $minute_interval > $minute) {
                    ?>
 selected="selected"<?php 
                }
                ?>
><?php 
                echo sprintf('%02d', $min);
                ?>
</option><?php 
            }
            ?>
</select><?php 
        }
        // Close button
        ?>
<input	type="button" value="x"<?php 
        ?>
	onclick="<?php 
        echo xml_escape('return input_selector_click("' . $this->name . '__selector");');
        ?>
"<?php 
        ?>
	/><?php 
        ?>
</div><?php 
        ?>
<div><?php 
        ?>
<table class="recur-cal cal-text"><?php 
        // Days along the top
        ?>
<tr><?php 
        ?>
<th /><?php 
        foreach ($days as $day) {
            ?>
<th><?php 
            echo xml_escape($day);
            ?>
</th><?php 
        }
        ?>
</tr><?php 
        $cur = $value->MondayWeek1OfTerm();
        $sel = $value->Midnight()->Timestamp();
        $today = Academic_time::NewToday()->Timestamp();
        $last_month = 0;
        $term = $cur->AcademicTerm();
        for ($wk = 1; $cur->AcademicTerm() == $term; ++$wk) {
            ?>
<tr id="<?php 
            echo $this->id . '__wk_' . $wk;
            ?>
"><?php 
            ?>
<th><?php 
            echo $wk;
            ?>
</th><?php 
            for ($dy = 0; $dy < 7; ++$dy) {
                $month = $cur->Month();
                $ts = $cur->Timestamp();
                $classes = array();
                if ($ts < $today) {
                    $classes[] = "pa";
                }
                if ($month % 2 == 0) {
                    $classes[] = "ev";
                }
                if ($ts == $today) {
                    $classes[] = "tod";
                }
                if ($ts == $sel) {
                    $classes[] = "sel";
                }
                if ($dy >= 5) {
                    $classes[] = "we";
                }
                ?>
<td	class="<?php 
                echo join(' ', $classes);
                ?>
"<?php 
                ?>
	id="<?php 
                echo $this->id . '__' . $cur->AcademicWeek() . '_' . $cur->Format('D');
                ?>
"<?php 
                ?>
	onclick="<?php 
                echo xml_escape('return input_date_change(' . js_literalise($this->name) . ',' . js_literalise($wk) . ',' . js_literalise($dy) . ');');
                ?>
"<?php 
                ?>
	><?php 
                if ($month != $last_month) {
                    echo xml_escape($cur->Format('M')) . '&nbsp;';
                    $last_month = $month;
                }
                echo xml_escape($cur->Format('j'));
                ?>
</td><?php 
                $cur = $cur->Adjust('+1day');
            }
            ?>
</tr><?php 
        }
        ?>
</table><?php 
        ?>
</div><?php 
        ?>
</div><?php 
    }
 /**
  * @pre SetRange() must have already been called.
  */
 function Retrieve()
 {
     // Don't get any events from the database right now
     //parent::Retrieve();
     // Calculate links to next, previous, and this whole term
     $prev_term = $this->mSelectedWeekStart->AcademicYear() - ($this->mSelectedWeekStart->AcademicTerm() == 0 ? 1 : 0) . '-' . Academic_time::GetAcademicTermNameUnique(($this->mSelectedWeekStart->AcademicTerm() + 5) % 6) . '-1';
     //$this_term =
     //		$this->mSelectedWeekStart->AcademicYear() . '-' .
     //		$this->mSelectedWeekStart->AcademicTermNameUnique();
     $next_term = $this->mSelectedWeekStart->AcademicYear() + ($this->mSelectedWeekStart->AcademicTerm() == 5 ? 1 : 0) . '-' . Academic_time::GetAcademicTermNameUnique(($this->mSelectedWeekStart->AcademicTerm() + 1) % 6) . '-1';
     $this->SetData('links', array('prev_term' => site_url($this->mUriBase . $prev_term), 'this_term' => '', 'next_term' => site_url($this->mUriBase . $next_term)));
     $this->SetData('term', array('name' => $this->mSelectedWeekStart->AcademicTermName() . ' ' . $this->mSelectedWeekStart->AcademicTermTypeName()));
     // Get this monday
     $CI =& get_instance();
     $monday = Academic_time::NewToday()->BackToMonday()->Timestamp();
     $weeks = array();
     $last_term = -1;
     for ($week = $this->mStartTime; $week->Timestamp() < $this->mEndTime->Timestamp(); $week = $next_week) {
         // Find the end of the week
         $next_week = $week->Adjust('1week');
         if (FALSE) {
             // Titles before each new term
             if ($last_term !== $week->AcademicTerm()) {
                 $weeks[] = array('link' => site_url($this->mUriBase . $week->AcademicYear() . '-' . $week->AcademicTermNameUnique()), 'name' => strtoupper($week->AcademicTermName() . ' ' . $week->AcademicTermTypeName() . ' ' . $week->AcademicYearName()), 'events' => 0, 'select' => FALSE, 'old' => FALSE, 'heading' => TRUE, 'start_date' => '');
                 $last_term = $week->AcademicTerm();
             }
         }
         $old = $week->Timestamp() < $monday;
         // Is the week in the past?
         $selected = $this->mSelectedWeekStart->Timestamp() <= $week->Timestamp() && $this->mSelectedWeekEnd->Timestamp() >= $next_week->Timestamp();
         $weeks[] = array('link' => $this->GenerateUri($week, $next_week), 'name' => 'Week ' . $week->AcademicWeek(), 'events' => 0, 'select' => $selected, 'old' => $old, 'heading' => FALSE);
     }
     $this->SetData('weeks', $weeks);
 }
 function calendar($organisation, $DateRange = NULL, $Filter = NULL)
 {
     $this->load->model('subcontrollers/calendar_subcontroller');
     if (!CheckPermissions('public')) {
         return;
     }
     // Set up the filter
     $data = $this->organisations->_GetOrgData($organisation);
     if (!empty($data)) {
         $this->_SetupOrganisationFrame($organisation);
         $this->main_frame->SetPage('calendar', 'directory');
         $this->calendar_subcontroller->SetRangePageCode('directory_calendar');
         // restrict to this organisation
         $this->calendar_subcontroller->UseStreams(array((int) $data['organisation']['id'] => array('subscribed' => isset($data['organisation']['subscription']) && $data['organisation']['subscription']['calendar'], 'name' => $data['organisation']['name'], 'short_name' => $organisation)));
         // disable cancelled events
         $sources =& $this->calendar_subcontroller->GetSources();
         $sources->DisableGroup('inactive');
         $args = func_get_args();
         array_shift($args);
         $this->calendar_subcontroller->_map($args);
     } else {
         $this->load->library('custom_pages');
         $this->main_frame->SetContent(new CustomPageView('directory_notfound', 'error'));
         $this->main_frame->Load();
     }
     return;
     $this->pages_model->SetPageCode('directory_calendar');
     $data = $this->organisations->_GetOrgData($organisation);
     if (!empty($data)) {
         $this->_SetupOrganisationFrame($organisation);
         $this->load->library('my_calendar');
         $this->load->library('calendar_source_yorker');
         $this->my_calendar->SetUrlPrefix('/directory/' . $organisation . '/calendar/');
         //$this->My_calendar->SetAgenda(vip_url('calendar/agenda').'/');
         $yorker_source = new CalendarSourceYorker(0);
         // Only those events of the organisation
         $yorker_source->DisableGroup('subscribed');
         $yorker_source->DisableGroup('owned');
         $yorker_source->DisableGroup('private');
         $yorker_source->EnableGroup('active');
         $yorker_source->DisableGroup('inactive');
         $yorker_source->EnableGroup('hide');
         $yorker_source->EnableGroup('show');
         $yorker_source->EnableGroup('rsvp');
         $yorker_source->IncludeStream((int) $data['organisation']['id'], TRUE);
         $now = new Academic_time(time());
         $this->my_calendar->SetTabs(FALSE);
         $this->my_calendar->SetDefaultRange($now->AcademicYear() . '-' . $now->AcademicTermNameUnique());
         $this->my_calendar->SetPath('edit', site_url('calendar/event'));
         $calendar_view = $this->my_calendar->GetMyCalendar($yorker_source, $DateRange, $Filter);
         if (FALSE) {
             $this->load->model('calendar/events_model');
             $this->load->library('view_calendar_select_week');
             $this->load->library('view_calendar_list');
             $this->load->library('date_uri');
             $use_default_range = FALSE;
             if (empty($DateRange)) {
                 // $DateRange Empty
                 $use_default_range = TRUE;
             } else {
                 $uri_result = $this->date_uri->ReadUri($DateRange);
                 if ($uri_result['valid']) {
                     // valid
                     $start_time = $uri_result['start'];
                     $end_time = $uri_result['end'];
                     $format = $uri_result['format'];
                     $range_description = $uri_result['description'];
                 } else {
                     // invalid
                     $this->main_frame->AddMessage('error', 'Unrecognised date range: "' . $DateRange . '"');
                     $use_default_range = TRUE;
                 }
             }
             if ($use_default_range) {
                 // Default to this week
                 $start_time = Academic_time::NewToday();
                 $start_time = $start_time->BackToMonday();
                 $end_time = $start_time->Adjust('1week');
                 $format = 'ac';
                 //$range_description = 'from today for 1 week';
                 $range_description = 'this week';
             }
             // Use the start time, end time, and format to set up views
             //$weeks_start = $start_time->Adjust('-2week')->BackToMonday();
             $weeks_start = $this->academic_calendar->AcademicDayOfTerm($start_time->AcademicYear(), $start_time->AcademicTerm(), 1, 0, 0, 0);
             /*if ($weeks_start->Timestamp() < $monday->Timestamp()) {
             			$weeks_start = $monday;
             		}*/
             /*$weeks_end = $end_time->Adjust('5week')->BackToMonday();
             		if ($weeks_end->Timestamp() < $monday->Timestamp()) {
             			$weeks_end = $monday->Adjust('5week');
             		}*/
             // Set up the week select view
             $week_select = new ViewCalendarSelectWeek();
             $week_select->SetUriBase('directory/' . $organisation . '/calendar/');
             $week_select->SetUriFormat($format);
             //$week_select->SetRange($weeks_start, $weeks_end);
             $week_select->SetAcademicTerm($weeks_start->AcademicYear(), $weeks_start->AcademicTerm());
             $week_select->SetSelectedWeek($start_time, $end_time);
             $week_select->Retrieve();
             $occurrence_filter = new EventOccurrenceFilter();
             $occurrence_filter->EnableSource('all');
             $occurrence_filter->SetSpecialCondition('organisations.organisation_directory_entry_name = ' . $this->db->escape($organisation));
             // Set up the events list
             $events_list = new ViewCalendarList();
             $events_list->SetUriBase('directory/' . $organisation . '/calendar/');
             $events_list->SetUriFormat($format);
             $events_list->SetRange($start_time, $end_time);
             $events_list->SetOccurrenceFilter($occurrence_filter);
             $events_list->Retrieve();
             // Set up the directory events view to contain the week select and
             // events list
             $directory_events = new FramesFrame('directory/directory_view_events', $data);
             $directory_events->SetContent($week_select, 'week_select');
             $directory_events->SetContent($events_list, 'events_list');
             $directory_events->SetData('date_range_description', $range_description);
         }
         // Set up the directory frame to use the messages frame
         $this->main_frame->SetPage('calendar', 'directory');
         $this->frame_directory->SetOrganisation($data['organisation']);
         $this->frame_directory->SetContent($calendar_view);
         // Set up the public frame to use the directory frame
         $this->main_frame->SetTitleParameters(array('organisation' => $data['organisation']['name']));
         $this->main_frame->SetContent($this->frame_directory);
     } else {
         $this->load->library('custom_pages');
         $this->main_frame->SetContent(new CustomPageView('directory_notfound', 'error'));
     }
     // Load the public frame view
     $this->main_frame->Load();
 }