function kaldiff(datum,jahr)
{
  var d4j=new Date(jahr,0,4);
  var wt4j=(d4j.getDay()+6)%7;
  return Math.floor(1.05+(datum.getTime()-d4j.getTime())/6048e5+wt4j/7);
}

function kalenderwoche(datum)
{
  var jh=datum.getYear();
  if (jh<1900) 
    jh+=1900;
  jh++;
  var kalwo=kaldiff(datum,jh);
  while (kalwo<1) 
  {
    jh--;
    kalwo=kaldiff(datum,jh);
  }
  return kalwo;
}

// gibt einen Monat als HTML Tabelle zurück
function KalenderBlatt(Jahr,Monat)
// 0=Januar
{
  var Monate=new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
  var Wochentage=new Array("Mo","Di","Mi","Do","Fr","Sa","So");
  // Das heutige Datum ermitteln
  var tmp=new Date();
  var HeuteTag=tmp.getDate();
  var HeuteMonat=tmp.getMonth();
  var HeuteJahr=tmp.getYear();
  if (HeuteJahr<1000)
    HeuteJahr+=1900;
  // Wochentag des ersten Tages berechnen (0=Montag)
  var Start=(new Date(Jahr,Monat,1).getDay()+6)%7;
  // Anzahl der Tage in diesem Monat berechnen
  var Tage;
  if (Monat==1) 
    // Februar Schaltjahre
    if ((Jahr%4==0) &&   ((Jahr%100!=0) || (Jahr%400==0))) 
      Tage=29;
    else 
      Tage=28;
  else if (Monat==3 || Monat==5 || Monat==8 || Monat==10) 
    Tage=30;
  else 
    Tage=31;
  // Tabelle zeichnen
  Ziel="<table border=5 cellpadding=2 cellspacing=0 bgcolor=#EEEEEE>";
  Ziel+="<tr><td align=center colspan=8 bgcolor=#FFFFFF>";
  Ziel+="<font color=#0000FF> <b>"+Monate[Monat]+" "+Jahr+"</b> </font>";
  Ziel+="</td></tr><tr><th align=center width=22>KW</th>";
  // Die sieben Wochentage beschriften
  for (i=0; i<7;i++)
    Ziel+="<th align=center width=22>"+Wochentage[i]+"</th>";
  Ziel+="</tr>";
  // Wenn der erste Tag nicht Montag ist, Lücke davor füllen
  if (Start!=0)
  {
    var kw=kalenderwoche(new Date(Jahr,Monat,1));
    Ziel+="<tr><td align=center><b>"+kw+"</b></td>";
    Ziel+="<td colspan="+Start+">&nbsp;</td>";  
  }
  // Alle Tage des Monats ausgeben
  var Wochentag=Start;
  var Reihen=0;
  for (i=1;i<=Tage;i++)
  {
    // Heutigen Tag blau markieren, ansonsten schwarz oder rot.
    var Farbe;
    if (i==HeuteTag && Monat==HeuteMonat && Jahr==HeuteJahr)
      Farbe="#0000FF";
    else if (Wochentag==6) 
      Farbe="#FF0000";
    else 
      Farbe="#000000";
    if (Wochentag==0) 
    {
      Ziel+="<tr>";
      var kw=kalenderwoche(new Date(Jahr,Monat,i));
      Ziel+="<td align=center><b>"+kw+"</b></td>";
    }
    Ziel+="<td align=center><font color="+Farbe+">"+i+"</font></td>";
    if (Wochentag==6) 
    {
      Ziel+="</tr>";
      Reihen++;
    }
    Wochentag= ++Wochentag % 7;
  }
  // Wenn der nächste Tag nach dem Monat kein Montag ist, dann die Lücke bis Sonntag füllen
  if (Wochentag!=0)
  {
    Ziel+="<td colspan="+(8-Wochentag)+">&nbsp;</td></tr>";  
    Reihen++;
  }
  // Wenn der Monat weniger als 6 Reihen hat, dann die Lücke auffüllen
  while (Reihen<6)
  {
    Ziel+="<tr><td colspan=8>&nbsp;</td></tr>";  
    Reihen++;
  }
  Ziel+="</table>";
  return Ziel;
}

// gibt ein ganzes Jahr als HTML Tabelle zurück
function GanzesJahr(Jahr)
{
  Ziel="<table border=0 cellspacing=20>";
  for (q=0;q<4;q++)
  {
    Ziel+="<tr><td valign=top>";
    Ziel+=KalenderBlatt(Jahr,q*3);
    Ziel+="</td><td valign=top>";
    Ziel+=KalenderBlatt(Jahr,q*3+1);
    Ziel+="</td><td valign=top>";
    Ziel+=KalenderBlatt(Jahr,q*3+2);
    Ziel+="</td><td valign=top>";
  }
  Ziel+="</table>";
  return Ziel;
}


