function JSClock()
{
  calculate();
  var id=setTimeout("JSClock()",1000);
}   
var clockID = null;
var clockRunning = false;
var x = new Date();
var ltime = x.getTime();
var stime = 1.11222941977E+12;
var diff = (ltime - stime);

function simpleFindObj(name, inLayer) 
{
	return document[name] || (document.all && document.all[name])
	|| (document.getElementById && document.getElementById(name))
	|| (document.layers && inLayer && document.layers[inLayer].document[name]);
}

function divWrite(div, input)
{
	var div_x = simpleFindObj(div);
	input = input;
	if (div_x && div_x.innerHTML) 
	{
		div_x.innerHTML = input;
	}
	else if (div_x && div_x.document) 
	{
		div_x.document.writeln(input);
		div_x.document.close();
	}
}

function TZDisplay(data) 
{
	divWrite("timezone", data);
}

function EOTDisplay(data) 
{
	divWrite("equation", data);
}

function longDisplay(lng) 
{
	divWrite("long", lng);
}

function JDNDisplay(jul) 
{
	divWrite("JDN", jul);
}

function LSTDisplay(lmst) 
{
	divWrite("LST", lmst);
}

function localDisplay(local) 
{
	divWrite("layer1", local);
}

function UTCDisplay(utc) 
{
	divWrite("layer2", utc);
}
function PTDisplay(ptc) 
{
	divWrite("layerPT", ptc);
}

function stop()
{
	if(clockRunning) clearTimeout(clockID);
	clockRunning = false;
}

function makeGMT (day, date, month, year, hour, minute, second)
{
	if (day == 0)
	{
		day = "Sunday";
	}
	else if (day == 1)
	{
		day = "Monday";
	}
	else if (day == 2)
	{
		day = "Tuesday";
	}
	else if (day == 3)
	{
		day = "Wednesday";
	}
	else if (day == 4)
	{
		day = "Thursday";
	}
	else if (day == 5)
	{
		day = "Friday";
	}
	else if (day == 6)
	{
		day = "Saturday";
	}
	if (month == 0)
	{
		month = "January";
	}
	else if (month == 1)
	{
		month = "February";
	}
	else if (month == 2)
	{
		month = "March";
	}
	else if (month == 3)
	{
		month = "April";
	}
	else if (month == 4)
	{
		month = "May";
	}
	else if (month == 5)
	{
		month = "June";
	}
	else if (month == 6)
	{
		month = "July";
	}
	else if (month == 7)
	{
		month = "August";
	}
	else if (month == 8)
	{
		month = "September";
	}
	else if (month == 9)
	{
		month = "October";
	}
	else if (month == 10)
	{
		month = "November";
	}
	else if (month == 11)
	{
		month = "December";
	}

	if (hour < 10)
	{
		hour = ("0" + hour);
	}

	if (minute < 10)
	{
		minute = ("0" + minute);
	}

	if (second < 10)
	{
		second = ("0" + second);
	}

	UTCDisplay(day + ", " + date + " " + month + " " + year + "  " + hour + ":" + minute + ":" + second);
}

function makeLocal(day, date, month, year, hour, minute, second)
{
	if (day == 0)
	{
		day = "Sunday";
	}
	else if (day == 1)
	{
		day = "Monday";
	}
	else if (day == 2)
	{
		day = "Tuesday";
	}
	else if (day == 3)
	{
		day = "Wednesday";
	}
	else if (day == 4)
	{
		day = "Thursday";
	}
	else if (day == 5)
	{
		day = "Friday";
	}
	else if (day == 6)
	{
		day = "Saturday";
	}
	if (month == 0)
	{
		month = "January";
	}
	else if (month == 1)
	{
		month = "February";
	}
	else if (month == 2)
	{
		month = "March";
	}
	else if (month == 3)
	{
		month = "April";
	}
	else if (month == 4)
	{
		month = "May";
	}
	else if (month == 5)
	{
		month = "June";
	}
	else if (month == 6)
	{
		month = "July";
	}
	else if (month == 7)
	{
		month = "August";
	}
	else if (month == 8)
	{
		month = "September";
	}
	else if (month == 9)
	{
		month = "October";
	}
	else if (month == 10)
	{
		month = "November";
	}
	else if (month == 11)
	{
		month = "December";
	}

	if (hour < 10)
	{
		hour = ("0" + hour);
	}

	if (minute < 10)
	{
		minute = ("0" + minute);
	}

	if (second < 10)
	{
		second = ("0" + second);
	}
	
	PTDisplay(day + ", " + date + " " + month + " " + year + "  " + hour + ":" + minute + ":" + second);
}

function display() 
{
	var ltime = new Date(); 
	var ltime_unix = ltime.getTime();
//	ltime = new Date(ltime_unix-diff);
	var lDay = ltime.getDay();
	var lDate = ltime.getDate();
	var lMonth = ltime.getMonth();
	var lYear = ltime.getFullYear();
	var lHours = ltime.getHours();
	var lMinutes = ltime.getMinutes();
	var lSeconds = ltime.getSeconds();
	makeLocal (lDay, lDate, lMonth, lYear, lHours, lMinutes, lSeconds);
	var UTCDay = ltime.getUTCDay();
	var UTCDate = ltime.getUTCDate();
	var UTCMonth = ltime.getUTCMonth();
	var UTCYear = ltime.getUTCFullYear();
	var UTCHours = ltime.getUTCHours();
	var UTCMinutes = ltime.getUTCMinutes();
	var UTCSeconds = ltime.getUTCSeconds();
	makeGMT (UTCDay, UTCDate, UTCMonth, UTCYear, UTCHours, UTCMinutes, UTCSeconds)
	var wtime = ltime_unix - diff;
//	var wtime = ltime - diff;
	clockID = setTimeout('display()',1000 - (wtime % 1000));
	clockRunning = true;
}

function tick() 
{
	stop();
	display();
}

var jd0=0, lngtd=0, T=0, t1=0, t=0, degcorr=0, tzone=0;
function calcJD(form) {
	var dDate = new Date();
	y = eval(form.year.value);
	m = eval(form.month.value);
	d = eval(form.day.value);
	form.time.value = dDate.getHours()+dDate.getMinutes()/60;
	t = eval(form.time.value);
if (m <= 2) {
	y = y - 1;
	m = m + 12;
}	
	var a = Math.floor(y/100);
	var b = 2 - a + Math.floor(a/4);
	d += t/24
	jdg = Math.floor(365.25*(y+4716))+Math.floor(30.6001*(m+1))+d+b-1524.5;
	jdg -= tzone/24;
	jd0 = Math.floor(jdg+0.5)-0.5
	return jd0;
}
function longcorr(fm)  {
	lngtd = eval(fm.longitude.value);
	tzone =	Math.round(lngtd/15);
	degcorr = lngtd-15*tzone;
	top.document.entry.lcorrection.value = twoPlace(4*degcorr);
	longDisplay(top.document.entry.lcorrection.value); 
	return tzone;
}
function calcET(jday) {
	with(Math) {
		radian = 180/PI;
		T = (jday-2451545.0)/36525;
		tau = T/10;
		obl=23.439291-0.001300*T;
		obl=obl/radian;
		L = 280.46644567+360007.6982779*tau+0.030320*tau*tau+pow(tau,3)/49931-pow(tau,4)/15299;
		L = L/radian;
		M = 357.052910+35999.05030*T-0.0001559*T*T-0.00000048*T*T*T;
		M = M/radian;
		e = 0.01670617-0.000042037*T-0.0000001236*T*T;
		y = pow(tan(obl/2),2);
		ET = y*sin(2*L)-2*e*sin(M)+4*e*y*sin(M)*cos(2*L)-y*y/2*sin(4*L);
}
	ET = ET*radian*4;
	return ET;
}
function calcST(jdi) {
	t1 = (jdi-2451545.0)/36525;
	var st = 100.46061837+36000.77053608*t1+0.000387933*t1*t1-t1*t1*t1/38710000;
	ut = (t-tzone)
	st = st + 1.002738*ut*15
	st = st+lngtd
with(Math)  {	
	if (st < 0) {
		n = floor(abs(st/360));
		st += ((n+1)*360);
		};
	var hr = floor(st/15);
		var mn = floor((st % 15)*4);
	var sc = round((st-(hr*15)-(mn/4))*240);
	if (hr > 24) {
		n = floor(hr/24); 
		hr = hr - n*24;
		};
	siderial = ""+hr+"h"+mn+"m"+sc+"s";
}
	return siderial;
}
function calculateLST(form) {
	form.tzhr.value = (longcorr(form) + " PST" + " / " + (longcorr(form) + 1) + " PDT");
	form.julian0.value = calcJD(form)
		var jd1 = jd0+((t-tzone)/24)
		if ((t-tzone)>=24) {
			jd1 -= 1;};
	form.julian.value = twoPlace(jd1);
	form.eqtntime.value = twoPlace(calcET(jd1));
	form.sidtime.value = calcST(jd0);
	TZDisplay(document.entry.tzhr.value);
	EOTDisplay(document.entry.eqtntime.value);
	JDNDisplay(document.entry.julian.value);
} 
function twoPlace(x){
	var A = Math.round(x);
	var B = x - A;
	B = B * 100;
	B = Math.round(B);
	B = B / 100;
	x = A + B;
	return x;
}

function makeDate(){
var aLongMonthNames = new Array("1","2","3","4","5","6","7","8","9","10","11","12");
var dDate=new Date();
var dDay=dDate.getDate();
var dMonth=[dDate.getMonth()+1];
var dDayOfWeek = dDate.getDay();
var dDay=dDate.getDate();
var dYear=dDate.getFullYear();

return dMonth +"/"+ dDay +"/"+ dYear;
};

function writeDate(){
var aShortMonthNames = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var aLongMonthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var aShortDayNames = new Array("Mon","Tue","Wed","Thur","Fri","Sat","Sun");
var aLongDayNames = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var dDate=new Date();
var dDay=dDate.getDate();
var dMonth=[dDate.getMonth()+1];
var dDayOfWeek = dDate.getDay();
var dDay=dDate.getDate();
var dYear=dDate.getFullYear();

	document.write(aLongDayNames[dDayOfWeek]);
	document.write(" ");
        document.write(aLongMonthNames[dMonth-1]);
        document.write(" ");
	document.write(dDay);
	document.write(", ");
	document.write(dYear);
}

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.
//
//
//  ***************************
//  THIS PROGRAM COMPUTES THE
//  TIMES OF SUNRISE AND SUN-SET 
//  FROM SKY & TELESCOPE, MARCH,
//  1995, PAGE 84.
//  ***************************
//
function sun_up(dte, lat, lon, zone) {
  with (Math) {

    var msg = ""
    
    var pi = 3.14159265 ; var dr = pi/180 ; var rd = 1/dr

    var b5 = deg(48.7357) ; var l5 = deg(-122.4856) ; var h = 7
    
     b5=dr*b5
    var dte1 = new Date();
    var y = dte1.getFullYear();    
    var m = [dte1.getMonth() +1];
    var d = dte1.getDate();

    var n=intr(275*m/9)-2*intr((m+9)/12)+d-30
    var l0=4.8771+.0172*(n+.5-l5/360)
    var c=.03342*sin(l0+1.345)
    var c2=rd*(atan(tan(l0+c))-atan(.9175*tan(l0+c))-c)
    var sd=.3978*sin(l0+c) ; var cd=sqrt(1-sd*sd)
    var sc=(sd*sin(b5)+.0145)/(cos(b5)*cd)
    if (abs(sc) > 1) {
      if (sc >  1) msg = msg + "Sun up all day "
      if (sc < -1) msg = msg + "Sun down all day "
      return
    }
    var c3=rd*atan(sc/sqrt(1-sc*sc))
    var r1=6-h-(l5+c2+c3)/15
    var hr=intr(r1) ; var mr=intr((r1-hr)*60)

    var am = "AM" ; if (hr > 12) {hr = hr - 12 ; am="PM"}
    var bm = ""   ; if (mr < 10) bm = "0"
    msg = " " + " " + " " + msg + "Sunrise " + hr + ":" + mr + " " + am;

    var s1=18-h-(l5+c2-c3)/15
    var hs=intr(s1) ; var ms=intr((s1-hs)*60)

    var am = "AM" ; if (hs > 12) {hs = hs - 12 ; am="PM"}
    var bm = ""   ; if (ms < 10) bm = "0"
    msg = msg + " &nbsp Sunset " + hs + ":" + bm + ms + " " + am;
//    sunDisplay(msg);
  }
}

//    Return calculations.

function calculateF(form) {
  with (Math) {
    dte = makeDate();
 //zone changed for daylight savings time   
    zone = 7;
	lat = 48.44;
	lon = -122.29;
    sun_up(dte, lat, lon, zone);
    form.msg.value = msg;
  }
}
var msg = ""
var dte, zone, lat, lon, expdte
dte = new Date()
zone = Math.round(NumFloat(dte.getTimezoneOffset() / 60))

expdte = new Date()
expdte.setTime(expdte.getTime() + (2 * 365 * 24 * 60 * 60 * 1000))  // 2 years from now

//    Initializing the form variables.
function loadit() {
  with (Math) {
    document.sun.zone.value = ""
    document.sun.lat.value = ""
    document.sun.lon.value = ""
    document.sun.msg.value = ""
  }
}