var calendar_event_types = Array("calendarevent","calendareventallday","topicstart","topicevent","birthday");
var calendar_eventlist_close_event;

/* Create an iframe with the minicalendar in it */
function minicalendarCreate()
{
	if(show_mini_calendar)
	{
		var iframe = document.createElement('iframe');

		iframe.id = 'top-calendar';
		iframe.frameBorder = 0;
		iframe.scrolling = 'no';
		iframe.hideFocus = true;
		iframe.src = board_script_url + '/list_calendar/mini';
		iframe.allowTransparency = true;

		document.body.appendChild(iframe);
	}
}

/* Setup the minicalendar */
function minicalendarSetup()
{
	/* Make sure we are not in the full calendar */
	if (document.location.pathname.indexOf('list_calendar/mini') == -1)
		return false;

	var calendar_tables = cssQuery('table#calendar');

	if(calendar_tables.length == 0)
		return;

	var calendar_table = calendar_tables[0];

	/* Jump to today, or the first day on the calendar */
	var cell_today = cssQuery('td.today', calendar_table);
	if (cell_today.length > 0)
	{
		minicalendarShowEventlist(cell_today[0]);
	}
	else
	{
		cell_today = cssQuery('tbody td', calendar_table);
		minicalendarShowEventlist(cell_today[0]);
	}
	
	/* add (double)click event to all minicalendar TDs */
	var items = cssQuery('tbody td', calendar_table);
	for (var i = 0; i < items.length; i++)
	{
		events = cssQuery('ol > li', items[i]);
		items[i].title = items[i].title + ' (' + events.length + ')';

		items[i].onfocus = function(){ this.blur(); };
		items[i].onclick = function(){ minicalendarShowEventlist(this); return false;};
		items[i].ondblclick = function(){ parent.location.href = this.firstChild.href ? this.firstChild.href : this.childNodes[1].href; return false;};
	}

	/* When mousing over the eventlist; enlarge it */
	document.getElementById('mini-calendar-eventlist').onmouseover = function(){ calendarEventlistEnlarge('over'); };
	document.getElementById('mini-calendar-eventlist').onmouseout = function(){ calendarEventlistEnlarge('out'); };
	

	/* Add links to next and previous month */
	var targetcell = calendar_table.tHead.rows[0].cells[0];

	var links = document.createElement('span');
	links.id = 'mini-previous-next-links';

	links_previous = document.createElement('a');
	links_previous.href = document.getElementById('calendar-prev-monthlink').href.replace(/\/month\//, '/mini/');
	links_previous.appendChild(document.createTextNode('<'));

	links_next = document.createElement('a');
	links_next.href = document.getElementById('calendar-next-monthlink').href.replace(/\/month\//, '/mini/');
	links_next.appendChild(document.createTextNode('>'));

	targetcell.removeChild(targetcell.firstChild);
	targetcell.appendChild(links_previous);
	targetcell.appendChild(links_next);

	/* Reroute weeknumber-column clicks to the parent frame */
	var weeknumber_columns = cssQuery('tbody th', calendar_table);
	for (i = 0; i < weeknumber_columns.length; i++)
	{
		weeknumber_columns[i].onclick = function(){ parent.location.href = this.firstChild.href; return false;};
	}
}

/* When a calender-day-td is clicked; this function will show the events for that day */
function minicalendarShowEventlist(ob)
{
	ob = ob.firstChild;

	var calendar_eventlist = document.getElementById('mini-calendar-eventlist');
	var calendar_table = document.getElementById('calendar');
	var child, header, header_link, event, events, list, listitem, listitemlink, j;

	if (!calendar_eventlist)
		return false;

	/* Kill children */
	while (child = calendar_eventlist.firstChild)
		calendar_eventlist.removeChild(child);

	/* Display addevent link */
	insertlink = document.createElement('span');
	insertlink_link = document.createElement('a');
	insertlink_link.href = board_script_url + '/insert_calendarevent/' + ob.parentNode.id.replace(/day-(\d+)-(\d+)-(\d+)$/, '$3-$2-$1');
	insertlink_link.onclick = function(){ parent.location.href = this.href; return false;};
	insertlink_link.appendChild(document.createTextNode('+'));
	insertlink.appendChild(insertlink_link);
	calendar_eventlist.appendChild(insertlink);

	/* Display current date */
	header = document.createElement('h2');
	header_link = document.createElement('a');
	header_link.href = board_script_url + '/list_calendar/day/' + ob.parentNode.id.replace(/day-(\d+)-(\d+)-(\d+)$/, '$2/$3/$1');
	header_link.onclick = function(){ parent.location.href = this.href; return false;};
	header_link.appendChild(document.createTextNode(ob.title));
	header.appendChild(header_link);
	calendar_eventlist.appendChild(header);

	/* Display events by type */
	for (var i = 0; i < calendar_event_types.length; i++)
	{
		event_type = calendar_event_types[i];

		events = cssQuery('ol.event-type-' + event_type + ' > li', ob.parentNode);

		if (events.length > 0)
		{
			header = document.createElement('h3');
			header.appendChild(document.createTextNode(getText('calendar', event_type)));
			calendar_eventlist.appendChild(header);

			list = document.createElement('ul');
			list.id = 'mini-events-' + event_type;

			for (j = 0; j<events.length; j++)
			{
				event = events[j].cloneNode(true);

				event.onclick = function() { var link = cssQuery('a.primary', this);if(link.length > 0){parent.location.href = link[0].href;return false;} };

				list.appendChild(event);
			}
			calendar_eventlist.appendChild(list);
		}
	}

	var items = cssQuery('td.selected', ob.parentNode.parentNode.parentNode);

	for(i=0;i < items.length; i++)
	{
		jscss('remove', items[i], 'selected', '');
	}

	jscss('add', ob.parentNode, 'selected', '');

	return false;
}

function calendarEventlistEnlarge(type)
{
	var isIE = navigator.appName.toLowerCase().indexOf('internet explorer')+1 ? 1:0;
	if (isIE)
		return false;

	var calendar_eventlist = document.getElementById('mini-calendar-eventlist');
	var calendar_iframe = parent.document.getElementById('top-calendar');
	var has_scrollbar = (calendar_eventlist.scrollHeight > calendar_eventlist.clientHeight);

	if (type == 'over')
	{
		if (typeof calendar_eventlist_close_event != 'undefined')
			clearTimeout(calendar_eventlist_close_event);
		if (typeof calendar_iframe_close_event != 'undefined')
			clearTimeout(calendar_iframe_close_event);
	}

	if (type == 'over' && has_scrollbar)
	{
		jscss('add', calendar_eventlist, 'hover', '');
		jscss('add', calendar_iframe, 'hover', '');
	} else if (type == 'out') {
		calendar_eventlist_close_event = setTimeout("jscss('remove',document.getElementById('mini-calendar-eventlist'),'hover','');", 100);
		calendar_iframe_close_event = setTimeout("jscss('remove',parent.document.getElementById('top-calendar'),'hover','');", 100);
	}
}