pi=Math.PI;DEG=pi/180.0;RAD=180./pi;function sqr(x){return x*x}function Int(x){if(x<0){return(Math.ceil(x))}else return(Math.floor(x))}function frac(x){return(x-Math.floor(x))}function Mod(a,b){return(a-Math.floor(a/b)*b)}function Mod2Pi(x){x=Mod(x,2.*pi);return(x)}function round100000(x){return(Math.round(100000.*x)/100000.)}function round10000(x){return(Math.round(10000.*x)/10000.)}function round1000(x){return(Math.round(1000.*x)/1000.)}function round100(x){return(Math.round(100.*x)/100.)}function round10(x){return(Math.round(10.*x)/10.)}var empty="--";function HHMM(hh){if(hh==0)return(empty);m=frac(hh)*60.;var h=Int(hh);if(m>=59.5){h++;m-=60.}m=Math.round(m);if(h<10)h="0"+h;h=h+":";if(m<10)h=h+"0";h=h+m;return(h)}function HHMMSS(hh){if(hh==0)return(empty);m=frac(hh)*60;var h=Int(hh);s=frac(m)*60.;m=Int(m);if(s>=59.5){m++;s-=60.}if(m>=60){h++;m-=60}s=Math.round(s);if(h<10)h="0"+h;h=h+":";if(m<10)h=h+"0";h=h+m+":";if(s<10)h=h+"0";h=h+s;return(h+" = "+round10000(hh))}function CalcJD(day,month,year){jd=2415020.5-64;if(month<=2){year--;month+=12}jd+=Int((year-1900)*365.25);jd+=Int(30.6001*(1+month));return(jd+day)}function GMST(JD){var UT=frac(JD-0.5)*24.;JD=Math.floor(JD-0.5)+0.5;var T=(JD-2451545.0)/36525.0;T0=6.697374558+T*(2400.051336+T*0.000025862);return(Mod(T0+UT*1.002737909,24.))}function GMST2UT(JD,gmst){JD=Math.floor(JD-0.5)+0.5;var T=(JD-2451545.0)/36525.0;var T0=Mod(6.697374558+T*(2400.051336+T*0.000025862),24.);var UT=0.9972695663*((gmst-T0));return(UT)}function GMST2LMST(gmst,lon){var lmst=Mod(gmst+RAD*lon/15,24.);return(lmst)}function Ecl2Equ(coor,TDT){T=(TDT-2451545.0)/36525.;eps=(23.+(26+21.45/60.)/60.+T*(-46.815+T*(-0.0006+T*0.00181))/3600.)*DEG;var coseps=Math.cos(eps);var sineps=Math.sin(eps);var sinlon=Math.sin(coor.lon);coor.ra=Mod2Pi(Math.atan2((sinlon*coseps-Math.tan(coor.lat)*sineps),Math.cos(coor.lon)));coor.dec=Math.asin(Math.sin(coor.lat)*coseps+Math.cos(coor.lat)*sineps*sinlon);return coor}function Equ2Altaz(coor,TDT,geolat,lmst){var cosdec=Math.cos(coor.dec);var sindec=Math.sin(coor.dec);var lha=lmst-coor.ra;var coslha=Math.cos(lha);var sinlha=Math.sin(lha);var coslat=Math.cos(geolat);var sinlat=Math.sin(geolat);var N=-cosdec*sinlha;var D=sindec*coslat-cosdec*coslha*sinlat;coor.az=Mod2Pi(Math.atan2(N,D));coor.alt=Math.asin(sindec*sinlat+cosdec*coslha*coslat);return coor}function GeoEqu2TopoEqu(coor,observer,lmst){var cosdec=Math.cos(coor.dec);var sindec=Math.sin(coor.dec);var coslst=Math.cos(lmst);var sinlst=Math.sin(lmst);var coslat=Math.cos(observer.lat);var sinlat=Math.sin(observer.lat);var rho=observer.radius;var x=coor.distance*cosdec*Math.cos(coor.ra)-rho*coslat*coslst;var y=coor.distance*cosdec*Math.sin(coor.ra)-rho*coslat*sinlst;var z=coor.distance*sindec-rho*sinlat;coor.distanceTopocentric=Math.sqrt(x*x+y*y+z*z);coor.decTopocentric=Math.asin(z/coor.distanceTopocentric);coor.raTopocentric=Mod2Pi(Math.atan2(y,x));return coor}function EquPolar2Cart(lon,lat,distance){var cart=new Object();rcd=Math.cos(lat)*distance;cart.x=rcd*Math.cos(lon);cart.y=rcd*Math.sin(lon);cart.z=distance*Math.sin(lat);return(cart)}function Observer2EquCart(lon,lat,height,gmst){flat=298.257223563;aearth=6378.137;var cart=new Object();co=Math.cos(lat);si=Math.sin(lat);fl=1.0-1.0/flat;fl=fl*fl;si=si*si;u=1.0/Math.sqrt(co*co+fl*si);a=aearth*u+height;b=aearth*fl*u+height;radius=Math.sqrt(a*a*co*co+b*b*si);cart.y=Math.acos(a*co/radius);cart.x=lon;if(lat<0.0){cart.y=-cart.y}cart=EquPolar2Cart(cart.x,cart.y,radius);x=cart.x;y=cart.y;rotangle=gmst/24*2*pi;cart.x=x*Math.cos(rotangle)-y*Math.sin(rotangle);cart.y=x*Math.sin(rotangle)+y*Math.cos(rotangle);cart.radius=radius;cart.lon=lon;cart.lat=lat;return(cart)}function SunPosition(TDT,geolat,lmst){var D=TDT-2447891.5;var eg=279.403303*DEG;var wg=282.768422*DEG;var e=0.016713;var a=149598500;var diameter0=0.533128*DEG;var MSun=360*DEG/365.242191*D+eg-wg;var nu=MSun+360.*DEG/pi*e*Math.sin(MSun);var sunCoor=new Object();sunCoor.lon=Mod2Pi(nu+wg);sunCoor.lat=0;sunCoor.anomalyMean=MSun;sunCoor.distance=(1-sqr(e))/(1+e*Math.cos(nu));sunCoor.diameter=diameter0/sunCoor.distance;sunCoor.distance*=a;sunCoor.parallax=6378.137/sunCoor.distance;sunCoor=Ecl2Equ(sunCoor,TDT);if(geolat!=null&&lmst!=null){sunCoor=Equ2Altaz(sunCoor,TDT,geolat,lmst)}return sunCoor}function MoonPosition(sunCoor,TDT,observer,lmst){var D=TDT-2447891.5;var l0=318.351648*DEG;var P0=36.340410*DEG;var N0=318.510107*DEG;var i=5.145396*DEG;var e=0.054900;var a=384401;var diameter0=0.5181*DEG;var parallax0=0.9507*DEG;var l=13.1763966*DEG*D+l0;var MMoon=l-0.1114041*DEG*D-P0;var N=N0-0.0529539*DEG*D;var C=l-sunCoor.lon;var Ev=1.2739*DEG*Math.sin(2*C-MMoon);var Ae=0.1858*DEG*Math.sin(sunCoor.anomalyMean);var A3=0.37*DEG*Math.sin(sunCoor.anomalyMean);var MMoon2=MMoon+Ev-Ae-A3;var Ec=6.2886*DEG*Math.sin(MMoon2);var A4=0.214*DEG*Math.sin(2*MMoon2);var l2=l+Ev+Ec-Ae+A4;var V=0.6583*DEG*Math.sin(2*(l2-sunCoor.lon));var l3=l2+V;var N2=N-0.16*DEG*Math.sin(sunCoor.anomalyMean);var moonCoor=new Object();moonCoor.lon=Mod2Pi(N2+Math.atan2(Math.sin(l3-N2)*Math.cos(i),Math.cos(l3-N2)));moonCoor.lat=Math.asin(Math.sin(l3-N2)*Math.sin(i));moonCoor.orbitLon=l3;moonCoor=Ecl2Equ(moonCoor,TDT);moonCoor.distance=(1-sqr(e))/(1+e*Math.cos(MMoon2+Ec));moonCoor.diameter=diameter0/moonCoor.distance;moonCoor.parallax=parallax0/moonCoor.distance;moonCoor.distance*=a;if(observer!=null&&lmst!=null){moonCoor=GeoEqu2TopoEqu(moonCoor,observer,lmst);moonCoor.raGeocentric=moonCoor.ra;moonCoor.decGeocentric=moonCoor.dec;moonCoor.ra=moonCoor.raTopocentric;moonCoor.dec=moonCoor.decTopocentric;moonCoor=Equ2Altaz(moonCoor,TDT,observer.lat,lmst)}moonCoor.moonAge=Mod2Pi(l3-sunCoor.lon);moonCoor.phase=0.5*(1-Math.cos(moonCoor.moonAge));var phases=new Array("Neumond","zunehmend","zunehmend","zunehmend","Vollmond","abnehmend","abnehmend","abnehmend","Neumond");var mainPhase=1./29.53*360*DEG;var p=Mod(moonCoor.moonAge,90.*DEG);if(p<mainPhase||p>90*DEG-mainPhase)p=2*Math.round(moonCoor.moonAge/(90.*DEG));else p=2*Math.floor(moonCoor.moonAge/(90.*DEG))+1;moonCoor.moonPhase=phases[p];return(moonCoor)}function Refraction(alt){var altdeg=alt*RAD;if(altdeg<-2||altdeg>=90)return(0);var pressure=1015;var temperature=10;if(altdeg>15)return(0.00452*pressure/((273+temperature)*Math.tan(alt)));var y=alt;var D=0.0;var P=(pressure-80.)/930.;var Q=0.0048*(temperature-10.);var y0=y;var D0=D;for(i=0;i<3;i++){N=y+(7.31/(y+4.4));N=1./Math.tan(N*DEG);D=N*P/(60.+Q*(N+39.));N=y-y0;y0=D-D0-N;if((N!=0.)&&(y0!=0.)){N=y-N*(alt+D-y)/y0}else{N=alt+D}y0=y;D0=D;y=N}return(D)}function GMSTRiseSet(coor,lon,lat,h){var h=(h==null)?0.:h;var riseset=new Object();var tagbogen=Math.acos((Math.sin(h)-Math.sin(lat)*Math.sin(coor.dec))/(Math.cos(lat)*Math.cos(coor.dec)));riseset.transit=RAD/15*(+coor.ra-lon);riseset.rise=24.+RAD/15*(-tagbogen+coor.ra-lon);riseset.set=RAD/15*(+tagbogen+coor.ra-lon);riseset.transit=Mod(riseset.transit,24);riseset.rise=Mod(riseset.rise,24);riseset.set=Mod(riseset.set,24);return(riseset)}function InterpolateGMST(gmst0,gmst1,gmst2,timefactor){return((timefactor*24.07*gmst1-gmst0*(gmst2-gmst1))/(timefactor*24.07+gmst1-gmst2))}function RiseSet(jd0UT,coor1,coor2,lon,lat,timeinterval,altitude){var alt=0.;var altitude=(altitude==null)?0.:altitude;if(!altitude)alt=0.5*coor1.diameter-coor1.parallax+34./60*DEG;var rise1=GMSTRiseSet(coor1,lon,lat,altitude);var rise2=GMSTRiseSet(coor2,lon,lat,altitude);var rise=new Object();if(rise1.transit>rise2.transit&&Math.abs(rise1.transit-rise2.transit)>18)rise2.transit+=24;if(rise1.rise>rise2.rise&&Math.abs(rise1.rise-rise2.rise)>18)rise2.rise+=24;if(rise1.set>rise2.set&&Math.abs(rise1.set-rise2.set)>18)rise2.set+=24;var T0=GMST(jd0UT);var T02=T0-lon*RAD/15*1.002738;if(T02<0)T02+=24;if(rise1.transit<T02){rise1.transit+=24;rise2.transit+=24}if(rise1.rise<T02){rise1.rise+=24;rise2.rise+=24}if(rise1.set<T02){rise1.set+=24;rise2.set+=24}var decMean=0.5*(coor1.dec+coor2.dec);var psi=Math.acos(Math.sin(lat)/Math.cos(decMean));var y=Math.asin(Math.sin(alt)/Math.sin(psi));var dt=240*RAD*y/Math.cos(decMean)/3600;rise.transit=GMST2UT(jd0UT,InterpolateGMST(T0,rise1.transit,rise2.transit,timeinterval));rise.rise=GMST2UT(jd0UT,InterpolateGMST(T0,rise1.rise,rise2.rise,timeinterval)-dt);rise.set=GMST2UT(jd0UT,InterpolateGMST(T0,rise1.set,rise2.set,timeinterval)+dt);return(rise)}function SunRise(JD,deltaT,lon,lat,zone,recursive){var jd0UT=Math.floor(JD-0.5)+0.5;var coor1=SunPosition(jd0UT+deltaT/24./3600.);var coor2=SunPosition(jd0UT+1.+deltaT/24./3600.);var risetemp=new Object();var rise=new Object();rise=RiseSet(jd0UT,coor1,coor2,lon,lat,1);if(!recursive){if(zone>0){if(rise.rise>=24-zone||rise.transit>=24-zone||rise.set>=24-zone){risetemp=SunRise(JD+1,deltaT,lon,lat,zone,1);if(rise.rise>=24-zone)rise.rise=risetemp.rise;if(rise.transit>=24-zone)rise.transit=risetemp.transit;if(rise.set>=24-zone)rise.set=risetemp.set}}else if(zone<0){if(rise.rise<-zone||rise.transit<-zone||rise.set<-zone){risetemp=SunRise(JD-1,deltaT,lon,lat,zone,1);if(rise.rise<-zone)rise.rise=risetemp.rise;if(rise.transit<-zone)rise.transit=risetemp.transit;if(rise.set<-zone)rise.set=risetemp.set}}rise.transit=Mod(rise.transit+zone,24.);rise.rise=Mod(rise.rise+zone,24.);rise.set=Mod(rise.set+zone,24.);risetemp=RiseSet(jd0UT,coor1,coor2,lon,lat,1,-6.*DEG);rise.cicilTwilightMorning=Mod(risetemp.rise+zone,24.);rise.cicilTwilightEvening=Mod(risetemp.set+zone,24.);risetemp=RiseSet(jd0UT,coor1,coor2,lon,lat,1,-12.*DEG);rise.nauticalTwilightMorning=Mod(risetemp.rise+zone,24.);rise.nauticalTwilightEvening=Mod(risetemp.set+zone,24.);risetemp=RiseSet(jd0UT,coor1,coor2,lon,lat,1,-18.*DEG);rise.astronomicalTwilightMorning=Mod(risetemp.rise+zone,24.);rise.astronomicalTwilightEvening=Mod(risetemp.set+zone,24.)}return(rise)}function MoonRise(JD,deltaT,lon,lat,zone,recursive){var timeinterval=0.5;var jd0UT=Math.floor(JD-0.5)+0.5;var suncoor1=SunPosition(jd0UT+deltaT/24./3600.);var coor1=MoonPosition(suncoor1,jd0UT+deltaT/24./3600.);var suncoor2=SunPosition(jd0UT+timeinterval+deltaT/24./3600.);var coor2=MoonPosition(suncoor2,jd0UT+timeinterval+deltaT/24./3600.);var risetemp=new Object();var rise=new Object();rise=RiseSet(jd0UT,coor1,coor2,lon,lat,timeinterval);if(!recursive){if(zone>0){riseprev=MoonRise(JD-1.,deltaT,lon,lat,zone,1);if(rise.transit>=24.-zone||rise.transit<-zone){if(riseprev.transit<24.-zone)rise.transit='';else rise.transit=riseprev.transit}if(rise.rise>=24.-zone||rise.rise<-zone){if(riseprev.rise<24.-zone)rise.rise='';else rise.rise=riseprev.rise}if(rise.set>=24.-zone||rise.set<-zone){if(riseprev.set<24.-zone)rise.set='';else rise.set=riseprev.set}}else if(zone<0){if(rise.rise<-zone||rise.set<-zone||rise.transit<-zone){risetemp=MoonRise(JD+1.,deltaT,lon,lat,zone,1);if(rise.rise<-zone){if(risetemp.rise>-zone)rise.rise='';else rise.rise=risetemp.rise}if(rise.transit<-zone){if(risetemp.transit>-zone)rise.transit='';else rise.transit=risetemp.transit}if(rise.set<-zone){if(risetemp.set>-zone)rise.set='';else rise.set=risetemp.set}}}if(rise.rise)rise.rise=Mod(rise.rise+zone,24.);if(rise.transit)rise.transit=Mod(rise.transit+zone,24.);if(rise.set)rise.set=Mod(rise.set+zone,24.)}return(rise)}function myCompute(){JD0=CalcJD(eval(this.Day),eval(this.Month),eval(this.Year));JD=JD0+(eval(this.Hour)-this.Zone+eval(this.Minute)/60.+eval(this.Second)/3600.)/24.;TDT=JD+eval(this.DeltaT.replace(/,/,'.'))/24./3600.;lat=eval(this.Lat.replace(/,/,'.'))*DEG;lon=eval(this.Lon.replace(/,/,'.'))*DEG;height=0*0.001;var gmst=GMST(JD);var lmst=GMST2LMST(gmst,lon);observerCart=Observer2EquCart(lon,lat,height,gmst);sunCoor=SunPosition(TDT,lat,lmst*15.*DEG);moonCoor=MoonPosition(sunCoor,TDT,observerCart,lmst*15.*DEG);this.MoonPhase=moonCoor.moonPhase;this.MoonPhaseNumber=round1000(moonCoor.phase);this.JD=round100000(JD);this.GMST=HHMMSS(gmst);this.LMST=HHMMSS(lmst);if(eval(this.Minute)<10)this.Minute="0"+eval(this.Minute);if(eval(this.Month)<10)this.Month="0"+eval(this.Month);this.sunRise=SunRise(JD0,eval(this.DeltaT.replace(/,/,'.')),lon,lat,eval(this.Zone),0);this.moonRise=MoonRise(JD0,eval(this.DeltaT.replace(/,/,'.')),lon,lat,eval(this.Zone),0)}function myOutput(){var now=new Date();thisYear=now.getYear();if(thisYear<1900){thisYear+=1900};document.write("&nbsp;");document.write("&nbsp;");document.write("<b>");document.write(":: Astronomische Daten f&uuml;r Karlsruhe, ");document.write(dayNames[now.getDay()]+" "+now.getDate()+". "+monthNames[now.getMonth()]+" "+ +thisYear);document.write("</b>");document.write("<br>");document.write("<br>");document.write("&nbsp;");document.write("&nbsp;");document.write("<img src=\"sunmoon/img/sonnenaufgang.png\" width=\"32\" height=\"32\" alt=\"Sonnenaufgang\">");document.write("&nbsp;");document.write("SA "+HHMM(this.sunRise.rise));document.write("&nbsp;");document.write("&nbsp;");document.write("<img src=\"sunmoon/img/sonnenuntergang.png\"  width=\"32\" height=\"32\"  alt=\"Sonnenuntergang\">");document.write("&nbsp;");document.write("SU "+HHMM(this.sunRise.set));document.write("&nbsp;");document.write("&nbsp;");document.write("&nbsp;");document.write("&nbsp;");document.write("&nbsp;");document.write("&nbsp;");document.write("<img src=\"sunmoon/img/mondaufgang.png\"  width=\"32\" height=\"32\"  alt=\"Mondaufgang\">");document.write("&nbsp;");document.write("MA "+HHMM(this.moonRise.rise));document.write("&nbsp;");document.write("&nbsp;");document.write("<img src=\"sunmoon/img/mondkulmination.png\" width=\"32\" height=\"32\"  alt=\"Mondtransit\">");document.write("&nbsp;");document.write("TR "+HHMM(this.moonRise.transit));document.write("&nbsp;");document.write("&nbsp;");document.write("<img src=\"sunmoon/img/monduntergang.png\" width=\"32\" height=\"32\" alt=\"Monduntergang\">");document.write("&nbsp;");document.write("MU "+HHMM(this.moonRise.set));document.write("<br>");document.write("<br>");document.write("&nbsp;");document.write("&nbsp;");document.write("Astron. Morgend&auml;mmerung Beginn: ");document.write(HHMM(this.sunRise.astronomicalTwilightMorning));document.write(" (MEZ)");document.write("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mondphase: "+(Math.round(this.MoonPhaseNumber*1000)/10)+" %   ("+this.MoonPhase+")");document.write("<br>");document.write("&nbsp;");document.write("&nbsp;");document.write("Astron. Abendd&auml;mmerung Ende: &nbsp;&nbsp;&nbsp;&nbsp;");document.write(HHMM(this.sunRise.astronomicalTwilightEvening));document.write(" (MEZ)")}function myform(){var now=new Date();this.Hour=now.getHours();this.Minute=now.getMinutes();if(this.Minute<10)this.Minute="0"+this.Minute;this.Second=now.getSeconds();if(this.Second<10)this.Second="0"+this.Second;this.Day=now.getDate();this.Month=now.getMonth()+1;if(this.Month<10)this.Month="0"+this.Month;if(now.getYear()<1900)this.Year=now.getYear()+1900;else this.Year=now.getYear();this.Zone=-now.getTimezoneOffset()/60.;this.sunRise;this.moonRise;this.MoonPhaseNumber;this.DeltaT="65";this.JD=empty;this.GMST=empty;this.LMST=empty;this.Lon="8.38583";this.Lat="49.0047";this.MoonLon=empty;this.MoonLat=empty;this.MoonRA=empty;this.MoonDec=empty;this.MoonAz=empty;this.MoonAlt=empty;this.MoonDistance=empty;this.MoonDistanceObserver=empty;this.MoonDiameter=empty;this.MoonPhase=empty;this.MoonAge=empty;this.MoonTransit=empty;this.MoonRise=empty;this.MoonSet=empty;this.SunRise=empty;this.SunSet=empty;this.SunAstronomicalTwilightMorning=empty;this.SunAstronomicalTwilightEvening=empty;this.output=myOutput;this.compute=myCompute}var form1=new myform();form1.compute();form1.output();

