var e = "?";
var sp = " ";
var greg_x = 0;
var jul_x = 1;
var jd_x = 2;
var my_x = 3;
var mya_x = 4;
var myb_x = 5;
var dow_x = 6;
var last = 6;

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};
 document.all.hier.innerHTML="<p></p><table width=\"100%\"><tr><td class=\"smalll\">" + vorne[greg_x] + "</td><td class=\"smalll\" id=\"greg\">%</td></tr><tr><td class=\"smalll\">" + vorne[jul_x] + "</td><td class=\"smalll\" id=\"jul\">%</td></tr><tr><td class=\"smalll\">" + vorne[jd_x] + "</td><td class=\"smalll\" id=\"jd\">%</td></tr><tr><td class=\"smalll\">" + vorne[my_x] + "</td><td class=\"smalll\" id=\"maya\">%</td></tr><tr><td class=\"smalll\">" + vorne[mya_x] + "</td><td class=\"smalll\" id=\"mayaa\">%</td></tr><tr><td class=\"smalll\">" + vorne[myb_x] + "</td><td class=\"smalll\" id=\"mayab\">%</td></tr><tr><td class=\"smalll\">" + vorne[dow_x] + "</td><td class=\"smalll\" id=\"wt\">%</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);}

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 evaluate_greg(greg_day,greg_month,greg_year){
 var jd = jd_from_greg(Math.abs(greg_day),adjusted_month_from_month(greg_month), adjusted_year_from_year(Math.abs(greg_year),greg_month));
write_results(jd,greg_x);}

function evaluate_julian(julian_day,julian_month,julian_year,vuz){
 var help = Math.abs(julian_year);
 if (vuz == 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 write_results(jd, x){
         var daten = new Array(last);
         for (q2 = 0; q2 <= last; q2++)
         {
             daten[q2] = "";
         }
         if (jd > -1)
         {
            daten[greg_x] = greg_from_jd(jd);
            daten[jul_x] = julian_from_jd(jd);
            daten[jd_x] = jd;
            daten[my_x] = long_count_from_jd(jd);
            daten[mya_x] = tzolkin_from_jd(jd);
            daten[myb_x] = koessner_from_jd(jd);
            daten[dow_x] = dow_from_jd(jd);
         }
         else
         {
             var q1 = 0;
             do
             {
                 daten[q1] = not_supported;
                 q1++;
             }
             while (q1 <= last);
         }
         if (jd == "") {jd = 0;}
          if ((jd < 584283) || (jd > 58184282))
         {
            daten[my_x] = not_supported;
         }
         if (jd < 2299161)
         {
            daten[greg_x] = "<em>" + daten[greg_x] + "</em> (" + not_supported + ")";
         }
         if (jd < 1718867)
         {
            daten[jul_x] = "<em>" + daten[jul_x] + "</em>";
         }
         var q1 = 0;
         do
         {
             if (q1 == x) {daten[q1] = "<strong>" + daten[q1] + "</strong>";}
             q1++;
         }
         while (q1 <= last);
         document.all.greg.innerHTML = daten[greg_x];
         document.all.jul.innerHTML = daten[jul_x];
         document.all.jd.innerHTML = daten[jd_x];
         document.all.maya.innerHTML = daten[my_x];
         document.all.mayaa.innerHTML = daten[mya_x];
         document.all.mayab.innerHTML = daten[myb_x];
         document.all.wt.innerHTML = daten[dow_x];
}

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 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) + vuz;
 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) + vuz;
 else var result = t + pt + months[m] + sp + 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 + " {" + m + "}";
return result;}

function tzolkin_from_jd(jd){
 var n = jd + 136;
 var zahl_tzolkin = ((n - 1) % 13) + 1 * 1;
 var name_tzolkin = mayan_day[n % 20];
 var kin_tzolkin = ((n - 40) % 260) + 1 * 1;
 var m = jd + 65;
 var p = m % 365;
 var name_haab = mayan_month[division(p,20)];
 var zahl_haab = p % 20;
 var tag_haab = p;
 var q = jd + 4097;
 var tag_52 = q % 18980;
 var jahr_52 = division(q,18980) - 31;
 var result =  zahl_tzolkin + "'" + name_tzolkin + " {KIN " + kin_tzolkin + "}  -  " + zahl_haab + ". " + name_haab + " {" + tag_haab + ".Tag}  -  {" + tag_52 + " + " + jahr_52 + " x (52 x 365)}";
return result;}

function koessner_from_jd(jd){
 var kd = division((jd + 1363.63 + 0.000001),1460.97);
 var ke = division((jd + 32044 + 0.000001),36524.25);
 var kf = division((jd + 32044 + 0.000001),146097);
 var ks = kd - ke + kf;
 var k = jd - ks + 214;
 var zahl_koessner = ((k + 0) % 13) + 1 * 1;
 var name_koessner = mayan_day[k % 20];
 var kin_koessner = (k % 260) + 1;
 var result =  zahl_koessner + "'" + name_koessner + " {KIN " + kin_koessner + "}";
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 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 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 division(zaehler,nenner){
 var quotient = zaehler / nenner;
 var rest = zaehler % nenner;
 var result = Math.round(quotient - (rest / nenner));
return result;}

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 elapsed_time235(year){
 var t = new Array(6939,16,595);
 var moladot = division(year,19);
 var result = dhp_mult(moladot,t);
return result;}

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_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_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 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}
