/*
Lunar phases, graphics, and DHTML
*/

function setup()
{
var nowdate = new Date();
var utc_day = nowdate.getUTCDate();
var utc_month = nowdate.getUTCMonth() + 1;
var utc_year = nowdate.getUTCFullYear();
zone = -(nowdate.getTimezoneOffset() / 60);
var utc_hours = nowdate.getUTCHours();
var utc_mins = nowdate.getUTCMinutes();
var utc_secs = nowdate.getUTCSeconds();
utc_mins += utc_secs / 60.0;
utc_mins = Math.floor((utc_mins + 0.5));
if (utc_mins < 10) utc_mins = "0" + utc_mins;
if (utc_mins > 59) utc_mins = 59;
if (utc_hours < 10) utc_hours = "0" + utc_hours;
if (utc_month < 10) utc_month = "0" + utc_month;
if (utc_day < 10) utc_day = "0" + utc_day;
document.moon.date_txt.value = utc_day + "/" + utc_month + "/" + utc_year;
document.moon.ut_h_m.value = utc_hours + ":" + utc_mins + " UT";
frac_day = utc_hours / 24 + utc_mins / 1440;
moon_phase();
}

function proper_ang(big)
{
with (Math)
{
var tmp = 0;
if (big > 0)
{
tmp = big / 360.0;
tmp = (tmp - floor(tmp)) * 360.0;
}
else
{
tmp = ceil(abs(big / 360.0));
tmp = big + tmp * 360.0;
}
}
return tmp;
}

function clear_phases()
{
day0_layer = 1;
day1_layer = 1;
day2_layer = 1;
day3_layer = 1;
day4_layer = 1;
day5_layer = 1;
day6_layer = 1;
day7_layer = 1;
day8_layer = 1;
day9_layer = 1;
day10_layer = 1;
day11_layer = 1;
day12_layer = 1;
day13_layer = 1;
day14_layer = 1;
day15_layer = 1;
day16_layer = 1;
day17_layer = 1;
day18_layer = 1;
day19_layer = 1;
day20_layer = 1;
day21_layer = 1;
day22_layer = 1;
day23_layer = 1;
day24_layer = 1;
day25_layer = 1;
day26_layer = 1;
day27_layer = 1;
day28_layer = 1;
day29_layer = 1;
}

function round_10(num)
{
return Math.floor((num + 0.05) * 10) / 10;
}

function round_100(num)
{
return Math.floor((num + 0.005) * 100) / 100;
}

function julian_date()
{
var dt_as_str, mm, dd, yy;
var yyy, mmm, a, b;

dt_as_str = document.moon.date_txt.value;

dd = eval(dt_as_str.substring(0,2));
mm = eval(dt_as_str.substring(3,5));
yy = eval(dt_as_str.substring(6,10));

with (Math) {
var yyy=yy;
var mmm=mm;
if (mm < 3)
{
yyy = yy - 1;
mmm = mm + 12;
}
a = floor(yyy/100);
b = 2 - a + floor(a/4);

return floor(365.25*yyy) + floor(30.6001*(mmm+1)) + dd + 1720994.5 + b;
}
}

function moon_phase()
{
with (Math) {

var RAD = 180 / PI;

clear_phases();

var jd = julian_date() + frac_day;

document.moon.julian_date.value = "JD " + jd;

var moon_days = 29.5306;
var D = jd + 1.1 / 1440 - 2444238.5;
var N = proper_ang(D / 1.01456167);
var M_sun = proper_ang(N - 3.762863);
var Ec = 1.91574168 * sin(M_sun / RAD)
var lambda_sun = proper_ang(N + Ec + 278.83354);
var l0 = 64.975464;
var P0 = 349.383063;
var N0 = 151.950429;
var i = 5.145396;
var e = 0.0549;
var l = proper_ang(13.1763966 * D + l0);
var Mm = proper_ang(l - 0.111404 * D - P0);
var N = proper_ang(N0 - 0.0529539 * D);
var Ev = 1.2739 * sin((2 * (l - lambda_sun) - Mm) / RAD);
var Ae = 0.1858 * sin(M_sun / RAD);
var A3 = 0.37 * sin(M_sun / RAD);
Mm = Mm + Ev - Ae - A3;
Ec = 6.2886 * sin(Mm / RAD);
var moon_distance = round_100((1 - pow(e,2)) / (1 + e * cos((Mm + Ec) / RAD)) * 238855.7);
var A4 = 0.214 * sin(2 * Mm / RAD);
l += Ev + Ec - Ae + A4;
l += 0.6583 * sin(2 * (l - lambda_sun) / RAD);
D = proper_ang(l - lambda_sun);
var age = D / 360 * moon_days;

document.moon.moon_age.value = "Age is " + round_100(age) + " days";

age = floor(age);

if (age == 0) day0_layer = 10;
if (age == 1) day1_layer = 10;
if (age == 2) day2_layer = 10;
if (age == 3) day3_layer = 10;
if (age == 4) day4_layer = 10;
if (age == 5) day5_layer = 10;
if (age == 6) day6_layer = 10;
if (age == 7) day7_layer = 10;
if (age == 8) day8_layer = 10;
if (age == 9) day9_layer = 10;
if (age == 10) day10_layer = 10;
if (age == 11) day11_layer = 10;
if (age == 12) day12_layer = 10;
if (age == 13) day13_layer = 10;
if (age == 14) day14_layer = 10;
if (age == 15) day15_layer = 10;
if (age == 16) day16_layer = 10;
if (age == 17) day17_layer = 10;
if (age == 18) day18_layer = 10;
if (age == 19) day19_layer = 10;
if (age == 20) day20_layer = 10;
if (age == 21) day21_layer = 10;
if (age == 22) day22_layer = 10;
if (age == 23) day23_layer = 10;
if (age == 24) day24_layer = 10;
if (age == 25) day25_layer = 10;
if (age == 26) day26_layer = 10;
if (age == 27) day27_layer = 10;
if (age == 28) day28_layer = 10;
if (age == 29) day29_layer = 10;

if (document.all)
{
document.all.day0.style.zIndex = day0_layer;
document.all.day1.style.zIndex = day1_layer;
document.all.day2.style.zIndex = day2_layer;
document.all.day3.style.zIndex = day3_layer;
document.all.day4.style.zIndex = day4_layer;
document.all.day5.style.zIndex = day5_layer;
document.all.day6.style.zIndex = day6_layer;
document.all.day7.style.zIndex = day7_layer;
document.all.day8.style.zIndex = day8_layer;
document.all.day9.style.zIndex = day9_layer;
document.all.day10.style.zIndex = day10_layer;
document.all.day11.style.zIndex = day11_layer;
document.all.day12.style.zIndex = day12_layer;
document.all.day13.style.zIndex = day13_layer;
document.all.day14.style.zIndex = day14_layer;
document.all.day15.style.zIndex = day15_layer;
document.all.day16.style.zIndex = day16_layer;
document.all.day17.style.zIndex = day17_layer;
document.all.day18.style.zIndex = day18_layer;
document.all.day19.style.zIndex = day19_layer;
document.all.day20.style.zIndex = day20_layer;
document.all.day21.style.zIndex = day21_layer;
document.all.day22.style.zIndex = day22_layer;
document.all.day23.style.zIndex = day23_layer;
document.all.day24.style.zIndex = day24_layer;
document.all.day25.style.zIndex = day25_layer;
document.all.day26.style.zIndex = day26_layer;
document.all.day27.style.zIndex = day27_layer;
document.all.day28.style.zIndex = day28_layer;
document.all.day29.style.zIndex = day29_layer;
}
else
{
if (document.layers)
{
document.layers["day0"].zIndex = day0_layer;
document.layers["day1"].zIndex = day1_layer;
document.layers["day2"].zIndex = day2_layer;
document.layers["day3"].zIndex = day3_layer;
document.layers["day4"].zIndex = day4_layer;
document.layers["day5"].zIndex = day5_layer;
document.layers["day6"].zIndex = day6_layer;
document.layers["day7"].zIndex = day7_layer;
document.layers["day8"].zIndex = day8_layer;
document.layers["day9"].zIndex = day9_layer;
document.layers["day10"].zIndex = day10_layer;
document.layers["day11"].zIndex = day11_layer;
document.layers["day12"].zIndex = day12_layer;
document.layers["day13"].zIndex = day13_layer;
document.layers["day14"].zIndex = day14_layer;
document.layers["day15"].zIndex = day15_layer;
document.layers["day16"].zIndex = day16_layer;
document.layers["day17"].zIndex = day17_layer;
document.layers["day18"].zIndex = day18_layer;
document.layers["day19"].zIndex = day19_layer;
document.layers["day20"].zIndex = day20_layer;
document.layers["day21"].zIndex = day21_layer;
document.layers["day22"].zIndex = day22_layer;
document.layers["day23"].zIndex = day23_layer;
document.layers["day24"].zIndex = day24_layer;
document.layers["day25"].zIndex = day25_layer;
document.layers["day26"].zIndex = day26_layer;
document.layers["day27"].zIndex = day27_layer;
document.layers["day28"].zIndex = day28_layer;
document.layers["day29"].zIndex = day29_layer;
}
else
{
if (document.getElementById)
{
document.getElementById("day0").style.zIndex = day0_layer;
document.getElementById("day1").style.zIndex = day1_layer;
document.getElementById("day2").style.zIndex = day2_layer;
document.getElementById("day3").style.zIndex = day3_layer;
document.getElementById("day4").style.zIndex = day4_layer;
document.getElementById("day5").style.zIndex = day5_layer;
document.getElementById("day6").style.zIndex = day6_layer;
document.getElementById("day7").style.zIndex = day7_layer;
document.getElementById("day8").style.zIndex = day8_layer;
document.getElementById("day9").style.zIndex = day9_layer;
document.getElementById("day10").style.zIndex = day10_layer;
document.getElementById("day11").style.zIndex = day11_layer;
document.getElementById("day12").style.zIndex = day12_layer;
document.getElementById("day13").style.zIndex = day13_layer;
document.getElementById("day14").style.zIndex = day14_layer;
document.getElementById("day15").style.zIndex = day15_layer;
document.getElementById("day16").style.zIndex = day16_layer;
document.getElementById("day17").style.zIndex = day17_layer;
document.getElementById("day18").style.zIndex = day18_layer;
document.getElementById("day19").style.zIndex = day19_layer;
document.getElementById("day20").style.zIndex = day20_layer;
document.getElementById("day21").style.zIndex = day21_layer;
document.getElementById("day22").style.zIndex = day22_layer;
document.getElementById("day23").style.zIndex = day23_layer;
document.getElementById("day24").style.zIndex = day24_layer;
document.getElementById("day25").style.zIndex = day25_layer;
document.getElementById("day26").style.zIndex = day26_layer;
document.getElementById("day27").style.zIndex = day27_layer;
document.getElementById("day28").style.zIndex = day28_layer;
document.getElementById("day29").style.zIndex = day29_layer;
}
}
}

}
}

