
function lib(JJJJ,MM,DD,HH,geoBr,geoBreite,geoLaenge)
{
  var j=JJJJ; var m=MM;
  if (m<=2) {j--; m=m+12}
  var B=Math.floor(j/400)-Math.floor(j/100);
  if (JJJJ<=1582 && MM<=10 && DD<=4) B=-2;   
  var JD0=Math.floor(365.25*j)+Math.floor(30.6001*(m+1))+B+1720996.5+DD;
  var JD=JD0+HH/24;
  var d=JD-2451545;
  var T=d/36525; 

var SZstunde = 6.656306+0.0657098242*(JD0-2445700.5)+1.0027379093*HH-geoLaenge/15;
var SZgrad = SZstunde*15;

var SZrad = Math.PI*SZgrad/180;

var L0 = (218.31665+481267.88134*T-0.001327*T*T)/360;
var lm = (134.96341+477198.86763*T+0.008997*T*T)/360;
var ls = (357.52911+35999.05029*T+0.000154*T*T)/360;
var F = (93.27210+483202.01753*T-0.003403*T*T)/360;
var D = (297.85020+445267.11152*T-0.001630*T*T)/360;

var L0 = 2*Math.PI*(L0-Math.floor(L0)); 
var lm = 2*Math.PI*(lm-Math.floor(lm));
var ls = 2*Math.PI*(ls-Math.floor(ls));
var F = 2*Math.PI*(F-Math.floor(F));
var D = 2*Math.PI*(D-Math.floor(D));

var dlampda = 22640*Math.sin(lm) +769*Math.sin(2*lm) +36*Math.sin(3*lm) -4586*Math.sin(lm-2*D) +2370*Math.sin(2*D) -668*Math.sin(ls) -412*Math.sin(2*F) -212*Math.sin(2*lm-2*D) -206*Math.sin(lm+ls-2*D) +192*Math.sin(lm+2*D) -165*Math.sin(ls-2*D) +148*Math.sin(lm-ls) -125*Math.sin(D) -110*Math.sin(lm+ls) -55*Math.sin(2*F-2*D);
var lampda = L0+Math.PI*dlampda/(3600*180);

var beta = 18520*Math.sin(F +lampda -L0 +0.114*Math.PI*Math.sin(2*F)/180 +0.150*Math.PI*Math.sin(ls)/180) -526*Math.sin(F-2*D) 
+44*Math.sin(lm+F-2*D) 
-31*Math.sin(F-lm-2*D) 
-25*Math.sin(F-2*lm) 
-23*Math.sin(ls+F-2*D) 
+21*Math.sin(F-lm) 
+11*Math.sin(F-ls-2*D);
beta = beta/3600;
beta = beta*Math.PI/180;

var km = 385000 -20905*Math.cos(lm) -570*Math.cos(2*lm) -3699*Math.cos(2*D-lm)
         -2956*Math.cos(2*D) +246*Math.cos(2*lm-2*D) -205*Math.cos(ls-2*D)
         -171*Math.cos(lm+2*D)-152*Math.cos(lm+ls-2*D);

   
var EKL = (23.439291-0.013004*T)*Math.PI/180;

var x = Math.cos(beta)*Math.cos(lampda);
var y = Math.cos(EKL)*Math.cos(beta)*Math.sin(lampda)-Math.sin(EKL)*Math.sin(beta);
var alpha = Math.atan(y/x);
if (x<0) alpha = alpha+Math.PI

var delta = (Math.sin(EKL)*Math.cos(beta)*Math.sin(lampda))+(Math.cos(EKL)*Math.sin(beta));
var delta = Math.asin(delta);

var erdr=6378.14-21.38*Math.sin(geoBr)*Math.sin(geoBr);
var geozentrBr=geoBr-Math.PI*0.1924*Math.sin(2*geoBr)/180;

var xe=erdr*Math.cos(geozentrBr)*Math.cos(SZrad);
var ye=erdr*Math.cos(geozentrBr)*Math.sin(SZrad);
var ze=erdr*Math.sin(geozentrBr)

var xm=km*Math.cos(delta)*Math.cos(alpha);
var ym=km*Math.cos(delta)*Math.sin(alpha);
var zm=km*Math.sin(delta);

var xtopo=xm-xe;
var ytopo=ym-ye;
var ztopo=zm-ze;

var x=Math.sqrt(xtopo*xtopo+ytopo*ytopo+ztopo*ztopo);

var mondstopo=Math.sin(1734/x)*60*180/Math.PI;

   var z=Math.round(mondstopo*100)/100; 
   var nachnullen="";
   var zz=10*z;
   if ((zz-Math.floor(zz))==0) nachnullen="0"
   if ((z-Math.floor(z))==0) nachnullen=".00"
   var mondrtopo=z+nachnullen+"'&#160;";   

var alphatopo=Math.atan(ytopo/xtopo);
if (xtopo<0) alphatopo=alphatopo+Math.PI

var deltatopo=Math.asin(ztopo/x);

var hoehe = Math.sin(geoBr)*Math.sin(deltatopo)+Math.cos(geoBr)*Math.cos(delta)*Math.cos(SZrad-alphatopo);
var hoehe = Math.asin(hoehe);
var z = 180*hoehe/Math.PI;
var Hoehe=Math.round(z)+"°&#160;"; 
    

var Phasenwinkel = 180-180*D/Math.PI -6.289*Math.sin(lm)+2.100*Math.sin(ls)-1.274*Math.sin(2*D-lm)-0.658*Math.sin(2*D)-0.214*Math.sin(2*lm)-0.110*Math.sin(D);

var k = (1+Math.cos(Phasenwinkel*Math.PI/180))/2;

var k1 = Math.floor(k*100);
if (k1<10) kk="0"+k1;
var kk = "0."+k1;
 if (k>0.998)  kk="1.00";

var E1 = (124.35-0.052992*d)*Math.PI/180;
var E2 = (248.69-0.105984*d)*Math.PI/180;
var E3 = (259.30+13.012000*d)*Math.PI/180;
var E4 = (175.93+13.340716*d)*Math.PI/180;
var E5 = (357.52+0.985600*d)*Math.PI/180;

var alpha0 = 270-3.878*Math.sin(E1)-0.120*Math.sin(E2)
+0.070*Math.sin(E3)-0.017*Math.sin(E4);
var alpha0 = alpha0*Math.PI/180;

var delta0 = 66.561+1.543*Math.cos(E1)+0.024*Math.cos(E2)
-0.028*Math.cos(E3)+0.007*Math.cos(E4);
var delta0 = delta0*Math.PI/180;

var W = 38.316+13.17639647*d+3.558*Math.sin(E1)
+0.121*Math.sin(E2)-0.064*Math.sin(E3)
+0.016*Math.cos(E5)+0.025*Math.sin(E5);
var W = W/360;
var W = 360*(W-Math.floor(W));
if (W<0) W=W+360;

var dA = alpha0-alphatopo;

var x = -Math.cos(delta0)*Math.sin(deltatopo)+Math.sin(delta0)*Math.cos(deltatopo)*Math.cos(dA);
var y = Math.cos(deltatopo)*Math.sin(dA);
var K = Math.atan(x/y);
if (y<0) K=K+Math.PI;
var K = 180*K/Math.PI;
if (K<0) K=K+360;

var llib = K-W;
if (llib>360) llib=llib-360;
if (llib>180) llib=llib-360;

   var z=Math.round(llib*10)/10; 
   var nachnullen="";
   if ((z-Math.floor(z))==0) nachnullen=".0"
   var Llib=z+nachnullen+"°&#160;";   
   
var Blib = -Math.sin(delta0)*Math.sin(deltatopo)
-Math.cos(delta0)*Math.cos(deltatopo)*Math.cos(dA);
var blib = 180*Math.asin(Blib)/Math.PI;

   var z=Math.round(blib*10)/10; 
   var nachnullen="";
   if ((z-Math.floor(z))==0) nachnullen=".0"
   var Blib=z+nachnullen+"°&#160;";   

var dlib=Math.sqrt(Math.abs(llib*llib+blib*blib));
if (dlib>180)  dlib=360-dlib;
   var z=Math.round(dlib*10)/10; 
   var nachnullen="";
   if ((z-Math.floor(z))==0) nachnullen=".0"
   var Dlib=z+nachnullen+"°";   

var wlib=Math.atan(blib/llib);  // Positionswinkel der gesamten Libration

   var z=Math.round(wlib*10)/10; 
   var nachnullen="";
   if ((z-Math.floor(z))==0) nachnullen=".0"
   var pw=z+nachnullen+"°&#160;";   

// Positionswinkel der Mondachse

var x=Math.cos(delta0)*Math.sin(dA);
var y=Math.sin(delta0)*Math.cos(deltatopo)-Math.cos(delta0)*Math.sin(deltatopo)*Math.cos(dA);
var Posmondtopo=Math.atan(x/y);
var Posmondtopo=180*Posmondtopo/Math.PI;

   var z=Math.round(Posmondtopo*10)/10; 
   var nachnullen="";
   if ((z-Math.floor(z))==0) nachnullen=".0"
   var Ptopo=z+nachnullen+"°&#160;";   
  
// Länge Sonne und Lichtgrenze

var esonne=0.016709;
var psonne=Math.PI*(282.9400+1.7192*T)/180;
var Msonne=Math.PI*(357.5256+35999.0498*T)/180;
var x=1.915*Math.sin(Msonne)+0.020*Math.sin(2*Msonne);
var lsonne=psonne+Msonne+Math.PI*x/180;
var RAsonne=Math.atan(Math.tan(lsonne)*Math.cos(EKL));
if (Math.cos(lsonne)<0) RAsonne=RAsonne+Math.PI
var DEsonne=Math.asin(Math.sin(lsonne)*Math.sin(EKL));

var dAsonne = alpha0-RAsonne;

var x = -Math.cos(delta0)*Math.sin(DEsonne)+Math.sin(delta0)*Math.cos(DEsonne)*Math.cos(dAsonne);
var y = Math.cos(DEsonne)*Math.sin(dAsonne);
var Ksonne = Math.atan(x/y);
if (y<0) Ksonne=Ksonne+Math.PI;
var Ksonne = 180*Ksonne/Math.PI;
if (Ksonne<0) Ksonne=Ksonne+360;
 
var lg=Ksonne-W+90;

var lg=Math.PI*lg/180;
var lg=Math.atan(Math.tan(lg));
var lg=180*lg/Math.PI;

   var z=Math.round(lg*10)/10; 
   var nachnullen="";
   if ((z-Math.floor(z))==0) nachnullen=".0"
   var lgs=z+nachnullen+"°&#160;";   

//Sichtbarkeit Rückseite


var WinkelgrössteBreite=180*Math.abs(wlib)/Math.PI;
if (WinkelgrössteBreite>90) WinkelgrössteBreite=180-WinkelgrössteBreite

var breite=WinkelgrössteBreite;
var vbreite=breite;

if (blib>0) breite=-WinkelgrössteBreite   // Breite, wenn Rückseite zugewandt
if (blib<0) vbreite=-WinkelgrössteBreite  // Breite, wenn Vorderseite verkürzt

   var z=Math.round(-breite);    
   var breite=z+"°";
 
   var z=Math.round(-vbreite);   
   var vbreite=z+"°"; 

// Auswertungen

var Seite="unbeleuchtet";
if (((Math.sin(D)>0) && (llib>0)) ||((Math.sin(D)<0) && (llib<0))) Seite="beleuchtet"
 
var Mond="sichtbar";
if (k<0.1) Mond="schmale Sichel"
if (k<0.05) Mond="unsichtbar"

var Groesse="normal";
if (dlib<8) Groesse="normal"
if (dlib<2) Groesse="wenig"
if (dlib>=7.95) Groesse="max"

var Auswertungen="&#160;";

if (Seite=="beleuchtet" && Groesse=="normal") Auswertungen="Rückseite bei B = "+breite+" um "+ Dlib +" zugewandt."
if (Seite=="beleuchtet" && Groesse=="max") Auswertungen="Rückseite bei B = "+breite+" um "+"<b>"+ Dlib +"</b>"+" zugewandt."
if (Seite=="unbeleuchtet" && Groesse=="normal")

Auswertungen="Vorderseite bei B = "+vbreite+" um "+ Dlib +" verkürzt."
if (Seite=="unbeleuchtet" && Groesse=="max")
 
Auswertungen="Vorderseite bei B = "+vbreite+" um "+"<b>"+ Dlib +"</b>"+" verkürzt."
if (Seite=="beleuchtet" && Groesse=="wenig") Auswertungen="Libration kleiner 2°."

if (Mond=="schmale Sichel") Auswertungen="schmale Sichel (k=" + kk + ")"
if (Mond=="unsichtbar") Auswertungen="unsichtbar (k=" + kk + ")"

// Datenausgabe
 
if (hoehe<=0)
{
document.write("<td colspan=7 width=604 bgcolor=#FAF0E6>");
document.write("&#160;","Mond unter dem Horizont");
document.write("</td>");
}
else
{
document.write("<td width=42 align=right>");
document.write(Hoehe);
document.write("</td>");

document.write("<td width=48 align=center>");
document.write(mondrtopo);
document.write("</td>");

document.write("<td width=52 align=right>");
document.write(lgs+"&#160;");
document.write("</td>");

document.write("<td width=48 align=right>");
document.write(Ptopo);
document.write("</td>");

document.write("<td width=48 align=right>");
document.write(Llib);
document.write("</td>");

document.write("<td width=48 align=right>");
document.write(Blib);
document.write("</td>");

document.write("<td width=370>");
document.write("&#160;"+Auswertungen);
document.write("</td>");

}
}
