var Jetzt = new Date();
var AJahr = Jetzt.getYear();
AJahr += AJahr<1900?1900:0;
var AMonat = Jetzt.getMonth()+1;
var ATag = Jetzt.getDate();
var AWochentag = Jetzt.getDay();
function Monatsname() {
  return Array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November',
    'Dezember')[AMonat-1]+' '+AJahr
  }
function Monatslaenge(Monat,Jahr) {
  return Monat==2?28+(Jahr%4==0 && Jahr%100>0 || Jahr%400==0?1:0):32-(Math.abs(Monat*2-15)%4+1)/2
  }
function Rang(Termin) {
  return (Termin.Monat*32+Termin.Tag-AMonat*32-ATag+12*32+2)%(12*32)-2
  }

// Ereigniskalender
function ZeichneFeld(Text,Farbe) {
  Spalte = (Spalte+1)%7;
  var Feiertag = Spalte==0 || Feiertage.indexOf(','+Text+',')>=0;
  document.write((Spalte==1?'<tr>':'')+'<th bgcolor="'+(Farbe==2?(Feiertag?'#FFD0D0':'#D0D0FF'):'#E0E0E0')+'">'+
    (''+Text).fontcolor(Farbe==0?'#A0A0A0':(Feiertag?'#FF0000':'#000000')).fontsize(5)+' </th>'+(Spalte==0?'</tr>':''))
  }
function ZeichneMonat() {
  var Laenge = Monatslaenge((AMonat+10)%12+1,AJahr);
  document.write
    ('<table align="center" border="3" cellpadding="3" cellspacing="0"><tr bgcolor="#D0D0D0"><th colspan="7">'+Monatsname().fontsize(5)+'</th></tr>')
  for (var Zahl = 1; Zahl<=7; ++Zahl) ZeichneFeld('MoDiMiDoFrSaSo'.substring(Zahl*2-2,Zahl*2)+'.',1);
  for (var Datum = Laenge-(AWochentag-ATag+35)%7+1; Datum<=Laenge; ++Datum) ZeichneFeld(Datum,0);
  for (var Datum = 1; Datum<=Monatslaenge(AMonat,AJahr); ++Datum) ZeichneFeld(Datum,Datum==ATag?2:1);
  for (var Datum = 1; Spalte>0; ++Datum) ZeichneFeld(Datum,0);
  document.write('</table>')
  }
var Anzahl = 0;
var Termine = new Array();
var Feiertage = ',';
var Spalte = 0;
function ErzeugeTermin(NFrei,NTag,NMonat,NName) {
  this.Frei = NFrei;
  this.Tag = NTag;
  this.Monat = NMonat;
  this.Name = NName
  }
function Neu(NFrei,NTag,NMonat,NName) {
  if (NMonat==AMonat && NFrei==1) Feiertage += NTag+','
  var Gesamt = 16;
  var Termin = new ErzeugeTermin(NFrei,NTag,NMonat,NName);
  var Zahl = Anzahl;
  while (Zahl>0 && Rang(Termin)<Rang(Termine[Zahl-1])) Zahl--;
  if (Zahl<Gesamt) {
    if (Anzahl<Gesamt) ++Anzahl
    else Termine[Anzahl] = null;
    for (var Index = Anzahl-1; Index>Zahl; --Index) Termine[Index] = Termine[Index-1];
    Termine[Zahl] = Termin
    }
  else Termin = null
  }
function NeuBezug(Frei,Tag,Verschub,Wochentag,Name) {
  Tag +=
    Verschub-(Tag-Math.ceil(Math.floor(AJahr/100)*7/4)+Math.floor(AJahr%100*5/4)+2-Wochentag)%7+Monatslaenge(2,AJahr);
  var Monat = 2;
  while (Tag>Monatslaenge(Monat,AJahr)) Tag -= Monatslaenge(Monat++,AJahr);
  Neu(Frei,Tag,Monat,Name)
  }
function NeuOstern(Frei,Verschub,Name) {
  var Rest = AJahr%19+1;
  NeuBezug(Frei,57-(Rest*11-6)%30-(Rest*11%30==6+(Rest>11?1:0)?1:0),Verschub,0,Name)
  }
function NeuJahreszeit(Merkmal,Tag,Monat,Name) {
  Neu(0,Tag+(Merkmal>>AJahr%4&1),Monat,Name)
  }
function BelegeTermine() {
  Neu(1, 1, 1,'Neujahr');
  Neu(0, 6, 1,'Heilige Drei Könige');
  Neu(1, 1, 5,'Internationaler Tag der Arbeit'); // UNO
  Neu(0,15, 8,'Mariä Himmelfahrt'); // katholisch
  Neu(1, 3,10,'Tag der deutschen Einheit');
  Neu(0,31,10,'Reformationstag'); // protestantisch
  Neu(1, 1,11,'Allerheiligen'); // katholisch
  Neu(0, 2,11,'Allerseelen'); // katholisch
  Neu(0,11,11,'Martinstag'); // christlich
  Neu(0, 8,12,'Mariä Empfängnis'); // christlich
  Neu(0,24,12,'Heiligabend'); // christlich
  Neu(1,25,12,'1. Weihnachtstag'); // christlich
  Neu(1,26,12,'2. Weihnachtstag'); // christlich
  Neu(0,31,12,'Silvester'); // christlich
  NeuBezug(1, 75,0,0,'Muttertag');
  NeuBezug(1,220,0,0,'Erntedankfest');
  NeuBezug(1,264,0,0,'Volkstrauertag');
  NeuBezug(0,267,0,3,'Buß- und Bettag'); // protestantisch
  NeuBezug(1,271,0,0,'Totensonntag'); // protestantisch
  NeuBezug(1,278,0,0,'1. Advent'); // christlich
  NeuBezug(1,285,0,0,'2. Advent'); // christlich
  NeuBezug(1,292,0,0,'3. Advent'); // christlich
  NeuBezug(1,299,0,0,'4. Advent'); // christlich
  NeuOstern(1, -7,'Palmsonntag'); // christlich
  NeuOstern(0, -3,'Gründonnerstag'); // christlich
  NeuOstern(1, -2,'Karfreitag');
  NeuOstern(1,  0,'Ostersonntag');
  NeuOstern(1,  1,'Ostermontag');
  NeuOstern(1,  7,'Weißer Sonntag');
  NeuOstern(1, 39,'Christi Himmelfahrt');
  NeuOstern(1, 49,'Pfingstsonntag'); // christlich
  NeuOstern(1, 50,'Pfingstmontag'); // christlich
  NeuOstern(1, 60,'Fronleichnam'); // katholisch
  Neu(0,10, 1,'Weltlachtag'); ///
  Neu(0,25, 1,'Welt-Lepra-Tag'); // UNO
  Neu(0,27, 1,'Tag des Gedenkens an die Opfer des Nationalsozialismus'.link('http://www.shoahproject.org/'));
  Neu(0,14, 2,'Valentinstag');
  Neu(0,21, 2,'Welttag der Gästeführer');
  if (Monatslaenge(2,AJahr+(AMonat>2?1:0))>28) Neu(0,29, 2,'Schalttag');
//Weltgebetstag am 1. Freitag im März     
//Neu(0, 6, 3,'Tag des Baus');
  Neu(0, 8, 3,'Weltfrauentag'); // UNO
  Neu(0,15, 3,'Weltverbrauchertag');
  Neu(0,21, 3,'Internationaler Tag zur Beseitigung der rassischen Diskriminierung'); // UNO
  Neu(0,21, 3,'Internationaler Tag des Waldes'); // UNO
  Neu(0,22, 3,'Weltwassertag'); // UNO
  Neu(0,23, 3,'Welttag der Meteorologie'); // WMO
  Neu(0,27, 3,'Welttheatertag');
  Neu(0, 7, 4,'Weltgesundheitstag'.link('http://www.who.org/')); // WHO
  Neu(0,21, 4,'Internationaler Tag der Ruhe');
  Neu(0,21, 4,'Welttag des Baums'); // 25. 4.
  Neu(0,22, 4,'Welttag der Erde');
  Neu(0,23, 4,'Tag des deutschen Reinheitsgebots'.link('http://www.bier.de/'));
  Neu(0,23, 4,'Welttag des Buches und des Urheberrechts'); // UNESCO
  Neu(0, 3, 5,'Tag der Sonne'); // UNEP
  Neu(0, 3, 5,'Welttag der Pressefreiheit'.link('http://www.reporter-ohne-grenzen.de/')); // UNO
  Neu(0, 5, 5,'Europatag');
  Neu(0, 5, 5, 'Tag des herzkranken Kindes');
  Neu(0, 6, 5,'Antidiättag');
  Neu(0, 8, 5,'Internationaler Rotkreuztag');
  Neu(0,15, 5,'Internationaler Tag der Familie'); // UNO
  Neu(0,17, 5,'Welttag des Fernmeldewesens'); // ITU
//Neu(0,19, 5,'Tag der Archive'); // 2001
//Neu(0,20, 5,'Internationaler Museumstag'); //  2001
  Neu(0,21, 5,'Welttag für kulturelle Entwicklung'); // UNESCO
  Neu(0,25, 5,'Tag der Freiheit Afrikas'); // UNO
  Neu(0,31, 5,'Weltnichtrauchertag'); // WHO
  Neu(0, 2, 6,'Tag der Organspende'); // 2001
  Neu(0, 5, 6,'Welttag der Umwelt'); // UNO
  Neu(0, 6, 6,'Tag der Sehbehinderten');
  Neu(0,17, 6,'Internationaler Tag zur Bekämpfung der Ausbreitung von Wüstengebieten'); // UNO
  Neu(0,21, 6,'Tag des Schlafes');
  Neu(0,20, 6,'Weltjongliertag');
  Neu(0,24, 6,'Johannistag');
  Neu(0,26, 6,'Internationaler Tag gegen Drogenmissbrauch und unerlaubten Suchtstoffverkehr'); // UNO
  Neu(0,27, 6,'Siebenschläfer'); // christlich
  Neu(0,11, 7,'Weltbevölkerungstag'); // UNDP
  Neu(0, 8, 8,'Friedensfest in Augsburg');
  Neu(0, 9, 8,'Internationaler Tag der indigenen Völker'); // UNO
  Neu(0,24, 8,'Tag der Vereinten Nationen'); // UNO 24.10.
  Neu(0, 1, 9,'Weltfriedenstag'); // ?
  Neu(0, 8, 9,'Weltbildungstag'); // UNESCO
  Neu(0,16, 9,'Internationaler Tag zum Schutz der Ozonschicht'); // UNO
  Neu(0,20, 9,'Weltkindertag'); // UNO
  Neu(0,21, 9,'Welt-Alzheimer-Tag');
  Neu(0,22, 9,'Autofreier Tag in Europa');
//Neu(0,22, 9,'Tag des deutschen Butterbrots');
  Neu(0,24, 9,'Tag der Raumfahrt');
  Neu(0,25, 9,'Tag der Zahngesundheit');
  Neu(0,27, 9,'Welttourismustag'); // UNO
  Neu(0, 1,10,'Internationaler Tag der älteren Menschen'); // UNO
  Neu(0, 1,10,'Weltmusiktag'); // UNESCO
  Neu(0, 4,10,'Tag des Flüchtlings'); // 28.9., 1.10.1999
  Neu(0, 4,10,'Welttierschutztag');
  Neu(0, 5,10,'Tag der Epilepsie');
  Neu(0, 5,10,'Weltposttag'); // UNO
  Neu(0, 5,10,'Welttag des Lehrers'); // UNO
  Neu(0, 9,10,'Tag des Weltpostvereins'); // UPU
  Neu(0,15,10,'Tag des weißen Stockes');
  Neu(0,16,10,'Welternährungstag'); // FAO
  Neu(0,17,10,'Internationaler Tag für die Beseitigung der Armut'); // UNO
  Neu(0,24,10,'Tag der Vereinten Nationen'); // UNO 24.8.
  Neu(0,24,10,'Welttag der Information über Entwicklungsfragen'); // UNO
  Neu(0,30,10,'Weltspartag');
  Neu(0, 3,11,'Weltmännertag');
  Neu(0,14,11,'Welt-Diabetes-Tag'); // Deutscher Diabetiker-Bund
  Neu(0,16,11,'Internationaler Tag der Toleranz'); // UNESCO
  Neu(0,20,11,'Tag der Industrialisierung Afrikas'); // UNO
  Neu(0,20,11,'Tag der Kinderrechte'); // UNO
//Neu(0,20,11,'Tag der Suppe');
  Neu(0,21,11,'Weltfernsehtag');
  Neu(0,23,11,'Internationaler Tag gegen Gewalt gegen Frauen'); // UNO
  Neu(0,29,11,'Internationaler Tag der Solidarität mit dem palästinensischen Volk'); // UNO
  Neu(0, 1,12,'Welt-AIDS-Tag'); // WHO
  Neu(0, 3,12,'Internationaler Tag der Behinderten'); // UNO
  Neu(0, 5,12,'Internationaler Entwickungshelfertag für die wirtschaftliche und soziale Entwicklung'); // UNO
  Neu(0, 6,12,'Nikolaus');
  Neu(0, 7,12,'Internationaler Tag der zivilen Luftfahrt'); // ICAO
  Neu(0,10,12,'Tag der Menschenrechte'); // UNO
  Neu(0,15,12,'Weltkinderfernsehtag');
  Neu(0,29,12,'Internationaler Tag der biologischen Vielfalt'); // UNO
  NeuBezug(0,130,0,6,'Internationaler Tag der Kooperativen'); // UNO 1. Samstag im Juli
  NeuBezug(0,206,0,2,'Internationaler Tag des Friedens'); // UNGA 3. Dienstag im September
  NeuBezug(0,222,0,1,'Welttag des Wohn- und Siedlungswesens'); // UNO 1. Montag im Oktober
  NeuBezug(0,229,0,3,'Internationaler Tag der Katastrophenvorbeugung'); // UNO 2. Mittwoch im Oktober
  NeuOstern(0,-48,'Rosenmontag');
  NeuOstern(0,-47,'Fastnacht');
  NeuOstern(0,-46,'Aschermittwoch');
  NeuJahreszeit( 8,20, 3,'Frühlingsanfang');
  NeuJahreszeit( 0,21, 6,'Sommeranfang');
  NeuJahreszeit(14,22, 9,'Herbstanfang');
  NeuJahreszeit(12,21,12,'Winteranfang')
  }
function SchreibeTermine() {
  var ARang = AMonat*32+ATag;
  document.write('<table border="0" cellpadding="0" cellspacing="0">');
  for (var Zahl = 0; Zahl<Anzahl; ++Zahl) {
    with (Termine[Zahl]) {
      if (Zahl==0) var VMonat = Monat;
      var Dann = new Date(AJahr,Monat-1,Tag);
      var Abstand = Tag-ATag-Monatslaenge(Monat,AJahr);
      for (var LMonat = AMonat; LMonat<=Monat+(Monat<AMonat-1?12:0); ++LMonat) Abstand += Monatslaenge((LMonat-1)%12+1,AJahr);
      document.write((Monat!=VMonat?'<tr><td><br /></td></tr>':'')+
        '<tr><td'+(Abstand==0?' bgcolor="'+(Frei==1?'#FFC0C0':'#C0C0FF')+'"':'')+'>'+
        ((Math.abs(Abstand)<=2?Array('Vorgestern','Gestern','Heute','Morgen','Übermorgen')[Abstand+2]:
        'Am '+'SoMoDiMiDoFrSa'.substring(Dann.getDay()*2,Dann.getDay()*2+2)+'., '+Tag+'. '+Monat+'.')+
        (Abstand<0?' war':' ist')+' '+Name+'.').fontcolor(Frei==1?'#FF0000':'#000000')+'</td></tr>');
      Datum = null;
      VMonat = Monat
      };
    Termine[Zahl] = null
    }
  document.write('</table>')
  }

// Würfelkalender
function Feld(Zeichen) {
  return '<tr><th width="25">'+(''+Zeichen).fontcolor('#885522').fontsize(5)+'</th></tr>'
  }
function ZeichneSpalte(Nummer,Felder) {
  document.write('<td><table bgcolor="#CCBBAA" border="1" cellpadding="1" cellspacing="0"><caption>'+Nummer+'</caption>'+Felder+'</table></td>')
  }
function ZeichneDatum() {
  document.write('<table align="center" border="0" cellpadding="1" cellspacing="0"><tr>');
  ZeichneSpalte(1,Feld('SMDMDFS'.charAt(AWochentag)));
  ZeichneSpalte(2,Feld('OOIIORA'.charAt(AWochentag)+'.'));
  ZeichneSpalte(Math.floor(ATag%10/3)==1?4:3,Feld(Math.floor(ATag/10)));
  ZeichneSpalte(Math.floor(ATag%10/3)==1?3:4,Feld(ATag%10));
  ZeichneSpalte('877678866867'.charAt(AMonat-1),Feld('JFMAMJJASOND'.charAt(AMonat-1)));
  ZeichneSpalte('585567778788'.charAt(AMonat-1),Feld(('AE'+unescape("%C4")+'PAUUUEKOE').charAt(AMonat-1)));
  ZeichneSpalte('668856685656'.charAt(AMonat-1),Feld('NBRRINLGPTVZ'.charAt(AMonat-1)));
  ZeichneSpalte('756785557575'.charAt(AMonat-1),Feld(AMonat==5?'&nbsp;':'..Z. II.....'.charAt(AMonat-1)));
  document.write('</tr></table>')
  }
function ZeichneJoerg() {
  document.write('<table align="center" border="0" cellpadding="1" cellspacing="0"><tr>');    
  ZeichneSpalte('',Feld('J'));
  ZeichneSpalte('',Feld('O'));
  ZeichneSpalte('',Feld('E'));
  ZeichneSpalte('',Feld('R'));
  ZeichneSpalte('',Feld('G'))
  ZeichneSpalte('',Feld('&nbsp;'));
  document.write('</tr></table>')
  }
function ZeichneKalender() {
  document.write('<table align="center" border="0" cellpadding="5" cellspacing="0"><tr>');    
  ZeichneSpalte(7,Feld('K'));
  ZeichneSpalte(5,Feld('A'));
  ZeichneSpalte(4,Feld('1'));
  ZeichneSpalte(3,Feld('3'));
  ZeichneSpalte(6,Feld('N'));
  ZeichneSpalte(1,Feld('D'));
  ZeichneSpalte(8,Feld('E'));
  ZeichneSpalte(2,Feld('R.'));
  document.write('</tr></table>');
  }
function ZeichneSeiten() {
  document.write('<table align="center" border="0" cellpadding="1" cellspacing="0"><tr>');
  ZeichneSpalte(1,Feld('D')+Feld('F')+Feld('M')+Feld('S')+Feld('&nbsp;')+Feld('&nbsp;'));
  ZeichneSpalte(2,Feld('A.')+Feld('I.')+Feld('O.')+Feld('R.')+Feld('&nbsp;')+Feld('&nbsp;'));
  ZeichneSpalte(3,Feld('0')+Feld('1')+Feld('2')+Feld('3')+Feld('4')+Feld('5'));
  ZeichneSpalte(4,Feld('0')+Feld('1')+Feld('2')+Feld('6')+Feld('7')+Feld('8'));
  ZeichneSpalte(5,Feld('A')+Feld('Ä')+Feld('I')+Feld('P')+Feld('V')+Feld('.'));
  ZeichneSpalte(6,Feld('A')+Feld('B')+Feld('L')+Feld('N')+Feld('S')+Feld('T'));
  ZeichneSpalte(7,Feld('D')+Feld('F')+Feld('K')+Feld('M')+Feld('U')+Feld('.'));
  ZeichneSpalte(8,Feld('E')+Feld('G')+Feld('J')+Feld('O')+Feld('R')+Feld('&nbsp;'));
  document.write('</tr></table>')
  }
