function calcDrake(){
var f = document.frmMain;
//R* × fp × ne × fl × fi × fc × L
R = f.Rstar.value;
fp = f.fp.value;
ne = f.ne.value;
fl = f.fl.value;
fi = f.fi.value;
fc = f.fc.value;
L  = f.L.value;

var N = R * fp * ne * ( fl / 100 ) * ( fi / 100 ) * (fc / 100) * L
//alert( R + ' ' + fp + ' ' + ne + ' ' + fl )
alert( 'The number of civilizations in our galaxy, with which we might hope to be able to communicate is ' + N )
}

function getStandardTimezoneOffset() {
  var dte = new Date()
  var msec = dte.getTime()
  var offset = -999999
  for (var j = 0 ; j < 4 ; ++j) {
    dte.setTime(msec + j * 7884000000)
    offset = Math.max(offset, dte.getTimezoneOffset())
  }
  return offset
}
//
//    Mathematic section.
//
//    This function returns the integer of a number.
//
function intr(num) {
  with (Math) {
    var n = floor(abs(num)) ; if (num < 0) n = n * -1
  }
  return n
}
//
//    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
}
//
//  This function returns cubit root
//
function cbrt(x) {
  with (Math) {
    if (x > 0) return exp(log(x)/3)
    if (x < 0) return -cbrt(-x)
    return 0.0
  }
}
//
//    Decimal to radian
//
function dtor(num) {
  with (Math) {
    return num / 57.29577951
  }
}
//
//    Radian to decimal
//
function rtod(num) {
  with (Math) {
    return num * 57.29577951
  }
}
//
//    Decimal sine
//
function dsin(num) {
  with (Math) {
    return sin(dtor(num))
  }
}
//
//    Decimal cosine
//
function dcos(num) {
  with (Math) {
    return cos(dtor(num))
  }
}
//
//    Decimal tangent
//
function dtan(num) {
  with (Math) {
    return tan(dtor(num))
  }
}
//
//    Decimal arcsine
//
function dasn(num) {
  with (Math) {
    var y
    if (num == 1) {
      y = 1.570796327
      }
    else {
      y = atan(num/ sqrt(-1 * num * num + 1))
    }
  }
  return rtod(y)
}
//
//    Decimal arccosine
//
function dacs(num) {
  with (Math) {
    var y
    if (num == 1) {
      y = 0
      }
    else {
      y = 1.570796327 - atan(num / sqrt(-1 * num * num + 1))
    }
  }
  return rtod(y)
}
//
//    Decimal arctangent
//
function datan(num) {
  with (Math) {
    return rtod(atan(num))
  }
}
//
//    Decimal arctangent2
//
function datan2(y, x) {
  with (Math) {
    return rtod(atan2(y,x))
  }
}
//
//    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 ; mm = rnd(mm,6)
    a2 = intr(mm)
    ss = (mm - a2) * 100 ; ss = rnd(ss,6)
    a3 = ss
  }
  return sign * (a1 + a2 / 60 + a3 / 3600)
}
//
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 ; mm = rnd(mm,6)
    a2 = intr(mm)
    ss = (mm - a2) * 60 ; ss = rnd(ss,6)
    a3 = intr(ss)
  }
  return sign * (a1 + a2 / 100 + a3 / 10000)
}
//
//    returns string version of dms(), degree format
//
function DMS(x, sf) {
  var temp = dms(Math.abs(x))
  var hr = intr(temp) ; temp = (temp - hr) * 100 ; temp = rnd(temp,6)
  var mn = intr(temp) ; temp = (temp - mn) * 100 ; temp = rnd(temp,6)
  if (mn < 10) mn = "0" + mn

  var sc = intr(temp) ; if (sc < 10) sc = "0" + sc
  var tmp = (sgn(x)==-1) ? "-" : ""
  var tmp2 = (sf == true) ? "&#034;" : '&#34;'
  return tmp + hr + "&deg;" + mn + "&#39;"; // + sc + tmp2
}
//
//    returns string version of dms(), am/pm time format
//
function DMSt(x) {
  var temp = dms(Math.abs(x))
  var hr = intr(temp) ; temp = (temp - hr) * 100 ; temp = rnd(temp,6)
  var mn = intr(temp) ; temp = (temp - mn) * 100 ; temp = rnd(temp,6)
  //var am = "am" ; if (hr >= 12) {hr = hr - 12 ; am="pm"}
  if (hr == 0) hr = 12 // DA fix 03/24/01
  if (mn < 10) mn = "0" + mn
  return hr + ":" + mn + " " //+ am
}
//
//    returns string version of dms(), time format
//
function DMST(x) {
  var temp = dms(Math.abs(x))
  var hr = intr(temp) ; temp = (temp - hr) * 100 ; temp = rnd(temp,6)
  var mn = intr(temp) ; temp = (temp - mn) * 100 ; temp = rnd(temp,6)
  if (mn < 10) mn = "0" + mn
  var sc = intr(temp) ; if (sc < 10) sc = "0" + sc
  var tmp = (sgn(x)==-1) ? "-" : ""
  return tmp + hr + ":" + mn ; // + ":" + sc
}
//
//  This function returns logarithm, base 10.
//
function log10(x) {
  return Math.LOG10E * Math.log(x)
}
//
//  This function normalizes the number to 360 degrees
//
function rev(x) {
  return  x - Math.floor(x/360.0)*360.0
}
//
//    Mathematic section exit.
//
//    Planet routines section.
//
//    This function returns the julian time, given the date and time zone.
//
function julian(dte, zone) {
  var ut = dte.getHours() + dte.getMinutes() / 100 + dte.getSeconds() / 10000
  ut = deg(ut) + zone

  var y = NumFloat(dte.getYear()) + 1900 ; if (y >= 3900) y = y - 1900
  var m = NumFloat(dte.getMonth())+1
  var d = NumFloat(dte.getDate()) + ut/24

  if (m<=2) {m=m+12 ; y=y-1}
  var A = intr(y/100)
  var B = 2 - A + intr(A/4) ; if (y<1582) B=0
  if (y < 0) {
    var C = intr((365.25*y)-.75)
  } else {
    var C = intr(365.25*y)
  }
  var D = intr(30.6001 * (m + 1))
  return rnd(B + C + D + d + 1720994.5, 6)
}
//
// returns date object from string.  Example: "2002 Mar. 18.9833"
//
function newDate(obj) {
  var x = 0 ; while (obj.substr(x,1) == " ") {x++}
  var r = obj.substr(x)

  var y = parseFloat(r)
  var x = r.indexOf(" ") ; if (x == -1) return null
  r = r.substr(x+1)

  var m = 0
  var month = new Array()
  month[1] = "Jan"
  month[2] = "Feb"
  month[3] = "Mar"
  month[4] = "Apr"
  month[5] = "May"
  month[6] = "Jun"
  month[7] = "Jul"
  month[8] = "Aug"
  month[9] = "Sep"
  month[10] = "Oct"
  month[11] = "Nov"
  month[12] = "Dec"
  for (var i = 1 ; i <= 12 ; i++) {
    if (r.toLowerCase().substr(0,3) == month[i].toLowerCase()) {m = i ; break}
  }
  var x = r.indexOf(" ") ; if (x == -1) return null
  r = r.substr(x+1)

  var d = intr(parseFloat(r))

  var x = r.indexOf(".") ; if (x == -1) return null
  r = "0"+r.substr(x) ; r = dms(parseFloat(r)*24)
  var hr = intr(r) ; r = (r - hr) * 100 ; r = rnd(r,6)
  var mn = intr(r) ; r = (r - mn) * 100 ; r = rnd(r,6)
  var sc = intr(r)
  return new Date(y,m-1,d,hr,mn,sc)
}
//
//    This function returns location of a user defined object
//
function object(desc, frm1, frm2) {
  var prec = 3.82394E-5 * (365.2422 * (udoNe - 2000) - d)

  N = udoN - prec
  w = udow
  i = udoi

  e = udoe
  q = udoq
  k = 0.01720209895

  D = julian(udoT, zone+dst) - 2451543.5

  if (e < 0.9999 || e > 1.0001) {
    // elliptical only
    a = q / (1 - e)
    M = (180/Math.PI) * (d - D) * k / Math.sqrt(a*a*a)
    if (!isNaN(M)) {planet(desc, frm1, frm2) ; return}
  }
  // parabolic
  a = 1.5 * (d - D) * k / Math.sqrt(2 * q*q*q)
  b = Math.sqrt(1 + a*a)
  w0 = cbrt(b + a) - cbrt(b - a)

  v = 2 * datan(w0)
  r = q * (1 + w0*w0)
  planet(desc, frm1, frm2, v, r)
}
//
//    This function adjusts object for perbutations
//
function perturbations(desc) {
  var x = px ; var y = py ; var z = pz

  var lonecl = rev(datan2(y,x))
  var latecl = datan2(z, Math.sqrt(x*x + y*y))
  var r = Math.sqrt(x*x + y*y + z*z)

  if (desc == "Moon") {
    var Mm = rev(M)
    var Lm = rev(N + w + M)
    var D = Lm - Ls
    var F = Lm - N
    lonecl = lonecl - 1.274 * dsin(Mm - 2*D)
    lonecl = lonecl + 0.658 * dsin(2*D)
    lonecl = lonecl - 0.186 * dsin(Ms)
    lonecl = lonecl - 0.059 * dsin(2*Mm - 2*D)
    lonecl = lonecl - 0.057 * dsin(Mm - 2*D + Ms)
    lonecl = lonecl + 0.053 * dsin(Mm + 2*D)
    lonecl = lonecl + 0.046 * dsin(2*D - Ms)
    lonecl = lonecl + 0.041 * dsin(Mm - Ms)
    lonecl = lonecl - 0.035 * dsin(D)
    lonecl = lonecl - 0.031 * dsin(Mm + Ms)
    lonecl = lonecl - 0.015 * dsin(2*F - 2*D)
    lonecl = lonecl + 0.011 * dsin(Mm - 4*D)

    latecl = latecl - 0.173 * dsin(F - 2*D)
    latecl = latecl - 0.055 * dsin(Mm - F - 2*D)
    latecl = latecl - 0.046 * dsin(Mm + F - 2*D)
    latecl = latecl + 0.033 * dsin(F + 2*D)
    latecl = latecl + 0.017 * dsin(2*Mm + F)

    r = r - 0.58 * dcos(Mm - 2*D)
    r = r - 0.46 * dcos(2*D)

    // needed for phase
    // mlon = lonecl
    // mlat = latecl
  }
  if (desc == "Jupiter") {
    var Mjp = rev(19.8950 + 0.0830853001 * d)
    var Mst = rev(316.9670 + 0.0334442282 * d)
    var Mun = rev(142.5905 + 0.011725806  * d)
    lonecl = lonecl - 0.332 * dsin(2*Mjp - 5*Mst - 67.6)
    lonecl = lonecl - 0.056 * dsin(2*Mjp - 2*Mst + 21)
    lonecl = lonecl + 0.042 * dsin(3*Mjp - 5*Mst + 21)
    lonecl = lonecl - 0.036 * dsin(Mjp - 2*Mst)
    lonecl = lonecl + 0.022 * dcos(Mjp - Mst)
    lonecl = lonecl + 0.023 * dsin(2*Mjp - 3*Mst + 52)
    lonecl = lonecl - 0.016 * dsin(Mjp - 5*Mst - 69)
  }
  if (desc == "Saturn") {
    var Mjp = rev(19.8950 + 0.0830853001 * d)
    var Mst = rev(316.9670 + 0.0334442282 * d)
    var Mun = rev(142.5905 + 0.011725806  * d)
    lonecl = lonecl + 0.812 * dsin(2*Mjp - 5*Mst - 67.6)
    lonecl = lonecl - 0.229 * dcos(2*Mjp - 4*Mst - 2)
    lonecl = lonecl + 0.119 * dsin(Mjp - 2*Mst - 3)
    lonecl = lonecl + 0.046 * dsin(2*Mjp - 6*Mst - 69)
    lonecl = lonecl + 0.014 * dsin(Mjp - 3*Mst + 32)

    latecl = latecl - 0.020 * dcos(2*Mjp - 4*Mst - 2)
    latecl = latecl + 0.018 * dsin(2*Mjp - 6*Mst - 49)

    // needed for magnitude
    // slon = lonecl
    // slat = latecl
  }
  if (desc == "Uranus") {
    var Mjp = rev(19.8950 + 0.0830853001 * d)
    var Mst = rev(316.9670 + 0.0334442282 * d)
    var Mun = rev(142.5905 + 0.011725806  * d)
    lonecl = lonecl + 0.040 * dsin(Mst - 2*Mun + 6)
    lonecl = lonecl + 0.035 * dsin(Mst - 3*Mun + 33)
    lonecl = lonecl - 0.015 * dsin(Mjp - Mun + 20)
  }
  px = r * dcos(lonecl) * dcos(latecl)
  py = r * dsin(lonecl) * dcos(latecl)
  pz = r * dsin(latecl)
}
//
//    This function returns location of specified planet
//
function planet(n,desc, v, r) {
  var oblecl = 23.4393 - 3.563E-7 * d

  if (v == null || r == null) {
    M = rev(M)

    var E = M + (180/Math.PI) * e * dsin(M) * (1 + e * dcos(M))

    var E0 = 0 ; var E1 = E
    while (Math.abs(E0 - E1) > .005) {
      E0 = E1
      E1 = E0 - (E0 - (180/Math.PI) * e * dsin(E0) - M) / (1 - e * dcos(E0))
    }
    E = E1

    var x = a * (dcos(E) - e)
    var y = a * (dsin(E) * Math.sqrt(1 - e*e))

    var r = Math.sqrt(x*x + y*y)
    var v = datan2( y, x )
  }
  // need for phase
  // var r0 = r

  var x = r * ( dcos(N) * dcos(v+w) - dsin(N) * dsin(v+w) * dcos(i) )
  var y = r * ( dsin(N) * dcos(v+w) + dcos(N) * dsin(v+w) * dcos(i) )
  var z = r * dsin(v+w) * dsin(i)

  px = x ; py = y ; pz = z ; perturbations(desc) ;  x = px ; y = py ; z = pz

  if (desc != "Moon") {x = x + xsun ; y = y + ysun ; z = z + zsun}

  var x0 = x
  var y0 = y * dcos(oblecl) - z * dsin(oblecl)
  var z0 = y * dsin(oblecl) + z * dcos(oblecl)

  var r = Math.sqrt(x0*x0 + y0*y0 + z0*z0)

  // need for phase
  // var R0 = r

  var RA = datan2(y0,x0) / 15
  while (RA > 24) {RA = RA - 24}
  while (RA <  0) {RA = RA + 24}
  var Decl = datan2(z0, Math.sqrt(x0*x0 + y0*y0))

  pRA = RA ; pDecl = Decl ; topocentric(desc, r) ; Decl = pDecl ; RA = pRA

  if( n % 2 == 0 )
    document.write('<tr class="odd"><td class="planet"><strong>' +desc + '</strong></td><td>'+DMS(RA)+'</td><td>'+DMS(Decl) + '</td>' + rise(desc, RA, Decl) + '</tr>')
  else
    document.write('<tr class="even"><td class="panet"><strong>' +desc + '</strong></td><td>'+DMS(RA)+'</td><td>'+DMS(Decl) + '</td>' + rise(desc, RA, Decl) + '</tr>')
}
//
//    This function returns location of pluto
//
function pluto() {
  var oblecl = 23.4393 - 3.563E-7 * d

  var S  =   50.03  +  0.033459652 * d
  var P  =  238.95  +  0.003968789 * d

  var lonecl = 238.9508  +  0.00400703 * d
      lonecl = lonecl - 19.799 * dsin(P)     + 19.848 * dcos(P)
      lonecl = lonecl + 0.897 * dsin(2*P)    - 4.956 * dcos(2*P)
      lonecl = lonecl + 0.610 * dsin(3*P)    + 1.211 * dcos(3*P)
      lonecl = lonecl - 0.341 * dsin(4*P)    - 0.190 * dcos(4*P)
      lonecl = lonecl + 0.128 * dsin(5*P)    - 0.034 * dcos(5*P)
      lonecl = lonecl - 0.038 * dsin(6*P)    + 0.031 * dcos(6*P)
      lonecl = lonecl + 0.020 * dsin(S-P)    - 0.010 * dcos(S-P)

  var latecl =  -3.9082
      latecl = latecl - 5.453 * dsin(P)     - 14.975 * dcos(P)
      latecl = latecl + 3.527 * dsin(2*P)    + 1.673 * dcos(2*P)
      latecl = latecl - 1.051 * dsin(3*P)    + 0.328 * dcos(3*P)
      latecl = latecl + 0.179 * dsin(4*P)    - 0.292 * dcos(4*P)
      latecl = latecl + 0.019 * dsin(5*P)    + 0.100 * dcos(5*P)
      latecl = latecl - 0.031 * dsin(6*P)    - 0.026 * dcos(6*P)
      latecl = latecl                       + 0.011 * dcos(S-P)

  var r =  40.72
      r = r + 6.68 * dsin(P)       + 6.90 * dcos(P)
      r = r - 1.18 * dsin(2*P)     - 0.03 * dcos(2*P)
      r = r + 0.15 * dsin(3*P)     - 0.14 * dcos(3*P)

  var x = r * dcos(lonecl) * dcos(latecl)
  var y = r * dsin(lonecl) * dcos(latecl)
  var z = r                * dsin(latecl)

  x = x + xsun ; y = y + ysun ; z = z + zsun

  var x0 = x
  var y0 = y * dcos(oblecl) - z * dsin(oblecl)
  var z0 = y * dsin(oblecl) + z * dcos(oblecl)

  // var r = Math.sqrt(x0*x0 + y0*y0 + z0*z0)
  var RA = datan2(y0,x0) / 15
  while (RA > 24) {RA = RA - 24}
  while (RA <  0) {RA = RA + 24}
  var Decl = datan2(z0, Math.sqrt(x0*x0 + y0*y0))
  //frm1.value = 'Pluto RA: '+DMS(RA)+' Dec: '+DMS(Decl)
  //frm2.value = rise('Pluto', RA, Decl)
  document.write('<tr class="odd"><td class="planet"><strong>Pluto</strong></td><td>'+DMS(RA)+'</td><td>'+DMS(Decl) + '</td>' + rise('Pluto', RA, Decl) + '</tr>')
}
//
//    This function returns rise/set of planets
//
function rise(desc, RA, Decl) {
  UT0 = RA - rev((Ls/15)+12) - (zone+dst) - lon/15
  LST0 = UT0
  while (LST0 > 24) {LST0 = LST0 - 24}
  while (LST0 <  0) {LST0 = LST0 + 24}
  var msg = "<td>" +  DMSt(LST0) +"</td>"

  h = -.83333333
  LHA = ( dsin(h) - dsin(lat)*dsin(Decl) ) / ( dcos(lat) * dcos(Decl) )
  if (LHA >= -1 && LHA <= 1) {
    t = (desc=="Sun") ? 15 : 15.0417
    LHA = dacs(LHA) / t
    LST0 = UT0 - LHA
    while (LST0 > 24) {LST0 = LST0 - 24}
    while (LST0 <  0) {LST0 = LST0 + 24}
    var hr1 = LST0 ; msg = "<td>" + DMSt(LST0) + "</td>" + msg
    LST0 = UT0 + LHA
    while (LST0 > 24) {LST0 = LST0 - 24}
    while (LST0 <  0) {LST0 = LST0 + 24}
    var hr2 = LST0 ; msg = msg + "<td>" + DMSt(LST0) + "</td>"
    if (hr1 > hr2) hr2 = hr2 + 24
    //msg = msg + ", up for " + rnd(hr2 - hr1,1) + " hours"
    msg= msg +"<td>" + rnd(hr2 - hr1,1) + "</td>"
  }
  return msg
}
//
//  This converts geocentric coordinates to topocentric coordinates.
//
function topocentric(desc, r) {
  var RA = pRA
  var Decl = pDecl
  var mpar = dasn(1/r) ; if (desc != "Moon") mpar = (8.794 / 3600) / r
  var gclat = lat - 0.1924 * dsin(2*lat)
  var rho = 0.99883 + 0.00167 * dcos(2*lat)
  var HA = (LST - RA) * 15
  var g = datan(dtan(gclat) / dcos(HA))
  pRA = RA * 15 - mpar * rho * dcos(gclat) * dsin(HA) / dcos(Decl)
  pRA = pRA / 15
  while (pRA > 24) {pRA = pRA - 24}
  while (pRA <  0) {pRA = pRA + 24}
  pDecl = Decl - mpar * rho * dsin(gclat) * dsin(g - Decl) / dsin(g)
}
//
//    This function returns the universal time, given the date and time zone.
//
function ut(dte, zone) {
  with (Math) {
    var ut
    ut = dte.getHours() + dte.getMinutes() / 100 + dte.getSeconds() / 10000
    ut = deg(ut) + zone
    ut_flag = 0
    if (ut > 24) {
      ut = ut - 24
      ut_flag = 1
    }
  }
  return rnd(ut,4)
}
//
//    This function removes time element from date object.
//
function zhour(dte) {
  var y = NumFloat(dte.getYear()) + 1900 ; if (y >= 3900) y = y - 1900
  var m = NumFloat(dte.getMonth())+1
  var d = NumFloat(dte.getDate())
  return new Date(y, m-1, d)
}
//
//    Planet section exit.
//
//
//    The purpose of this function is to return all calculations.
//
function calculate(day, month, year, hr, mn, sc, zone, dst, lat1, lat2, lat3, lon1, lon2, lon3) {

  var dte = new Date(month + "/" + day + "/" + year + " " + hr + ":" + mn + ":" + sc)

  var a1, a2, a3, sign, d0
  a1 = Math.abs(NumFloat(lat1))
  a2 = Math.abs(NumFloat(lat2))
  a3 = Math.abs(NumFloat(lat3))
  sign = 1 ; //if (form.lat0[2-1].checked) sign = -1
  d0 = sign * (a1  + a2 / 100 + a3 / 10000)
  lat = deg(d0)

  var a1, a2, a3, sign, d0
  a1 = Math.abs(NumFloat(lon1))
  a2 = Math.abs(NumFloat(lon2))
  a3 = Math.abs(NumFloat(lon3))
  sign = 1 ; // if (form.lon0[2-1].checked) sign = -1
  d0 = sign * (a1  + a2 / 100 + a3 / 10000)
  lon = deg(d0)

  UT = ut(dte, zone+dst)

  //
  // The following formulas were obtained from the Paul Schlyter web site,
  // Computing planetary positions - a tutorial with working examples
  // http://hotel04.ausys.se/pausch/comp/tutorial.html
  //
  d = julian(dte, zone+dst) - 2451543.5

  // sun
  w = 282.9404 + 4.70935E-5   * d  //  (longitude of perihelion)
  a = 1.000000                     //  (mean distance, a.u.)
  e = 0.016709 - 1.151E-9     * d  //  (eccentricity)
  M = 356.0470 + 0.9856002585 * d  //  (mean anomaly)

  oblecl = 23.4393 - 3.563E-7 * d

  M = rev(M) ; L = rev(w + M)

  // needed for perturbations
  Ms = M ; Ls = L

  E = M + (180/Math.PI) * e * dsin(M) * (1 + e * dcos(M))

  E0 = 0 ; E1 = E
  while (Math.abs(E0 - E1) > .005) {
    E0 = E1
    E1 = E0 - (E0 - (180/Math.PI) * e * dsin(E0) - M) / (1 - e * dcos(E0))
  }
  E = E1

  x = a * (dcos(E) - e)
  y = a * (dsin(E) * Math.sqrt(1 - e*e))

  r = Math.sqrt(x*x + y*y)
  v = datan2( y, x )

  lng = rev(v + w)

  x = r * dcos(lng)
  y = r * dsin(lng)
  z = 0.0

  // needed for phase angle
  // Rs = r
  // slon = rev(datan2(y,x))
  // slat = datan2(z, Math.sqrt(x*x + y*y))

  xsun = x ; ysun = y ; zsun = z
  x0 = x
  y0 = y * dcos(oblecl) - z * dsin(oblecl)
  z0 = y * dsin(oblecl) + z * dcos(oblecl)

  r = Math.sqrt(x0*x0 + y0*y0 + z0*z0)
  RA = datan2(y0,x0) / 15
  while (RA > 24) {RA = RA - 24}
  while (RA <  0) {RA = RA + 24}
  Decl = datan2(z0, Math.sqrt(x0*x0 + y0*y0))
  //*** document.write( 'Sun RA: '+DMS(RA)+' Dec: '+DMS(Decl) + ' ' + rise('Sun',RA, Decl) + '<br/>')
  //form.sun2.value =

  GST = rev((L/15)+12) + UT
  while (GST > 24) {GST = GST - 24}
  while (GST <  0) {GST = GST + 24}

  LST = GST + lon/15
  while (LST > 24) {LST = LST - 24}
  while (LST <  0) {LST = LST + 24}

  // Moon
  N = 125.1228 - 0.0529538083  * d
  i =   5.1454
  w = 318.0634 + 0.1643573223  * d
  a =  60.2666
  e = 0.054900
  M = 115.3654 + 13.0649929509 * d

  planet(2,"Moon")

  // Mercury
  N =  48.3313 + 3.24587E-5   * d  //(Long of asc. node)
  i =   7.0047 + 5.00E-8      * d  //(Inclination)
  w =  29.1241 + 1.01444E-5   * d  //(Argument of perihelion)
  a = 0.387098                     //(Semi-major axis)
  e = 0.205635 + 5.59E-10     * d  //(Eccentricity)
  M = 168.6562 + 4.0923344368 * d  //(Mean anonaly)
  planet(3,"Mercury")

  // Venus
  N =  76.6799 + 2.46590E-5   * d
  i =   3.3946 + 2.75E-8      * d
  w =  54.8910 + 1.38374E-5   * d
  a = 0.723330
  e = 0.006773 - 1.302E-9     * d
  M =  48.0052 + 1.6021302244 * d
  planet(4,"Venus")

  // Mars
  N =  49.5574 + 2.11081E-5   * d
  i =   1.8497 - 1.78E-8      * d
  w = 286.5016 + 2.92961E-5   * d
  a = 1.523688
  e = 0.093405 + 2.516E-9     * d
  M =  18.6021 + 0.5240207766 * d
  planet(5,"Mars")

  // Jupiter
  N = 100.4542 + 2.76854E-5   * d
  i =   1.3030 - 1.557E-7     * d
  w = 273.8777 + 1.64505E-5   * d
  a = 5.20256
  e = 0.048498 + 4.469E-9     * d
  M =  19.8950 + 0.0830853001 * d
  planet(6,"Jupiter")

  // Saturn
  N = 113.6634 + 2.38980E-5   * d
  i =   2.4886 - 1.081E-7     * d
  w = 339.3939 + 2.97661E-5   * d
  a = 9.55475
  e = 0.055546 - 9.499E-9     * d
  M = 316.9670 + 0.0334442282 * d
  planet(7,"Saturn")

  // Uranus
  N =  74.0005 + 1.3978E-5    * d
  i =   0.7733 + 1.9E-8       * d
  w =  96.6612 + 3.0565E-5    * d
  a = 19.18171 - 1.55E-8      * d
  e = 0.047318 + 7.45E-9      * d
  M = 142.5905 + 0.011725806  * d
  planet(8,"Uranus")

  // Neptune
  N = 131.7806 + 3.0173E-5    * d
  i =   1.7700 - 2.55E-7      * d
  w = 272.8461 - 6.027E-6     * d
  a = 30.05826 + 3.313E-8     * d
  e = 0.008606 + 2.15E-9      * d
  M = 260.2471 + 0.005995147  * d
  planet(9,"Neptune")

  // Pluto
  pluto()

  // User Defined Object
  if (udo != "") object(udo, form.ma1, form.ma2)

}
//    The purpose of this function is to initializr all form variables.
//
//function loadit(vday, vmonth, vyear, vhour, vmin, vsec,vzone, vdst, vlat1, vlat2, vlat3, vlng1, vlng2, vlng3)
function loadit()
{
  with (Math)
    var dte = new Date()
    var day = NumFloat(dte.getDate())
    var month = NumFloat(dte.getMonth())
    var year = NumFloat(dte.getYear()) + 1900 ; if (year >= 3900) year = year - 1900
    var hr = dte.getHours()
    var mn = dte.getMinutes()
    var sc = dte.getSeconds()
/*
    document.planet.month.selectedIndex = month
    document.planet.day.value = "" + day
    document.planet.year.value = "" + year
    document.planet.hr.value = "" + hr
    document.planet.mn.value = "" + mn
    document.planet.sc.value = "" + sc

    document.planet.zone1.value = "" + Math.abs(zone)

    if (zone <  0) document.planet.zone0[1-1].checked = true
    if (zone >= 0) document.planet.zone0[2-1].checked = true

    document.planet.dst1.value = "" + Math.abs(dst)

    if (dst <= 0) document.planet.dst0[1-1].checked = true
    if (dst >  0) document.planet.dst0[2-1].checked = true
*/
    var a1, a2, a3, mm, sign, ss, d, a
    d = NumFloat(lat)
    a = dms(d)
    sign = 1
    if (a < 0) {
      a = -1 * a
      sign = -1
    }
    a1 = intr(a)
    mm = (a - a1) * 100 ; mm = rnd(mm,6)
    a2 = intr(mm)
    ss = (mm - a2) * 100 ; ss = rnd(ss,6)
    a3 = ss

    var lat1 = a1
    var lat2 = a2
    var lat3 = a3
/*
    if (sign ==  1) document.planet.lat0[1-1].checked = true
    if (sign == -1) document.planet.lat0[2-1].checked = true
*/
    var a1, a2, a3, mm, sign, ss, d, a
    d = NumFloat(lon)
    a = dms(d)
    sign = 1
    if (a < 0) {
      a = -1 * a
      sign = -1
    }
    a1 = intr(a)
    mm = (a - a1) * 100 ; mm = rnd(mm,6)
    a2 = intr(mm)
    ss = (mm - a2) * 100 ; ss = rnd(ss,6)
    a3 = ss

    var lon1 = a1
    var lon2 = a2
    var lon3 = a3
//alert( day +"/" +month+"/" +year +" "+hr+ ":"+mn+":"+sc+"\n"+zone+" " +1+" " +lat1+" " +lat2+" " +lat3+"\n" +lon1+" " +lon2+" " +lon3 );

    calculate(day, month+1, year, hr, mn, sc, zone, dst, lat1, lat2, lat3, lon1, lon2, lon3)
  }


// PUBLIC variables

var dst2, zon1, zon2 // used to determine d.s.t.
zon1 = NumFloat(getStandardTimezoneOffset() / 60)
dst2 = new Date() ;
zon2 = NumFloat(dst2.getTimezoneOffset() / 60)

var zone, dst, lat, lon
lat =  53.38;  // decimal degrees
lon =  -1.4666;
dst = zon2 - zon1;
dst =1;
zone = NumFloat(dst2.getTimezoneOffset() / 60) - dst

// User Defined Object
udo = "" // "C/2002 C1 (Ikeya-Zhang)"
udoT = 0 // newDate("2002 Mar. 18.9833 TT")
udow = 0 // 34.6718
udoN = 0 // 93.3677
udoNe = 2000
udoi = 0 // 28.1217
udoe = 1 // 0.990027
udoq = 0 // 0.507085


// -- End of JavaScript code -------------- -->
