var e = "?";
var browser_test = "Micr";
var browser = navigator.appName.slice(0,4);

var vorne = new Array
  ("Gregorianischer Kalender:","Julianischer Kalender:","R&ouml;mischer (julian.) Kalender:","J&uuml;discher Kalender:",
   "Julianisches Datum (12h UT):","","Maya-Kalender:","Altägypt. Kalender:","",
   "Wochentag:","!8!");

var months = new Array
  (e,"Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");

var egyptian_month = new Array
  ("Thot","Phaophi","Athyr","Choiak","Tybi","Mechir","Phamenoth","Pharmuti","Pachon","Payni","Epiphi","Mesori","Zusatztag");

var jewish_month = new Array 
  ("Tischri","Cheschwan","Kislew","Tewet","Schewat","Adar","Adar II","Nisan","Ijjar","Siwan","Tammus","Aw","Elul");

var not_supported  = "au&szlig;erhalb des g&uuml;ltigen Bereichs";
var dow_name = new Array("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Sonnabend","Sonntag");

var headline = "Ergebnisse";
var back = "zur&uuml;ck zum Formular";
var bc_ad_greg = " B.C.";
var bc_ad_jul = " B.C.";
var pt = ". ";

var roman_f = new Array ("","I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII","XIII","XIV","XV");
var roman_1 = new Array ("","I","II","III","IIII","V","VI","VII","VIII","IX");
var roman_10 = new Array ("","X","XX","XXX","XL","L","LX","LXX","LXXX","XC");
var roman_100 = new Array ("","C","CC","CCC","CD","D","DC","DCC","DCCC","CM");

var roman_months = new Array
  ("DECEMBRIS","IANVARII","FEBRVARII","MARTII","APRILIS","MAII","IVNII","IVLII","AVGVSTI","SEPTEMBRIS","OCTOBRIS",
   "NOVEMBRIS","DECEMBRIS");

var mayan_day = new Array 
  ("Imix","Ik","Akbal","Kan","Chicchan","Cimi","Manik","Lamat","Muluc","Oc","Chuen","Eb","Ben","Ix","Men","Cib",
   "Caban","Eznab","Cauac","Ahau");

var mayan_month = new Array
  ("Pop","Uo","Zip","Zotz","Tzec","Xul","Yaxkin","Mol","Chen","Yax","Zac","Ceh","Mac","Kankin","Muan","Pax","Kayab",
   "Cumku","Uayeb");

var jmd0 = new Array (0,30,59,88,117,147,0,176,206,235,265,294,324);
var jmd1 = new Array (0,30,59,89,118,148,0,177,207,236,266,295,325);
var jmd2 = new Array (0,30,60,90,119,149,0,178,208,237,267,296,326);
var jmd3 = new Array (0,30,59,88,117,147,177,206,236,265,295,324,354);
var jmd4 = new Array (0,30,59,89,118,148,178,207,237,266,296,325,355);
var jmd5 = new Array (0,30,60,90,119,149,179,208,238,267,297,326,356);
var jewish_month_days = new Array (jmd0,jmd1,jmd2,jmd3,jmd4,jmd5);

var mk = "!";
var mille = "M";
var pi = " Pictun  ";
var ba = " Baktun  ";
var ka = " Katun  ";
var tu = " Tun  ";
var ui = " Uinal  ";
var ki = " Kin";
var sp = " ";

var greg_x = 0;
var jul_x = 1;
var rom_x = 2;
var jew_x = 3;
var jd_x = 4;
var my_x = 6;
var egypt_x = 7;
var dow_x = 9;
var last = 9;

function elapsed_time19(year)
{
var t = new Array(29,12,793);
var n19 = year % 19;
var moladot = division((n19 * 12.36 + 0.77),1);
var result = dhp_mult(moladot,t);
return result;
}

function year_after_leap_year(year)
{
var rem = year % 19;
var result = ((rem == 1) || (rem == 4) || (rem == 7) || (rem == 9) || (rem == 12) || (rem == 15) || (rem == 18));
return result;
}

function common_year(year)
{
var rem = year % 19;
var result = ((rem != 0) && (rem != 3) && (rem != 6) && (rem != 8) && (rem != 11) && (rem != 14) && (rem != 17));
return result;
}

function elapsed_time235(year)
{
var t = new Array(6939,16,595);
var moladot = division(year,19);
var result = dhp_mult(moladot,t);
return result;
}

function molad(year)
{
var t0 = new Array(118,7,695);
var t1 = elapsed_time235(year);
var t2 = elapsed_time19(year);
var t3 = dhp_add(t1,t2);
var result = dhp_add(t0,t3);
result[0] = result[0] - 500;
return result;
}

function new_year(year)
{
var molad_tishri_dhp = molad(year);
var result = molad_tishri_dhp[0];
if (molad_tishri_dhp[1] >= 18) {result++};
var dow = result % 7;
if ((dow == 1) || (dow == 4) || (dow == 6)) {result++};
var time_hp = molad_tishri_dhp[1] * 10000 + 1 * molad_tishri_dhp[2];
var dow2 = molad_tishri_dhp[0] % 7;
if ((common_year(year)) && (dow2 == 3) && (time_hp >= 90204) && (time_hp < 180000)) {result = 1 * molad_tishri_dhp[0] + 2};
if ((year_after_leap_year(year)) && (dow2 == 2) && (time_hp >= 150589) && (time_hp < 180000))
  {result = 1 * molad_tishri_dhp[0] + 1};
result = 1 * result + 347996;
return result;
}

function dhp_mult(n,dhp)
{
var d = n * dhp[0];
var h = n * dhp[1];
var p = n * dhp[2];
dhp[2] = p % 1080;
h = h + division(p,1080);
dhp[1] = h % 24;
dhp[0] = d + division(h,24);
return dhp;
}

function dhp_add(dhp1,dhp2)
{
var d = dhp1[0] + dhp2[0];
var h = dhp1[1] + dhp2[1];
var p = dhp1[2] + dhp2[2];
dhp1[2] = p % 1080;
h = h + division(p,1080);
dhp1[1] = h % 24;
dhp1[0] = d + division(h,24);
return dhp1;
}

function dhp_string(dhp)
{
var s = dhp[0] + "D " + dhp[1] + "H " + dhp[2] + "P";
return s;
}

function index_from_length(l)
{
var result = 3 * (division(l - 300,80)) + 1 * (l % 10) - 3;
return result;
}

function jewish_from_jd(jd)
{
var approx_year = division((jd - 347998),365.25);
approx_year+=2;
while (new_year(approx_year) > jd) {approx_year--};
var year_length = new_year(approx_year * 1 + 1) - new_year(approx_year);
var d = jd - new_year(approx_year);
d++;
var ix = index_from_length(year_length);
var m = 0;
while ((jewish_month_days[ix][m]) < d) {m++};
m--;
if ((jewish_month_days[ix][m] == 0) && (m > 0)) {m--};
var result = (d - jewish_month_days[ix][m]) + pt + sp + jewish_month[m] + sp + approx_year;
return result;
}

function division(zaehler,nenner)
{
var quotient = zaehler / nenner;
var rest = zaehler % nenner;
var result = Math.round(quotient - (rest / nenner));
return result;
}

function roman_number(n)
{
var thousands = division(n,1000);
var hundreds  = division((n % 1000),100);
var tens  = division((n % 100),10);
var ones  = n % 10;
var result  = ""
var i = 1;
if (thousands < 4)
{
while (i <= thousands){result = result + mille; i++;}
result = result + roman_100[hundreds] + roman_10[tens] + roman_1[ones];
if (n == 0) result = e;
}
else result = "(" + n + ")";
return result;
}

function roman_day_number(roman_day)
{
var result;
if (roman_day == 1) result = "";
else if (roman_day == 2) result = "PRIDIE ";
else if (roman_day > 2) result = "ANTE DIEM " + roman_number(roman_day) + sp;
else result = e;
return result;
}

function roman_date_from_julian(julian_day,julian_month,julian_year)
{
var result = "";
var test = 100 * julian_month + 1 * julian_day;
var r4 = julian_year % 4;
var month = julian_month;
if ((month == 3) || (month == 5) || (month == 7) || (month == 10)){nones = 8; ides = 16; calends = 33;}
if ((month == 1) || (month == 8) || (month == 12)){nones = 6; ides = 14; calends = 33;}
if ((month == 4) || (month == 6) || (month == 9) || (month == 11)){nones = 6; ides = 14; calends = 32;}
if (month == 2)
{
nones = 6; ides = 14; calends = 30;
if ((r4 == 0) && (julian_day > 24)) calends = 31;
}
month = month - 1;
var n = nones - julian_day;
var i = ides - julian_day;
var c = calends - julian_day;
if (julian_day == 1) result = "KALENDAE " + roman_months[julian_month];
else if (n == 1) result = "NONAE " + roman_months[julian_month];
else if (i == 1) result = "IDVS " + roman_months[julian_month];
else if (n>1)
{result = roman_day_number(n) + "NONIS " + roman_months[julian_month];}
else if (i>1)
{result = roman_day_number(i) + "IDIBVS " + roman_months[julian_month];}
else if (c>1)
{result = roman_day_number(c) + "KALENDIS " + roman_months[(julian_month + 1) % 12];}
else result = e;
if ((r4 == 0) && (test == 225)) result = "ANTE DIEM BIS VI KALENDIS MARTII";
result = result + sp + roman_number(julian_year * 1 + 753) + " A. V. C.";
return result;
}

function adjusted_month_from_month(m)
{
var result = ((1 * m + 9) % 12) + 3;
return result
}

function adjusted_year_from_year(y,m)
{
var result = y - 1 + division((1 * m + 7),10);
return result
}

function year_from_adjusted_year(j_strich,m_strich)
{
var result = j_strich + division(m_strich,13);
return result
}

function month_from_adjusted_month(m_strich)
{
var result = ((m_strich + 11) % 12) + 1;
return result
}

function jd_from_greg(d,m_strich,y_strich)
{
var y4800 = y_strich + 4800;
var a = division(y4800,100);
var b = y4800 % 100;
var result = 146097 * division(a,4) 
           + 36524 * (a % 4) 
           + 1461 * division(b,4) 
           + 365 * (b % 4) 
           + division((7 * (m_strich - 2)),12) 
           + 30 * m_strich + 1 * d + 1721029 - 1753164
return result
}

function jd_from_julian(d,m_strich,y_strich)
{
var y4800 = y_strich + 4800;
var a = division(y4800,100);
var b = y4800 % 100;
var result = 36525 * a 
           + 1461 * division(b,4) 
           + 365 * (b % 4) 
           + division((7 * (m_strich - 2)),12) 
           + 30 * m_strich + 1 * d + 1721027 - 1753200;
return result
}

function jd_from_jewish(d,m,y)
{
if ((common_year(y)) && (m == 6)) {m=5};
var ny0 = new_year(y);
y++;
var ny1 = new_year(y);
var ix = index_from_length(ny1 - ny0);
var jd = ny0 * 1 + jewish_month_days[ix][m] * 1 + d * 1 - 1;
return jd;
}

function greg_from_jd(jd)
{
var a = 1 * jd + 32044;
var b = division(a,146097);
var c = a % 146097;
var d = Math.min(3,division(c,36524));
var e = c - 36524 * d;
var f = division(e,1461);
var g = e % 1461;
var h = Math.min(3,division(g,365));
var k = g - 365 * h;
var l = division((111 * k + 41),3395);
var t = k - 30 * l - division((7 * l + 7),12) + 1;
var m_strich = l + 3;
var j_strich = 400 * b + 100 * d + 4 * f + 1 * h - 4800;
var m = month_from_adjusted_month(m_strich);
var j = year_from_adjusted_year(j_strich,m_strich);
if (j < 1) var result = t + pt + months[m] + sp + (j * (-1) + 1) + bc_ad_greg;
else var result = t + pt + months[m] + sp + j;
return result
}

function julian_from_jd(jd)
{
var a = 1 * jd + 32082;
var b = division(a,1461);
var c = a % 1461;
var d = Math.min(3,division(c,365));
var e = c - 365 * d;
var f = division((111 * e + 41),3395);
var t = e - 30 * f - division((7 * f + 7),12) + 1;
var m_strich = f + 3;
var j_strich = 4 * b + 1 * d - 4800;
var m = month_from_adjusted_month(m_strich);
var j = year_from_adjusted_year(j_strich,m_strich);
if (j < 1) var result = t + pt + months[m] + sp + (j * (-1) + 1) + bc_ad_jul;
else var result = t + pt + months[m] + sp + j;
return result
}

function roman_from_jd(jd)
{
var a = 1 * jd + 32082;
var b = division(a,1461);
var c = a % 1461;
var d = Math.min(3,division(c,365));
var e = c - 365 * d;
var f = division((111 * e + 41),3395);
var t = e - 30 * f - division((7 * f + 7),12) + 1;
var m_strich = f + 3;
var j_strich = 4 * b + 1 * d - 4800;
var m = month_from_adjusted_month(m_strich);
var j = year_from_adjusted_year(j_strich,m_strich);
var result = roman_date_from_julian(t,m,j)
return result
}

function dow_from_jd(jd)
{
result = dow_name[jd % 7];
return result
}

function long_count_from_jd(jd)
{
var m = jd - 584283;
var n = m;
var pictun = division(n,2880000);
n = m % 2880000;
var baktun = division(n,144000);
n = m % 144000;
var katun = division(n,7200);
n = m % 7200;
var tun = division(n,360);
n = m % 360;
var uinal = division(n,20);
var kin = m % 20;
var result = pictun + pi + baktun + ba + katun + ka + tun + tu + uinal + ui + kin + ki;
return result;
}

function tzolkin_from_jd(jd)
{
var n = jd + 136;
var m = jd + 65;
var zahl_tzolkin = ((n - 1) % 13) + 1 * 1;
var name_tzolkin = mayan_day[n % 20];
var p = m % 365;
var name_haab = mayan_month[division(p,20)];
var zahl_haab = p % 20;
var result = " (" + zahl_tzolkin + " " + name_tzolkin + " " + zahl_haab + " " + name_haab + ")";
return result;
}


function egyptian_from_jd(jd)
{
var n = jd + 47;
var t = n % 365;
var y = division(n,365) -471 ;
var m = division(t,30);
var d = (t % 30);
d++
var result = d + pt + egyptian_month[m] + " (" + y + ". Z&auml;hlung)";
return result;
}


function write_results(jd, x)
{
         var daten = new Array(last);
         for (q2 = 0; q2 <= last; q2++)
         {
             daten[q2] = "";
         }
         if (jd > -1)
         {
            daten[greg_x] = "<font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + greg_from_jd(jd) + "</font>";
            daten[jul_x] = "<font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + julian_from_jd(jd) + "</font>";
            daten[jew_x] = "<font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + jewish_from_jd(jd) + "</font>";
            daten[rom_x] = "<font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + roman_from_jd(jd) + "</font>";
            daten[jd_x] = "<font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + jd + "</font></I>";
            daten[my_x] = "<font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + long_count_from_jd(jd) + "<br>" + tzolkin_from_jd(jd) + "</font></I>";
            daten[dow_x] = "<font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + dow_from_jd(jd) + "</font>";
            daten[egypt_x] = "<font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + egyptian_from_jd(jd) + "</font>";
         }
         else
         {
             var q1 = 0;
             do
             {
                 daten[q1] = "<I><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + not_supported + "</font></I>";
                 q1++;
             }
             while (q1 <= last);
         }
         if (jd == "") {jd = 0;}
         if (jd < 2086674)
         {
             daten[jew_x] = "<I><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + daten[jew_x] + "</font></I>";
         }
         if (jd < 347998)
         {
             daten[jew_x] = "<I><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + not_supported + "</font></I>";
         }

         if (jd < 172233)
         {
             daten[egypt_x] = "<I><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + not_supported + "</font></I>";
         }

         if ((jd < 584283) || (jd > 58184282))
         {
            daten[my_x] = "<I><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + not_supported + "</font></I>";
         }
         if (jd < 2299161)
         {
            daten[greg_x] = "<I><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + daten[greg_x] + "</font></I>";
         }

         if (jd < 1446390)
         {
            daten[rom_x] = "<I><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + not_supported + "</font></I>";
         }

         if (jd < 1723980)
         {
            daten[rom_x] = "<I><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + daten[rom_x] + "</font></I>";
            daten[jul_x] = "<I><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + daten[jul_x] + "</font></I>";
         }
         
         daten[dow_x] = "<B><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + daten[dow_x] + "</font></B>";
         var q1 = 0;
         do
         {
             if (q1 == x) {daten[q1] = "<B><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + daten[q1] + "</font></B>";}
             q1++;
         }
         
         while (q1 <= last);
         document.all.greg.innerHTML = daten[greg_x];
         document.all.jul.innerHTML = daten[jul_x];
         document.all.rom.innerHTML = daten[rom_x];
         document.all.jued.innerHTML = daten[jew_x];
         document.all.jd.innerHTML = daten[jd_x];
         document.all.maya.innerHTML = daten[my_x];
         document.all.misr.innerHTML = daten[egypt_x];
         document.all.wt.innerHTML = daten[dow_x];
}


function evaluate_greg(greg_day,greg_month,greg_year,bc_ad_greg)
{
var help = Math.abs(greg_year);
if (bc_ad_greg == true) greg_year = parseInt(help) * (-1) + 1;
var jd = jd_from_greg(Math.abs(greg_day),adjusted_month_from_month(greg_month), 
         adjusted_year_from_year(greg_year,greg_month));
write_results(jd,greg_x);
}


function evaluate_jewish(jewish_day,jewish_month,jewish_year)
{
var jd = jd_from_jewish(Math.abs(jewish_day),jewish_month,Math.abs(jewish_year));
write_results(jd,jew_x);
}


function evaluate_julian(julian_day,julian_month,julian_year,bc_ad_jul)
{
var help = Math.abs(julian_year);
if (bc_ad_jul == true) julian_year = parseInt(help) * (-1) + 1;
var jd = jd_from_julian(Math.abs(julian_day),adjusted_month_from_month(julian_month),
         adjusted_year_from_year(julian_year,julian_month));
write_results(jd,jul_x);
}


function evaluate_jd(jd)
{
if (jd == "") jd = 0;
write_results(Math.abs(jd),jd_x);
}


function evaluate_mayan(pictun,baktun,katun,tun,uinal,kin)
{
var jd = 2880000 * Math.abs(pictun) + 144000 * Math.abs(baktun) + 7200 * Math.abs(katun) + 360 * Math.abs(tun) + 20 * Math.abs(uinal) + 1 * Math.abs(kin) + 584283;
write_results(jd,my_x);
}


function rechne_heute()
{
datum = new Date();
var t_today = datum.getDate();
var m_today = datum.getMonth();
var y_today = datum.getYear();
if (y_today < 1900) {y_today+=1900};
document.frm_datum.greg_day.value = t_today;
document.frm_datum.greg_month.options[m_today].selected = true;
document.frm_datum.greg_year.value = y_today;
m_today++;
evaluate_greg(t_today,m_today,y_today);
}


function schreibe_heute()
{
datum = new Date();
var t_today = datum.getDate();
var m_today = datum.getMonth();
var y_today = datum.getYear();
if (y_today < 1900) {y_today+=1900};
if (browser == browser_test)
{
document.all.hier.innerHTML=
  "<TABLE BORDER=\"2\" WIDTH=\"80%\">"
    + "<TR><TD WIDTH=\"35%\" CLASS=\"l\"><B><font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + vorne[dow_x]   + "</B></font></TD><TD CLASS=\"l\" id=\"wt\">   % </TD></TR>"
    + "<TR><TD WIDTH=\"35%\" CLASS=\"l\">   <font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + vorne[jd_x]    + "    </font></TD><TD CLASS=\"l\" id=\"jd\">   % </TD></TR>"
    + "<TR><TD WIDTH=\"35%\" CLASS=\"l\">   <font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + vorne[greg_x]  + "    </font></TD><TD CLASS=\"l\" id=\"greg\"> % </TD></TR>"
    + "<TR><TD WIDTH=\"35%\" CLASS=\"l\">   <font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + vorne[jul_x]   + "    </font></TD><TD CLASS=\"l\" id=\"jul\">  % </TD></TR>"
    + "<TR><TD WIDTH=\"35%\" CLASS=\"l\">   <font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + vorne[rom_x]   + "    </font></TD><TD CLASS=\"l\" id=\"rom\">  % </TD></TR>"
    + "<TR><TD WIDTH=\"35%\" CLASS=\"l\">   <font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + vorne[egypt_x] + "    </font></TD><TD CLASS=\"l\" id=\"misr\"> % </TD></TR>"
    + "<TR><TD WIDTH=\"35%\" CLASS=\"l\">   <font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + vorne[jew_x]   + "    </font></TD><TD CLASS=\"l\" id=\"jued\"> % </TD></TR>"
    + "<TR><TD WIDTH=\"35%\" CLASS=\"l\">   <font face=\"Verdana,Arial,Helvetica,sans serif\" size=\"+0\">" + vorne[my_x]    + "    </font></TD><TD CLASS=\"l\" id=\"maya\"> % </TD></TR>"
    + "</TABLE>"
;m_today++;
write_results(jd_from_greg(t_today,adjusted_month_from_month(m_today),adjusted_year_from_year(y_today,m_today)),0);
}
}