var Tage_pro_Monat = new Array (31,28,31,30,31,30,31,31,30,31,30,31);
var monate = new Array("Januar","Februar","März","April","Mai","Juni",
                       "Juli","August","September","Oktober","November","Dezember");

var dat     = new Date();
var heute   = new heutiges_Datum();
var oster   = new datum();
var pfingst = new datum();

function datum() {
  this.tag   = 1;
  this.monat = 1;
  this.jahr  = 1900;
}

function heutiges_Datum() {
  this.tag   = dat.getDate();
  this.monat = dat.getMonth()+1;
  this.jahr  = dat.getYear();
}

function current_year() {
  var year = dat.getYear();
  if (year < 1900)
     year = year + 1900;
  return year;
}

function ist_Schaltjahr(jahr) {
   if (jahr % 4 == 0)
      if (!(jahr % 100 == 0))   return 1;
      else if (jahr % 400 == 0) return 1;
   return 0;
}

function Tage_pro_Jahr(jahr) {
   return 365 + ist_Schaltjahr(jahr);
}

function Tag_des_Jahres(tag,monat,jahr) {
   var Tage     = 0;
   var Tg_p_Mnt = new Array (31,28+ist_Schaltjahr(jahr),31,30,31,30,31,31,30,31,30,31);
   if (tag <= Tg_p_Mnt[monat-1]) {
      for (var i=0; i<monat-1; i++)
          Tage = Tage + Tg_p_Mnt[i];
      Tage = Tage + tag;
   }
   return Tage;
}

function Ostersonntag(jahr) {
  var K  = Math.floor(jahr/100);
   if (jahr > 1582) {
      var h = Math.floor((3*K+3)/4);
      var M = 15 + h - Math.floor((8*K+13)/25);
      var S = 2 - h;
   } else {
      var M = 15;
      var S =  0;
   }
  var A  = jahr % 19;
  var B  = Math.floor(jahr/4);
  var D  = (19*A+M) % 30;
  var R  = Math.floor(D/29) + (Math.floor(D/28)-Math.floor(D/29)) * Math.floor(A/11);
  var OG = 21 + D - R;
  var SZ = 7 - ((jahr+B+S)%7);
  var OE = 7 - ((OG-SZ)%7);

  return (OG+OE);
}

function Osterdatum(jahr) {
  var i = 0;
  var l_day   = 0;
  var l_month = 0;
  var tdj     = 0;
  var OS      = Ostersonntag(jahr);

  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;

  oster.tag   = l_day;
  oster.monat = l_month;
  oster.jahr  = jahr;
  return;
}

function Pfingstdatum(OsterTag, OsterMon, Jahr) {
  days2date(Tag_des_Jahres(OsterTag,OsterMon,Jahr)+49, Jahr, pfingst);
  return;
}

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;
}

function days2date(Tage, Jahr, DatObj) {
   var l_ddd = Tage;
       l_dd  = 0;
       l_mm  = 0;

   if (l_ddd > Tage_pro_Jahr(Jahr)) {
       l_ddd = l_ddd - Tage_pro_Jahr(Jahr);
       Jahr  = Jahr + 1;
   alert(l_ddd);
   }
   i = 0;
   while (l_ddd > 0) {
         l_ddd = l_ddd - Tage_pro_Monat[i];
         i++;
   }
   l_mm = i;
   l_dd = Tage_pro_Monat[i-1] + l_ddd;
   if (l_ddd > 0)
      l_dd = l_dd + 1;
   DatObj.tag = l_dd;
   DatObj.monat = l_mm;
   DatObj.jahr = Jahr;
}

function Datum_plus_Tage(xTag,xMonat,xJahr, plusTage) {
   var Tage = Tag_des_Jahres(xTag,xMonat,xJahr);
   Tage = Tage + plusTage;
   days2date(Tage, xJahr);
   return;
}

function verstrichen(a_tag,a_monat,a_jahr) {
   var b_tag   = dat.getDate();
   var b_monat = dat.getMonth()+1;
   var b_jahr  = current_year();

   if (a_jahr > b_jahr)
      return false;
   else if ((a_jahr == b_jahr) && (a_monat > b_monat))
           return false;
        else if ((a_jahr == b_jahr) && (a_monat == b_monat) && (a_tag > b_tag))
           return false;

   return true;
}

function Alter(GebTag,GebMonat,GebJahr) {
   var jahr  = current_year();
   var monat = dat.getMonth() + 1;
   var tag   = dat.getDate();

   if (monat < GebMonat)
      jahr = jahr-1;
   else if ((monat == GebMonat) && (tag < GebTag))
            jahr = jahr-1;
   return(jahr-GebJahr);
}
