<!--

// Monatsnamen und Tage
var	Monate	=
[
	{name:"Januar",		tage:31},
	{name:"Februar",	tage:28},
	{name:"März",		tage:31},
	{name:"April",		tage:30},
	{name:"Mai",		tage:31},
	{name:"Juni",		tage:30},
	{name:"Juli",		tage:31},
	{name:"August",		tage:31},
	{name:"September",	tage:30},
	{name:"Oktober",	tage:31},
	{name:"November",	tage:30},
	{name:"Dezember",	tage:31}
]

// 4stellige Jahreszahl
function get4DigitYear(theDate)
{
	if(theDate.getFullYear)
		return theDate.getFullYear()
	var	y	= theDate.getYear()
	return y + ((y < 1900) ? 1900 : 0)
}

// --- Feiertagsberechnung ---

// Ostersonntag nach Gauss'scher Formel
function Ostersonntag(Jahr)
{
	// Bem.: intern darf nicht einmal vor dem 1.1.1970 datiert werden
	if((Jahr < 1583) || (Jahr > 2299))
		return null

	var m, n

	if(Jahr <= 1699)
	{
		m = 22
		n = 2
	}
	else if(Jahr <= 1799)
	{
		m = 23
		n = 3
	}
	else if(Jahr <= 1899)
	{
		m = 23
		n = 4
	}
	else if(Jahr <= 2099)
	{
		m = 24
		n = 5
	}
	else if(Jahr <= 2199)
	{
		m = 24
		n = 6
	}
	else
	{
		m = 25
		n = 0
	}

	var a	= Jahr % 19
	var b	= Jahr % 4
	var c	= Jahr % 7
	var d	= (19 * a + m) % 30
	var e	= (2 * b + 4 * c + 6 * d + n) % 7
	var t	= 22 + d + e
	if(t > 31)
	{
		t	= t - 31
		if(t == 26)
			t = 19
		else if(t == 25)
		{
			if((d == 28) && (e == 6) && (a > 10))
				t = 18
		}
		return new Date(Jahr, 3, t, 12, 0, 0)
	}

	return new Date(Jahr, 2, t, 12, 0, 0)
}

// 4. Advent in Abhaengigkeit des 1. Weihnachtstags berechnen
function VierterAdvent(Jahr)
{
	var	StartDatum	= new Date(Jahr, 11, 25, 12, 0, 0)
	var	WTag	= StartDatum.getDay()
	var	Temp	= StartDatum.getTime()

	StartDatum.setTime(Temp - ((WTag == 0) ? 7 : WTag) * 86400000)

	return StartDatum
}

// Feiertag anlegen mit Datum und Name
function feiertag(datum, name)
{
	this.datum	= datum
	this.datum.setHours(12)
	this.datum.setMinutes(0)
	this.datum.setSeconds(0)
	this.name	= name

	return this
}

// Feiertag anlegen mit Datum (aus Zeit in Millisekunden) und Name
function feiertag_time(time, name, flag)
{
	var	TempDate	= new Date()

	TempDate.setTime(time)
	this.datum	= TempDate
	this.datum.setHours(12)
	this.datum.setMinutes(0)
	this.datum.setSeconds(0)
	this.name	= name

	return this
}

// Vergleichsfunktion zur Sortierung nach Datum --------------------------------------------------
function compare_date(d1, d2)
{
	if(d1.datum.getTime() < d2.datum.getTime())
		return -1
	if(d1.datum.getTime() > d2.datum.getTime())
		return 1
	return 0
}

// Anlage eines Felds mit allen Feiertagen zum angegebenen Jahr ----------------------------------
function feiertage(Jahr)
{
	var	TagMS	= 86400000	// Anzahl Millisekunden pro Tag
	var	Feiertag	= new Array()	// Feld fuer Feiertage
	var	cnt	= 0	// Zaehler fuer Feiertage

	// Von Ostern abhaengige Feiertage
	var	Ostern	= Ostersonntag(Jahr)
	var	OTime	= Ostern.getTime()

	Feiertag[cnt]	= new feiertag(Ostern, "&nbsp;Ostern")
	Feiertag[++cnt]	= new feiertag_time(OTime + TagMS, "&nbsp;Ostermontag")
	Feiertag[++cnt]	= new feiertag_time(OTime + 39 * TagMS, "&nbsp;Auffahrt")
	Feiertag[++cnt]	= new feiertag_time(OTime + 49 * TagMS, "&nbsp;Pfingstsonntag")
	Feiertag[++cnt]	= new feiertag_time(OTime + 50 * TagMS, "&nbsp;Pfingstmontag")
	Feiertag[++cnt]	= new feiertag_time(OTime + 60 * TagMS, "&nbsp;Fronleichnam")
	Feiertag[++cnt]	= new feiertag_time(OTime - 46 * TagMS, "&nbsp;Aschermittwoch")
	Feiertag[++cnt]	= new feiertag_time(OTime - 7 * TagMS, "&nbsp;Beginn Betreibungsferien")
	Feiertag[++cnt]	= new feiertag_time(OTime - 2 * TagMS, "&nbsp;Karfreitag")
	Feiertag[++cnt]	= new feiertag_time(OTime - 3 * TagMS, "&nbsp;Gründonnerstag (bis 15:00)")
	Feiertag[++cnt]	= new feiertag_time(OTime + 7 * TagMS, "&nbsp;Ende Betreibungsferien")




	// Feste, Feiertage, BFZ usw.

	// Januar 2011 -------------------------------------------------------------------
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 0, 1), "&nbsp;Neujahr")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 0, 1), "&nbsp;Ende Betreibungsferien")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 0, 2), "&nbsp;Berchtoldstag")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 0, 6), "&nbsp;Heilige 3 Könige")



	// Februar 2011 -------------------------------------------------------------------
	//Jeweils am ersten Mittwoch des Monats Februar findet in der Schweiz der jährliche Sirenentest statt.
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 1, 2), "&nbsp;Sirenentest schweizweit")	
	// Blanko-Abstimmungstermine: http://www.admin.ch/ch/d/pore/va/vab_1_3_3_1.html
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 1, 13), "&nbsp;Eidg. Abstimmung")



	// März 2011 -------------------------------------------------------------------
	//http://de.wikipedia.org/wiki/Jahreszeit
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 2, 21), "&nbsp;Astron. Frühlingsanfang<br>&nbsp;(00:21 MEZ)")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 2, 27), "&nbsp;Beginn Sommerzeit")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 2, 28), "&nbsp;Beginn Frühjahrssession der<br>&nbsp;eidgenössischen Räte")	



	// April 2011 -------------------------------------------------------------------
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 3, 11), "&nbsp;Sechseläuten")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 3, 18), "&nbsp;Beginn Frühjahrsferien (ZH)")	



	// Mai 2011 -------------------------------------------------------------------
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 4, 1), "&nbsp;Tag der Arbeit")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 4, 6), "&nbsp;Ende Frühjahrsferien (ZH)")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 4, 8), "&nbsp;Muttertag")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 4, 15), "&nbsp;Eidg. Abstimmung")
	


	// Juni 2011 -------------------------------------------------------------------
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 5, 5), "&nbsp;4. Schweizer Vätertag")
	//http://de.wikipedia.org/wiki/Jahreszeit
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 5, 21), "&nbsp;Astron. Sommeranfang<br>&nbsp;(19:16 MEZ)")
	


	// Juli 2011 -------------------------------------------------------------------
	// Betreibungsferien: Sie dauern im Sommer jeweils vom 15. bis zum 31. Juli. 
	//Jedes Jahr vom 10. Juli bis zum 20. August sind im Kanton Zürich Gerichtsferien
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 6, 18), "&nbsp;Beginn Sommerferien (ZH)")	
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 6, 15), "&nbsp;Beginn Betreibungsferien")			
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 6, 31), "&nbsp;Ende Betreibungsferien")

	

	// August 2011 -------------------------------------------------------------------
	//Jedes Jahr vom 10. Juli bis zum 20. August sind im Kanton Zürich Gerichtsferien
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 7, 1), "&nbsp;Bundesfeier")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 7, 19), "&nbsp;Ende Sommerferien (ZH)")



	// September 2011 -----------------------------------------------------------
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 8, 4), "&nbsp;«Steueramtswanderung» (Privat)")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 8, 8), "&nbsp;Weltklasse der Leichtathletik")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 8, 10), "&nbsp;Bar Bleu 17:00, VZW 17. Stock")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 8, 12), "&nbsp;Beginn Herbstsession der<br>&nbsp;eidgenössischen Räte")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 8, 18), "&nbsp;Eidg. Dank-, Buss- und Bettag")
	//http://de.wikipedia.org/wiki/Jahreszeit
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 8, 23), "&nbsp;Astron. Herbstanfang<br>&nbsp;(11:04 MEZ)")



	// Oktober 2011 -------------------------------------------------------------
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 9, 10), "&nbsp;Beginn Herbstferien (ZH)")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 9, 21), "&nbsp;Ende Herbstferien (ZH)")
	// Blanko-Abstimmungstermine: http://www.admin.ch/ch/d/pore/va/vab_1_3_3_1.html
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 9, 23), "&nbsp;Eidg. Abstimmung und<br>&nbsp;Nationalratswahlen")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 9, 23), "&nbsp;Grippeimpfung, VZW, 1. Stock")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 9, 30), "&nbsp;Umstellung auf Winterzeit")



	// November 2011 -----------------------------------------------------------------	
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 10, 1), "&nbsp;Allerheiligen")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 10, 1), "&nbsp;Grippeimpfung, 11:30-13:00,<br>&nbsp;VZW l. Stock")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 10, 21), "&nbsp;Steueramtsfest ab 18:00")
 	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 10, 27), "&nbsp;Eidgenössische Abstimmung")
 	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 10, 27), "&nbsp;Erster Advent")



	// Dezember 2011 -----------------------------------------------------------------	
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 5), "&nbsp;Beginn Wintersession der<br>&nbsp;eidgenössischen Räte")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 18), "&nbsp;Beginn Betreibungsferien")
	//http://de.wikipedia.org/wiki/Jahreszeit
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 22), "&nbsp;Astron. Winteranfang<br>&nbsp;(06:30 MEZ)")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 23), "&nbsp;Ende Wintersession der<br>&nbsp;eidgenössischen Räte")
		//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 24), "&nbsp;BFZ 1/2 Tag, Heiligabend")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 25), "&nbsp;Weihnachten")
	Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 26), "&nbsp;Stephanstag")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 28), "&nbsp;BFZ 1 Tag")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 29), "&nbsp;BFZ 1 Tag")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 30), "&nbsp;BFZ 1 Tag")
	//Feiertag[++cnt]	= new feiertag(new Date(Jahr, 11, 31), "&nbsp;BFZ 3/4 Tag, Silvester")


	// Feiertage nach Datum sortieren
	Feiertag.sort(compare_date)

	// und zurueck!
	return Feiertag
}

// --- Kalenderaufbereitung und -ausgabe ---

// Kalender
function Kalender(monat, jahr)
{
	var	pct	= 0
	var	Monat	= new Date(jahr, monat - 1, 1)
	var	Heute	= new Date()
	var	DieserTag	= null

	function pcta(p)
	{
	//	status	= "Aufbereitung Kalender " + String(p) + "% fertig."
	//	status = "\[Infoportal - Steueramt Stadt Zürich\]"
	}

	pcta(pct)

	// Vorbereitung/Schaltjahr
	if((Heute.getMonth() == Monat.getMonth()) &&
		(get4DigitYear(Heute) == get4DigitYear(Monat)))
		DieserTag	= Heute.getDate()

	var	Jahr		= get4DigitYear(Monat)

	if((!(Jahr % 4) && (Jahr % 100)) || !(Jahr % 400))
		Monate[1].tage = 29

	AnzahlTage	= Monate[Monat.getMonth()].tage

	var	StartTag = Monat.getDay() - 1
	if(StartTag < 0)
		StartTag	= 6

	// Feiertage
	var	Feiertage	= feiertage(Jahr)
	var	RelevanteFeiertage	= new Array()
	pct	+= 5
	pcta(pct)

	// Feiertage dieses Monats
	var	j
	var	cnt	= 0
	for(j = 0; j < Feiertage.length; j++)
		if(Feiertage[j].datum.getMonth() == Monat.getMonth())
			RelevanteFeiertage[cnt++]	= Feiertage[j]

	// Ausgabe Kalenderblatt
	document.open("text/html")
	document.writeln("<div style=\"border: 0px solid red; position: relative; width: 170px; height: 150px; z-index: 1\" id=\"Ebene1\">")
	
	
	document.writeln("<TABLE WIDTH=\"100%\" BORDER=0 CELLPADDING=0 CELLSPACING=0 BORDERCOLOR=\"#000000\" style=\"font-size: 13px; font-family: Arial; bgcolor=\"#A2BAD8\>")
	document.writeln("<CAPTION><STRONG>" + Monate[Monat.getMonth()].name + " " + Jahr + "</STRONG></CAPTION>")
	document.write("<TR ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=\"#EEEEEE\"><TH WIDTH=\"14%\">Mo</TH>")
	document.write("<TH WIDTH=\"14%\">Di</TH>")
	document.write("<TH WIDTH=\"14%\">Mi</TH>")
	document.write("<TH WIDTH=\"14%\">Do</TH>")
	document.write("<TH WIDTH=\"14%\">Fr</TH>")
	document.write("<TH WIDTH=\"15%\">Sa</TH>")
	document.writeln("<TH WIDTH=\"15%\">So</TH></TR>")

	var	column	= StartTag

	document.write("<TR ALIGN=CENTER>")
	var	i
	for(i = 0; i < StartTag; i++)
		document.write("<TD BGCOLOR=\"#FFFFFF\"> </TD>")

	for(i = 1; i <= AnzahlTage; i++)
	{
		pct	+= Math.floor(90 / AnzahlTage)
		pcta(pct)

		var	clr	= ""
		for(j = 0; j < RelevanteFeiertage.length; j++)
		{
			if(i == RelevanteFeiertage[j].datum.getDate())
			{
				clr	= " BGCOLOR=\"#FFEECC\""
				break
			}
		}

		document.write("<TD" + clr + ">")
		if(i == DieserTag)
			document.write("<FONT COLOR=\"#FF0000\"><STRONG>")
		if(column >= 5)
			document.write("<STRONG>")
		document.write(i)
		if(i == DieserTag)
			document.write("</STRONG></FONT>")
		if(column >= 5)
			document.write("</STRONG>")
		document.write("</TD>")
		column++
		if((column == 7) && (i != AnzahlTage))
		{
			document.write("</TR>\n<TR ALIGN=CENTER>")
			column = 0
		}
	}

	if(column != 0)
	for(i = column; i < 7; i++)
		document.write("<TD BGCOLOR=\"#FFFFFF\"> </TD>")

	document.writeln("</TR></TABLE>")
	document.writeln("</div>")
	
	
// Ausgabe Feiertage --------------------------------------------------------------
	document.writeln("<div style=\"border: 0px solid yellow; position: relative; width: 180px; height: 110px; z-index: 1\" id=\"Ebene2\">")
	
	var	ausg	= false
	for(j = 0; j < RelevanteFeiertage.length; j++)
	{
		if(!ausg)
		{
			//document.write("<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=1>")
			
	document.write("<TABLE WIDTH=\"100%\" BORDER=0 CELLPADDING=0 CELLSPACING=0 BORDERCOLOR=\"#000000\" style=\"font-size: 13px; font-family: Arial; bgcolor=\"#A2BAD8\>")			
			
			
			
			ausg	= true
		}
		document.write("<TR ALIGN=LEFT VALIGN=left><TD><SMALL>" +
					String(RelevanteFeiertage[j].datum.getDate()) +
					".</SMALL></TD><TD><SMALL> </SMALL></TD><TD><SMALL>" +
					RelevanteFeiertage[j].name +
					"</SMALL></TD></TR>")
	}
	if(ausg)
		document.write("</TABLE>")
		document.writeln("</div>")
		document.close()

	pct	= 100
	pcta(pct)
}

// -->
