/*
 JavaScript Sun Table Calculator
 2002 Juergen Giesen
 http://www.GeoAstro.de
*/



var doy, eqtime, declin, time_offset, tst, ha, Phi, Phi1, Theta, hars;
var sun_rise, sun_set, snoon;
var date, month, hours, minutes, offset, lat, longitude, sa, su;
var jetzt = new Date();


	function calcDayOfYear(mn, dy, lpyr) 
	{
		var k = (lpyr ? 1 : 2);
		var doy = Math.floor((275 * mn)/9) - k * Math.floor((mn + 9)/12) + dy -30;
		return doy;
	}

function daysInM(m, y) {
	var n=31
	m=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 HoursMinutesSeconds(time) {

 var h = Math.floor(time);
 var min = Math.round(60.0*frac(time));
 var str;
 if (h>=10) str=h+":";
 else  str="0"+h+":";
 if (min>=10) str=str+min;
 else  str=str+"0"+min;
 return " " + str;

}

// calculate the fractional day of the year
function dayOfYear() {
 var sum=0;
 for (var i=1; i<month; i++) sum=sum+daysInM(i,2002);
 sum=sum+date;
 var h=hours + offset + minutes/60;
 doy=sum-1+(h-12)/24;
}


// equation of time (in minutes)
function equationTime() {
 var x=doy*2*Math.PI/365;
 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)
function declination() {
 var x=doy*2*Math.PI/365; // fractional year in radians
 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),
function hourAngleRiseSet() {
 var K=Math.PI/180;
 hars = Math.cos(K*90.833)/(Math.cos(K*lat)*Math.cos(K*declin)) - Math.tan(K*lat)*Math.tan(K*declin);
 hars = Math.acos(hars)/K;
}

// sunrise and sunset (local time)
function RiseSet() {

 sun_rise = 720 + 4*(longitude-hars) - eqtime;
 sun_rise = sun_rise/60 + offset;
 sun_set = 720 + 4*(longitude+hars) - eqtime;
 sun_set = sun_set/60 + offset;
}


function getInput() {

date = jetzt.getDate();
month = jetzt.getMonth()+1;
hours = jetzt.getHours();
minutes = jetzt.getMinutes();
 offset = 1;
 lat = 50.01;
 longitude = -8.16;
}

function isSummerTime(){
var first=new Date();
var last=new Date();
first.setMonth(2);
first.setDate(31);
first.setHours(3);
first.setMinutes(0);
first.setDate(31-first.getDay()); //last Sunday!
last.setMonth(9);
last.setDate(31);
first.setHours(3);
first.setMinutes(0);
last.setDate(31-last.getDay()); //last Sunday!
if(jetzt>=first && jetzt<=last) return 1;
else return 0;

}

function writeForm() {
var summer=isSummerTime();
sa=HoursMinutesSeconds(sun_rise+summer);
su=HoursMinutesSeconds(sun_set+summer);
document.write("Sonnenaufgang "+sa+" Uhr, ");
document.write("Sonnenuntergang "+su+" Uhr");
}


function calculate() {
 getInput();
 dayOfYear();
 equationTime();
 declination();
 hourAngleRiseSet();
 RiseSet();
 writeForm();
}

calculate();