monatName = new Array("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli",
                       "August","September","Oktober","November","Dezember");
abkWochentag = new Array ("Mo","Di","Mi","Do","Fr","Sa","So");

var schriftart = "Times New Roman, Arial";
var schriftgroesseKopf = 3;
var schriftfarbe = "#9E1703";
var hintergrundfarbe = "#FFF27F";
var schriftgroesseKalender = 2;
var schriftfarbeTage = "black";
var hintergrundfarbeAktTag = "#9E1703";
var schriftfarbeAktTag = "white";

// stellt die Uhrzeit dar
function Zeit()
{
  var heute = new Date();
  var stunde = heute.getHours();
  var minute = heute.getMinutes();
  var sekunde = heute.getSeconds();
  
  // Formatierung sch&ouml;n machen mit f&uuml;hrenden Nullen
  if (stunde < 10)
    stunde = "0" + stunde;
  stunde = stunde + ":";
  
  if (minute < 10)
    minute = "0" + minute;
  minute = minute + ":";
  
  if (sekunde < 10)
    sekunde = "0" + sekunde;

  var uhrzeit = stunde + minute + sekunde;
  // &Auml;ndert dynamisch den Eintrag mit der ID = Clock
  document.all.Clock.innerHTML = "<font size=" + schriftgroesseKalender + ">" + uhrzeit + "</font>";
  // Soll nach jeder Sek die Zeit aufrufen und anzeigen, rekursiver Aufruf
  window.setTimeout("Zeit()", 1000);
}

function Kalender()
{
  calText = "";
  
  var heute = new Date();
  var aktMonat = heute.getMonth();
  var aktJahr = heute.getFullYear();
  var aktTag = heute.getDate();
  
  var wochentagBeginnMonat = getWochentag(new Date(aktJahr, aktMonat, 1));
  var anzTageImAktMonat = getAnzahlTageImMonat(aktMonat, aktJahr);

  calText = calText + "<table border=0 cellpadding=0 cellspacing=0 bgcolor=" + hintergrundfarbe + ">";
  
  // Schreibt die &Uuml;berschrift in den Kalender und die Tagesabk&uuml;rzungen
  var titel = monatName[aktMonat] + " " + aktJahr;
  SchreibeKopf(titel);
  SchreibeTagName();
  
  var kalendertag = 1;
  // Zeilenweise
  for(i = 0; i <= 5; i++)
  {
    calText = calText + "<tr>";

    // Schreibt die KW in den Kalender
    if(kalendertag <= anzTageImAktMonat)
      SchreibeZelle(KalenderWoche(aktJahr, aktMonat, kalendertag), hintergrundfarbe, schriftfarbe, schriftgroesseKalender,schriftart);

    // Spaltenweise
    for(j = 0; j < 7; j++)
    {
      // Fange erst an den Kalendertag reinzuschreiben, wenn der Wochentag stimmt
      if((i == 0) && (j < wochentagBeginnMonat))
        SchreibeZelle("&#160;", hintergrundfarbe, schriftfarbeTage, schriftgroesseKalender, schriftart);

      else
      {
        // Wenn keine Tage mehr im Monat vorhanden sind, mache die K&auml;stchen "leer"
        if(kalendertag > anzTageImAktMonat)
          SchreibeZelle("&#160;", hintergrundfarbe, schriftfarbeTage, schriftgroesseKalender, schriftart);
        else
        {
          // Kalendereintrag entspricht aktuellem Tag
          if((kalendertag == aktTag))
            SchreibeZelle(kalendertag, hintergrundfarbeAktTag, schriftfarbeAktTag, schriftgroesseKalender, schriftart);
          else
            SchreibeZelle(kalendertag, hintergrundfarbe, schriftfarbeTage, schriftgroesseKalender, schriftart);

          kalendertag++;
        }
      }
    }
    calText = calText + "</tr>";
  }
  calText = calText + "</table>";
  document.all.Cal.innerHTML = calText;
  window.setTimeout('Kalender()', 60000);
}

function SchreibeKopf(titel)
{
  calText = calText + "<tr>";
  calText = calText + "<td align=center colspan=8 valign=middle>";
  calText = calText + "<font size=" + schriftgroesseKopf + " color=" + schriftfarbe + " face=" + schriftart + ">";
  calText = calText + titel;
  calText = calText + "</font></td></tr>";
}

function SchreibeTagName()
{
  calText = calText + "<tr>";
  SchreibeZelle("KW&nbsp;", hintergrundfarbe, schriftfarbe, schriftgroesseKalender, schriftart);

  for(i = 0; i < 7; i++)
    SchreibeZelle(abkWochentag[i], hintergrundfarbe, schriftfarbe, schriftgroesseKalender, schriftart);

  calText = calText + "</tr>";
}

function SchreibeZelle(inhalt, hgFarbe, farbe, groesse, art)
{
  calText = calText + "<td>";
  calText = calText + "<table border=0 cellspacing=0 cellpading=0>";
  calText = calText + "<tr><td width=15 height=15 align=center valign=middle bgcolor=" + hgFarbe + ">";
  calText = calText + "<font size=" + groesse + " color=" + farbe + " face=" + art + ">";
  calText = calText + inhalt + "</font>";
  calText = calText + "</td></tr></table></td>";
}

function KalenderWoche(aktJahr, aktMonat, kalendertag)
{
  DatumKW=new Date(aktJahr,aktMonat,kalendertag);
  DoDatKW=donnerstag(DatumKW);
  kwjahr=DoDatKW.getFullYear();
  DoKW1=donnerstag(new Date(kwjahr,0,4));
  kw=Math.floor(1.5+(DoDatKW.getTime()-DoKW1.getTime())/86400000/7);
  return kw;
}

function donnerstag(datum) {
  var Do=new Date();
  Do.setTime(datum.getTime() + (3-((datum.getDay()+6) % 7)) * 86400000);
  return Do;
}

// Liefert den Wochentag zurück, Montag = 0 ... Sonntag = 6
function getWochentag(datum)
{
  var wochentag = datum.getDay();
  // Da die Woche bei Sonntag = 0 anfängt, muss das umformatiert werden
  wochentag = wochentag - 1;
  if (wochentag == -1)
    wochentag = 6;

  return wochentag;
}

// Liefert die Anzahl der Tage in einem Monat zurück, wobei Januar = 0
function getAnzahlTageImMonat(monat, jahr)
{
  if ((monat == 3) || (monat == 5) || (monat == 8) || (monat == 10))
    return 30;

  if (monat == 1)
  {
    if ((jahr % 4 == 0) || (jahr % 400 == 0))
      return 29;

    return 28;
  }
  
  return 31;
}

