﻿
function intr(num) {
  with (Math) {
    num = floor(num)
  }
  return num
}
//
//    This function returns a numeric value.
//
function NumFloat(num) {
  with (Math) {
    var temp = parseFloat(num)
    if (!(temp > 0 || temp < 0 || temp == 0)) temp = 0
  }
  return temp
}
//
//    This function rounds a number by specified decimals.
//
function rnd(num,num2) {
  with (Math) {
    num = round(num*pow(10,num2)) / pow(10,num2)
  }
  return num
}
//
//    This function return the sign of a number.
//
function sgn(num) {
  if (num < 0) return -1
  if (num > 0) return 1
  return 0
}
//
//    DD.MMSS to degrees: HH.MMSS to HH.HHHHH
//
function deg(a) {
  with (Math) {
    var a1, a2, a3, mm, sign, ss
    sign = 1
    if (a < 0) {
      a = -1 * a
      sign = -1
    }
    a1 = intr(a)
    mm = (a - a1) * 100
    a2 = intr(mm)
    ss = (mm - a2) * 100
    a3 = ss
  }
  return sign * (a1 + a2 / 60 + a3 / 3600)
}
//
//    Degrees to DD.MMSS: HH.HHHHH to HH.MMSS
//
function dms(a) {
  with (Math) {
    var a1, a2, a3, mm, sign, ss
    sign = 1
    if (a < 0) {
      a = -1 * a
      sign = -1
    }
    a1 = intr(a)
    mm = (a - a1) * 60
    a2 = intr(mm)
    ss = (mm - a2) * 60
    a3 = intr(ss)
  }
  return sign * (a1 + a2 / 100 + a3 / 10000)
}
//
//    Mathematic section exit.
//
//    Cookie sectiom.
//
//    This function creates/updates a cookie value.
//
function SetCookie(name, value, expires, path, domain, secure) {
  document.cookie = name + "=" + escape(value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path)    ? "; path="    + path : "") +
    ((domain)  ? "; domain="  + domain : "") + ((secure)  ? ": secure="  + secure : "")
}
//
//    This function returns a cookie value.
//
function GetCookie(name) {
  var arg = name + "="
  var alen = arg.length
  var clen = document.cookie.length
  var i = 0
  while (i < clen) {
    var j = i + alen
    if (document.cookie.substring(i, j) == arg) {
      var cend = document.cookie.indexOf(":", j)
      if (cend == -1) cend = document.cookie.length
      return unescape(document.cookie.substring(j, cend))
    }
    i = document.cookie.indexOf(" ", i) + 1
    if (i == 0) break
  }
  return null
}
//
//    Cookie section exit.
//
//  ***************************
//  THIS PROGRAM COMPUTES THE
//  TIMES OF MOONRISE AND MOON-
//  SET ANYWHERE IN THE WORLD.
//  FROM SKY & TELESCOPE, JULY,
//  1989, PAGE 78.
//  ***************************
//
function moon_up(dte, lat, lon, zone) {
  with (Math) {

    msg = ""

    p1 = 3.14159265 ; p2 = 2 * p1
    r1 = p1 / 180 ; k1 = 15 * r1 * 1.0027379

    b5 = deg(lat) ; l5 = deg(lon) / 360 ; z0 = zone / 24

    moon_jd() ; t = (j - 2451545) + f
    moon_lst() ; t = t + z0

    for (i = 1 ; i <= 3 ; i++) {
      moon_init() ; m1[i] = a5
      m2[i] = d5 ; m3[i] = r5 ; t = t + .5
    }
    if (m1[2] <= m1[1]) m1[2] = m1[2] + p2
    if (m1[3] <= m1[2]) m1[3] = m1[3] + p2
    z1 = r1 * (90.567 - 41.685 / m3[2])
    s = sin(b5 * r1) ; c = cos(b5 * r1)
    z = cos(z1) ; m8 = 0 ; w8 = 0
    a0 = m1[1] ; d0 = m2[1]
    for (c0 = 0 ; c0 <= 23 ; c0++) {
      p = (c0 + 1) / 24
      f0 = m1[1] ; f1 = m1[2] ; f2 = m1[3]
      moon_flt() ; a2 = f
      f0 = m2[1] ; f1 = m2[2] ; f2 = m2[3]
      moon_flt() ; d2 = f
      moon_hour() ; a0 = a2 ; d0 = d2 ; v0 = v2
    }
    // special message routine
    if (m8 != 0 && w8 != 0) {
      if (m8 == 0) msg = msg + " No moonrise this date"
      if (w8 == 0) msg = msg + " No moonset this date"
    }
    else {
      if (v2 < 0) msg = msg + " Moon down all day"
      if (v2 > 0) msg = msg + " Moon up all day"
    }
  }
}
//
//     moonup routines section.
//
//    3 point interpolation
function moon_flt() {
  with (Math) {
    a = f1 - f0 ; b = f2 - f1 - a
    f = f0 + p * (2 * a + b * (2 * p - 1))
  }
}
// lst at 0h zone time
function moon_lst() {
  with (Math) {
    t0 = t / 36525
    s = 24110.5 + 8640184.812999999 * t0
    s = s + 86636.6 * z0 + 86400 * l5
    s = s / 86400 ; s = s - intr(s)
    t0 = s * 360 * r1
  }
}
//     Test an hour for an event
function moon_hour() {
  with (Math) {
    l0 = t0 + c0 * k1 ; l2 = l0 + k1
    if (a2 < a0) a2 = a2 + 2 * p1
    h0 = l0 - a0 ; h2 = l2 - a2
    h1 = (h2 + h0) / 2 // hour angle
    d1 = (d2 + d0) / 2 // dec
    if (c0 <=0) v0 = s * sin(d0) + c * cos(d0) * cos(h0) - z
    v2 = s * sin(d2) + c * cos(d2) * cos(h2) - z
    if (sgn(v0) == sgn(v2)) return
    v1 = s * sin(d1) + c * cos(d1) * cos(h1) - z
    a = 2 * v2 - 4 * v1 + 2 * v0 ; b = 4 * v1 - 3 * v0 - v2
    d = b * b - 4 * a * v0 ; if (d < 0) return
    d = sqrt(d)
    if (v0 < 0 && v2 > 0) {msg = msg + " Moonrise:" ; m8 = 1}
    if (v0 > 0 && v2 < 0) {msg = msg + "Moonset:" ; w8 = 1}
    e = (-1 * b + d) / (2 * a)
    if (e > 1 || e < 0) e = (-1 * b - d) / (2 * a)
    t3 = c0 + e + 1 / 120    // round off
    h3 = intr(t3) ; mr = intr((t3 - h3) * 60)
    am = "am" ; if (h3 > 12) {h3 = h3 - 12 ; am="pm"}
    bm = ""   ; if (mr < 10) bm = "0"
    msg = msg + h3 + ":" + bm + mr + am

    h7 = h0 + e * (h2 - h0)
    n7 = -1 * cos(d1) * sin(h7)
    d7 = c * sin(d1) - s * cos(d1) * cos(h7)
    a7 = atan(n7 / d7) / r1
    if (d7 < 0) a7 = a7 + 180
    if (a7 < 0) a7 = a7 + 360
    if (a7 > 360) a7 = a7 - 360

    a7 = rnd(a7,2)
    //msg = msg + ",  az " + a7
  }
}
// Fundamental Arguments
function moon_init() {
  with (Math) {
    l = .606434 + .03660110129 * t
    m = .374897 + .03629164709 * t
    f = .259091 + .0367481952 * t
    d = .827362 + .03386319198 * t
    n = .347343 - .00014709391 * t
    g = .993126 + .0027377785 * t
    l = l - intr(l) ; m = m - intr(m)
    f = f - intr(f) ; d = d - intr(d)
    n = n - intr(n) ; g = g - intr(g)
    l = l * p2 ; m = m * p2 ; f = f * p2
    d = d * p2 ; n = n * p2 ; g = g * p2
    v = .39558 * sin(f + n)
    v = v + .082 * sin(f)
    v = v + .03257 * sin(m - f - n)
    v = v + .01092 * sin(m + f + n)
    v = v + .00666 * sin(m - f)
    v = v - .00644 * sin(m + f - 2 * d + n)
    v = v - .00331 * sin(f - 2 * d + n)
    v = v - .00304 * sin(f - 2 * d)
    v = v - .0024 * sin(m - f - 2 * d - n)
    v = v + .00226 * sin(m + f)
    v = v - .00108 * sin(m + f - 2 * d)
    v = v - .00079 * sin(f - n)
    v = v + .00078 * sin(f + 2 * d + n)
    u = 1 - .10828 * cos(m)
    u = u - .0188 * cos(m - 2 * d)
    u = u - .01479 * cos(2 * d)
    u = u + .00181 * cos(2 * m - 2 * d)
    u = u - .00147 * cos(2 * m)
    u = u - .00105 * cos(2 * d - g)
    u = u - .00075 * cos(m - 2 * d + g)
    w = .10478 * sin(m)
    w = w - .04105 * sin(2 * f + 2 * n)
    w = w - .0213 * sin(m - 2 * d)
    w = w - .01779 * sin(2 * f + n)
    w = w + .01774 * sin(n)
    w = w + .00987 * sin(2 * d)
    w = w - .00338 * sin(m - 2 * f - 2 * n)
    w = w - .00309 * sin(g)
    w = w - .0019 * sin(2 * f)
    w = w - .00144 * sin(m + n)
    w = w - .00144 * sin(m - 2 * f - n)
    w = w - .00113 * sin(m + 2 * f + 2 * n)
    w = w - .00094 * sin(m - 2 * d + g)
    w = w - .00092 * sin(2 * m - 2 * d)
    //  Compute ra, dec, dist
    s = w / sqrt(u - v * v)
    a5 = l + atan(s / sqrt(1 - s * s))
    s = v / sqrt(u) ; d5 = atan(s / sqrt(1 - s * s))
    r5 = 60.40974 * sqrt(u)
  }
}
//  Calendar --> JD
function moon_jd() {
  with (Math) {
    y = NumFloat(dte.getYear()) + 1900 ; if (y >= 3900) y = y - 1900
    m = NumFloat(dte.getMonth())+1
    d = NumFloat(dte.getDate())

    g = 1 ; if (y < 1582) g = 0
    d1 = intr(d) ; f = d - d1 - .5
    j = -1 * intr(7 * (intr((m + 9) / 12) + y) / 4)
    if (g != 0) {
      s = sgn(m - 9) ; a = abs(m - 9)
      j3 = intr(y + s * intr(a / 7))
      j3 = -1 * intr((intr(j3 / 100) + 1) * 3 / 4)
    }
    j = j + intr(275 * m / 9) + d1 + g * j3
    j = j + 1721027 + 2 * g + 367 * y
    if (f < 0) {f = f + 1 ; j = j - 1}
  }
}
//
//     moonup routines section exit.
//     by Matt Oltersdorf, 2000 04 10 13:44, Medina, Ohio
//    The purpose of this function is to return all calculations.
//
function calculate(form) {
  with (Math) {

    dte = new Date(form.dte.value)
    if (form.dte.value == "") dte = new Date()
    var mon = NumFloat(dte.getMonth()) + 1
    var day = dte.getDate()
    var year = NumFloat(dte.getYear()) + 1900 ; if (year >= 3900) year = year - 1900
    form.dte.value = "" + mon + "/" + day + "/" + year

    zone = NumFloat(form.zone.value)

    lat = NumFloat(form.lat.value)
    lon = NumFloat(form.lon.value)
    if (lat == 0 && lon == 0) {alert("Latitude/Longitude cannot be zero") ; return}
    if (lat != NumFloat(GetCookie("mas_lat"))) SetCookie("mas_lat", "" + lat, expdte)
    if (lon != NumFloat(GetCookie("mas_lon"))) SetCookie("mas_lon", "" + lon, expdte)

    moon_up(dte, lat, lon, zone)
    //document.getElementById("<%= text.ClientID %>");
    document.getElementById('<%lblMoonrs.ClientID %>').value = msg;

    //form.msg.value = msg
  }
}
//
//     moonup routines section exit.
//     by Matt Oltersdorf, 2000 04 10 13:44, Medina, Ohio
//    The purpose of this function is to return all calculations. Added by Aydın KAYVAL 10 Feb 2009
//
function calculate2(form,pdte, plat, plon, pzone) {
  with (Math) {

    dte = new Date(pdte)
    if (pdte == "") dte = new Date()
    var mon = NumFloat(dte.getMonth()) + 1
    var day = dte.getDate()
    var year = NumFloat(dte.getYear()) + 1900 ; if (year >= 3900) year = year - 1900
    //form.dte.value = "" + mon + "/" + day + "/" + year

    zone = NumFloat(pzone)

    lat = NumFloat(plat)
    lon = NumFloat(plon)
    if (lat == 0 && lon == 0) {alert("Latitude/Longitude cannot be zero") ; return}
    if (lat != NumFloat(GetCookie("mas_lat"))) SetCookie("mas_lat", "" + lat, expdte)
    if (lon != NumFloat(GetCookie("mas_lon"))) SetCookie("mas_lon", "" + lon, expdte)

    moon_up(dte, lat, lon, zone)
    //return msg
//    form.msg.value = msg
document.getElementById("ctl00_ContentPlaceHolder1_lblMoonrs").innerText =msg
//document.getElementById("msg").value=msg
  }
}
function calculate3(pdte, plat, plon, pzone) {
  with (Math) {

    dte = new Date(pdte)
    if (pdte == "") dte = new Date()
    var mon = NumFloat(dte.getMonth()) + 1
    var day = dte.getDate()
    var year = NumFloat(dte.getYear()) + 1900 ; if (year >= 3900) year = year - 1900
    //form.dte.value = "" + mon + "/" + day + "/" + year

    zone = NumFloat(pzone)

    lat = NumFloat(plat)
    lon = NumFloat(plon)
    //if (lat == 0 && lon == 0) {alert("Latitude/Longitude cannot be zero") ; return}
    //if (lat != NumFloat(GetCookie("mas_lat"))) SetCookie("mas_lat", "" + lat, expdte)
    //if (lon != NumFloat(GetCookie("mas_lon"))) SetCookie("mas_lon", "" + lon, expdte)

    moon_up(dte, lat, lon, zone)
//document.getElementById("ctl00_ContentPlaceHolder1_lblMoonrs").innerText =msg
//alert(msg)
    return msg
//    form.msg.value = msg
//document.getElementById("msg").value=msg
  }
}
// PUBLIC variables

var a = 0 ; var a0 = 0 ; var a1 = 0 ; var a2 = 0              ; var a5 = 0 ; var a7 = 0 ; var am = 0
var b = 0                                                     ; var b5 = 0              ; var bm = 0
var c = 0 ; var c0 = 0
var d = 0 ; var d0 = 0 ; var d1 = 0 ; var d2 = 0              ; var d5 = 0 ; var d7 = 0
var e = 0
var f = 0 ; var f0 = 0 ; var f1 = 0 ; var f2 = 0
var g = 0              ; var g1 = 0
            var h0 = 0 ; var h1 = 0 ; var h2 = 0 ; var h3 = 0              ; var h7 = 0
var i = 0
var j = 0                                        ; var j3 = 0
                         var k1 = 0              ; var k3 = 0
            var l0 = 0 ; var l1 = 0 ; var l2 = 0              ; var l5 = 0
var m = 0                                                                               ; var m8 = 0 ; var mr = 0
var n = 0 ; var n0 = 0 ; var n1 = 0 ; var n7 = 0
var p = 0 ; var p1 = 0              ; var p2 = 0
            var r1 = 0                                        ; var r5 = 0
var s = 0
var t = 0 ; var t0 = 0 ; var t1 = 0 ; var t2 = 0 ; var t3 = 0
var u = 0
var v = 0 ; var v0 = 0 ; var v1 = 0 ; var v2 = 0
var w = 0                                                                               ; var w8 = 0
var y = 0
var z = 0 ; var z0 = 0 ; var z1 = 0

var m1 = new Array() ; m1[1] = 0 ; m1[2] = 0 ; m1[3] = 0
var m2 = new Array() ; m2[1] = 0 ; m2[2] = 0 ; m2[3] = 0
var m3 = new Array() ; m3[1] = 0 ; m3[2] = 0 ; m3[3] = 0

var msg = ""

var dte, zone, lat, lon, newdte, expdte
dte = new Date()
zone = Math.round(NumFloat(dte.getTimezoneOffset() / 60))

lat = NumFloat(GetCookie("mas_lat"))
lon = NumFloat(GetCookie("mas_lon"))

newdte = new Date()
expdte = new Date(newdte.getTime() + 2 * 365 * 24 * 60 * 60 * 1000)  // Plus 2 years

//
//    The purpose of this function is to initializr all form variables.
function loadit() {
  with (Math) {
    document.moon.zone.value = "" + zone
    document.moon.lat.value = "" + lat
    document.moon.lon.value = "" + lon
  }
}
