//**************************''''''''''''''''''''''''*************
//Stand 10.10.04
var stil = new Array("Stil", "abendländisch", "julianisch", "gregorianisch", "islamisch", "islamisch (E16, S16)", "islamisch (E15, S15)", "jüdisch", "Nabonassar",  "koptisch", "iranisch (neu)", "iranisch (schahi)", "iranisch (dschelali)", "iranisch (Yazdegard1)", "iranisch (Yazdegard2)", "seleukidisch 1", "seleukidisch 2", "seleukidisch 3", "maliye1917", "maliye");
var wostring = new Array("Montag","Dienstag","Mittwoch","Donnerstag","Freitag",                                            "Samstag","Sonntag");
var leapstring = new Array("Gemeinjahr", "Schaltjahr", "mangelhaftes Gemeinjahr", "regelmässiges Gemeinjahr", "überzähliges Gemeinjahr", "mangelhaftes Schaltjahr", "regelmässiges Schaltjahr", "überzähliges Schaltjahr");
var ChrMonth = new Array("christl. Monate", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
var IslMonth = new Array("isl. Monate", "Muharram", "Safar", "Rabi I", "Rabi II", "Dschumada I", "Dschumada II", "Radschab", "Schaban", "Ramadan", "Schawwal","Dhulkada", "Dhulhidscha");
var YudMonth = new Array("jüd. Monate", "Tischri", "Marcheschan", "Kislev", "Tebet", "Schebat", "Adar", "We-Adar", "Nisan", "Iyar", "Siwan", "Tammuz", "Ab", "Elul");
var KopMonth = new Array("koptische Monate", "Tut/Thoth", "Babeh/Phaophi", "Hatur/Hathyr", "Kijhak/Choiak", "Tubeh/Tybi", "Amschir/Mechir", "Barmahat/Phamenoth", "Barmudeh/Pharmuthi", "Baschnas/Pachon", "Bauneh/Payni", "Ebib/Epiph", "Misri/Mesori", "Epagomene");
var IraMonth = new Array("iranische Monate", "Farwardin", "Ordibehescht", "Chordad", "Tir", "Mordad", "Schahriwar", "Mehr", "Aban", "Azar", "Dei", "Bahman", "Esfand", "Epagomene");
var SyrMonth = new Array("syrisch-arabische Monate", "Azar (Mart)", "Nisan", "Iyar (Mayis)", "Haziran", "Tammuz", "Ab (Agustos)", "Eilul", "Tischrin I", "Tischrin II", "Kanun I", "Kanun II", "Schebat");
var GreekMonth = new Array("seleukidische Monate", "Artemisios/Nisanu", "Daisios/Airu", "Panemos /Simanu", "Loios/Duzu", "Gorpaios/Abu", "Hyperberetaios/Ululu", "Dios/Tashritu", "Apellaios/Arahsamnu", "Audnaios/Kislimu", "Peritios/Tebetu", "Dystros/Shabatu", "Xandikos/Addaru", "Addaru II (Emb)", "Ululu II (Emb)");

// Nikolaus A. Baer  www.nabkal.de
function floor(x)
{ return Math.floor(x);
}

function mod(n,d)
{
 var q = n%d;
 return q<0 ? d + q : q;
}

function Datum(Tag, Monat, MonStr, Jahr, Leap)
{
 this.Tag = Tag;
 this.Monat = Monat;
 this.MonStr = MonStr;
 this.Jahr = Jahr;
 this.Leap = Leap;
}

//xxxxxxxxNeumondformelnxxxxxxxx



//          Die folgende function MiniMoon ist eine Abwandlung des Programms bei:
//          http://www.stellafane.com/moon_phase/moon_phase.htm
function MiniMoon(y, monat)
{
  var i, k;
  var T, T2, T3, S1, D, D0, Z, Z0, M0, M1, M5, M6, B1, B6;
  var MF;
  var Rad = 3.14159265 / 180;

  T   = (y-1899.5) / 100;
  T2  = T*T; T3 = T*T*T;
  S1  = floor((y-1900)*12.3685);
  D0  = 2415020 + 29*S1;
  Z0  = 0.75933 + 0.53058868*S1 ;
  Z0 -= (0.000837*T  + 0.0002172*T2 + 0.000000155*T3);
  M0  = S1*0.08084821133;
  M0  = 360*(M0 - floor(M0)) + 359.2242;
  M0 -= (0.0000333*T2 + 0.00000347*T3);
  M1  = S1*0.07171366128;
  M1  = 360*(M1 - floor(M1)) + 306.0253;
  M1 += 0.0107306*T2 + 0.00001236*T3;
  B1  = S1*0.08519585128;
  B1  = 360*(B1 - floor(B1)) + 21.2964;
  B1 -= (0.0016528*T2 + 0.00000239*T3);

   i = monat *2;
   k = i/2;
    D = D0 + 14*i; Z = Z0 + 0.765294*i;
    M5 = (M0 + k*29.10535608)*Rad;
    M6 = (M1 + k*385.81691806)*Rad;
    B6 = (B1 + k*390.67050646)*Rad;
    Z -= 0.4068*Math.sin(M6);
    Z += (0.1734 - 0.000393*T)*Math.sin(M5);
    Z += 0.0161*Math.sin(2*M6);
    Z += 0.0104*Math.sin(2*B6);
    Z -= 0.0074*Math.sin(M5 - M6);
    Z -= 0.0051*Math.sin(M5 + M6);
    Z += 0.0021*Math.sin(2*M5);
    Z += 0.0010*Math.sin(2*B6-M6);
    Z += 0.5                   // notwendig um 12 h zu verschieben
    Z += 0.125 - 0.00035 * T2; // UT, MOZ Bagdad
    MF = D + Z;

  var x = MF;
  return x;
} //***********************************End MiniMoon


function SchaltJul(y)
{ return y%4 == 0 ? 1 : 0;
}

function SchaltGreg(y)
{ return (y%4 == 0) && (y%400 ==0 || y%100 !=  0) ? 1 : 0;
}

function SchaltIslAstro(y)
{
 var x = getDayIslam(1,1,y+1) - getDayIslam(1,1,y) - 354;
 return x;
}

function SchaltIsl(y, a)
{ var x;
  if (a < 0.5) {x = 3;}
    else x = 4;
  return mod((x + 11*y), 30) > 18 ? 1 : 0;
}

function SchaltIranNeu(y)
{
 var x = getDayIranNeu(1,1,y+1) - getDayIranNeu(1,1,y) - 365;
 return x;
}

function SchaltIranDschel(y)
{
 var x = getDayIranDschel(1,1,y+1) - getDayIranDschel(1,1,y) - 365;
 return x;
}

function SchaltJud(y)
{ return (mod((1+7*y),19)) < 7 ? 1 : 0;}

function SchaltSeleuk1(y)
{ return (mod((1+7*(y-1)),19)) < 7 ? 1 : 0;}

function SchaltSeleuk2(y)
{
// return (mod((1+7*(y-2)),19)) < 7 ? 1 : 0;}
   var s = 0;
   var a = mod((y-2),19);
   var b = mod((1 + 7*(y-2)),19);
   if (b < 7){s = 1;}
   if (a == 16) {s = 1;}
   if (a == 17) {s = 0;}
   return s;
}


function MolTisch(y)
{
  var p,q,m,tz,c, tag;
  y--;
  p  = floor(y/19);
  q  = mod(y,19);
  m  = 12 * q + floor(0.37 * q + 0.06);
  c  = p * 17875 + m*13753 + 5604;
  tz = p * 6939 + m * 29 + floor(c / 25920);
  c = mod(c, 25920);
  if (c>19439) {tz++;}
  tag = mod(tz, 7);
  if (tag == 2 || tag  == 4 || tag == 6) {tz++;}
  if (SchaltJud(y + 1) == 0 && tag == 1 && c>9923 && c<19440){tz += 2; }
  if (SchaltJud(y)  == 1 && tag == 0 && c>16788 && c<19440){tz++; }
  return tz;
}


function DatStringKurz(Dat)
{
 var a = Dat.Tag;
 var b = Dat.Monat;
 var c = Dat.Jahr;
 var x = a + ". " + b + ". " + c;
 return x;
}

function DatStringLang(Dat)
{
 var a = Dat.Tag;
 var b = Dat.MonStr;
 var c = Dat.Jahr;
 var d = " ";
 if(c<1)
        {c=Math.abs(c) + 1; d = " vor der Zeitrechnung";}
 var x = a + ". " + b + " " + c + d;
 return x;
}

function makeWoString(jd)
{
 var a = mod(jd,7);
 var x = wostring[a];
 return x;
}


// *****EingabeFunktionen*****

function GregIn(y)
{ return  floor(y/100) - floor(y/400) - 2;
}

function getDayJul(d, m, y)
{
 m-= 3;
 if(m<0){m+= 12; y--;}
 var x = floor(y*365.25)+ floor(m*30.6 + 0.5)+ d + 1721117;
 return x;
}

function getDayGreg(d, m, y)
{
 m-= 3;
 if(m<0){m+= 12; y--;}
 var x = floor(y*365.25)+ floor(m*30.6 + 0.5)+ d + 1721117 - GregIn(y);
 return x;
}

function getDayAbend(d, m, y)
{
 m-= 3;
 if(m<0){m+= 12; y--;}
 var tz = floor(y*365.25)+ floor(m*30.6 + 0.5)+ d + 1721117 ;
 return tz>2299170 ? tz - GregIn(y) : tz;
}

function getDayIslam(d, m, y)
{
 var JD1       = getDayIslam1616(1, m, y);

 var abenddat  = makeDateAbend(JD1);
 var year      = abenddat.Jahr;
 var a         = abenddat.Monat;
 var b         = abenddat.Tag;
 var monat     = floor( (a * 30.6 + b)/ 29.53059);

 var JDL = MiniMoon(year, monat);
 var diff = JDL - JD1;
 if (diff < - 15) {monat = monat + 1; JDL = MiniMoon(year, monat);}
 if (diff >   15) {monat = monat - 1; JDL = MiniMoon(year, monat);}

 var x = floor(JDL + 2.2) - 1 + d ;
 return x;
}

function getDayIslamA(d, m, y, a)
{
 var x = floor((y-1) * (354 + 11/30) + a) + floor((m-1) * 29.5 + 0.5) + d;
 return x;
}

function getDayIslam1616(d, m, y)
{
 var x = getDayIslamA(d, m, y, 0.49) + 1948439;
 return x;
}

function getDayIslam1515(d, m, y)
{
 var x = getDayIslamA(d, m, y, 0.51) + 1948438;
 return x;
}

function getDayIslam1516(d, m, y)
{
 var x = getDayIslamA(d, m, y, 0.49) + 1948438;
 return x;
}

function getDayIslam1615(d, m, y)
{
 var x = getDayIslamA(d, m, y, 0.51) + 1948439;
 return x;
}

function getDayYud(d, m, y)
{
 var tz = MolTisch(y);
 var diff = MolTisch(y+1) - tz;
 tz += floor((m-1) *29.5 + 0.5) + d;
 if (diff ==353 && m>3) {tz--;}
 if (diff ==355 && m>2) {tz++;}
 if (diff ==383 && m>3) {tz--;}
 if ((diff ==383) && (m == 7 || m == 9 || m == 11 || m == 13)) {tz++;}
 if ((diff ==384) && (m == 7 || m == 9 || m == 11 || m == 13)) {tz++;}
 if (diff ==385 && m>2){tz++;}
 if ((diff == 385)&&(m == 7 || m == 9 || m == 11 || m == 13)) {tz++;}
 var x = tz + 347997;
 return x;
}

function getDayNabon(d, m, y)
{
 var x = floor((y-1)*365) + (m-1)*30 + d + 1448637;
 return x;
}

function getDayKop(d, m, y)
{
 var x = floor((y-1)*365.25 + 0.30) + (m-1)*30 + d + 1825029;
 return x;
}

function getDayIranNeu(d, m, y)
{
 var x;
 var a = y + 37;
 var b = floor(a/128);
 var c = mod(a,128);
 var tz = b * 46751;
    tz += floor(c * 365.2422);
    tz += (m-1) * 31 + d;
    tz += 1934441;
 if (m>7){x = tz - m + 7;}
 else {x = tz;}
 return x
}

function getDayIranSchahi(d, m, y)
{
 var x = getDayIranNeu(d, m, y-1180);
 return x;
}

function getDayIranDschel(d, m, y)
{
 var a = y + 126;
 var b = floor(a/128);
 var c = mod(a, 128);
 var tz = b * 46751;
    tz += floor(c * 365.2424);
    tz += (m-1) * 30 + d;
  var x = tz + 2068850;
 return x;
}

function getDayIranYazd1(d, m, y)
{
 var x = 1952062 + (y-1) * 365 + (m-1) * 30 + d;
 if (m>9) {x -= 25;}
 return x;
}
function getDayIranYazd2(d, m, y)
{
 var x = 1952062 + (y-1) * 365 + (m-1) * 30 + d;
 return x;
}

function getDaySeleukA(d, m, y)
{
 var syn  = 29.530589;
 var p    = floor(y/19);
 var q    = mod(y,19);
 var c    = q
 var gmon = p * 235 + q *12 + floor(0.37 * c + 0.37) + (m-1);
 if (c==18) {gmon--; }
 var tz   = floor(gmon * syn -0.3) + d -354;                //
 var tz1  = tz + 1607922;
 var s    = SchaltSeleuk1(y)
 var x    = tz1;  //tz1

 return x;
}
function getDaySeleuk1(d, m, y)
{
 var JD1       = getDaySeleukA(1, m, y);

 var abenddat  = makeDateAbend(JD1);
 var year      = abenddat.Jahr;
 var a         = abenddat.Monat;
 var b         = abenddat.Tag;
 var monat     = floor( (a * 30.6 + b)/ 29.53059);

 var JDL = MiniMoon(year, monat);
 var diff = JDL - JD1;
 if (diff < - 15) {monat = monat + 1; JDL = MiniMoon(year, monat);}
 if (diff >   15) {monat = monat - 1; JDL = MiniMoon(year, monat);}

 var x = floor(JDL + 2.2) - 1 + d ;
 return x;
}

function getDaySeleuk2(d, m, y)
{
   var s = SchaltSeleuk2(y);
   var p = mod(y,19);
   var d1 = d;

   var y1 = y;
   var m1 = m - 6;
       if(m1 < 1) {m1 += 12; y1--;}
       if((s == 1) && (p != 18) && (m > 6)) {m1--;}
       if((p == 0) && (m < 7)) {m1++;}

   var x    = getDaySeleuk1(d1, m1, y1);
 return x;
}


function getDaySeleuk3(d, m, y)
{
 m -= 6;
 if (m<0) {m +=12; y--;}
 var x = y * 365 + floor(y * 0.25 + 0.25) + floor(m * 30.6 + 0.5) + d + 1607738 - 214;
 return x;
}

function getDayMal1917(d, m, y)
{
 var x, y1, tz;
 var isl = 354 + 11/30;
 if (y<1088)
    {
     y1 = floor((y * isl + 135)/365.25);
     if (y == 1087) {y1 = 1055;}
     m -= 7;
     if (m<0) {m += 12; y1--;}
     tz = floor(y1 * 365.25 + 0.5) + floor(m * 30.6 + 0.5) + d + 1948486 - 184;
    }
 else
    {
     if (y<1190) {y1 = floor((y * isl + 319) / 365.25);}
     if (y>1189) {y1 = y - 35;}
     if (y>1220) {y1--;}
     if (y>1254) {y1--;}
     m -= 1;
     tz = floor(y1 * 365.25 + 0.25)+ floor(m * 30.6 + 0.5) + d + 1948302 -365;
    }
  x = tz;
 return x;
}

function getDayMal(d, m, y)
{
 var x, tz;
 if (y<1333) {tz=getDayMal1917(d, m, y);}
  else
  {
     if (y == 1333){m +=2};
     if (y<1925) {y += 584};
     tz= getDayGreg(d, m, y);
  }
  x = tz;
 return x;
}

function getDay(d, m, y, s)
{
 var daynumber;

 if (s==1)
    {daynumber = getDayAbend(d, m, y)
    }
 if (s==2)
    {daynumber = getDayJul(d, m, y)
    }
 if (s==3)
    {daynumber = getDayGreg(d, m, y)
    }
 if (s==4)
    {daynumber = getDayIslam(d, m, y)
    }
 if (s==5)
    {daynumber = getDayIslam1616(d, m, y)
    }
if (s==6)
    {daynumber = getDayIslam1515(d, m, y)
    }
if (s==7)
    {daynumber = getDayYud(d, m, y)
    }
if (s==8)
    {daynumber = getDayNabon(d, m, y)
    }
if (s==9)
    {daynumber = getDayKop(d, m, y)
    }
if (s==10)
    {daynumber = getDayIranNeu(d, m, y)
    }
if (s==11)
    {daynumber = getDayIranSchahi(d, m, y)
    }
if (s==12)
    {daynumber = getDayIranDschel(d, m, y)
    }
if (s==13)
    {daynumber = getDayIranYazd1(d, m, y)
    }
if (s==14)
    {daynumber = getDayIranYazd2(d, m, y)
    }
if (s==15)
    {daynumber = getDaySeleuk1(d, m, y)
    }
if (s==16)
    {daynumber = getDaySeleuk2(d, m, y)
    }
 if (s==17)
    {daynumber = getDaySeleuk3(d, m, y)
    }
if (s==18)
    {daynumber = getDayMal1917(d, m, y)
    }
if (s==19)
    {daynumber = getDayMal(d, m, y)
    }
 return daynumber;
}

//*********AusgabeFunktionen*****

function GregOut(jd)
{
 var tz = jd - 1721119;
 var x  = floor(tz / 36524.25) - floor(tz / 146097) - 2;
 return x;
}

function makeDateJul(jd)
{
 var tz = jd - 1721117;
 var y  = floor((tz-0.2) / 365.25);
 var r  = tz - floor(y * 365.25);
 var m  = floor((r - 0.5) / 30.6);
 var d  = r - floor(m * 30.6 + 0.5);
 m+= 3;
 if(m>12) {m-= 12; y++}
 var ms = ChrMonth[m];
 var s  = SchaltJul(y);
 var l  = leapstring[s];
 var x = new Datum(d, m, ms, y, l);
 return x;
}

function makeDateGreg(jd)
{
 var a = jd + GregOut(jd);
 var x = makeDateJul(a);
 var s  = SchaltGreg(x.Jahr);
 var l  = leapstring[s];
 x.Leap = l;
 return x;
}

function makeDateAbend(jd)
{
 var x;
 if (jd<2299161)
    {x = makeDateJul(jd);}
 else
    {x = makeDateGreg(jd);}
return x;
}

function makeDateIslam(jd)
{

 var syn   = 29.530589;

 var abenddat  = makeDateAbend(jd);
 var year      = abenddat.Jahr;
 var a         = abenddat.Monat;
 var b         = abenddat.Tag;
 var monat     = floor( (a * 30.6 + b)/ 29.53059);


 var JDL1m  = MiniMoon(year, monat);
 var JDL2m  = MiniMoon(year,(monat +1));


 var JDL1   = floor(JDL1m + 2.2);
 var JDL2   = floor(JDL2m + 2.2);

 var diff1 = jd - JDL1 ;
     while(diff1 < 0)
                {monat = monat - 1;
                 JDL1m  = MiniMoon(year, monat);
                 JDL2m  = MiniMoon(year, monat + 1);
                 JDL1   = floor(JDL1m + 2.2);
                 JDL2   = floor(JDL2m + 2.2);
                 diff1  = jd - JDL1;
                }



 var diff2 = JDL2 - jd;
     while(diff2 <= 0)
             {monat = monat + 1;
              JDL1m  = MiniMoon(year, monat);
              JDL2m  = MiniMoon(year, monat + 1);
              JDL1   = floor(JDL1m + 2.2);
              JDL2   = floor(JDL2m + 2.2);
              diff2  = JDL2 - jd;
             }


 var d     = jd - JDL1 +1;

 var tz    = JDL1 - 1948439 ;
 var gmon  = floor((tz+ 3) / syn );               //

 var y = floor(gmon / 12);
 var m = gmon - y*12;
     m++;
     y++;
 var ms   = IslMonth[m];


 var s    = SchaltIslAstro(y);
 var l    = leapstring[s];
 var x = new Datum(d, m, ms, y, l);

 return x;
}


function makeDateIslamA(tz, a)
{
 var y = floor((tz-a) / (354 + 11/30));
 var r = tz - floor(y * (354 + 11/30) + a);
 var m = floor((r - 0.75)/ 29.5);
     if (m==12){m--;}
 var d = r - floor(m * 29.5 + 0.5);
 m++;
 y++;
 var ms = IslMonth[m];
 var s  = SchaltIsl(y, a);
 var l  = leapstring[s];
 var x = new Datum(d, m, ms, y, l);
 return x;
}

function makeDateIslam1616(jd)
{
 var x = makeDateIslamA(jd-1948439, 0.49);
 return x;
}

function makeDateIslam1515(jd)
{
 var x = makeDateIslamA(jd-1948438, 0.51);
 return x;
}

function makeDateIslam1516(jd)
{
 var x = makeDateIslamA(jd-1948438, 0.49);
 return x;
}

function makeDateIslam1615(jd)
{
 var x = makeDateIslamA(jd-1948439, 0.51);
 return x;
}

function makeDateYud(jd)
{
 var y, m, d, tz, tz1, q, rest, r, diff, ms, l;

 tz1 = jd - 347997;
 m   = floor(tz1 / 29.53059414);
 q   = floor((m-1)/235);
 m  -= q*235;
 y   = q * 19;
 y  += 1 + floor((m + 0.94) / 12.36842105);

 tz = MolTisch(y);
 if((tz+1)>tz1)
      {y--; tz = MolTisch(y);}
 rest = tz1 - tz;
 r = rest;

   if (r==0)
      {y--;
       tz = MolTisch(y);
       rest = tz1 - tz;
       r    = rest;
      }

 diff = MolTisch(y+1) - tz;

if (diff == 353)
    {
      l  = leapstring[2];
      if (rest>88){r++}
      m = floor((r-0.6) / 29.5);
      d = r - floor(m * 29.5 + 0.5);
      m++;
      if (m<7) {ms = YudMonth[m];}
      else {ms = YudMonth[m+1];}
    }

if (diff == 354)
     {
      l  = leapstring[3];
      m = floor((r-0.6) / 29.5);
      d = r - floor(m * 29.5 + 0.5);
      m++;
      if (m<7) {ms = YudMonth[m];}
      else {ms = YudMonth[m+1];}
     }

if (diff == 355)
     {
      l  = leapstring[4];
      if (rest>60){r--;}
      m = floor((r-0.6) / 29.5);
      d = r - floor(m * 29.5 + 0.5);
      m++;
      if (rest == 60){d = 30; m = 2;}
      if (m<7) {ms = YudMonth[m];}
      else {ms = YudMonth[m+1];}
     }

if (diff == 383)
     {
      l  = leapstring[5];
      if (rest>88){rest++;}
      if (rest>148)
         {r = rest - 148;
          m = floor((r-0.6) / 29.5);
          d = r - floor(m * 29.5 + 0.5);
          m += 6;
         }
      else{
           r = rest;
           m = floor((r-0.6) / 29.5);
           d = r - floor(m * 29.5 + 0.5);
           m++;
          }
      ms = YudMonth[m];
      }

if (diff == 384)
     {
      l  = leapstring[6];
      if (rest>148)
         {r = rest - 148;
          m = floor((r-0.6) / 29.5);
          d = r - floor(m * 29.5 + 0.5);
          m += 6;
         }
      else{
           m = floor((r-0.6) / 29.5);
           d = r - floor(m * 29.5 + 0.5);
           m++;
          }
      ms = YudMonth[m];
      }

 if (diff == 385)
     {
      l  = leapstring[7];
      if (r>60){r--;}
      if (r>148)
         {r = r - 148;
          m = floor((r-0.6) / 29.5);
          d = r - floor(m * 29.5 + 0.5);
          m += 6;
         }
      else{
           m = floor((r-0.6) / 29.5);
           d = r - floor(m * 29.5 + 0.5);
           m++;
          }
      if (rest ==60) {d = 30; m = 2;}
      ms = YudMonth[m];
      }

var x = new Datum(d, m, ms, y, l);
 return x;
}

function makeDateNabon(jd)
{
 var tz = jd - 1448637;
 var y  = floor((tz-0.4) / 365.0);
 var r  = tz - floor(y * 365.0 );
 var m  = floor((r - 0.5) / 30);
 var d  = r - m * 30;
 m++;
 y++;
 var ms = KopMonth[m];
 var s  = 0;
 var l  = leapstring[s];
 var x = new Datum(d, m, ms, y, l);
 return x;
}

function makeDateKop(jd)
{
 var tz = jd - 1825029;
 var y  = floor((tz-0.4) / 365.25);
 var r  = tz - floor(y * 365.25 + 0.30);
 var m  = floor((r - 0.5) / 30);
 var d  = r - m * 30;
 m++;
 y++;
 var ms = KopMonth[m];
 var s  = SchaltJul(y+1);
 var l  = leapstring[s];
 var x = new Datum(d, m, ms, y, l);
 return x;
}

function makeDateIranNeu(jd)
{
 var m, d;
 var tz = jd - 1934441;
 var a  = floor(tz/46751);
 var r1 = tz - a*46751;
 var b  = floor((r1 - 0.0002) / 365.2424);
 var y  = a * 128 + b - 38;
 var r  = r1 - floor(b * 365.2424);

 if (r<217)
    {
     m = floor ((r -0.5) / 31);
     d = r - (m * 31);
     m++;
    }
 else
    {
     r -= 216;
     m = floor((r - 0.5) / 30);
     d = r - (m *30);
     m += 8;
    }

  y++;
 var ms = IraMonth[m];
 var s  = SchaltIranNeu(y);
 var l  = leapstring[s];
 var x = new Datum(d, m, ms, y, l);
 return x;
}

function makeDateIranSchahi(jd)
{
 var x = makeDateIranNeu(jd);
 x.Jahr += 1180;
 return x;
}

function makeDateIranDschel(jd)
{
  var tz = jd - 2068850;
 var a  = floor(tz/46751);
 var r1 = tz - a*46751;
 var b  = floor((r1 - 0.0002) / 365.2424);
 var y  = a * 128 + b - 126;
 var r  = r1 - floor(b * 365.2424);
 var m = floor((r-0.5)/30);
 var d = r - (m*30);
 m++;

 var ms = IraMonth[m];
 var s  = SchaltIranDschel(y);
 var l  = leapstring[s];
 var x = new Datum(d, m, ms, y, l);

 return x;
}

function makeDateIranYazd1(jd)
{
 var tz = jd - 1952062;
 var y  = floor((tz-0.002)/365);
 var r  = tz - y * 365;
 if (r>245) {r +=25;}
 var m = floor((r-0.5)/30);
 var d = r - (m*30);
 m++;
 y++;
 var mm = m;
 if (m == 9){mm = 13;}
 if (m>9){mm--;}
 var ms =  IraMonth[mm];
 var l  = leapstring[0];
 var x = new Datum(d, m, ms, y, l);
 return x;
}

function makeDateIranYazd2(jd)
{
 var tz = jd - 1952062;
 var y  = floor((tz-0.002)/365);
 var r  = tz - y * 365;
 var m = floor((r-0.5)/30);
 var d = r - (m*30);
 m++;
 y++;

 var ms = IraMonth[m];
 var l  = leapstring[0];
 var x = new Datum(d, m, ms, y, l);
 return x;
}

function makeDateSeleuk1(jd)
{
 var syn   = 29.530589;

 var abenddat  = makeDateAbend(jd);
 var year      = abenddat.Jahr;
 var m        = abenddat.Monat;
 var d         = abenddat.Tag;
 var monat     = floor( (m * 30.6 + d)/ 29.53059);


 var JDL1m  = MiniMoon(year, monat);

 var JDL2m  = MiniMoon(year,(monat +1));


 var JDL1   = floor(JDL1m + 2.2);
 var JDL2   = floor(JDL2m + 2.2);

 var diff1 = jd - JDL1 ;
     while(diff1 < 0)
               {monat = monat - 1;
                JDL1m  = MiniMoon(year, monat);
                JDL2m  = MiniMoon(year, monat + 1);
                JDL1   = floor(JDL1m + 2.2);
                JDL2   = floor(JDL2m + 2.2);
                diff1  =jd - JDL1;
               }

 var diff2 = JDL2 - jd;
     while(diff2 <= 0)
              {monat = monat + 1;
               JDL1m  = MiniMoon(year, monat);
               JDL2m  = MiniMoon(year, monat + 1);
               JDL1   = floor(JDL1m + 2.2);
               JDL2   = floor(JDL2m + 2.2);
               diff2  = JDL2 - jd;
              }

  var d     = jd - JDL1 +1;

 var tz    = JDL1 - 1607922 + 354;
 var gmon  = floor((tz+ 3) / syn );               //

 var zyk   = floor(gmon / 235);
 var rmon1 =  gmon - floor(zyk * 235);
 var y1     = zyk * 19;
 var y2    = floor(rmon1 / 12);
 var rmon2
  = rmon1 - (y2 * 12 +  floor(0.37 * y2 + 0.37));

 if (rmon2<0) {y2--;
              rmon2 = rmon1 - (y2 * 12 +  floor(0.37 * y2 + 0.37));
             }
 if (rmon1>221)
               {y2 = 18;
                rmon2 = rmon1 - 222;}

 var m    = rmon2;
 var y    = y1 + y2;

     m++;
 var ms   = GreekMonth[m];
 if (y2 == 18 && m == 7) {ms   = GreekMonth[14]}
 if (y2 == 18 && m >7)   {ms   = GreekMonth[m-1]}
 var s    = SchaltSeleuk1(y);
 var l    = leapstring[s];
 var x = new Datum(d, m, ms, y, l);

 return x;
}

function makeDateSeleuk2(jd)
{
   var a = makeDateSeleuk1(jd);
   var d   = a.Tag;
   var ms  = a.MonStr;

   var m   = a.Monat;
   var y   = a.Jahr;

   var y1 = y;
   var m1 = m + 6;

   var p = mod(y1,19);


   if (m1>12) {m1 -= 12; y1++;}
   var s = SchaltSeleuk2(y1);
   if ((s == 1) && (p != 18) && (m < 7)) {m1++;}
   if ((p == 18) && (m == 7)) {m1 =13; y1 = y;}
   if ((p == 18) && (m > 7)) {m1--;}

   var l    = leapstring[s];

 var x = new Datum(d, m1, ms, y1, l);
 return x;
}



function makeDateSeleuk3(jd)
{
 var tz = jd - 1607738 + 214;
 var y  = floor((tz - 0.2 - 0.25) / 365.25);
 var r  = tz - floor(y * 365.25 + 0.25);
 var m  = floor((r - 0.5) / 30.6);
 var d  = r - floor(m * 30.6 + 0.5);
 m += 6;
 if (m>12) {m -= 12; y++;}
 var mm = m+7;
 if (mm>12) {mm -= 12;}
 var ms = SyrMonth[mm];
 var s  = SchaltJul(y+1);
 var l  = leapstring[s];
 var x = new Datum(d, m, ms, y, l);
 return x;
}

function makeDateMal1917(jd)
{
 var x, l, s;
 var tz, d, m, y, r, y1, ms;
 var isl = 354 + 11/30;

 if (jd<2333642)
    {
     tz = jd - 1948486 + 184;
     y = floor((tz - 0.2 - 0.5) / 365.25);
     r = tz - floor(y * 365.25 + 0.5);
     m = floor((r - 0.5) / 30.6);
     d = r - floor(m * 30.6 + 0.5);
     m += 7;
     if (m>12){m-=12; y++;}

     y1 = floor((y * 365.25 + 220)/isl);
     if (jd>2333460) {y1 = 1087;}

     var mm = m + 6;
     if (mm>12) {mm -= 12;}

     ms = SyrMonth[mm];
     s  = SchaltJul(y+2);
     l  = leapstring[s];
     x = new Datum(d, m, ms, y1, l);
    }
 else
    {
     tz = jd - 1948302 + 365;
     //if (jd>2421288) {tz += GregOut(jd);}

     y = floor((tz - 0.2 - 0.25) / 365.25);
     r = tz - floor(y * 365.25 + 0.25);
     m = floor((r - 0.5)/30.6);
     d = r - floor(m * 30.6 + 0.5);
     m +=1;
     if (jd<2363227) {y1 = floor((y * 365.25 + 36) / isl);}
     if (jd>2363226) {y1 = y + 35;}
     if (jd>2380759) {y1++;}
     if (jd>2393177) {y1++;}

     ms = SyrMonth[m];
    // if(y1<1333){s = SchaltJul(y+2);}
    // if(y1>1332){s = SchaltGreg(y+622);}

     s = SchaltJul(y+2);
     l  = leapstring[s];
     x = new Datum(d, m, ms, y1, l);
    }

 return x;
}

function makeDateMal(jd)
{
 var x, l, s;
 var tz, d, m, y, r, y1, ms;

 if (jd<2421289)
     { x = makeDateMal1917(jd);}

 if (jd>2421288)
     {
     tz = jd - 1721117  + GregOut(jd);
     y = floor((tz - 0.2) / 365.25);
     r = tz - floor(y * 365.25);
     m = floor((r - 0.5)/30.6);
     d = r - floor(m * 30.6 + 0.5);

     ms = SyrMonth[m+1];
     m = mod((m+2),12) + 1;
     if (m<3) {y++}
     if (y<1926) {y -=584}

     if (y<1334) { m -=2;}
     s = SchaltGreg(y);
     l  = leapstring[s];
     x = new Datum(d, m, ms, y, l);
    }
 return x;
}

function makeDate(jd,s)
{
 var datum;

 if (s==1)
    {datum = makeDateAbend(jd)
    }
 if (s==2)
    {datum = makeDateJul(jd)
    }
 if (s==3)
    {datum = makeDateGreg(jd)
    }
if (s==4)
    {datum = makeDateIslam(jd)
    }
 if (s==5)
    {datum = makeDateIslam1616(jd)
    }
 if (s==6)
    {datum = makeDateIslam1515(jd)
    }
 if (s==7)
    {datum = makeDateYud(jd)
    }
 if (s==8)
    {datum = makeDateNabon(jd)
    }
 if (s==9)
    {datum = makeDateKop(jd)
    }
 if (s==10)
    {datum = makeDateIranNeu(jd)
    }
 if (s==11)
    {datum = makeDateIranSchahi(jd)
    }
 if (s==12)
    {datum = makeDateIranDschel(jd)
    }
 if (s==13)
    {datum = makeDateIranYazd1(jd)
    }
 if (s==14)
    {datum = makeDateIranYazd2(jd)
    }
 if (s==15)
    {datum = makeDateSeleuk1(jd)
    }
 if (s==16)
    {datum = makeDateSeleuk2(jd)
    }
 if (s==17)
    {datum = makeDateSeleuk3(jd)
    }
 if (s==18)
    {datum = makeDateMal1917(jd)
    }
 if (s==19)
    {datum = makeDateMal(jd)
    }
 return datum
}



//*************************'''''''''''''''''''''''''''*******************
