/* the whole calender object */
var kroot = root;
var kyearoff = MSIE ? 0 : 1900;
var kyearsht = MSIE ? 2000 : 100;
var kalendar = null;

/* initial ist der gewuenschte Modus die Tages-Uebersicht von heute */
var gewuenschterModus    = 0;			// 0 = Tag, 1 = Arbeit, 2 = Woche, 3 = Monat
/* initial ist die Granulation bei 5 Minuten */
var gewuenschtesGranulat = (30 * 60 * 1000);	// die Anzahl an Abschnitten in Millisekunden
/* Anzahl an Granulaten pro Stunde */
var granulatMenge        = (60 * 60 * 1000) / gewuenschtesGranulat;

/* bezueglich des gewaehlten Modus kann nun einer der Filter benutzt werden */
var dteFilter         = null;
var dteAnzeige        = null;
var dteMonatHLinks    = null;
var dteMonatLinks     = null;
var dteMonatRechts    = null;
var dteMonatHRechts   = null;

/* soll der Uebersichtsmodus auch veraendert werden? */
var changeMode = false;

/* initial ist der gewuenschte Tag der heutige Tag */
var heutigerTag       = new Date();	// was ist heute fuer ein Tag?
var angewaehlterTag   = new Date();	// welcher Tag ist aktuell angewaehlt?
var ersterTagHLinks   = new Date(); ersterTagHLinks.setDate ( 0); ersterTagHLinks.setDate (1);
var ersterTagLinks    = new Date(); ersterTagLinks.setDate  ( 1); ersterTagLinks.setDate  (1);
var ersterTagRechts   = new Date(); ersterTagRechts.setDate (32); ersterTagRechts.setDate (1);
var ersterTagHRechts  = new Date(); ersterTagHRechts.setDate(64); ersterTagHRechts.setDate(1);

function setDay(day, modus) {
	heutigerFilter     = getFilter(0, new Date());	// was ist heute fuer ein Tag?
	heutigerTag        = heutigerFilter.start;

	// NOTE: Hier wird nicht ueberprueft, ob der angewaehlte Tag am Anfang von Tag/Woche/Monat ist
	angewaehlterFilter = getFilter(modus, day);	// welcher Tag ist aktuell angewaehlt?
	angewaehlterTag    = angewaehlterFilter.start;

	ersterTagHLinks    = new Date(angewaehlterTag.getTime()); ersterTagHLinks.setDate ( 0); ersterTagHLinks.setDate (1);
	ersterTagLinks     = new Date(angewaehlterTag.getTime()); ersterTagLinks.setDate  ( 1); ersterTagLinks.setDate  (1);
	ersterTagRechts    = new Date(angewaehlterTag.getTime()); ersterTagRechts.setDate (32); ersterTagRechts.setDate (1);
	ersterTagHRechts   = new Date(angewaehlterTag.getTime()); ersterTagHRechts.setDate(64); ersterTagHRechts.setDate(1);
}

function slideMonth(monate) {
	if (monate > 0) {
		while (--monate >= 0) {
			ersterTagHLinks.setDate (32); ersterTagHLinks.setDate (1);
			ersterTagLinks.setDate  (32); ersterTagLinks.setDate  (1);
			ersterTagRechts.setDate (32); ersterTagRechts.setDate (1);
			ersterTagHRechts.setDate(32); ersterTagHRechts.setDate(1);
		}
	}
	else if (monate < 0) {
		monate = -monate;
		while (--monate >= 0) {
			ersterTagHLinks.setDate ( 0); ersterTagHLinks.setDate (1);
			ersterTagLinks.setDate  ( 0); ersterTagLinks.setDate  (1);
			ersterTagRechts.setDate ( 0); ersterTagRechts.setDate (1);
			ersterTagHRechts.setDate( 0); ersterTagHRechts.setDate(1);
		}
	}
}

function slideMonthRebuild(monate) {
	// monate - Number();

	if (monate != 0)
		slideMonth(monate);

	dteMonatHLinks  = getFilter(                2, ersterTagHLinks , false);
	dteMonatLinks   = getFilter(                2, ersterTagLinks  , false);
	dteMonatRechts  = getFilter(                2, ersterTagRechts , false);
	dteMonatHRechts = getFilter(                2, ersterTagHRechts, false);

	buildKalender();
}

function activateDate(jahr, monat, tag) {
	if (jahr < ersterTagLinks.getYear()) {
		while (jahr < ersterTagLinks.getYear())
			slideMonth(-1);
	}
	else if (jahr > ersterTagLinks.getYear()) {
		while (jahr > ersterTagLinks.getYear())
			slideMonth(+1);
	}

	if (monat < ersterTagLinks.getMonth()) {
		while (monat < ersterTagLinks.getMonth())
			slideMonth(-1);
	}
	else if (monat > ersterTagLinks.getMonth()) {
		while (monat > ersterTagLinks.getMonth())
			slideMonth(+1);
	}

	angewaehlterTag.setTime(ersterTagLinks.getTime());
	angewaehlterTag.setDate(tag);

	// nur dazu da um alle Filter wieder auf den neusten Stand zu kriegen
	slideMonthRebuild(0);
}

function clearView(jahr, monat, tag, modus) {
	var pop;

	pop   = document.getElementById("PopMonth");
	pop.style.visibility = "hidden";

	pop   = document.getElementById("PopWeek");
	pop.style.visibility = "hidden";
}

function activateView(jahr, monat, tag, modus) {
	clearView();

	if (modus != gewuenschterModus)
		changeMode = true;
	gewuenschterModus = modus;

	activateDate(jahr, monat, tag);

	// NOTE: Nur um sicher zu gehen
	changeMode = false;

	// rufe einen Handler auf, falls er existiert
	switch(gewuenschterModus) {
		case 0: if (selectedDatum        != null) selectedDatum       (angewaehlterTag); break;
		case 1: if (selectedArbeitswoche != null) selectedArbeitswoche(angewaehlterTag); break;
		case 2: if (selectedWoche        != null) selectedWoche       (angewaehlterTag); break;
		case 3: if (selectedMonat        != null) selectedMonat       (angewaehlterTag); break;
	}
}

function selectMonth(first, year, month) {
	var pop;

	// first - Boolean();
	// year  - Number();
	// month - Number();
	var years  = new Array(7);
	var months = new Array(7);

//	if (first != true)
//		month++;

	years [3] = year ;
	months[3] = month;
	if ((months[3]    ) <  0) { years [3] = years [3] - 1; months[3] = 11; }
	if ((months[3]    ) > 11) { years [3] = years [3] + 1; months[3] =  0; }
	if ((months[3] - 1) <  0) { years [2] = years [3] - 1; months[2] = 11; } else { years [2] = years [3] - 0; months[2] = months[3] - 1; }
	if ((months[2] - 1) <  0) { years [1] = years [2] - 1; months[1] = 11; } else { years [1] = years [2] - 0; months[1] = months[2] - 1; }
	if ((months[1] - 1) <  0) { years [0] = years [1] - 1; months[0] = 11; } else { years [0] = years [1] - 0; months[0] = months[1] - 1; }
	if ((months[3] + 1) > 11) { years [4] = years [3] + 1; months[4] =  0; } else { years [4] = years [3] + 0; months[4] = months[3] + 1; }
	if ((months[4] + 1) > 11) { years [5] = years [4] + 1; months[5] =  0; } else { years [5] = years [4] + 0; months[5] = months[4] + 1; }
	if ((months[5] + 1) > 11) { years [6] = years [5] + 1; months[6] =  0; } else { years [6] = years [5] + 0; months[6] = months[5] + 1; }

	pop   = document.getElementById("PopWeek");

	pop.style.visibility = "hidden";

	pop   = document.getElementById("PopMonth");

	if (first) {
		pop.style.top    = -113;
		pop.style.left   =   12;
	}
	else {
		pop.style.top    = -113;
		pop.style.left   =  131;
	}

	pop.style.width  = 107;
	pop.style.height = 126;

	popTabelle  = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#C0C0C0\" style=\"border-width: 1px; border-top-color: #FFFFFF; border-left-color: #FFFFFF; border-bottom-color: #000000; border-right-color: #000000;\">";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + years[0] + ", " + months[0] + ", 1, 2)\">" + MonatsNamen[months[0]] + " (" + (kyearoff + years[0]) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + years[1] + ", " + months[1] + ", 1, 2)\">" + MonatsNamen[months[1]] + " (" + (kyearoff + years[1]) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + years[2] + ", " + months[2] + ", 1, 2)\">" + MonatsNamen[months[2]] + " (" + (kyearoff + years[2]) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline; font-weight: bold;\"><a class=\"cl\" href=\"javascript:clearView();\">" + MonatsNamen[months[3]] + " (" + (kyearoff + years[3]) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + years[4] + ", " + months[4] + ", 1, 2)\">" + MonatsNamen[months[4]] + " (" + (kyearoff + years[4]) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + years[5] + ", " + months[5] + ", 1, 2)\">" + MonatsNamen[months[5]] + " (" + (kyearoff + years[5]) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + years[6] + ", " + months[6] + ", 1, 2)\">" + MonatsNamen[months[6]] + " (" + (kyearoff + years[6]) + ")" + "</a></td></tr>";
	popTabelle += "</table>";
	pop.innerHTML    = popTabelle;

	pop.style.visibility = "visible";

//	return true;
}

function selectWeek(first, msec) {
	var pop;

	// first - Boolean();
	// msec  - Number();
	var dates  = new Array(7);
	var kws    = new Array(7);

	// wir sollten sichergehen, dass die Berechnungen auch korrekt sind
	var mdat   = new Date(msec);
	var mdat   = dateDate(mdat, 3, true);
	var msec   = mdat.getTime();

	if (first != true)
		msec += getTage(mdat.getYear(), mdat.getMonth()) * (24 * 60 * 60 * 1000);

	dates[0] = new Date(msec - (3 * 7 * 24 * 60 * 60 * 1000));
	dates[1] = new Date(msec - (2 * 7 * 24 * 60 * 60 * 1000));
	dates[2] = new Date(msec - (1 * 7 * 24 * 60 * 60 * 1000));
	dates[3] = new Date(msec                                );
	dates[4] = new Date(msec + (1 * 7 * 24 * 60 * 60 * 1000));
	dates[5] = new Date(msec + (2 * 7 * 24 * 60 * 60 * 1000));
	dates[6] = new Date(msec + (3 * 7 * 24 * 60 * 60 * 1000));

	kws[0] = getWoche(dates[0].getTime());
	kws[1] = getWoche(dates[1].getTime());
	kws[2] = getWoche(dates[2].getTime());
	kws[3] = getWoche(dates[3].getTime());
	kws[4] = getWoche(dates[4].getTime());
	kws[5] = getWoche(dates[5].getTime());
	kws[6] = getWoche(dates[6].getTime());

	pop   = document.getElementById("PopMonth");

	pop.style.visibility = "hidden";

	pop   = document.getElementById("PopWeek");

	if (first) {
		pop.style.top    = -113;
		pop.style.left   =   12;
	}
	else {
		pop.style.top    = -113;
		pop.style.left   =  131;
	}

	pop.style.width  = 107;
	pop.style.height = 126;

	popTabelle  = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#C0C0C0\" style=\"border-width: 1px; border-top-color: #FFFFFF; border-left-color: #FFFFFF; border-bottom-color: #000000; border-right-color: #000000;\">";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + dates[0].getYear() + ", " + dates[0].getMonth() + ", " + dates[0].getDate() + ", 1)\">KW&nbsp;" + kws[0] + " (" + (kyearoff + dates[0].getYear()) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + dates[1].getYear() + ", " + dates[1].getMonth() + ", " + dates[1].getDate() + ", 1)\">KW&nbsp;" + kws[1] + " (" + (kyearoff + dates[1].getYear()) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + dates[2].getYear() + ", " + dates[2].getMonth() + ", " + dates[2].getDate() + ", 1)\">KW&nbsp;" + kws[2] + " (" + (kyearoff + dates[2].getYear()) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline; font-weight: bold;\"><a class=\"cl\" href=\"javascript:clearView();\">KW&nbsp;" + kws[3] + " (" + (kyearoff + dates[3].getYear()) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + dates[4].getYear() + ", " + dates[4].getMonth() + ", " + dates[4].getDate() + ", 1)\">KW&nbsp;" + kws[4] + " (" + (kyearoff + dates[4].getYear()) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + dates[5].getYear() + ", " + dates[5].getMonth() + ", " + dates[5].getDate() + ", 1)\">KW&nbsp;" + kws[5] + " (" + (kyearoff + dates[5].getYear()) + ")" + "</a></td></tr>";
	popTabelle += "<tr><td width=\"107\" height=\"18\" class=\"Grau\" align=\"center\" style=\"vertical-align: baseline;\"><a class=\"cl\" href=\"javascript:activateView(" + dates[6].getYear() + ", " + dates[6].getMonth() + ", " + dates[6].getDate() + ", 1)\">KW&nbsp;" + kws[6] + " (" + (kyearoff + dates[6].getYear()) + ")" + "</a></td></tr>";
	popTabelle += "</table>";
	pop.innerHTML    = popTabelle;

	pop.style.visibility = "visible";

//	return true;
}

/*************************************************************************************************/
function zClass(monat, tag, grayed) {
	var dater;

	// monat  - Date();
	// tag    - Number();
	// grayed - Boolean();
	dater    = new Date(monat.getTime());
	dater.setDate(tag);

	/* background-color ist weiss */
	/* color ist schwarz */
	var custom   = false;
	var classs   = "ZahlB";
	var styleeBC = "#FFFFFF";	// BC - background-color
	var styleeBI = null;		// BI - background-image
	var styleeC  = "#000000";	// C  - color
	var styleeFW = "normal";	// FW - font-weight

	if (grayed) {
		/* color ist grau */
		classs  = "ZahlG";
		styleeC = "#808080";
	}

	if (heutigerTag.getTime() == dater.getTime()) {
		/* background-image ist roter Kasten */
		custom   = true;
		styleeBI = "url(" + kroot + "zahlen/angewaehlt.png)";
	}

	if (0) {
		custom   = true;
		styleeFW = "bold";
	}

	switch (gewuenschterModus) {
		case 0:	/* Tagesuebersicht *******************************************************/
			if (angewaehlterTag.getTime() == dater.getTime()) {
				/* background-color ist grau */
				/* color ist weiss */
				custom = true;
				styleeBC = "#C0C0C0";
				styleeC  = "#FFFFFF";
			}
			break;
		case 3:	/* Arbeitswochenuebersicht ***********************************************/
		case 1:	/* Wochenuebersicht ******************************************************/
			woche = new Date(angewaehlterTag.getTime());
			woche.setDate(woche.getDate() + (0 - ((woche.getDay() + 6) % 7)));

			ende = new Date(woche.getTime());
			ende.setDate(woche.getDate() + ((gewuenschterModus == 1) ? 7 : 5));

			if ((dater.getTime() >= woche.getTime()) &&
			    (dater.getTime() <  ende.getTime())) {
				/* background-color ist grau */
				/* color ist weiss */
				custom = true;
				styleeBC = "#C0C0C0";
				styleeC  = "#FFFFFF";
			}
			break;
		case 2:	/* Monatsuebersicht ******************************************************/
	       default:
			break;
	}

	if (!custom)
		modification = " class=\"" + classs + "\"";
	else
		modification = " style=\"font-family: Arial; font-size: 11px; font-weight: " + styleeFW + "; text-align: right; vertical-align: baseline; background-color: " + styleeBC + "; color: " + styleeC + (styleeBI != null ? "; background-image: " + styleeBI : "") + ";\"";

	return "<td " + modification + " style=\"padding-right: 2px;\"><a class=\"cl\" href=\"javascript:activateView(" + monat.getYear() + ", " + monat.getMonth() + ", " + tag + ", 0)\" style=\"font-weight: " + styleeFW + "; color: " + styleeC + ";\">" + tag + "</a></td>\n";
}

function createMiniKalender(first) {
	cntKalender = new String("" +
	"<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n" +
	"	<tr>\n" +
	"		<td width=\"119\" height=\"18\" align=\"CENTER\" valign=\"MIDDLE\" colspan=\"7\">\n" +
	"		<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n" +
	"		<tr>\n" +
		(first ? (
	"			<td width=\"12\"  height=\"18\" align=\"CENTER\" valign=\"MIDDLE\" class=\"Grau\" background=\"" + kroot + "kalendar/monat-hinten.png\"><a class=\"cl\" title=\"" + Beschreibungen[8] + "\" href=\"javascript:activateDate(" + ersterTagHLinks.getYear() + ", " + ersterTagHLinks.getMonth() + ", 1)\"><img src=\"" + kroot + "kalendar/monat-links.png\" /></a></td>\n" +
	"			<td width=\"107\" height=\"18\" align=\"CENTER\" valign=\"MIDDLE\" class=\"Grau\" background=\"" + kroot + "kalendar/monat-hinten.png\"><a class=\"cl\" title=\"" + Beschreibungen[12] + "\" href=\"javascript:selectMonth(true, " + ersterTagLinks.getYear () + ", " + ersterTagLinks.getMonth () + ")\">" + MonatsNamen[ersterTagLinks.getMonth ()] + "&nbsp;(" + (ersterTagLinks.getYear () + kyearoff) + ")</a></td>\n"
		) : (
	"			<td width=\"107\" height=\"18\" align=\"CENTER\" valign=\"MIDDLE\" class=\"Grau\" background=\"" + kroot + "kalendar/monat-hinten.png\"><a class=\"cl\" title=\"" + Beschreibungen[12] + "\" href=\"javascript:selectMonth(false, " + ersterTagRechts.getYear () + ", " + ersterTagRechts.getMonth () + ")\">" + MonatsNamen[ersterTagRechts.getMonth()] + "&nbsp;(" + (ersterTagRechts.getYear() + kyearoff) + ")</a></td>\n" +
	"			<td width=\"12\"  height=\"18\" align=\"CENTER\" valign=\"MIDDLE\" class=\"Grau\" background=\"" + kroot + "kalendar/monat-hinten.png\"><a class=\"cl\" title=\"" + Beschreibungen[9] + "\" href=\"javascript:activateDate(" + ersterTagRechts.getYear() + ", " + ersterTagRechts.getMonth() + ", 1)\"><img src=\"" + kroot + "kalendar/monat-rechts.png\" /></a></td>\n"
		)) +
	"		</tr>\n" +
	"		</table>\n" +
	"		</td>\n" +
	"	</tr>\n" +
	"\n" +
		(first ? (
	"	<tr><td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(true, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-l.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(true, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-m.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(true, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-m.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(true, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-j.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(true, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-v.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(true, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-s.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(true, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-d.png\" /></a></td></tr>\n"
		) : (
	"	<tr><td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(false, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-l.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(false, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-m.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(false, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-m.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(false, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-j.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(false, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-v.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(false, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-s.png\" /></a></td>\n" +
	"	    <td class=\"ZahlB\"><a class=\"cl\" title=\"" + Beschreibungen[13] + "\" href=\"javascript:selectWeek(false, " + angewaehlterTag.getTime() + ");\"><img src=\"" + kroot + "zahlen/titel-d.png\" /></a></td></tr>\n"
		))
	);

	var restday = 0;
	var doneday = 0;

	/* ************************************************************************
	 * erste Zeile
	 */
	if (first) {
		smday = (dteMonatLinks.start.getDay() + 6) % 7;
		tmday =  dteMonatHLinks.stop.getDate();

		if (smday < (5 + (31 - dteMonatLinks.stop.getDate()))) {
		cntKalender += "<tr>\n"
		for (s = 0; s <     7; s++) cntKalender += zClass(dteMonatHLinks.stop , tmday - smday - 7 + s + 1, true);
		cntKalender += "</tr>\n"
		}

		cntKalender += "<tr>\n"
		for (s = 0; s < smday; s++) cntKalender += zClass(dteMonatHLinks.stop , tmday - smday     + s + 1, true);
		for (s = smday; s < 7; s++) cntKalender += zClass(dteMonatLinks.start ,       - smday     + s + 1, false);
		cntKalender += "</tr>\n"

		doneday = (7 - smday);
		restday = dteMonatLinks.stop.getDate() - doneday;
	}
	else {
		smday = (dteMonatRechts.start.getDay() + 6) % 7;
		tmday =  dteMonatLinks.stop.getDate();

		cntKalender += "<tr>\n"
	//	for (s = 0; s < smday; s++) cntKalender += zClass(dteMonatLinks.stop  , tmday - smday     + s + 1, true);
		for (s = 0; s < smday; s++) cntKalender += "<td class=\"ZahlG\"> &nbsp;&nbsp;</td>\n";
		for (s = smday; s < 7; s++) cntKalender += zClass(dteMonatRechts.start,       - smday     + s + 1, false);
		cntKalender += "</tr>\n"

		doneday = (7 - smday);
		restday = dteMonatRechts.stop.getDate() - doneday;
	}

	/* ************************************************************************
	 * mittlere Zeilen
	 */
	for (b = 0; b < parseInt(restday / 7); b++) {
		cntKalender += "<tr>\n"
		for (s = 0; s < 7; s++) cntKalender += zClass(first ? dteMonatLinks.start : dteMonatRechts.start, ++doneday, false);
		cntKalender += "</tr>\n"
	}
	restday = restday % 7;

	/* ************************************************************************
	 * letzte Zeile
	 */
	if (first) {
		if (restday > 0) {
		cntKalender += "<tr>\n"
		for (s = 0; s < restday; s++) cntKalender += zClass(dteMonatLinks.start, ++doneday, false);
	//	for (s = restday; s < 7; s++) cntKalender += zClass(dteMonatRechts.start, s - restday + 1, true);
		for (s = restday; s < 7; s++) cntKalender += "<td class=\"ZahlB\"> &nbsp;&nbsp;</td>\n";
		cntKalender += "</tr>\n"
		}
	}
	else {
		cntKalender += "<tr>\n"
		for (s = 0; s < restday; s++) cntKalender += zClass(dteMonatRechts.start, ++doneday, false);
		for (s = restday; s < 7; s++) cntKalender += zClass(dteMonatHRechts.start, s - restday + 1, true);
		cntKalender += "</tr>\n"

		smday = (dteMonatRechts.start.getDay() + 6) % 7;
		tmday =  dteMonatLinks.stop.getDate();

		if ((smday + doneday + (7 - restday)) < (6 * 7)) {
		cntKalender += "<tr>\n"
		for (c = 0; c < 7; c++) cntKalender += zClass(dteMonatHRechts.start, s - restday + 1 + c, true);
		cntKalender += "</tr>\n"
		}
	}

	cntKalender += "</table>\n";

	return cntKalender;
}

function buildKalender() {
	dteFilter       = getFilter(gewuenschterModus, angewaehlterTag , true );
	dteAnzeige      = getFilter(                0, angewaehlterTag , false);

	dteMonatHLinks  = getFilter(                2, ersterTagHLinks , false);
	dteMonatLinks   = getFilter(                2, ersterTagLinks  , false);
	dteMonatRechts  = getFilter(                2, ersterTagRechts , false);
	dteMonatHRechts = getFilter(                2, ersterTagHRechts, false);

	document.getElementById("KalenderLinks").innerHTML  = createMiniKalender(true);
	document.getElementById("KalenderRechts").innerHTML = createMiniKalender(false);
}

function showKalender(initialZeit, punktX, punktY) {
	var initialDate;

	initialDate = new Date();
	if ((initialZeit != '') && (initialZeit > 0))
		initialDate.setTime(initialZeit);
	setDay(initialDate, gewuenschterModus);

	kroot = root + 'pics/kalendar/';
	buildKalender();

	if (kalendar == null) {
		kalendar = document.getElementById("Kalender");
		kalendar.style.visibility = "visible";
		kalendar.style.zIndex = 2;
	}

	kalendar.style.top   = punktX;
	kalendar.style.right = punktY;
}

function hideKalender() {
	if (kalendar != null) {
		kalendar.style.zIndex = -2;
		kalendar.style.visibility = "hidden";
		kalendar = null;
	}
}

