/* Berekening Tijdstip van zonsopkomst en -ondergang op basis van
   een set eenvoudige formules, ontleend aan ESRL,
   http://www.srrb.noaa.gov/highlights/sunrise/calcdetails.html,
*/

var longitude =  -5.32;      // Lengtegraad in decimale graden, <0 voor OL, >0 voor WL
var latitude  = 52.6533;     // Breedtegraad in decimale graden, >0 voor NB, <0 voor ZB

/* ------------------------- Hier onder niet wijzigen ------------------------------------------- */
function daysInM(m, y) {
  var n=31; m -= 1;
  if ((m==0) || (m==2) || (m==4) || (m==6) || (m==7) || (m==9) || (m==11))  n=31
  if ((m==3) || (m==5) || (m==8) || (m==10))  n=30;
  if (m==1) { n=28;
    if ((y % 4) == 0) n=29;
    if ((y % 100) == 0) n=28;
    if ((y % 400) == 0) n=29;
  }
  return n;
}

function frac(X) {
  X = X - Math.floor(X);
  if (X<0) X = X + 1.0;
  return X;
}

function HoursMinutes(time) {
  var h = Math.floor(time);
  var min = Math.round(60.0*frac(time));
  var str=h+":";
  if (min>=10) str=str+min;
  else  str=str+"0"+min;
  if (str.lastIndexOf('N')>0 ) str = "--:--";
  return str;
}

var doy, eqtime, declin, hars, sun_rise, sun_set;
var year, date, month, hours, minutes, offset;
var sum, x;    //helpers

var ToDay = new Date()            // ------Today-------//
year = ToDay.getYear(); if (year < 1900) year += 1900;
month = ToDay.getMonth()+1; date = ToDay.getDate();
hours = ToDay.getHours(); minutes = ToDay.getMinutes();
offset = ToDay.getTimezoneOffset();
if (offset >= 1320) offset = (offset-1440)/-60;
else offset = offset/-60;

// calculate the fractional day of the year
doy = 0;
for (var i=1; i<month; i++) doy = doy + daysInM(i,year);
doy = doy + date;
x = hours + offset + minutes/60;
doy = doy - 1 + (x-12)/24;

// equation of time (in minutes)
x = doy*2*Math.PI/365; // fractional year in radians
eqtime = 229.18*(0.000075+0.001868*Math.cos(x) - 0.032077*Math.sin(x) - 0.014615*Math.cos(2*x) - 0.040849*Math.sin(2*x));

// declination (in degrees)
declin = 0.006918-0.399912*Math.cos(x) + 0.070257*Math.sin(x) - 0.006758*Math.cos(2*x);
declin = declin + 0.000907*Math.sin(2*x) - 0.002697*Math.cos(3*x) + 0.00148*Math.sin(3*x);
declin = declin * 180/Math.PI;

// solar azimuth angle for sunrise and sunset corrected for atmospheric refraction (in degrees),
x = Math.PI/180;
hars = Math.cos(x*90.833) / (Math.cos(x*latitude) * Math.cos(x*declin))
hars = hars - Math.tan(x*latitude)*Math.tan(x*declin);
hars = Math.acos(hars)/x;

// sunrise and sunset (local time)
x = 720 + 4*(longitude-hars) - eqtime;
x = x/60 + offset;
sun_rise = HoursMinutes(x);
x = 720 + 4*(longitude+hars) - eqtime;
x = x/60 + offset;
sun_set = HoursMinutes(x);
