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?'#8AAEDD':'#8AAEDD'):'WHITE')+'">'+
    (''+Text).fontcolor(Farbe==0?'E3F1FF':(Feiertag?'RED':'565A3C')).fontsize(2)+' </th>'+(Spalte==0?'</tr>':''))
  }

function ZeichneKalender() {
  var Laenge = Monatslaenge((AMonat+10)%12+1,AJahr);
  document.write
    ('<table align="center" border="2" bordercolor="#46479D" cellpadding="1" cellspacing="0"><tr bgcolor="#8AAEDD"><th colspan="7"><FONT SIZE="4" COLOR="#FFFFFF"><B>'+Monatsname().fontsize(3)+'</B></FONT></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 = 5;
  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(1, 1, 5,'Tag der Arbeit: <FONT COLOR="#46479D"><B>Lachsforellenangeln</B></FONT>');
  Neu(1, 3,10,'Tag der deutschen Einheit: <FONT COLOR="#46479D"><B>Zentnerangeln</B></FONT>');
  Neu(1, 6,7,'<FONT COLOR="#46479D"><B>Zentnerangeln</B></FONT>');
  Neu(1, 20, 7,'<FONT COLOR="#46479D"><B>Lachsforellenangeln</B></FONT>');
  Neu(1, 27,7,'<FONT COLOR="#46479D"><B>Zentnerangeln</B></FONT>');
  Neu(1, 10, 8,'<FONT COLOR="#46479D"><B>Lachsforellenangeln</B></FONT>');
  Neu(1, 24, 8,'<FONT COLOR="#46479D"><B>Kombiangeln (Lachsforelle & Stör)</B></FONT>');
  Neu(1, 30,8,'<FONT COLOR="#46479D"><B>Zentnerangeln</B></FONT>');
  Neu(1, 7,9,'<FONT COLOR="#46479D"><B>Saiblingsangeln (auf Wunsch auch Lachsforelle)</B></FONT>');
  Neu(1, 14, 9,'<FONT COLOR="#46479D"><B>Lachsforellenangeln</B></FONT>');
  Neu(1, 28, 9,'<FONT COLOR="#46479D"><B>Lachsforellenangeln</B></FONT>');
  Neu(1, 12, 10,'<FONT COLOR="#46479D"><B>Kombiangeln (alternativ Lachsforelle solo)</B></FONT>');
  Neu(1, 26, 10,'<FONT COLOR="#46479D"><B>Lachsforellenangeln</B></FONT>');
  Neu(1, 9, 11,'<FONT COLOR="#46479D"><B>Gratis-Treueangeln für alle 2003er Abokarteninhaber</B></FONT>');
  Neu(1, 1,11,'Allerheiligen'); // katholisch
  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
  Neu(0, 8, 3,'Weltfrauentag'); // UNO
  Neu(0,21, 3,'Internationaler Tag des Waldes'); // UNO
  Neu(0,22, 3,'Weltwassertag'); // UNO
  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,15, 5,'Internationaler Tag der Familie'); // UNO
  Neu(0, 5, 6,'Welttag der Umwelt'); // UNO
  Neu(0,27, 6,'Siebenschläfer'); // christlich
  Neu(0, 3,11,'Weltmännertag');
  if (Monatslaenge(2,AJahr+(AMonat>2?1:0))>28) Neu(0,29, 2,'Schalttag');
  NeuBezug(1, 75,0,0,'Muttertag');
  NeuBezug(1,220,0,0,'Erntedankfest');
  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(1, -2,'Karfreitag: <B>Lachsforellenangeln</B>');
  NeuOstern(1,  0,'Ostersonntag: <B>Zentnerangeln</B>');
  NeuOstern(1,  1,'Ostermontag');
  NeuOstern(1,  7,'Weißer Sonntag');
  NeuOstern(1, 39,'Christi Himmelfahrt / Vatertag: <FONT COLOR="#46479D"><B>KEINE VERANSTALTUNG (Teichreservierung bitte früh / Zentnerangeln)</B></FONT>');
  NeuOstern(1, 49,'Pfingstsonntag'); // christlich
  NeuOstern(1, 50,'Pfingstmontag'); // christlich
  NeuOstern(1, 60,'Fronleichnam'); // katholisch
  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;
  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 class="termine"'+(Abstand==0?' bgcolor="'+(Frei==1?'#FFFFFF':'#FFFFFF')+'"':'')+'>'+
        ((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?'000000':'000000')+'</td></tr>');
      Datum = null;
      VMonat = Monat
      };
    Termine[Zahl] = null
  } }
