var Monatstage = new Array (31,28,31,30,31,30,31,31,30,31,30,31);
var WochenTage = new Array ("Mo","Di","Mi","Do","Fr","Sa","So");

 function Datum(Tag_des_Jahres, jahr) {
  Monatstage[1]  = 28 + ist_Schaltjahr(jahr);
  var monat=1;
  var tag= Tag_des_Jahres;
  if (tag > Monatstage[0]) {
     tag= tag-Monat[0];
     while ((tag>Monatstage[monat])
         tag = tag - Monatstage[monat];
         monat++;
     }
  }
  return tag+'.'+monat+'.'+jahr;
 }

 function Tag_des_Jahres(tag,monat,jahr) {
  var Tage = 0;

  Monatstage[1]  = 28 + ist_Schaltjahr(jahr);
  if (tag <= Monatstage[monat-1]) {
     for (var i=0; i < monat-1; i++)
         Tage = Tage + Monatstage[i];
     Tage = Tage + tag;
  }
  return Tage;
 }
 function ist_Schaltjahr(jahr) {
   if (jahr % 4 == 0)
      if (jahr < 1582)
         return 1;
      else if (!(jahr % 100 == 0))
              return 1;
           else if (jahr % 400 == 0)
                   return 1;
   return 0;
 }
 function CurrentDoomDay(jahr) {
   var CenturyDoomDay = new Array (5,4,2,0);
   var CC             = Math.floor(jahr/100);
   var YY             = jahr%100;
   var CCDoomDay      = CenturyDoomDay[CC%4];
   var YYDoomDay      = 0;

   if (YY == 0)
      YYDoomDay = CCDoomDay;
   else if (YY%12 == 0)
           YYDoomDay = (CCDoomDay + YY/12 - 1) % 7;
   else YYDoomDay = ( CCDoomDay
                     + (Math.floor(YY/12)
                     + (YY%12)
                     + Math.floor(((YY-1)%12)/4))
                    ) % 7;
   if ((CC%4 == 0) && (YY != 0))
      YYDoomDay = (YYDoomDay + 1) % 7;

   return YYDoomDay;
}
 function Wochentag(tag,monat,jahr) {
   var WchTag1Jan = CurrentDoomDay(jahr);
   var Tage       = Tag_des_Jahres(tag,monat,jahr) - 1;
   var Wochentag  = (WchTag1Jan+(Tage%7))%7;

   return WochenTage[Wochentag];
 }
 function Kalenderwoche(tag,monat,jahr) {
   var Woche      = 0;
   var Wchtag1Jan = CurrentDoomDay(jahr);
   var Tage       = Tag_des_Jahres(tag,monat,jahr)-1;

   if (Wchtag1Jan > 3)
      Tage = Tage - (7 - Wchtag1Jan);
   else Tage = Tage + Wchtag1Jan;

   if (Tage < 0)
      if (   (Wchtag1Jan == 4)
          || (CurrentDoomDay(jahr-1) == 3))
         Woche = 53;
      else Woche = 52;
   else Woche = Math.floor(Tage/7) + 1;

   if ((Tage > 360) && (Woche > 52)) {
      if (Wchtag1Jan == 3)
          Woche = 53;
      else if (CurrentDoomDay(jahr+1) == 4)
              Woche = 53;
           else Woche = 1;
   }

   return Woche;
 }
 function Ostersonntag(jahr) {
   var K  = Math.floor(jahr/100);
   if (jahr > 1582) {
      var M  = 15 + Math.floor((3*K+ 3)/ 4)
                  - Math.floor((8*K+13)/25);
      var S  =  2 - Math.floor((3*K+ 3)/ 4);
   } else {
      var M  = 15;
      var S  =  0;
   }
   var A  =   jahr % 19;
   var D  =  (19*A+M) % 30;
   var R  = Math.floor((D + A/11)/29);
   var OG = 21 + D - R;
   var SZ = 7 - ((jahr+Math.floor(jahr/4)+S) % 7);
   var OE = 7 - ((OG-SZ)%7);

   return (OG+OE);
 }

 function Feiertage(jahr) {
   var i = 0;
   var l_day   = 0;
   var l_month = 0;
   var tdj     = 0;
   var OS      = Ostersonntag(jahr);

   if ( jahr > 1582 ) {
       l_tdj = Tag_des_Jahres(1,3,jahr)-1 + OS;
       while (l_tdj > 0) {
             l_tdj = l_tdj - Tage_pro_Monat[i];
             i++;
       }
       l_month = i;
       l_day   = Tage_pro_Monat[i-1] + l_tdj;
       if (l_tdj > 0)
          l_day = l_day + 1;

       document.ostern.dd.value = l_day;
       document.ostern.mm.value = l_month;
   } else {
       document.ostern.dd.value = "";
       document.ostern.mm.value = "";
   }
   return;
 }
 function Tage_pro_Jahr(jahr) {
    return 365 + ist_Schaltjahr(jahr);
 }
 function Tage_von_bis(a_tag,a_monat,a_jahr,b_tag,b_monat,b_jahr) {
    var anz    = 0;
    var a_Tage = Tag_des_Jahres(a_tag,a_monat,a_jahr);
    var b_Tage = Tag_des_Jahres(b_tag,b_monat,b_jahr);

    if ((a_jahr > b_jahr) || ((a_jahr == b_jahr) && (a_Tage > b_Tage))) {
       c_tag = a_tag; c_monat = a_monat; c_jahr = a_jahr;
       a_tag = b_tag; a_monat = b_monat; a_jahr = b_jahr;
       b_tag = c_tag; b_monat = c_monat; b_jahr = c_jahr;
    }

    if (a_jahr == b_jahr)
       anz = b_Tage - a_Tage;
    else {
       anz = Tage_pro_Jahr(a_jahr) - a_Tage;
       jahr = a_jahr + 1;
       while (jahr < b_jahr) {
          anz = anz + Tage_pro_Jahr(jahr);
          jahr++;
       }
       anz = anz + b_Tage;
    }
    return anz;
 }
