<?php
/*=====================================================================*\
|| ###################################################################
|| # Kalens [#]version[#]
|| # Copyright ©2002-[#]year[#] Iris Studios, Inc.
|| #
|| # This program is free software; you can redistribute it and/or modify
|| # it under the terms of the GNU General Public License as published by
|| # the Free Software Foundation; version [#]gpl[#] of the License.
|| #
|| # This program is distributed in the hope that it will be useful, but
|| # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|| # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|| # more details.
|| #
|| # You should have received a copy of the GNU General Public License along
|| # with this program; if not, write to the Free Software Foundation, Inc.,
|| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|| ###################################################################
\*=====================================================================*/

// ######################### REQUIRE BACKEND #########################
define('SVN', '$Id$');

$apptemplates = array(
	'editor_dropdown_year',
	'editor_dropdown_month',
	'editor_dropdown_time',
	'editor_checkbox_days',
	'event'
);

require_once('./global.php');
require_once('./includes/date.php');
require_once('./includes/event.php');

$Event_Store = new Event_Store_Handler();

// ######################## START MAIN SCRIPT ########################
if (!$kalens->userinfo['userid'] AND !$kalens->options['guestcanedit'])
{
	print_no_permission();
}

// ######################### ADD EVENT ACTION ########################
if ($_POST['do'] == 'insert')
{
	$kalens->input_clean_array(array(
		'calendarid'		=> TYPE_UINT,
		'st_time'			=> TYPE_FLOAT,
		'en_time'			=> TYPE_FLOAT,
		'st_min'			=> TYPE_UINT,
		'en_min'			=> TYPE_UINT,
		'st_month'			=> TYPE_UINT,
		'st_day'			=> TYPE_UINT,
		'st_year'			=> TYPE_UINT,
		'en_month'			=> TYPE_UINT,
		'en_day'			=> TYPE_UINT,
		'en_year'			=> TYPE_UINT,
		'recur_type'		=> TYPE_INT,
		'daily_xdays'		=> TYPE_INT,
		'weekly_xweeks'		=> TYPE_INT,
		'monthly_xmonths'	=> TYPE_INT,
		'allday'			=> TYPE_BOOL
	));

	if (!$kalens->in['allday'])
	{
		$kalens->in['allday'] = 0;
	}

	// So people can't submit malicious code
	if (!verify_calendar_permissions($kalens->in['calendarid'], 0))
	{
		print_no_permission();
	}

	// ###################################################################
	// Get the user's date and time for this event, no formatting
	// Just POST parsing

	// The hours in seconds
	$hourbits['start'] = $kalens->in['st_time'] * SECONDS_IN_HOUR;
	$hourbits['end'] = $kalens->in['en_time'] * SECONDS_IN_HOUR;

	if ($hourbits['end'] == 0 AND $hourbits['start'] > $hourbits['end'])
	{
		$hourbits['end'] = SECONDS_IN_DAY;
		$kalens->in['en_day'] = $kalens->in['st_day'] + 1;
	}

	// Minutes in seconds
	$minbits['start'] = $kalens->in['st_min'] * SECONDS_IN_MIN;
	$minbits['end'] = $kalens->in['en_min'] * SECONDS_IN_MIN;

	$timebits['start'] = ($kalens->in['st_time'] ? $hourbits['start'] + $minbits['start'] : 0);
	$timebits['end'] = ($kalens->in['en_time'] ? $hourbits['end'] + $minbits['end'] : ($kalens->in['en_time'] == 0 ? $hourbits['end'] + $minbits['end'] : 0));

	// Compute the date UNIX timestamp
	$start_date = gmmktime(00, 00, 00, $kalens->in['st_month'], $kalens->in['st_day'], $kalens->in['st_year']);
	$end_date = ($kalens->in['en_day'] ? gmmktime(00, 00, 00, $kalens->in['en_month'], $kalens->in['en_day'], $kalens->in['en_year']) : $start_date);

	// Process the final stamps
	$datebits['start'] = process_gmt_date($start_date, $timebits['start']);
	$datebits['end'] = process_gmt_date($end_date, $timebits['end']);

	$type_int = $system['events']['type'][ $kalens->in['type'] ];

	switch ($kalens->in['type'])
	{
		// ###################################################################
		// Single day event
		case $system['events']['type'][0]:

			// Set the recurrance pattern to none
			$pattern['pattern'] = '';
			$pattern['type'] = $system['events']['recurring']['none'];

			// Error handling
			if (empty($kalens->in['st_day']))
			{
				$error[] = $lang->string('The date(s) you specified is/are not valid.');
			}
			if ($timebits['start'] > $timebits['end'])
			{
				$error[] = $lang->string('The times you specified are not valid.');
			}

			break;

		// ###################################################################
		// Ranged event
		case $system['events']['type'][1]:

			// Set the recurrance pattern to single-day recurring pattern
			$pattern['pattern'] = '1|';
			$pattern['type'] = $system['events']['recurring']['daily'];

			$kalens->in['allday'] = 1;

			break;

		// ###################################################################
		// Recurring event
		case $system['events']['type'][2]:

			// Start the date creation
			$start_date = convert_date_to_gmt(gmmktime($hourbits['start'], $kalens->in['st_min'], 00, $kalens->in['st_month'], $kalens->in['st_day'], $kalens->in['st_year']));
			$end_date = convert_date_to_gmt(gmmktime($hourbits['end'], $kalens->in['en_min'], 00, $kalens->in['en_month'], $kalens->in['en_day'], $kalens->in['en_year']));

			// -------------------------------------------------------------------
			// Daily recurrence
			if ($kalens->in['recur_type'] == $system['events']['recurring']['daily'])
			{
				$pattern['pattern'] = $kalens->in['daily_xdays'] . '|';
				$pattern['type'] = $system['events']['recurring']['daily'];

				if (empty($kalens->in['daily_xdays']))
				{
					$error[] = $lang->string('You have not specified the number of days for which to repeat.');
				}
			}

			// -------------------------------------------------------------------
			// Weekly recurrence
			else if ($kalens->in['recur_type'] == $system['events']['recurring']['weekly'])
			{
				$pattern['type'] = $system['events']['recurring']['weekly'];

				// Run through the selected days to get the pattern data
				foreach ($system['days'] AS $key => $value)
				{
					if (!is_int($_value) AND $_POST["$value"])
					{
						$selected_days[] = $system['days']["$value"];
					}
				}

				if (is_array($selected_days))
				{
					foreach ($selected_days AS $value)
					{
						$day_bitfield_value = $day_bitfield_value + $value;
					}
				}

				if ($day_bitfield_value == 0)
				{
					$error[] = $lang->string('You have not specified any days to repeat this event on.');
				}
				if (empty($kalens->in['weekly_xweeks']))
				{
					$error[] = $lang->string('You have not set the number of weeks for which this event to recur.');
				}

				// Now that we have the selected days, go ahead and create the pattern
				$pattern['pattern'] = $kalens->in['weekly_xweeks'] . "|$day_bitfield_value";
			}

			// -------------------------------------------------------------------
			// Monthly recurrence
			else if ($kalens->in['recur_type'] == $system['events']['recurring']['monthly'])
			{
				$pattern['pattern'] = '|' . $kalens->in['monthly_xmonths'];
				$pattern['type'] = $system['events']['recurring']['monthly'];

				if ($kalens->in['monthly_xmonths'] == 0)
				{
					$error[] = $lang->string('You have not specified a valid recurring pattern.');
				}
			}

			// -------------------------------------------------------------------
			// Yearly recurrence
			else if ($kalens->in['recur_type'] == $system['events']['recurring']['yearly'])
			{
				$pattern['pattern'] = '';
				$pattern['type'] = $system['events']['recurring']['yearly'];
			}
			break;
	}

	if (empty($kalens->in['title']))
	{
		$error[] = $lang->string('You have not specified a title for this event.');
	}
	if ($end_date <= $start_date AND $kalens->in['type'] != $system['events']['type'][0])
	{
		$error[] = $lang->string('The times you specified are not valid.');
	}
	if ((empty($kalens->in['st_day']) OR empty($kalens->in['en_day'])) AND $kalens->in['type'] != $system['events']['type'][0])
	{
		$error[] = $lang->string('The date(s) you specified is/are not valid.');
	}
	if ($kalens->in['st_min'] > 60 OR $kalens->in['en_min'] > 60)
	{
		$error[] = $lang->string('The minutes you entered are invalid, they must be under <em>60</em>.');
	}

	// Process all of the errors
	$errorblock = print_process_errors($error);

	if (!$page_has_errors)
	{
		// Finally insert the event into the database
		// #*# Consider putting this in the event handler class
		$db->query("
			INSERT INTO " . TABLE_PREFIX . "event
			(
				userid,
				calendarid,
				type,
				title,
				description,
				startline,
				endline,
				recur,
				recurpattern,
				stime,
				etime,
				allday
			)
			VALUES
			(
				" . $kalens->userinfo['userid'] . ",
				" . $kalens->in['calendarid'] . ",
				$type_int,
				'" . $kalens->in['title'] . "',
				'" . $kalens->in['description'] . "',
				" . $datebits['start']['date'] . ",
				" . $datebits['end']['date'] . ",
				$pattern[type],
				'$pattern[pattern]',
				" . $datebits['start']['time'] . ",
				" . $datebits['end']['time'] . ",
				" . $kalens->in['allday'] . "
			)"
		);

		$Event_Store->type = 'insert';
		$Event_Store->insert_event($type_int, $datebits, $pattern, $kalens->in['title'], $db->insert_id(), $kalens->in['allday'], $kalens->in['calendarid']);

		print_redirect(sprintf($lang->string('%1$s successfully created. Please wait while you are redirected.'), $lang->string('Event')), "showcalendar.php?id=" . $kalens->in['calendarid'] . "&month=" . $kalens->in['st_month'] . "&year=" . $kalens->in['st_year']);
	}
}

// ############################ ADD EVENT ############################
if ($_REQUEST['do'] == 'add' AND empty($_POST['do']))
{
	$kalens->input_clean('id', TYPE_UINT);

	store_date_args();

	if (!empty($_REQUEST['id']))
	{
		if (!verify_calendar_permissions($kalens->in['id'], 0))
		{
			print_no_permission();
		}

		if ($eventinfo['allday'])
		{
			$checked['allday'] = ' ' . CHECKED;
			$show['times'] = ' style="display:none"';
		}

		$eventinfo['calendarid'] = $kalens->in['id'];

		$eventinfo['dateargs'] = unstore_date_args('arr');

		// List of years
		$eventinfo['st_yearlist'] = construct_year_list(($eventinfo['dateargs']['year'] ? $eventinfo['dateargs']['year'] : pcdate('Y', TIMENOW)));
		$eventinfo['en_yearlist'] = construct_year_list(($eventinfo['dateargs']['year'] ? $eventinfo['dateargs']['year'] : pcdate('Y', TIMENOW)));

		// List of months
		$eventinfo['st_monthlist'] = construct_month_list(($eventinfo['dateargs']['month'] ? $eventinfo['dateargs']['month'] : pcdate('m', TIMENOW)), $system['months']);
		$eventinfo['en_monthlist'] = construct_month_list(($eventinfo['dateargs']['month'] ? $eventinfo['dateargs']['month'] : pcdate('m', TIMENOW)), $system['months']);

		// Time lists
		$eventinfo['st_time'] = construct_time_list(pcdate('G', TIMENOW));
		$eventinfo['en_time'] = construct_time_list(pcdate('G', TIMENOW) + 1);

		// Today and tomorrow
		$eventinfo['today'] = ($eventinfo['dateargs']['day'] ? $eventinfo['dateargs']['day'] : pcdate('j', TIMENOW));
		$eventinfo['tomorrow'] = (($eventinfo['today'] + 1) <= 31 ? $eventinfo['today'] + 1 : 1);

		// Date checkboxes for recurring events
		foreach ($system['days'] AS $_key => $_value)
		{
			if (!is_int($_value))
			{
				$daylist['index'] = $_key;
				$daylist['name'] = $_value;
				eval('$eventinfo[daylist] .= "' . $template->fetch('editor_checkbox_days') . '";');
			}
		}

		$eventinfo['my_monthlist'] = construct_month_list(($page_has_errors ? $yearly_xmonth : pcdate('m', TIMENOW)), $system['months']);
		$calendarinfo = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "calendar WHERE calendarid = $eventinfo[calendarid]");

		$eventinfo['formaction'] = 'insert';

		// Finally print out the editor template
		$display['times'] = 'block';
		$display['end_date'] = 'none';
		$display['sing'] = 'block';
		$display['recur'] = 'none';
		$display['recur_1'] = 'block';
		$display['recur_2'] = 'none';
		$display['recur_3'] = 'none';
		$display['recur_4'] = 'none';

		$display['type_selected_sing'] = CHECKED;
		$display['type_selected_range'] = '';
		$display['type_selected_recur'] = '';

		$eventinfo['st_day'] = $eventinfo['today'];
		$eventinfo['en_day'] = $eventinfo['tomorrow'];

		$eventinfo['st_min'] = '00';
		$eventinfo['en_min'] = '00';

		$eventinfo['recur_type_1_selected'] = _SELECTED;
		$eventinfo['daily_type_xdays_selected'] = _CHECKED;
		$eventinfo['daily_xdays_value'] = '1';
		$eventinfo['weekly_xweeks_value'] = '1';
		$eventinfo['monthly_xdays'] = '1';
		$eventinfo['monthly_xmonths'] = '1';
		$eventinfo['yearly_xday'] = '1';

		$navbits = construct_navbar(array($calendarinfo['title'] => "showcalendar.php?id=$calendarinfo[calendarid]", sprintf($lang->string('Add %1$s'), $lang->string('Event'))));
		eval('$navbar = "' . $template->fetch('navbar') . '";');
		eval('$template->flush("' . $template->fetch('event') . '");');
	}
	else
	{
		print_no_permission();
	}
}

// ######################## EDIT EVENT ACTION ########################
if ($_POST['do'] == 'update')
{
	$kalens->input_clean_array(array(
		'eventid'			=> TYPE_UINT,
		'st_time'			=> TYPE_FLOAT,
		'en_time'			=> TYPE_FLOAT,
		'st_min'			=> TYPE_UINT,
		'en_min'			=> TYPE_UINT,
		'st_month'			=> TYPE_UINT,
		'st_day'			=> TYPE_UINT,
		'st_year'			=> TYPE_UINT,
		'en_month'			=> TYPE_UINT,
		'en_day'			=> TYPE_UINT,
		'en_year'			=> TYPE_UINT,
		'recur_type'		=> TYPE_INT,
		'daily_xdays'		=> TYPE_INT,
		'weekly_xweeks'		=> TYPE_INT,
		'monthly_xmonths'	=> TYPE_INT,
		'allday'			=> TYPE_BOOL
	));

	if (!$kalens->in['allday'])
	{
		$kalens->in['allday'] = 0;
	}

	// Prevent malicious database injections
	if (!verify_calendar_permissions(0, $kalens->in['eventid']))
	{
		print_no_permission();
	}

	$eventinfo = $db->query_first("
		SELECT event.*, calendar.*
		FROM " . TABLE_PREFIX . "event AS event, " . TABLE_PREFIX . "calendar AS calendar
		WHERE event.calendarid = calendar.calendarid
		AND event.eventid = " . $kalens->in['eventid']
	);

	// ###################################################################
	// Process POST'd data and that's all :-)

	// Hours go into seconds
	$hourbits['start'] = $kalens->in['st_time'] * SECONDS_IN_HOUR;
	$hourbits['end'] = $kalens->in['en_time'] * SECONDS_IN_HOUR;

	if ($hourbits['end'] == 0 AND $hourbits['start'] > $hourbits['end'])
	{
		$hourbits['end'] = SECONDS_IN_DAY;
		$kalens->in['en_day'] = $kalens->in['st_day'] + 1;
	}

	// Minutes go into seconds
	$minbits['start'] = $kalens->in['st_min'] * SECONDS_IN_MIN;
	$minbits['end'] = $kalens->in['en_min'] * SECONDS_IN_MIN;

	$timebits['start'] = ($kalens->in['st_time'] ? $hourbits['start'] + $minbits['start'] : 0);
	$timebits['end'] = ($kalens->in['en_time'] ? $hourbits['end'] + $minbits['end'] : ($kalens->in['en_time'] == 0 ? $hourbits['end'] + $minbits['end'] : 0));

	// Compute the UNIX timetsamp
	$start_date = gmmktime(00, 00, 00, $kalens->in['st_month'], $kalens->in['st_day'], $kalens->in['st_year']);
	$end_date = ($kalens->in['en_day'] ? gmmktime(00, 00, 00, $kalens->in['en_month'], $kalens->in['en_day'], $kalens->in['en_year'], $kalens->in['start_date']) : 0);

	// Process the final stamps
	$datebits['start'] = process_gmt_date($start_date, $timebits['start']);
	$datebits['end'] = process_gmt_date($end_date, $timebits['end']);

	$type_int = $system['events']['type'][ $kalens->in['type'] ];

	switch ($kalens->in['type'])
	{
		// ###################################################################
		// Single-day event
		case $system['events']['type'][0]:

			// Set the recurrance pattern to none
			$pattern['pattern'] = '';
			$pattern['type'] = $system['events']['recurring']['none'];

			// Error handling
			if (empty($kalens->in['st_day']))
			{
				$error[] = $lang->string('The date(s) you specified is/are not valid.');
			}
			if ($timebits['start'] > $timebits['end'])
			{
				$error[] = $lang->string('The times you specified are not valid.');
			}

			break;

		// ###################################################################
		// Ranged event
		case $system['events']['type'][1]:

			// Set the recurrance pattern to single-day recurring pattern
			$pattern['pattern'] = '1|';
			$pattern['type'] = $system['events']['recurring']['daily'];

			$kalens->in['allday'] = 1;

			break;

		// ###################################################################
		// Recurring event
		case $system['events']['type'][2]:

			// Start the date creation
			$start_date = convert_date_to_gmt(gmmktime($hourbits['start'], $kalens->in['st_min'], 00, $kalens->in['st_month'], $kalens->in['st_day'], $kalens->in['st_year']));
			$end_date = convert_date_to_gmt(gmmktime($hourbits['end'], $kalens->in['en_min'], 00, $kalens->in['en_month'], $kalens->in['en_day'], $kalens->in['en_year']));

			// -------------------------------------------------------------------
			// Daily recurrence
			if ($kalens->in['recur_type'] == $system['events']['recurring']['daily'])
			{
				$pattern['pattern'] = $kalens->in['daily_xdays'] . '|';
				$pattern['type'] = $system['events']['recurring']['daily'];

				if (empty($kalens->in['daily_xdays']))
				{
					$error[] = $lang->string('You have not specified the number of days for which to repeat.');
				}
			}

			// -------------------------------------------------------------------
			// Weekly recurrence
			else if ($kalens->in['recur_type'] == $system['events']['recurring']['weekly'])
			{
				$pattern['type'] = $system['events']['recurring']['weekly'];

				// Run through the selected days to get the pattern data
				foreach ($system['days'] AS $key => $value)
				{
					if (!is_int($value) AND $_POST["$value"])
					{
						$selected_days[] = $system['days']["$value"];
					}
				}

				if (is_array($selected_days))
				{
					foreach ($selected_days AS $value)
					{
						$day_bitfield_value = $day_bitfield_value + $value;
					}
				}

				if ($day_bitfield_value == 0)
				{
					$error[] = $lang->string('You have not specified any days to repeat this event on.');
				}
				if (empty($kalens->in['weekly_xweeks']))
				{
					$error[] = $lang->string('You have not set the number of weeks for which this event to recur.');
				}

				// Now that we have the selected days, go ahead and create the pattern
				$pattern['pattern'] = $kalens->in['weekly_xweeks'] . "|$day_bitfield_value";
			}

			// -------------------------------------------------------------------
			// Monthly recurrence
			else if ($kalens->in['recur_type'] == $system['events']['recurring']['monthly'])
			{
				$pattern['pattern'] = '|' . $kalens->in['monthly_xmonths'];
				$pattern['type'] = $system['events']['recurring']['monthly'];

				if ($kalens->in['monthly_xmonths'] == 0)
				{
					$error[] = $lang->string('You have not specified a valid recurring pattern.');
				}
			}

			// -------------------------------------------------------------------
			// Yearly recurrence
			else if ($kalens->in['recur_type'] == $system['events']['recurring']['yearly'])
			{
				$pattern['pattern'] = '';
				$pattern['type'] = $system['events']['recurring']['yearly'];
			}
			break;
	}

	if (empty($kalens->in['title']))
	{
		$error[] = $lang->string('You have not specified a title for this event.');
	}
	if ($end_date <= $start_date AND $kalens->in['type'] != $system['events']['type'][0])
	{
		$error[] = $lang->string('The times you specified are not valid.');
	}
	if ((empty($kalens->in['st_day']) OR empty($kalens->in['en_day'])) AND $kalens->in['type'] != $system['events']['type'][0])
	{
		$error[] = $lang->string('The date(s) you specified is/are not valid.');
	}
	if ($kalens->in['st_min'] > 60 OR $kalens->in['en_min'] > 60)
	{
		$error[] = $lang->string('The minutes you entered are invalid, they must be under <em>60</em>.');
	}

	// Process all of the errors
	$errorblock = print_process_errors($error);

	if (!$page_has_errors)
	{
		// Send the final SQL query over
		$db->query("
			UPDATE " . TABLE_PREFIX . "event
			SET
				type = $type_int,
				title = '" . $kalens->in['title'] . "',
				description = '" . $kalens->in['description'] . "',
				startline = " . $datebits['start']['date'] . ",
				endline = " . $datebits['end']['date'] . ",
				stime = " . $datebits['start']['time'] . ",
				etime = " . $datebits['end']['time'] . ",
				recur = $pattern[type],
				recurpattern = '$pattern[pattern]',
				allday = " . $kalens->in['allday'] . "
			WHERE eventid = " . $kalens->in['eventid']
		);

		$Event_Store->type = 'update';
		$Event_Store->insert_event($type_int, $datebits, $pattern, $kalens->in['title'], $kalens->in['eventid'], $kalens->in['allday'], $eventinfo['calendarid']);

		print_redirect(sprintf($lang->string('%1$s has been updated. Please wait for a redirect to occur.'), $lang->string('Event')), "showcalendar.php?id=$eventinfo[calendarid]&month=" . $kalens->in['st_month'] . "&year=" . $kalens->in['st_year']);
	}
}

// ############################ EDIT EVENT ###########################
if (($_REQUEST['do'] == 'edit' AND empty($_POST['do'])))
{
	$show['edit'] = true;

	$kalens->input_clean('id', TYPE_UINT);

	if (!empty($_REQUEST['id']))
	{
		if (!verify_calendar_permissions(0, $kalens->in['id']))
		{
			print_no_permission();
		}

		$eventinfo = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "event WHERE eventid = " . $kalens->in['id']);
		$eventinfo['type'] = $system['events']['type']["$eventinfo[type]"];

		$eventinfo['startstamp'] = process_user_date($eventinfo['startline'], $eventinfo['stime']);
		$eventinfo['endstamp'] = process_user_date($eventinfo['endline'], $eventinfo['etime']);

		$eventinfo['st_day'] = pcdate('j', $eventinfo['startstamp']);
		$eventinfo['en_day'] = pcdate('j', $eventinfo['endstamp']);

		// List of years
		$eventinfo['st_yearlist'] = construct_year_list(pcdate('Y', $eventinfo['startstamp']));
		$eventinfo['en_yearlist'] = construct_year_list(pcdate('Y', $eventinfo['endstamp']));

		// List of months
		$eventinfo['st_monthlist'] = construct_month_list(pcdate('m', $eventinfo['startstamp']), $system['months']);
		$eventinfo['en_monthlist'] = construct_month_list(pcdate('m', $eventinfo['endstamp']), $system['months']);

		// Print out a list of times
		$eventinfo['st_time'] = construct_time_list(pcdate('G', $eventinfo['startstamp']));
		$eventinfo['en_time'] = construct_time_list(pcdate('G', $eventinfo['endstamp']));

		// List of minutes
		$eventinfo['st_min'] = pcdate('i', $eventinfo['startstamp']);
		$eventinfo['en_min'] = pcdate('i', $eventinfo['endstamp']);

		if ($eventinfo['allday'])
		{
			$checked['allday'] = ' ' . CHECKED;
			$show['times'] = ' style="display:none"';
		}

		$eventinfo['st_suffix'] = $eventinfo['st_suffixlist'];
		$eventinfo['en_suffix'] = $eventinfo['en_suffixlist'];

		// Populate the defaults, overwrite these with the DB values
		$eventinfo['daily_xdays_value'] = '2';
		$eventinfo['weekly_xweeks_value'] = '1';
		$eventinfo['monthly_xdays'] = '1';
		$eventinfo['monthly_xmonths'] = '2';
		$eventinfo['yearly_xday'] = '2';
		foreach ($system['days'] AS $_key => $_value)
		{
			$daylist['name'] = $_value;
			$daylist['index'] = $_key;

			if (!is_int($_value))
			{
				eval('$eventinfo[daylist] .= "' . $template->fetch('editor_checkbox_days') . '";');
			}
		}

		$eventinfo['my_monthlist'] = construct_month_list(pcdate('m', TIMENOW), $system['months']);
		$calendarinfo = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "calendar WHERE calendarid = $eventinfo[calendarid]");

		$navbits = construct_navbar(array($calendarinfo['title'] => "showcalendar.php?id=$calendarinfo[calendarid]", sprintf($lang->string('Edit %1$s'), $lang->string('Event')) => "event.php?do=edit&amp;id=$eventinfo[eventid]", $eventinfo['title']));
		eval('$navbar = "' . $template->fetch('navbar') . '";');

		$eventinfo['formaction'] = 'update';

		// Finally print out the editor template
		$display['recur_1'] = 'block';
		$display['recur_2'] = 'none';
		$display['recur_3'] = 'none';
		$display['recur_4'] = 'none';

		switch ($eventinfo['type'])
		{
			// ###################################################################
			// Single-day event
			case $system['events']['type'][0]:
				$display['type_selected_sing'] = CHECKED;
				$display['end_date'] = 'none';
				$display['times'] = ($eventinfo['allday'] ? 'none' : 'block');
				$display['allday_box'] = 'block';
				$display['allday'] = ($eventinfo['allday'] ? CHECKED : '');
				$display['recur'] = 'none';
				break;

			// ###################################################################
			// Ranged event
			case $system['events']['type'][1]:
				$display['type_selected_range'] = CHECKED;
				$display['end_date'] = 'block';
				$display['times'] = 'none';
				$display['allday_box'] = 'none';
				$display['allday'] = CHECKED;
				$display['recur'] = 'none';
				break;

			// ###################################################################
			// Recurring event
			case $system['events']['type'][2]:
				$display['type_selected_recur'] = CHECKED;
				$display['end_date'] = 'block';
				$display['times'] = ($eventinfo['allday'] ? 'none' : 'block');
				$display['allday_box'] = 'block';
				$display['allday'] = ($eventinfo['allday'] ? CHECKED : '');
				$display['recur'] = 'block';
				$display['recur_1'] = 'none';

				// -------------------------------------------------------------------
				// Daily recurrence
				if ($eventinfo['recur'] == $system['events']['recurring']['daily'])
				{
					$display['recur_type_1'] = SELECTED;
					$display['recur_1'] = 'block';

					// Weekdays
					if ($eventinfo['recurpattern'] == "1|{$system[patterns][weekday]}")
					{
						$eventinfo['daily_type_weekdays_selected'] = CHECKED;
					}
					else
					{
						$pattern = explode('|', $eventinfo['recurpattern']);
						$eventinfo['daily_xdays_value'] = $pattern[0];
						$eventinfo['daily_type_xdays_selected'] = CHECKED;
					}
				}

				// -------------------------------------------------------------------
				// Weekly recurrence
				else if ($eventinfo['recur'] == $system['events']['recurring']['weekly'])
				{
					$pattern = explode('|', $eventinfo['recurpattern']);

					$eventinfo['weekly_xweeks_value'] = reset($pattern);

					$display['recur_type_2'] = SELECTED;
					$display['recur_2'] = 'block';

					// Remove the default day list and then recreate it
					$eventinfo['daylist'] = '';
					foreach ($system['days'] AS $_key => $_value)
					{
						$daylist['name'] = $_value;
						$daylist['index'] = $_key;

						if (!is_int($_value))
						{
							if (($_key & end($pattern)) != 0)
							{
								$daylist['selected'] = CHECKED;
							}
							else
							{
								$daylist['selected'] = '';
							}

							eval('$eventinfo[daylist] .= "' . $template->fetch('editor_checkbox_days') . '";');
						}
					}
				}

				// -------------------------------------------------------------------
				// Monthly recurrence
				else if ($eventinfo['recur'] == $system['events']['recurring']['monthly'])
				{
					$pattern = explode('|', $eventinfo['recurpattern']);

					$display['recur_type_3'] = SELECTED;
					$display['recur_3'] = 'block';
					$eventinfo['monthly_xmonths'] = end($pattern);
					$display['end_day'] = ' style="display:none"';
				}

				// -------------------------------------------------------------------
				// Yearly recurrence
				else if ($eventinfo['recur'] == $system['events']['recurring']['yearly'])
				{
					$pattern = explode('|', $eventinfo['recurpattern']);

					$display['recur_type_4'] = SELECTED;
					$display['recur_4'] = 'block';

					$display['end_day'] = ' style="display:none"';
					$display['end_month'] = ' style="display:none"';
				}
				else
				{

				}
				break;
		}

		eval('$template->flush("' . $template->fetch('event') . '");');
	}
}

// ########################### DELETE EVENT ##########################
if ($_REQUEST['do'] == 'delete')
{
	$kalens->input_clean('id', TYPE_UINT);

	if (!empty($kalens->in['id']))
	{
		if (!verify_calendar_permissions(0, $kalens->in['id']))
		{
			print_no_permission();
		}

		$get_cal_id = $db->query_first("SELECT " . TABLE_PREFIX . "calendarid FROM event WHERE eventid = " . $kalens->in['id']);
		$db->query("DELETE FROM " . TABLE_PREFIX . "event WHERE eventid = " . $kalens->in['id']);
		$db->query("DELETE FROM " . TABLE_PREFIX . "eventstore WHERE groupid = " . $kalens->in['id']);

		print_redirect(sprintf($lang->string('%1$s has been deleted successfully.'), $lang->string('Event')), "showcalendar.php?id=$get_cal_id[calendarid]");
	}
}


/*=====================================================================*\
|| ###################################################################
|| # $HeadURL$
|| # $Id$
|| ###################################################################
\*=====================================================================*/
?>