<!-- ;
//
// This application is (c) Copyright 1996, P. Lutus -- lutusp@arachnoid.com.
//
// This application is available under the CareWare program  --
// read http://www.arachnoid.com/careware for more details.
// Modification by N. de Hilster d.d. 10 April 2003
// added correct European summertime definition in set_default_date()
//
// Please do not remove this copyright notice.
//
//
var month = 0,day = 0,year = 0;
var lat = 52.55, lng = -4.66;// 52°-33'N, 4°-40'E
var dtime = 1;//timezone GMT+1
var zoneOffset = 10;
var sunrise = 0, sunset = 0, suntransit = 0, sunlength = 0;
var m_lat = 0, m_lng = 0, m_dtime = 0;
var ampm = 1;
var dst = 0;
var r_to_d = 180 / Math.PI;
var d_to_r = 1 / r_to_d;
var convday = 4.16666666666667E-02;
var convhour = 6.66666666666667E-02;
var convmin = 1.66666666666667E-02;
var convsec = 2.77777777777778E-04;
var convcircle = 2.77777777777778E-03;
var SUNSET = -.833333333333333;
var CIVIL = -6.0;
var NAUTICAL = -12.0;
var ASTRONOMICAL = -18.0;
var X = 0,Y = 0; // Netscape bug
function datim(jd,mo,da,yr,dow,hh,mm,ss,sgn) {
        this.jd = jd;
        this.mo = mo;
        this.da = da;
        this.yr = yr;
        this.dow = dow;
        this.hh = hh;
        this.mm = mm;
        this.ss = ss;
        this.sgn = sgn;
}
function pos(lat,lng,gha,rise,transit,set) {
        this.lat = lat;
        this.lng = lng;
        this.gha = gha;
        this.rise = rise;
        this.transit = transit;
        this.set = set;
}
function rts(rise,transit,set) {
        this.rise = rise;
        this.transit = transit;
        this.set = set;
}
function radians(x) {
        return x * d_to_r;
}
function degrees(x) {
        return x * r_to_d;
}
function myatan2(y,x) { // returns degrees
        var a;
        x = (x == 0)?1e-30:x;
        a = degrees(Math.atan(y/x));
        if(x < 0) {
                a = 180 + a;
        }
        if(a < 0) {
                a = 360 + a;
        }
        return a;
}
function el_dd(sid,lat,decl,ra) // sun azimuth for ra, decl at this loc
{
        var lha,x;
        lat = radians(lat);
        decl = radians(decl);
        lha = radians(sid - ra);
        x = degrees(Math.asin(Math.sin(lat) * Math.sin(decl) + Math.cos(lat) * Math.cos(decl) * Math.cos(lha)));
        /* correct for atmospheric refraction */
        if(refract)
        {
                x = x + (1.92792040346393E-03 + (1.02 / Math.tan(radians(x + (10.3 / (x + 5.11)))))) * convmin;
        }
        return(x);
}
/* azimuth 0 to 360 for object. az_ns allows 0 = south, magdec has local magnetic declination */
function az_dd(sid,lat,decl,ra,magdecl) // sun elevation for ra, decl at this loc
{
        var lha,x,a,b;
        lat = radians(lat);
        decl = radians(decl);
        lha = radians(sid - ra);
        a = Math.sin(lha);
        b = Math.cos(lha) * Math.sin(lat) - Math.tan(decl) * Math.cos(lat);
        x = myatan2(a,b);
        if (x < 0.0)
                x = 360.0 + x;
        x = x + 180.0;
        x = x + magdecl;
        // now force x into 0 - 360 value range
        x = x * convcircle;
        x = x - Math.floor(x);
        x = x * 360.0;
        return(x);
}
function mdy_jd(mo,da,yr,hh,mm,ss) // was struct datim q
{
        var a,b,jd;
        if(mo < 3)
        {
                yr -= 1;
                mo += 12;
        }
        a = da + (mo * 100) + (yr * 10000);
        if (a < 15821015.0) /* Julian calendar */
        {
                b = 0;
        }
        else /* Gregorian */
        {
                a = Math.floor(yr/100);
                b = 2 - a + Math.floor(a/4);
        }
        jd = Math.floor(365.25*(yr+4716.0)) + Math.floor(30.6001*(mo+1)) + da + b - 1524.5;
        jd += (hh/24) + (mm/1440) + (ss/86400);
        return(jd);
}
function calcsun(xjd,hh,mm,ss) // compute sun's position on this date
{
        var s = new pos;
        var h;
        var jd;
        var t;
        var lo;
        var m;
        var rm;
        var e;
        var c;
        var tl;
        var v;
        var r;
        var nut;
        var al;
        var obliq;
        var sunra;
        var sundecl;
        jd = xjd-(dtime/24); /* convert to GMT */
        h = ((hh) + (mm/60) + (ss/3600)) * 15;
        t = (jd - 2451545) * 2.7378507871321E-05;
        lo = 280.46645 + (36000.76983 * t) + (0.0003032 * t * t);
        m = 357.5291 + (35999.0503 * t) - (0.0001559 * t * t) - (0.00000048 * t * t * t);
        rm = radians(m);
        e = 0.016708617 - (0.000042037 * t) - (0.0000001236 * t * t);
        c = (1.9146 - 0.004817 * t - 0.000014 * t * t) * Math.sin(rm);
        c = c + (0.019993 - 0.000101 * t) * Math.sin(2 * rm);
        c = c + 0.00029 * Math.sin(3 * rm);
        tl = lo + c;
        v = m + c;
        r = (1.000001018 * (1 - e * e)) / (1 + (e * Math.cos(radians(v))));
        nut = 125.04 - 1934.136 * t;
        al = radians(tl - 0.00569 - 0.00478 * Math.sin(radians(nut)));
        obliq = 23.4391666666667 - 1.30041666666666E-02 * t - 0.000000163888888 * t * t + 5.03611111111E-08 * t * t * t;
        obliq = radians(obliq + 0.00256 * Math.cos(radians(nut)));
        sunra = myatan2(Math.cos(obliq) * Math.sin(al),Math.cos(al));
        if (sunra < 0)
                sunra = 360 + sunra;
        sundecl = degrees(Math.asin(Math.sin(obliq) * Math.sin(al)));
        s.lat = sundecl;
        s.lng = sunra;
        return(s);
}
/* sidereal time from Julian Date */
function sidtime(jd,lng)
{
        var t,x;
        t = ((Math.floor(jd) + 0.5) - 2451545) *2.73785078713210E-05;

        x = 280.46061837;
        x = x + 360.98564736629 * (jd - 2451545);

        x = x + 0.000387933 * t * t;
        x = x - (t * t * t) * 2.583311805734950E-08;
        x = x - lng;
        x = x * convcircle;
        x = x - Math.floor(x);
        x = x * 360;
        return(x);
}
function mod1(t)
{
        var ot;
        ot = t;
        t = Math.abs(t);
        t = t - Math.floor(t);
        if(ot < 0)
                t = 1-t;
        return(t);
}
function rmstime(jd,lat,lng,timezone,atcr,ra,decl)
{
        var x,gmtsid;
        var r = new rts;
        timezone *= convday;
        gmtsid = sidtime(Math.floor(jd) + 0.5, 0);
        r.transit = ((ra + lng - gmtsid) / 360);
        atcr = radians(atcr);
        lat = radians(lat);
        decl = radians(decl);
        x = Math.sin(atcr) - (Math.sin(lat) * Math.sin(decl));
        x = x / (Math.cos(lat) * Math.cos(decl));
        if ((x < 1) && (x > -1))
        {
                x = degrees(Math.acos(x)) * convcircle;
                r.rise = (mod1((r.transit - x)+timezone)) * 24.0;
                r.set = (mod1((r.transit + x)+timezone)) * 24.0;
                r.transit = (mod1(r.transit+timezone)) * 24.0;
        }
        else
        {
                x = (x >= 0)?-100:100;
                r.rise = x;
                r.transit = x;
                r.set = x;
        }
        return r;
}
function fix_places(x) {
        x = "" + x;
        if(x.length < 2) {
                x = "0" + x;
        }
        return x;
}
function dd_dm(x,f) {
        var d,m,sgn;
        var r;
        sgn = (x>=0)?0:1;
        x = Math.abs(x)+.008333;
        d = Math.floor(x);
        x = (x-d) * 60;
        m = Math.floor(x);
        d = fix_places(d);
        m = fix_places(m);
        if(f == 0) {
                r = d;
        }
        if(f == 1) {
                r = m;
        }
        if(f == 2) {
                r = sgn;
        }
        return r;
}
function dt_hms(x,amdsp,dst) {
        var h,m,s;
        var ampm;
        var outstr;
        if((x > -100) && (x < 100)) {
                x = (x < 0)?0:x;
                h = Math.floor(x);
                x = (x-h) * 60;
                h = (h+dst) % 24; // daylight time adjustment
                m = Math.floor(x);
                x = (x-m) * 60;
                s = Math.floor(x);
                if(amdsp > 0) {
                        ampm = (h > 11)?" PM":" AM";
                        h = h % 12;
                        h = (h < 1)?12:h;
                }
                else {
                        ampm = "";
                }
                h = fix_places(h);
                m = fix_places(m);
                s = fix_places(s);
                outstr = h + ":" + m + ":" + s + ampm;
        }
        else {
                outstr = (x < 0)?"[Below]":"[Above]";
        }
        return outstr;
}




function doit(title) {
        var jd,mo,da,yr;
        var s = new pos;
        var r = new rts;

        mo = month + 1;
        da = day + 1;
        yr = year;
        jd = mdy_jd(mo,da,yr,0,0,0);
        s = calcsun(jd,0,0,0);

        r = rmstime(jd,lat,lng,dtime,SUNSET,s.lng,s.lat);

        sunrise = dt_hms(r.rise,ampm,dst);
        suntransit = dt_hms(r.transit,ampm,dst);
        sunset = dt_hms(r.set,ampm,dst);
        sunlength = dt_hms(r.set-r.rise,0,0);

}

function set_default_date() {
        var now = new Date();
        var m = now.getMonth();
        var d = now.getDate();
        var wd = now.getDay();
        zoneOffset = now.getTimezoneOffset();

        year = now.getYear();
        month = m;
        day = d - 1;
        dst = (( ((month==2)&&(d>=(25+wd))) || (month>2) ) && ( ((month==9)&&(d<(25+wd))) || (month<9) ))?1:0;
        //origineel: ((month >= 2) && (month <= 9))
        //laatste zondag maart - laatste zondag oktober: (( ((month==2)&&(d>=(25+wd))) || (month>2) ) && ( ((month==9)&&(d<(25+wd))) || (month<9) ))
        doit("");
}
set_default_date();
// end hide -->