var calendars = new Array();
var coordinate = new Object();

function RegisterCalendar(name)
{
	calendars.push(name);
}

function LocateCalendar(object)
{
	var dimensions = CalculateCoordinate(object);

	coordinate.x = dimensions[0];
	coordinate.y = dimensions[1];
}

function ShowCalendar(name,mode,yearStart,yearEnd,offsetMonth,offsetYear)
{
	var object = document.getElementById('calendar[' + name + ']');

	mode || (mode = (object.style.visibility == 'hidden') ? 1 : -1);

	switch (mode)
	{
		case 1:
			for (var i=0;i<calendars.length;i++) ShowCalendar(calendars[i],-1);

			selectedDate = GetSelectedDate(name);

			object.style.left = coordinate.x + 20 + 'px';
			object.style.top = coordinate.y + 'px';
			object.style.visibility = 'visible';
			object.innerHTML = MakeCalendar(name,yearStart,yearEnd,offsetMonth,offsetYear);

			break;
		case -1:
			object.style.visibility = 'hidden';
			object.innerHTML = "";

			break;
	}
}

function MakeCalendar(name,yearStart,yearEnd,offsetMonth,offsetYear)
{
	var firstDate = GetDate(selectedDate,offsetMonth,offsetYear,1);
	var today, loopDate, content = "", offset = firstDate.getDay(), currentDate = new Date();
	var monthName = new Array("januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december");
	var dayName = new Array("ma", "di", "wo", "do", "vr", "za", "zo");

	content += "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2 CLASS='borderCalendar'>";
	content += "<TR><TD COLSPAN=7 HEIGHT=22>";
	content += "<TABLE BORDER=0 WIDTH=152 CELLPADDING=0>";
	content += "<TR>";
	content += "<TD WIDTH=12><A HREF=\"javascript: void 0;\" onClick=\"" + (GetDate(firstDate,0,-1,1).getFullYear() >= yearStart ? "ShowCalendar('" + name + "',1," + yearStart + "," + yearEnd + "," + offsetMonth + "," + (offsetYear - 1) + ")" : "void 0") + ";\"><<</A></TD>";
	content += "<TD WIDTH=8><A HREF=\"javascript: void 0;\" onClick=\"" + (GetDate(firstDate,-1,0,1).getFullYear() >= yearStart ? "ShowCalendar('" + name + "',1," + yearStart + "," + yearEnd + "," + (offsetMonth - 1) + "," + offsetYear + ")" : "void 0") + ";\"><</A></TD>";
	content += "<TD WIDTH=100 ALIGN=center>" + monthName[firstDate.getMonth()] + "</TD>";
	content += "<TD WIDTH=32 ALIGN=center>" + firstDate.getFullYear() + "</TD>";
	content += "<TD WIDTH=8 ALIGN=right><A HREF=\"javascript: void 0;\" onClick=\"" + (GetDate(firstDate,1,0,1).getFullYear() <= yearEnd ? "ShowCalendar('" + name + "',1," + yearStart + "," + yearEnd + "," + (offsetMonth + 1) + "," + offsetYear + ")" : "void 0") + ";\">></A></TD>";
	content += "<TD WIDTH=12 ALIGN=right><A HREF=\"javascript: void 0;\" onClick=\"" + (GetDate(firstDate,0,1,1).getFullYear() <= yearEnd ? "ShowCalendar('" + name + "',1," + yearStart + "," + yearEnd + "," + offsetMonth + "," + (offsetYear + 1) + ")" : "void 0") + ";\">>></A></TD>";
	content += "</TR>";
	content += "</TABLE>";
	content += "</TD></TR>";

	content += "<TR CLASS='headerCalendar'><TD ALIGN=right HEIGHT=16>" + dayName.join("</TD><TD ALIGN=right>") + "</TD></TR>";
	content += "<TR>";

	for (var i=1;i<=42;i++)
	{
		loopDate = GetDate(selectedDate,offsetMonth,offsetYear,i - offset + 1); today = loopDate.getDate() == currentDate.getDate() && loopDate.getMonth() == currentDate.getMonth() && loopDate.getFullYear() == currentDate.getFullYear();

		content += "<TD ALIGN=right WIDTH=18 HEIGHT=18" + (today ? " CLASS='todayCalendar'" : "") + " onMouseOver=\"return false; this.className = 'hoverCalendar';\" onMouseOut=\"this.className = " + (today ? "'todayCalendar'" : "null") + ";\">" + (loopDate.getMonth() == firstDate.getMonth() ? "<A HREF=\"javascript: void 0;\" onClick=\"SetDate('" + name + "'," + loopDate.getTime() + "); ShowCalendar('" + name + "',1," + yearStart + "," + yearEnd + ",0,0);\"><SPAN CLASS='" + (loopDate.getTime() == selectedDate.getTime() ? "active" : "normal") + "dayCalendar'>" + loopDate.getDate() + "</SPAN></A>" : "<SPAN CLASS='inactivedayCalendar'>" + loopDate.getDate() + "</SPAN>") + "</TD>";

		i%7 || (content += "</TR><TR>");
	}

	content += "</TR>";
	content += "</TABLE>";

	return content;
}

function GetSelectedDate(name)
{
	var date;
	var year = document.getElementById(name + "[year]").options[document.getElementById(name + "[year]").selectedIndex].value;
	var month = (document.getElementById(name + "[mon]") ? document.getElementById(name + "[mon]").selectedIndex : 1);
	var day = (document.getElementById(name + "[mday]") ? document.getElementById(name + "[mday]").selectedIndex : 1);

	if (day + month + year/1 > 0)
	{
		date = new Date(year,month - 1,day,0,0,0,0);
	}
	else
	{
		date = new Date();
	}

	return date;
}

function SetDate(name,time)
{
	var object, date = new Date(time);

	object = document.getElementById(name + "[mday]");	object.selectedIndex = date.getDate();
	object = document.getElementById(name + "[mon]");	object.selectedIndex = date.getMonth() + 1;
	object = document.getElementById(name + "[year]");	object.selectedIndex = GetIndex(object,date.getFullYear());
}

function GetDate(thisDate,offsetMonth,offsetYear,offsetDay)
{
	return new Date(thisDate.getFullYear() + offsetYear,thisDate.getMonth() + offsetMonth,offsetDay);
}

function GetIndex(object,value)
{
	var index;

	for (var i=0;i<object.options.length;i++) object.options[i].value == value && (index = i);

	return index;
}

