function Kalender()
{
        alert("Hier wird eine aktuelle JavaScript-Version ben\xF6tigt!")
}


// Das folgende Skript stammt von [rabich.de].
// URL: http://www.rabich.de/
// eMail: dietmar.rabich@t-online.de
// Dieser Vermerk darf nicht entfernt werden!


// Monatsnamen und Tage
var        Monate        =
[
        {name:"Januar",                tage:31},
        {name:"Februar",        tage:28},
        {name:"M&auml;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, "Ostersonntag")
        Feiertag[++cnt]        = new feiertag_time(OTime + TagMS, "Ostermontag")
        Feiertag[++cnt]        = new feiertag_time(OTime + 39 * TagMS, "Christi Himmelfahrt")
        Feiertag[++cnt]        = new feiertag_time(OTime + 49 * TagMS, "Pfingstsonntag")
        Feiertag[++cnt]        = new feiertag_time(OTime + 50 * TagMS, "Pfingstmontag")
        Feiertag[++cnt]        = new feiertag_time(OTime + 60 * TagMS, "Fronleichnam")
        Feiertag[++cnt]        = new feiertag_time(OTime - 48 * TagMS, "Rosenmontag", true)
        Feiertag[++cnt]        = new feiertag_time(OTime - 47 * TagMS, "Fastnacht")
        Feiertag[++cnt]        = new feiertag_time(OTime - 46 * TagMS, "Aschermittwoch")
        Feiertag[++cnt]        = new feiertag_time(OTime - 2 * TagMS, "Karfreitag")

        // Vom 4. Advent abhaengige Feiertage
        var        Advent4        = VierterAdvent(Jahr)
        var        A4Time        = Advent4.getTime()

        Feiertag[++cnt]        = new feiertag(Advent4, "4. Advent")
        Feiertag[++cnt]        = new feiertag_time(A4Time - 7 * TagMS, "3. Advent")
        Feiertag[++cnt]        = new feiertag_time(A4Time - 14 * TagMS, "2. Advent")
        Feiertag[++cnt]        = new feiertag_time(A4Time - 21 * TagMS, "1. Advent")
        Feiertag[++cnt]        = new feiertag_time(A4Time - 28 * TagMS, "Totensonntag")
        Feiertag[++cnt]        = new feiertag_time(A4Time - 35 * TagMS, "Volkstrauertag")
        Feiertag[++cnt]        = new feiertag_time(A4Time - 32 * TagMS, "Bu&szlig;- und Bettag")

        // Feste Feiertage
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 0, 1), "Neujahr")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 0, 6), "Heilige 3 K&ouml;nige")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 2, 1), "Jahreshauptversammlung")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 1, 14), "Valentinstag")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 4, 1), "Maifeiertag")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 7, 15), "Maria Himmelfahrt")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 9, 3), "Tag der Deutschen Einheit")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 9, 31), "Reformationstag")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 10, 1), "Allerheiligen")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 11, 24), "Heiligabend")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 11, 25), "1. Weihnachtstag")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 11, 26), "2. Weihnachtstag")
        Feiertag[++cnt]        = new feiertag(new Date(Jahr, 11, 31), "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."
        }

        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("<TABLE BORDER=2 CELLPADDING=2 CELLSPACING=0 BORDERCOLOR=\"#000000\">")
        document.writeln("<CAPTION><font face='Comic Sans MS'><BIG><STRONG>" + Monate[Monat.getMonth()].name + " " + Jahr + "</STRONG></BIG></font></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>&nbsp;</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>&nbsp;</TD>")

        document.writeln("</TR></TABLE>")

        // Ausgabe Feiertage
        var        ausg        = false
        for(j = 0; j < RelevanteFeiertage.length; j++)
        {
                if(!ausg)
                {
                        document.write("<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=1>")
                        ausg        = true
                }
                document.write("<TR ALIGN=LEFT VALIGN=MIDDLE><TD><font size='-1'>" +
                                        String(RelevanteFeiertage[j].datum.getDate()) +
                                        ".</font></TD><TD><font size='-1'>&nbsp;</font></TD><TD><font size='-1'>" +
                                        RelevanteFeiertage[j].name +
                                        "</font></TD></TR>")
        }
        if(ausg)
                document.write("</TABLE>")

        document.close()

        pct        = 100
        pcta(pct)
}