//
//
// Funktionen
//
function Deklination(tn)
{
 arg = 360 * (284 + tn)/365;
 arg = bm(arg);
 d = 23.4 *  Math.sin(arg);
 return d;
}

function Zeitgleichung(tn)
{
 z = 8 * Math.sin(bm(360 / 365.25 * (tn - 185))) + 10 * Math.sin(bm(720 / 365.25 * (tn - 79)));
 return z;
}

function Tageswinkel(b,d)
{
  w = ( Math.sin(bm(-0.833)) - Math.sin(bm(b)) * Math.sin(bm(d)) )   /   (Math.cos(bm(b))*Math.cos(bm(d)));
 if (Math.abs(w)<1)
 {
  w = Math.acos(w);
  wt = grad(w);
 }
 else { wt=180; }
 return wt;
}

function Kulmination(zg,l,zP)
{
  tk = 13 - (z + 4 * l) / 60 + Math.floor((l - 7.5) / 15) + zP; 
  return tk;
}

function Westpunkt(b,d)
{
  w = Math.tan(bm(d))/Math.tan(bm(b));
  wp = grad(Math.acos(w));
  if (isNaN(wp)) { wp=0; }
  return wp;
}

function Ostpunkt(b,d)
{
 w = Math.tan(bm(d))/Math.tan(bm(b));
 op = (-1) * grad(Math.acos(w));
 if (isNaN(op)) {  op = 0; }
 return op;
}

function Stundenwinkel(z,tk)
{
 stdwinkel = (z - tk) * 15;
 return stdwinkel;
}

function Altitute(zt,dc,tk,Br)
{
 d = bm(dc);
 t = bm(Stundenwinkel(zt,tk));
 b = bm(Br);
 sinh = Math.cos(d) * Math.cos(t)* Math.cos(b) + Math.sin(d) * Math.sin(b);
 al = grad(Math.asin(sinh));
 return al;
}

function Azimut(zt,dc,tk,Br,oP,wP)
{
 d = bm(dc);
 var t1 = Stundenwinkel(zt,tk);
 t =  bm(t1);
 h = bm(Altitute(zt,dc,tk,Br));
 sinA = Math.cos(d) * Math.sin(t) / Math.cos(h);
 az = grad(Math.asin(sinA));
 if (t1 < oP)
 {
  az = - 90 - (90 + az);
 }
 if (t1 > wP)
 {
  az = 90 + (90 - az);
 }
 return az;
} 

function wahreFlaeche(zt,abw,dn,dc,tk,Br,oP,wP,v1,v2,v3)
{
 var altitute
 var azimut
 var verg
 var erg
 //alert ("Zeit " + zt + "; Abw: " + abw + "; Dachn: " + dn + "; Dek: " + dc + "; Breite: " + Br + "; Op: " + oP + "; wP: " + wp);

 // Errechnung der Altitute
 altitute = Altitute(zt,dc,tk,Br);
 //
 // Errechnung des Azimuts
 azimut = Azimut(zt,dc,tk,Br,oP,wP);
 //
 var sv1
 var sv2
 var sv3
 var nv1 = v1;
 var nv2 = v2;
 var nv3 = v3;
 
 var erg = 0;
 // Errechnung der wahren Fl"che

 if (altitute>0)
 {
  sv1 = Vektor1(azimut,altitute);
  sv2 = Vektor2(azimut,altitute);
  sv3 = Vektor3(azimut,altitute);

  //alert (sv1 + "\n" + sv2 + "\n" +  sv3 + "\n"); 
  //alert (nv1 + "\n" + nv2 + "\n" +  nv3 + "\n"); 
  // Koeffizient der wahren Fl"che
  verg = ( nv1*sv1  +  nv2 * sv2 + nv3*sv3) / ( Math.sqrt( sv1*sv1  +  sv2 * sv2 + sv3*sv3) * Math.sqrt( nv1*nv1  +  nv2 * nv2 + nv3*nv3));
  
  //verg = ( nv[0]*sv[0]  +  nv[1] * sv[1] + nv[2]*sv[2]) / ( Math.sqrt( sv[0]*sv[0]  +  sv[1] * sv[1] + sv[2]*sv[2]) * Math.sqrt( nv[0]*nv[0]  +  nv[1] * nv[1] + nv[2]*nv[2]));
   if (verg>0) { erg = verg; }
 }
 return erg;
}

function effStunden(abw,dn,dc,tk,Br,oP,wP,G,v1,v2,v3)
{
 var sw = 1/G;
 var gz = 0;
 for (z=0;z<24;z=z+ sw)
 {
  gz = gz + wahreFlaeche(z,abw,dn,dc,tk,Br,oP,wP,v1,v2,v3);
 }
 gz = gz / G;
 return gz;
}

function StundenWert(abw,dn,dc,tk,Br,oP,wP,G,v1,v2,v3,a)
{
 var sw = 1/G;
 var gz = 0;
 for (z=a;z<a+1;z=z+ sw)
 {
  gz = gz + wahreFlaeche(z,abw,dn,dc,tk,Br,oP,wP,v1,v2,v3);
 }
 gz = gz / G;
 return gz;
}



function bm(winkel)
{
 w = 2 * pi * winkel/360;
 return w;
}

function grad(z)
{
 w = z * 360 / (2*pi);
 return w;
}

function Vektor1(al,be)
{
 var v1 = 0;

 if (al >= 0 && al <= 180)
 {
  v1=1;
 }

 if (al < 0 && al >= -180)
 {
   v1 = -1;
 }
 if (be==90) {  v1=0; }
 return v1;
}

function Vektor2(al,be)
{
 var v2 =0;

 if (al >= 0 && al < 90)
 {
  v2 = Math.tan(bm(90-al));
 }

 if (al > 90 && al <= 180)
 {
   v2 = - Math.tan(bm(al-90));
 }
 if (al < 0 && al > -90)
 {
   v2 =  Math.tan(bm(90+al));   ///
 }
 if (al < -90 && al >= -180)
 {
   v2 =  - Math.tan(bm(-al - 90));
 }
 if (al == 90 || al == -90) { v2 = 0; }
 if (be==90) { v2=0; }

 return v2;
}

function Vektor3(al,be)
{
 var v3
 var ne
 var za = Math.tan(bm(be));
 if (al >= 0 && al < 90)
 {
  ne = Math.cos(bm(90-al));
 }
 if (al > 90 && al <= 180)
 {
   ne = Math.cos(bm(al-90));
 }
 if (al < 0 && al > -90)
 {
   ne = Math.cos(bm(90+al));  
  }
 if (al < -90 && al >= -180)
 {
   ne = Math.cos(bm(-al - 90));
 }
 v3 = za/ne;
 if (al == 90 || al == - 90) { v3 = Math.tan(bm(be)); }
 //v3 = Math.abs(za/ne);
 return v3;
}

var vv1 = Vektor1(vdir);
var vv2 = Vektor2(vdir);
var vv3 = Vektor3(vdir,90-vneig);