$this->session_put($sessionkey . 'cur_month', $month);
    $this->session_put($sessionkey . 'cur_year', $year);
    $inline = 1;
}
// basic information about dates
$prev_month['timestamp'] = strtotime("-1 month", mktime(0, 0, 0, $month, 1, $year));
$prev_month['year'] = date('Y', $prev_month['timestamp']);
$prev_month['month'] = date('n', $prev_month['timestamp']);
$next_month['timestamp'] = strtotime("+1 month", mktime(0, 0, 0, $month, 1, $year));
$next_month['year'] = date('Y', $next_month['timestamp']);
$next_month['month'] = date('n', $next_month['timestamp']);
$last_day_of_month = date('t', strtotime("{$year}-{$month}-02"));
$db = $this->GetDb();
$start = mktime(0, 0, 0, $month, 1, $year);
$end = mktime(23, 59, 59, $month, $last_day_of_month, $year);
$event_ids = $db->GetCol(cgcalendar_utils::get_query($start, $end, $category, FALSE));
$days = array();
$parms = $params;
unset($parms['returnid'], $parms['action'], $parms['page']);
$parms['display'] = 'list';
for ($i = 1; $i <= $last_day_of_month; $i++) {
    $parms['date'] = "{$year}-{$month}-{$i}";
    $days[$i]['date'] = mktime(0, 0, 0, $month, $i, $year);
    $days[$i]['week'] = date('W', $days[$i]['date']);
    $days[$i]['url'] = $this->create_url($id, 'default', $detailpage, $parms, $inline);
    // deprecated.
    $days[$i]['ni_url'] = $this->create_url($id, 'default', $detailpage, $parms, FALSE);
    $days[$i]['in_url'] = $this->create_url($id, 'default', $detailpage, $parms, TRUE);
    $days[$i]['events'] = array();
    $days[$i]['class'] = '';
}
        $week = 1;
        $year++;
    }
}
// build query
$fmt = '%04d-W%02d-%d';
if ($first_day_of_week == 1) {
    $sday = 1;
    $eday = 7;
} else {
    $sday = 0;
    $eday = 6;
}
$start_ut = strtotime(sprintf($fmt, $year, $week, $sday));
$end_ut = strtotime(sprintf($fmt, $year, $week, $eday));
$rs = $db->SelectLimit(cgcalendar_utils::get_query($start_ut, $end_ut, $category, $reverse), $limit);
// get the list of event id's.
$customfields = null;
$event_ids = array();
while ($rs && !$rs->EOF()) {
    $event_ids[] = $rs->fields['event_id'];
    $rs->MoveNext();
}
$loader = new cgc_event_loader($id, $event_ids, $detailpage, $reverse);
if (isset($params['eventtemplate'])) {
    $loader->set_event_template($params['eventtemplate']);
}
$events = $loader->get_events();
// build navigation.
$navigation = array();
$parms = $params;
    $year = $this->session_get($sessionkey . 'year');
}
$year = get_parameter_value($params, 'year', date('Y'));
if ($sessionkey) {
    $this->session_put($sessionkey . 'year', $year);
    $inline = 1;
}
// basic information about dates
$prev_year['timestamp'] = strtotime("-1 year", mktime(0, 0, 0, 1, 1, $year));
$prev_year['year'] = date('Y', $prev_year['timestamp']);
$next_year['timestamp'] = strtotime("+1 year", mktime(0, 0, 0, 1, 1, $year));
$next_year['year'] = date('Y', $next_year['timestamp']);
$last_day_of_year = mktime(0, 0, 0, 1, 0, $next_year['year']);
$start = mktime(0, 0, 0, 1, 1, $year);
$end = mktime(23, 59, 59, 12, 31, $year);
$idlist = $db->GetCol(cgcalendar_utils::get_query($start, $end, $category, $reverse));
$idlist = array_slice($idlist, 0, $limit);
$loader = new cgc_event_loader($id, $idlist, $detailpage, $reverse);
if (isset($params['eventtemplate'])) {
    $loader->set_event_template($params['eventtemplate']);
}
$events = $loader->get_events();
$parms = $params;
unset($parms['action'], $parms['returnid'], $parms['page']);
$parms['display'] = 'yearlist';
$parms['year'] = $reverse == false ? $next_year['year'] : $prev_year['year'];
$navigation['next'] = $this->CreateURL($id, 'default', $returnid, $parms, $inline);
// deprecated
$navigation['ni_next'] = $this->CreateURL($id, 'default', $returnid, $parms, false);
$navigation['in_next'] = $this->CreateURL($id, 'default', $returnid, $parms, true);
$parms['year'] = $reverse == false ? $prev_year['year'] : $next_year['year'];