pi = 3.1415926536;
RAD = pi/180.0; // Umrechnungsfaktor von Grad nach Radians
h   = -(50.0/60.0)*RAD; // Höhe des Sonnenmittelpunkts bei Aufgang: Radius+Refraktion


function sqr(x)
{
	// Quadrat von x
	return x*x;
}

function sonnendeklination(T)
{
	// Deklination der Sonne in Radians
	// Formula 2008 by Arnold(at)Barmettler.com, fit to 20 years of average declinations (2008-2017)
	return 0.409526325277017*Math.sin(0.0169060504029192*(T-80.0856919827619)); 
}

function zeitdifferenz(Deklination)
{
	// Dauer des halben Tagbogens in Stunden: Zeit von Sonnenaufgang (Höhe h) bis zum höchsten Stand im Süden
	return 12.0*Math.acos((Math.sin(h) - Math.sin(B)*Math.sin(Deklination)) / (Math.cos(B)*Math.cos(Deklination)))/pi;
}

function zeitgleichung(T)
{
	// Differenz zwischen wahrer und mittlerer Sonnenzeit
	// formula 2008 by Arnold(at)Barmettler.com, fit to 20 years of average equation of time (2008-2017)
	return -0.170869921174742*Math.sin(0.0336997028793971 * T + 0.465419984181394) - 0.129890681040717*Math.sin(0.0178674832556871*T - 0.167936777524864);
}

function f_sunrise (T)
{
	DK = sonnendeklination(T);
	return 12 - zeitdifferenz(DK) - zeitgleichung(T);
}

function f_sunset (T)
{
	DK = sonnendeklination(T);
	return 12 + zeitdifferenz(DK) - zeitgleichung(T);
}

function getSunrise ()
{
	Laenge = 6;
	Breite = 51;
	// Winterzeit
  // zone 	= 1;
  // Sommerzeit
  // zone 	= 2;
  Zone = 2;
	T = dayOfYear(); // Tag im Jahr
	B = Breite*RAD; // geogr. Breite in Radians
	
	// Berechnung von Sonnenauf- und -Untergang
	sunrise    = f_sunrise (T); // Sonnenaufgang bei 0° Länge
	sunset  = f_sunset (T);// Sonnenuntergang bei 0° Länge
	
	sunrise = sunrise - Laenge /15.0 + Zone; // Sonnenaufgang bei gesuchter Länge und Zeitzone in Stunden
	sunset = sunset - Laenge /15.0 + Zone; // Sonnenuntergang bei gesuchter Länge und Zeitzone in Stunden
	
	var arrSunrise = new Array (sunrise, sunset);

  return arrSunrise;
	
}

function dayOfYear() 
{
   var datum;
   var tag;
   var monat;
   var jahr;
   var tage = -1;
   datum = new Date();
   tag = datum.getDate();
   jahr = datum.getFullYear();
   monat = datum.getMonth() + 1;
  
   for ( zaehler=1; zaehler<monat; zaehler++ )
   {
    tage += (new Date( jahr, zaehler, 0 )).getDate();
   }
   tage += tag;
  
   return tage;
}




