var name_iframe = "eventframe";             // Name des iFrame

var wordMonth = new Array("J&auml;nner","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
var daysmonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var calendar_events_hashtable = new Object();

var cal_month;
var cal_year;
var cal_str;

var cal_next_event_day;
var cal_next_event_month;
var cal_next_event_year;

function calendar_textOfMonth(month, year) {
	return wordMonth[month-1] + " " + year;
}

function calendar_daysOfMonth(month, year) {
	var days = daysmonth[month-1];
	if (month == 2) {
		var is_leap_year = (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0);
		if (is_leap_year)
			days = days + 1;
	}
	return days;
}

function calendar_weekdayOfFirst(month, year) {
	var d = new Date(year, month-1, 1);
	var usa_wd = d.getDay();
	var aut_wd = (usa_wd + 6) % 7;
	return aut_wd;
}

function calendar_numstr(n, len) {
	var s = "0000000" + n;
	return s.substr(s.length - len, len);
}

function calendar_events_init() {
	var today = new Date();
	var todayUTC = Date.UTC(calendar_fullyear(today.getYear()), today.getMonth(), today.getDate());
	var nextEventUTC = 0;

	var ev_list = calendar_events; // definiert in events.js
	for (var i = 0; i < ev_list.length; i++) {
		var code = ev_list[i];
		calendar_events_hashtable[code] = code;

		var parts = code.split("-");
		var year = Number(parts[0]);
		var month = Number(parts[1]);
		var day = Number(parts[2]);
		var eventUTC = Date.UTC(year, month-1, day);

		if (eventUTC >= todayUTC && (nextEventUTC == 0 || eventUTC < nextEventUTC)) {
			nextEventUTC = eventUTC;
			cal_next_event_day = day;
			cal_next_event_month = month;
			cal_next_event_year = year;
		}
	}
}

function calendar_event_daycode(day, month, year) {
	return calendar_numstr(year,4) + "-" + calendar_numstr(month,2) + "-" + calendar_numstr(day,2);
}

function calendar_event_exists(day, month, year) {
	var code = calendar_event_daycode(day, month, year);
	var containsHint = String(calendar_events_hashtable[code]);
	return containsHint == code;
}

function calendar_event_link(day, month, year) {
	return "events/event-" + calendar_event_daycode(day, month, year) + ".html";
}

function calendar_render_daycell(day, month, year, maxDay) {
	if (day < 1 || day > maxDay) { // leere Zelle
		cal_str += "<td class=\"emptyday\">&nbsp;</td>";
	}
	else if (calendar_IsThisDay(day, month, year)) { // aktueller Tag
		cal_str += "<td class=\"actualday\"><b>"+day+"</b></td>";
	}
	else if (calendar_event_exists(day, month, year)) { // Event
		//cal_str += "<td class=\"eventday\"><a target=\""+name_iframe+"\" href=\""+calendar_event_link(day, month, year)+"\">"+day+"</a></td>";
		cal_str += "<td class=\"eventday\"><a href=\"javascript:calender_showEvent('"+calendar_event_link(day, month, year)+"')\">"+day+"</a></td>";
	}
	else { // kein Event
		cal_str += "<td>"+day+"</td>";
	}
}

function calendar_render_weekrow(firstday, month, year, maxDay) {
	cal_str += "<tr align=center>";
	for (var d = 0; d < 7; d++) {
		calendar_render_daycell(firstday + d, month, year, maxDay);
	}
	cal_str += "</tr>";
}

function calendar_render_weekhead() { // Wochentage
	var days = new Array("Mo","Di","Mi","Do","Fr","Sa","So");
	cal_str += "<tr align=center>";
	for (var d = 0; d < 7; d++) {
		cal_str += "<td class=\"emptyday\">"+days[d]+"</td>";
	}
	cal_str += "</tr>";
}

function calendar_render_head() {
	cal_str += "<tr>";
	cal_str += "<th class=\"normal\">[<a href=\"javascript:calendar_prevMonth()\">&lt;</a>]</th>";
	cal_str += "<th colspan=\"5\">"+calendar_textOfMonth(cal_month, cal_year)+"</th>";
	cal_str += "<th class=\"normal\">[<a href=\"javascript:calendar_nextMonth()\">&gt;</a>]</th>";
	cal_str += "</tr>";
}

function calendar_render_month(month, year) {
	var maxDay = calendar_daysOfMonth(month, year);
	var aut_wd = calendar_weekdayOfFirst(month, year);
	var d_offset = 1 - aut_wd;

	cal_str += "<table><tbody>";
	calendar_render_head();
	calendar_render_weekhead();
	for (var d = 0; d < 6*7; d+=7) {
		calendar_render_weekrow(d + d_offset, month, year, maxDay);
	}
	cal_str += "</tbody></table>";
}

function calendar_render() {
	cal_str = "";
	calendar_render_month(cal_month, cal_year);

	var v_object = document.getElementById('calendar_core');
	v_object.innerHTML = cal_str;
}

function calendar_loadNextEvent() {
	var day = cal_next_event_day;
	var month = cal_next_event_month;
	var year = cal_next_event_year;
	if (calendar_event_exists(day, month, year)) {
		parent[name_iframe].location.href = calendar_event_link(day, month, year);
	}
}

function calendar_IsThisDay(day, month, year) {
	var today = new Date();
	var act_day = today.getDate();
	var act_month = today.getMonth()+1;
	var act_year = calendar_fullyear(today.getYear());
	return (act_day == day && act_month == month && act_year == year);
}

function calendar_thisMonth() {
	var today = new Date();
	cal_month = today.getMonth() + 1;
	cal_year = calendar_fullyear(today.getYear());
	calendar_render();
}

function calendar_fullyear(year) {
	return (year < 1000 ? 1900 + year : year)
}

function calendar_nextMonth() {
	cal_month = cal_month + 1;
	if (cal_month > 12)
	{
		cal_month = 1;
		cal_year = cal_year + 1;
	}
	calendar_render();
}

function calendar_prevMonth() {
	cal_month = cal_month - 1;
	if (cal_month < 1)
	{
		cal_month = 12;
		cal_year = cal_year - 1;
	}
	calendar_render();
}

function calender_showEvent(page)
{
	parent[name_iframe].location.href = page;
	document.getElementById("eventtitle").firstChild.data = calendar_textOfMonth(cal_month, cal_year);
}

function calendar_init() {
	calendar_events_init();
	calendar_thisMonth();
	calendar_loadNextEvent();
}
