<!-- **************************************************************************************************************
	* Diese HTML-Seite ist das Hauptprogramm und Eingabefenster für die Darstellung des Sonnen-
	* finsternispfades auf der Erdoberfläche in einer Weltkarte mit UTM-Gitter. Die Krümmung der Erd-
	* kugel wird dabei in eine Universelle Transversale Mercatorprojektion umgerechnet. Darum er-
	* scheinen die Länder und Kontinente ein wenig verzerrt.
	* Die Eingabe erfordert ein Datum, zu dem eine Sonnenfinsternis stattfindet. Man muss aber nicht
	* den Tag der Sonnenfinsternis treffen. Das Programm überprüft die Eingabe und verwendet dabei
	* den angegebenen Monat. Es wird dann entweder der Tag der Sonnenfinsternis ermittelt und 
	* verwendet oder es gibt eine Meldung, das es keine Sonnenfinsternis gibt.
	* Die Sommer- und Winterzeit wird am Datum automatisch ermittelt. Die Zeitzonen berechnet das
	* Programm automatisch.
	* Man kann die Schrittweite der Berechnungen in Länge und Breite wählen. In der Breite haben
	* wir 180 Grade und in der Länge 360. Daher sollte die Schrittweite der Breite die Hälfte der Länge
	* betragen. Je geringer die Werte, um so höher die Genauigkeit, aber auch die Rechenzeit.
	* Praktische Werte sind Länge=10° und Breite=5°.
 **************************************************************************************************************
	*  This HTML page is the main program and input window for the display of the sun
 	* dark pathways on the earth’s surface in a world map with UTM grid.  The curvature of the earth
 	*  sphere is converted into a Universal Transversal Mercator Projection.  That’s why he-
 	* countries and continents seem a little distorted.
 	*  The input requires a date on which a solar eclipse occurs.  You don’t have to
 	*  meet the day of the eclipse of the sun.  The program checks the input and uses it
 	*  the month indicated.  Either the day of the solar eclipse is determined and 
 	*  or there is a message that there is no solar eclipse.
 	*  The summer and winter time is determined automatically on the date.  The time zones computes the
 	*  Program automatically.
 	*  You can choose the step width of the calculations in length and width.  In width have
 	*  we 180 degrees and in length 360. Therefore, the step width of the width should be half the length
 	*  amount.  The lower the values, the higher the accuracy, but also the computing time.
 	*  Practical values are length=10°  and width=5°.
 ************************************************************************************************************** -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">

	<head>

		<title>[Orte der Sonnenfinsterisse]</title>
		
		<!-- Browser speichert keine Seite im Cache -->
		<!-- Browser does not store a page in the cache -->
		<meta http-equiv='cache-control' content='no-cache'>
		<meta http-equiv='expires' content='0'>
		<meta http-equiv='pragma' content='no-cache'>
		
		<style>
		
			/* ******************************
			 * ID des Body Tag Schriftfarbe
			 * und Hintergrundfarbe.
			* ID of the body tag font color
			* and background color.
			 *******************************/
			#b {
				background-color: #293133;
				color: #eadebd;
				border: 0px solid red;
				z-index: 0;
			}
			
			/* ******************************
			 * Tabellenspalten Beschreibung.
			 * Table Columns Description.
			 *******************************/
			#label {
				width: 120px;
				text-align: right;
				font-family: Tahoma,Arial,Helvetica;
				font-size: 14 px;
				font-weight: 500;
			}
			
			/* ******************************
			 * Tabellenspalten Werte.
			 * Table column values.
			 *******************************/
			#value {
				width: 100px;
				text-align: right;
				font-family: Tahoma,Arial,Helvetica;
				font-size: 14 px;
				font-weight: 500;
			}
			
			/* ******************************
			 * Wichtige Werte markieren.
			 * Mark important values.
			 *******************************/
			.color {
				color: red;
			}

			/* ******************************
			 * HTML input-Tag.
			 * HTML-Eingabe-Tag.
			 *******************************/
			input {
				font-family: Tahoma,Arial,Helvetica;
				font-size: 14 px;
				font-weight: 500;
			}
			
			/* ******************************
			 * HTML td-Tag.
			 * HTML-Spalten-Tag der textarea.
			 *******************************/
			#output {
				text-align: center;
			}
			
			/* ******************************
			 * HTML textarea-Tag.
			 * HTML-Textausgabe-Tag.
			 *******************************/
			#t{
				width: 600px;
				height: 300px;
				background-color: #4682B4;
				color: white;
			}
			
			/* ******************************
			 * HTML Div-Tag.
			 * Speedbar innerhalb der 
			 * Progressbar
			 *******************************/
			#speedbar {
				width:	0.0%;
				background-color: #04AA6D;
				height:	20px;
				padding: 0px;
				margin: 0px;
				vertical-align: middle;
			}
			
			/* ******************************
			 * HTML Div-Tag.
			 * Hüllt die speedbar ein
			 *******************************/
			#progressbar {
				width:	100%;
				background-color: white;
				height:	20px;
				padding: 0px;
				margin: 0px;
				border-color: lightgrey;
				border-width: 1px;
				border-style: solid;
			}
			
			/* ******************************
			 * HTML Input-Tag.
			 * Berechnungszeit
			 *******************************/
			#calctime {
				color: black;
				width:	50px;
			}
			
			/* ******************************
			 * HTML Input-Tag.
			 * DST
			 *******************************/
			#dst {
				color: black;
				width:	50px;
			}
			
			/* ******************************
			 * ID des div Tag und
			 * der Dialog Box.
			 *******************************/
			.box-hidden {
				display: none;
				border: 3px solid black;
				padding: 10px;
				background-color: lightblue;
				z-index:9999;
				/* Verhindert die Scrollbar */
				overflow: hidden;
				border-radius: 28px;
				}	
			
		</style>
		<!-- Muss demarkiert werden, wenn jQuery verwendet werden soll -->
		<!-- Must be demarcated if jQuery is to be used -->
		<script type="text/javascript" src="https://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
		<script>
		
			// Mit der Ausführung warten bis DOM geladen ist.
			// With the execution wait until DOM is loaded.
			document.addEventListener("DOMContentLoaded", function(event) {
				
					/* **************************** Externe Quelldateien Laden *********************************************** */	

					// Funktion zum Einfügen der einzelnen Javascript Dateien.
					// Function to insert the individual Javascript files.
					function include(file) { 
					  var script  = document.createElement('script'); 
					  script.src  = file; 
					  script.type = 'text/javascript'; 
					  script.defer = true; 
					  document.getElementsByTagName('head').item(0).appendChild(script); 
					}
					//  ************************** Für Lokale Installation *******************************
					// Variablendefinitionen und Deklarationen ...
					// definitions of variables and declarations ...
					include('./Globale-This.js');
					
					// Keyboard Event Funktionen, die von den Listenern benutzt werden
					// Datei muss hier lokal liegen, da andere Kontrollelemente verwendet werden
					include('./Keyboard.js');
					
					// Keyboard Eventlistener
					// Datei muss hier lokal liegen, da andere Kontrollelemente verwendet werden
					include('./Keyboard-Listener.js');
					
					// Nützliche Funktionen wie Sommerzeit/Winterzeit, Popup Öffnen ...
					// Useful functions like Daylight Savings Time, open popups ...
					include('../../../Bibliotheken/Utilities.js');

					// Funktionen zur Berechnungen/Konvertierung des Julianischen Datum
					// Functions for calculations/conversion of the Julian date
					include('../../../Bibliotheken/calculateJD.js');

					// Konvertierung von Uhrzeiten
					// Conversion of times
					include('../../../Bibliotheken/decTime.js');
					
					// Funktionen für die Mondpositionen
					// Functions for the moon positions
					include('../../../Bibliotheken/NewFullMoon.js');
					
					// Funktionen für die Mondpositionen
					// Functions for the moon positions
					include('../../../Bibliotheken/Moonpositions.js');
					
					// Funktionen für die Sonnenpositionen
					// Functions for the sun positions
					include('../../../Bibliotheken/Sunpositions.js');
					
					// Funktionen für die Sternzeit/Lokale Zeit
					// Functions for the siderial/local time
					include('../../../Bibliotheken/SiderialTime.js');
					
					// Funktionen für Sonnen Auf- und Untergang
					// Functions for the sunrise and sunset
					include('../../../Bibliotheken/SunRiseSet.js');
					
					// Funktionen für Mond Auf- und Untergang
					// Functions for the moonrise and moonset
					include('../../../Bibliotheken/MoonRiseSet.js');
					
					// Funktionen für die Berechnung der Objekthöhe über dem Horizont
					// Functions for calculating the object height above the horizon
					include('../../../Bibliotheken/ObjectHeight.js');
					
					// Funktionen und Eventlistener für Dialogfenster
					// Functions and event listener for dialog windows
					include('../../../Bibliotheken/divdialog.js');
					
				
					/*  ************************** Für Online Installation *******************************
					// Variablendefinitionen und Deklarationen ...
					// definitions of variables and declarations ...
					include('./Globale-This.js');
					
					// Keyboard Event Funktionen, die von den Listenern benutzt werden
					// Datei muss hier lokal liegen, da andere Kontrollelemente verwendet werden
					include('./Keyboard.js');
					
					// Keyboard Eventlistener
					// Datei muss hier lokal liegen, da andere Kontrollelemente verwendet werden
					include('./Keyboard-Listener.js');
					
					// Nützliche Funktionen wie Sommerzeit/Winterzeit, Popup Öffnen ...
					// Useful functions like Daylight Savings Time, open popups ...
					include('../../Bibliotheken/Utilities.js');

					// Funktionen zur Berechnungen/Konvertierung des Julianischen Datum
					// Functions for calculations/conversion of the Julian date
					include('../../Bibliotheken/calculateJD.js');

					// Konvertierung von Uhrzeiten
					// Conversion of times
					include('../../Bibliotheken/decTime.js');
					
					// Funktionen für die Mondpositionen
					// Functions for the moon positions
					include('../../Bibliotheken/NewFullMoon.js');
					
					// Funktionen für die Mondpositionen
					// Functions for the moon positions
					include('../../Bibliotheken/Moonpositions.js');
					
					// Funktionen für die Sonnenpositionen
					// Functions for the sun positions
					include('../../Bibliotheken/Sunpositions.js');
					
					// Funktionen für die Sternzeit/Lokale Zeit
					// Functions for the siderial/local time
					include('../../Bibliotheken/SiderialTime.js');
					
					// Funktionen für Sonnen Auf- und Untergang
					// Functions for the sunrise and sunset
					include('../../Bibliotheken/SunRiseSet.js');
					
					// Funktionen für Mond Auf- und Untergang
					// Functions for the moonrise and moonset
					include('../../Bibliotheken/MoonRiseSet.js');
					
					// Funktionen für die Berechnung der Objekthöhe über dem Horizont
					// Functions for calculating the object height above the horizon
					include('../../Bibliotheken/ObjectHeight.js');
					
					// Funktionen und Eventlistener für Dialogfenster
					// Functions and event listener for dialog windows
					include('../../Bibliotheken/divdialog.js');
					*/
				// Alles geladen inklusive Bilder.
				// Funktioniert nicht alleine: DOM muss vorher geleden sein und danach erst
				// der Windows Event Load.
				// All loaded including pictures. 
				// Does not work alone: DOM must be leden before and after
				// the Windows Event Load.
				window.addEventListener("load", function(){
					//Füllen der Datumsfelder mit dem aktuellen Datum.
					//Fill the date fields with the current date.
					objDay.value = d.getDate();				// Tag - Day
					objMonth.value = d.getMonth() + 1;	// Monat - Month
					objYear.value = d.getFullYear();		// Jahr - Year
					
					/* ********************** Funktionen die beim Laden ausgeführt werden ************************** */
					/* ******************************** Functions performed at loading ********************************* */
					
					// Erstellt einen neuen Kommuikationskanal an dem alle Hören und damit
					// Senden können.
					// Creates a new communication channel where all listening and thus
					// Can send.
					objChannel = new BroadcastChannel("comExtern");
					// Empfangsqueue (Datenempfang) von Grafikausgabefenster ...
					// Receive queue (data reception) of graphic output window ...
					objChannel.onmessage =  function(e){
						// Vom Grafikfenster gesendeten String zur Auswertung aufsplitten ...
						// Split the string sent by the graphic window for evaluation ...
						splitData1 = e.data.split("=");
						// Grafikfenster möchte Daten erhalten ...
						// Graphic window wants to receive data ...
						if(splitData1[0] == "senddataoutput"){
							sendDataOutput = true;
						// Die Verarbeitungszeit der Grafikausgabe zu späterem Vergleich speichern ...
						// Save the processing time of the graphic output for later comparison ...
						}else if(splitData1[0] == "delay"){
							DELAY1 = splitData1[1];
						}
						
					};
					
					// Wenn das Grafikausgabefenster nicht offen ist, starten ...
					// If the graphic output window is not open, start ...
					if (newWindow == null)
						newWindow = openNew("./outputData.html", "output", 1920, 600);

					/* ********************** Verwendete Event Handler - Used Event Listener ************************ */
					
					// Bei Klick auf den "Stop" Button wird die Berechnung unterbrochen ...
					// Clicking on the “Stop” button stops the calculation ...
					objStopCalc.addEventListener("click", function(){
						// Stop der Berechnung an Bakhground Worker senden ...
						// Send stop of the calculation to Background Worker ...
						w.postMessage("breakDown=true");
						//  ... "Stop" Button ausblenden ...
						// ... make the "Stop" button unusable ...
						objStopCalc.disabled = true;
						// ... und "Berechnen" Button bedienbar machen ...
						// ... and make “Calculate” button usable ...
						objCalc.disabled = false;
						// ... alle Variablen resten ...
						// ... reset all vrariables ...
						resetVars();
						// ... und dann die Seite neu Laden ...
						// ... and then the page reload ...
						location.reload(true);
					});
					
					// Wenn das SiderialTime Program beendet wird, dann Sende auf dem Kanal
					// diese Info, damit in Wordpress die Fenstervariable wieder zurückgesetzt
					// wird und das Programm wieder starten kann.
					//
					// If the SiderialTime Program is terminated, then send on the channel
					// this info, so that in Wordpress the window variable is reset
					// and the program can start again.
					window.addEventListener("beforeunload", function(event){
						// Wenn das grafische Ausgabefenster offen ist Schliessen.
						// Close when the graphical output window is open.
						if (newWindow) newWindow.close();
						// Sende an alle das das Grafikausgabefenster egschlossen ist.
						// Send everyone that the graphic output window is closed.
						objChannel.postMessage("moonsuneclipsepath is closed");
					});
					
					// Klick auf den Button "Berechnen" ... Programm startet hier ...
					// Click on the button "Calculate" . . . Program starts here . . .
					objCalc.addEventListener("click", function () {
						//  ... "Stop" Button anzeigen ...
						// ... show the "Stop" button ...
						objStopCalc.disabled = false;
						// ... und "Berechnen" Button unbedienbar machen ...
						// ... and make “Calculate” button unusable ...
						objCalc.disabled = true;
						// Startet die Berechnung.
						// Starts the calculation.
						start();
					});// End of Click auf "Berechnen" Button
					
					/* ********************************* Programm / Program ******************************* */
					
					// ******************** Neumond/ Newmoon bei Sonnenfinsternis ***********************
					function calcNewMoon(){
						// Berechnet das Julianische Datum des Neumondes. Der Wert ist aber nicht das Datum und Uhrzeit
						// des Neumondes. Es ist die Universal Time und muss weiter berechnet werden ...
						// Calculates the Julian date of the new moon. But the value is not the date and time
						// of the New Worlds. It is Universal Time and has to be calculated further. . .
						newmoon = newMoon(0,  0, objDay.value, objMonth.value, objYear.value, objJD, objJD0);
						// ... und berechne den Greenwich Datum mit Uhrzeit aus dem JD des Neumondes ...
						// ...  and get the Greenwich date with time from the JD of the new moon ...
						GDayNewMoon = julianDate2CalDay(newmoon);
						// ... und aus dem Greenwich Datum mit Uhrzeit den Tag des neumondes ...
						// ... and from the Greenwich date with time the day of the new moon ...
						GDayNewMoonInt = parseInt(GDayNewMoon);
						// ... und nun berechne den Greenwich Monat aus dem JD des Neumondes ...
						// ...  and now I’m going to work out the Greenwich month from the JD of the new moon...
						GMonthNewMoonInt = julianDate2CalMonth(newmoon);
						// ... und nun berechne das Greenwich Jahr aus dem JD des Neumondes ..
						// ...  and now the Greenwich year from the JD of the new moon ..
						GYearNewMoonInt = julianDate2CalYear(newmoon);
						// ... und nun berechne die UT aus dem Datum + Uhrzeit Neumond - Tag neumond ...
						// ...  and now get the UT from the date + time new moon – day new moon ...
						UTNewMoon = 24.0 *(GDayNewMoon - GDayNewMoonInt);
						// ... und nun berechne die lokale Zeit aus der UT des Vollmondes, 
						// Time Zone- u. Daylight Saving Offset und Datum des Vollmonds ...
						// ...  and now compute the local time from the UT of the New moon 
 						// Time  Zone & Daylight Saving Offset and Date of New Moon ...
						LCTNewMoon = ut2LocalTime(UTNewMoon , 0, 0, 0,  0, GDayNewMoonInt, GMonthNewMoonInt, GYearNewMoonInt);
						// ... und nun berechne das lokale Datum aus der UT des Neumondes, 
						// Time Zone- u. Daylight Saving Offset und Datum des Neumonds ...
						// ...  and now find the local date from the UT of the new moon, 
 						// Time  Zone & Daylight Saving Offset and Date of new Moon ...
						var arrLCTDateFromUTDateNew = ut2LocalDate(UTNewMoon, 0, 0, 0,  0, GDayNewMoonInt, GMonthNewMoonInt, GYearNewMoonInt);
						// im Ergebnisarray [0] steht der Tag ...
						// in the result array [ 0] is the day ...
						LCTDayNewMoon = arrLCTDateFromUTDateNew[0];
						// im Ergebnisarray [1] steht der Monat ...
						// in the result array [ 1] is themonth ...
						LCTMonthNewMoon = arrLCTDateFromUTDateNew[1];
						// im Ergebnisarray [2] steht das Jahr ...
						// in the result array [ 2] is the year ...
						LCTYearNewMoon = arrLCTDateFromUTDateNew[2];
						// .. und aus der lokalen Zeit des Vollmondes noch hh:mm:ss.ms ...
						// .. and from the local time of the New moon still hh: mm:ss.ms ...
						LCTTimeLocalNew = dectime2Time(LCTNewMoon, "string");
						// ... und trage die Werte in das Ausgabefeld ein Format: dd.mm.yyyy-Dez. Lokale Zeit-Dez. UT
						// ...  and enter the values in the output field of a format:  dd.mm.yyyy-dec. local time-dec. UT
						var sDate =  LPad(LCTDayNewMoon , 2, "0") + "." + LPad(LCTMonthNewMoon , 2, "0") + "." + LPad(LCTYearNewMoon , 4, "0")  + "-"
											+ LCTNewMoon + "-" + UTNewMoon + "-" + objDay.value + "-" + objMonth.value + "-" + objYear.value + "-" + newmoon;
											
						return(sDate);
					
					}// End of calcNewMoon()
			

					// Berechnungsstart - Start the calculation
					//
					function start(){
						// Prüfe vor dem Berechnungsbeginn noch einmal, ob nicht eine falsche Eingabe des Tages,
						// in Hinblick auf ein Schaltjahr und den Monat Februar, vorgenommen wurde. Dazu kann man
						// die Callback Funktion des Eventlisteners des Tages für die Änderung benutzen.
						// Check again before the calculation starts, if there is a wrong entry of the day, 
						// with regard to a leap year and the month February. To do this, you can use
						// the callback function of the event listener of the day for the change.
						keydownChangeDay(objDay, objMonth, objLeapYear);
						keydownChangeMonth(objMonth);
						keydownChangeYear(objYear, objLeapYear);
						keydownChangeLatStep(objLatStep, objLongStep);
						keydownChangeLongStep(objLongStep, objLatStep);
						// Mit der Funktion isLeapYear() und dem Parameter des
						// Berechnungsjahres (objYear.value) , wird festgestellt ob
						// es sich um ein Schaltjahr handelt und dies Ausgegeben.
						//
						// With the function isLeapYear () and the parameter of the
						// Calculation year (objYear. value), is determined whether
						// it is a leap year and this is output.
						if (isLeapYear(objYear.value))objLeapYear.value = "Ja";	else objLeapYear.value = "Nein";

						// Ergebnisstring Löschen ...
						// Delete the result string ...
						s = "";
						objText.value = s;
							
						// ************************************************************************************************
						// Alle Quellcodezeile vor der while() Schleife sind das Vorlesen.
						// ************************************************************************************************							
						// ... und berechne die Daten des Vollmonds mit dem Format ...
						// Vollmond dd.mm.yyyy - Vollmond dez. Lokale Zeit - Vollmond dez. UT 
						// - (Berechnungsdatum) Tag - Monat - Jahr - dez. julianisches Datum Vollmond
						// ... and enter the values in the output string in a format: 
						// Full moon dd.mm.yyyy -  Full moon dez.  Local time – Full moon dez.  UT
						// – (calculation date)   day – month – year - Dez.  Julian date full moon
						var newMoonSplitted = calcNewMoon();
						// ... danach splitte das Format in die einzelnen Teile auf, sie sind durch "-" getrennt ...
						var arrNewMoonSplitted = newMoonSplitted.split("-");
						// ... dann die einzelnen Komponenten des Datums Stunde, Minute, Sekunde ...
						// [0] = Stunde
						// [1] = Minute
						// [2] = Sekunde
						//  ...  then the individual components of the date hour, minute, second ...
 						// [0]  =  Hour
 						// [1]  =  Minute
 						// [2]  =  Second
						arrDate = arrNewMoonSplitted[0].split(".");
						// ****************************************************************************************************
						// Der Berechnungstag darf nicht dem Vollmondtag des Monats entsprechen. Tut er das oder
						// ist sogar größer, dann wird der Vollmond des nächsten Monats berechnet.
						// Daher muss man über die Konvertierung in ein Julianisches Datum solange einen Tag
						// abziegen, bis der Vollmond Monat gleich dem Berechnungsdatumsmonat ist.
						//
						// The calculation day shall not correspond to the full moon day of the month.  Does he do that, or
 						// is even larger, then the full moon of the next month is calculated.
 						// Therefore, you have to convert to a Julian date for as long as one day
 						// tick until the full moon month is equal to the calculation date month.
						// *****************************************************************************************************
						// Teste, ob der Rechner auf Sommer- o. Winterzeit steht ...
						// Test whether the computer is set to summer or winter time . . .
						ISDST = isDST(new Date(arrNewMoonSplitted[5], arrNewMoonSplitted[4], arrNewMoonSplitted[3] , 0, 0, 0, 0));
						// ... und stelle das Ausgabefeld so ein. Sommerzeit = 1, Winterzeit = 0
						// . . . and set the output field like this. DST = 1, winter time = 0
						if (ISDST)objDST.value = 1;	else	objDST.value = 0;
						// ... wiederhole die Schleife solange wie der Vollmond Monat größer ist
						// wie der Berechnungsmonat ...
						// ... repeat the loop as long as the full moon month is larger
 						// like the month of calculation ...
						var julianCalc = 0.0;
						var gregorDay = 0;
						while(Number(arrDate[1]) > Number(arrNewMoonSplitted[4])){
							// ************************************************************************************************
							// Alle Quellcodezeile innerhalb der while() Schleife sind das Nachlesen.
							// All source code lines within the while ()   Loops are the reading.
							// ************************************************************************************************
							// Zuerst das Berechnungsdatum in ein julianisches Datum wandeln ...
							//  First, convert the calculation date to a Julian date ...
							julianCalc = calDate2JulDate(arrNewMoonSplitted[3], arrNewMoonSplitted[4], arrNewMoonSplitted[5]);
							// ... dann den julianischen Wert minus 1 ...
							//  ... then the Julian value minus 1 ...
							julianCalc--;
							// ... und daraus einen gregor. Monat berechnen ...
							//  ... write the new tag in the text input field for the calculation day ...
							gregorDay = julianDate2CalDay(julianCalc);
							// ... den neuen Tag schreibe nun in das Texteingabefeld für den Berechnungstag ...
							//  ... write the new tag in the text input field for the calculation day ...
							objDay.value = gregorDay;
							// ... und mit diesem neuen Berechnungsdatum kalkuliere den Vollmond neu ...
							// ... für eine Berschreibung der Schritte siehe vor der while() Schleife ...
							// ... and with this new calculation date recalculate the full moon ...
 							//  ... for a description of the steps see before the while () loop ...
							newMoonSplitted = calcNewMoon();
							arrNewMoonSplitted = newMoonSplitted.split("-");
							arrDate = arrNewMoonSplitted[0].split(".");
						}// End while()
							
						// ... nun berechne, ob es eine Mondfinsternis zu diesem berechneten Vollmond gibt, Ergebnis kann sein ...
						//	"Sonnenfinsternis sicher"
						//	"Sonnendfinsternis möglich"
						//	"Keine Sonnenfinsternis"
						//  ... now calculate whether there is a lunar eclipse to this calculated full moon, result can be ...
 						//	 “Sun eclipse safe”
 						//	 “Sun eclipse possible "
 						//	 “No sun eclipse”
						occur = String(sunMoonEventsOccur(0, 0, arrNewMoonSplitted[3], arrNewMoonSplitted[4],arrNewMoonSplitted[5], "sun"));
						// Wenn eine Mondfinsternis sicher oder möglich ist, dann für die Erdkugel alle
						// geografischen Orte mit eine Totalen- oder teilbedeckung berechnen und auflisten ...
						//  If a lunar eclipse is safe or possible, then for the globe all
 						// calculate and list geographical locations with total or partial coverage ...
						if ( occur === "Sonnenfinsternis sicher" ||  occur === "Sonnenfinsternis möglich" ){
							// ... &Üuml;berschrift in den Ergebnisstring ...
							// ... Heading in the result string ...
							s += "Orte der Sonnenfinsternis";
							s += ("\nNeumond:\t\t" + arrDate[0] + "." + arrDate[1] + "." + arrDate[2]  + " - " + occur + "\n");
							// ... und suche nach den Daten der Finsternis ...
							// ... Magnitude, UT Erster Kontakt, UT Mittlerer Kontakt, UT Letzter Kontakt ...
							// ... and search for the dates of darkness ...
							// ... Magnitude, UT First contact, UT Middle contact, UT Last contact ...
							retArray = searchEclipseData(arrNewMoonSplitted[6], occur);
							// ... und dann hier die Ausgabe in den Ausgabestring "s" schreiben, der dann
							// in die Textarea geschrieben wird ...
							// ... and then write the output in the output string “s”, which then
							// is written to the text area ...
							s += "\nLängengrad=\t\t" + retArray[4];
							s += "\nBreitengrad=\t\t" + retArray[5];
							s += "\n\nBedeckung:\t\t" + ((retArray[0].toFixed(3)) * 100) + " %";
							s += "\nUT Erster Kontakt:\t" + (dectime2Time(retArray[1], "string"));
							s += "\nUT Max Kontakt:\t\t" + (dectime2Time(retArray[2], "string")) ;
							s += "\nUT Letzter Kontakt:\t" + (dectime2Time(retArray[3], "string")) ;
							s += "\n_________________________________________________________________\n\n";
							showDialog("show", "Neumond: " + arrDate[0] + "." + arrDate[1] + "." + arrDate[2]  + "<br>" + occur + "<br>" +
											"Längengrad= " + retArray[4]  + "<br>Breitengrad= " + retArray[5] + "<br>" +
											"Bedeckung: " + ((retArray[0]) * 100).toFixed(3) + " %" +
											"<br><br><b><u>Möchten Sie die Berechnung durchführen?</u></b>", arrNewMoonSplitted[6]);
						
						// ... es gibt keine Sonnen Finsternis ...
						// ... there are no suns darkness ...
						}else{
							alert("Keine Sonnenfinsternis vorhanden!");
							// Hält den Background Worker an ....
							// Stop the background worker ...
							stopBackgroundWorker();
							// ... "Stop" Button ausblenden ...
							// ... Hide “Stop” button ...
							objStopCalc.disabled = true;
							// ... und "Berechnen" Button nicht bedienbar machen.
							// ... and make “Calculate” button unoperable.
							objCalc.disabled = false;
						}
						
					}// End of start()

				}); // Ende alles geladen - End of all things loaded
				
			}); // Ende DOM geladen - End of DOM loaded

		</script>
		
	</head>
	
	<body id="b">
	
		<!-- Bereich <div> zwischen Body und Dialog mit der Abdunkelung -->
		<!-- Area <div> between body and dialog with dimming -->
		<div id="trans" style="visibility: hidden; position:absolute; width: 0px; height:0px; left: 0px; top: 0px; z-index: 1;"></div>
		<!-- Dialog Box mit Textfeld und Buttons -->
		<!-- Dialog box with text field and buttons -->
		<div tabindex="-1" style="position: absolute; top: 200px; left:200px; width:300px; height:200px;" role="dialog" aria-lablledby="mydialog" id="dialog" class="box-hidden">
			<div id="txt" role="dialog" aria-lablledby="mydialog" style="color: black; text-align: left"></div><br>
			<div style="text-align: center">
				<input id="okbutton" type="button" value="Berechnen"></input>
				<input id="cancelbutton"  type="button" value="Nicht Berechnen"></input>
			</div>
		</div>
	
		<table border="0">
		
			<tr>
				<th id="label" colspan="8">
					<center>Berechnung der Orte von Sonnenfinsterissen auf der Erdoberfläche</center>
				</th>
			</tr>
			<tr>
				<td colspan="8">
					 
				</td>
			</tr>
			
			<tr>
				
				<td  id="value">
					<input title="Julianisches Datum des eingegebenen Datums" id="jd" type="hidden" value="" disabled="disabled"></input>
				</td>
				
				<td  id="value">
					<input title="Julianisches Datum des Startdatums der Berechnung" id="jd0" type="hidden" value="" disabled="disabled"></input>
				</td>

			</tr>
			
			<tr>
				<td id="label">
						Tag:
				</td>
				
				<td id="value">
					<input id="day" type="text" maxlength="2" value="1"></input>
				</td>

				<td id="label">
					Monat:
				</td>
				
				<td id="value">
						<input id="month" type="text" maxlength="2" value="11"></input>
				</td>

				<td id="label">
					Jahr:
				</td>
				
				<td id="value">
					<input id="year" type="text" maxlength="4" value="2020"></input>
				</td>
				
				<td id="value">
					<input id="leapyear" title="Ermittelt automatisch, ob das Jahr ein Schaltjahr ist" type="hidden" value="" disabled="disabled"></input>
				</td>

			</tr>
			
			<tr>
			
				<td id="label">
					<label id="desclambda" title="Längengrad des Beobachtungsortes in dez. Grad">λ<sub>[Grad]</sub>:</label>
				</td>
				
				<td  id="value">
					<input  title="Längengrad des Beobachtungsortes in dez. Grad" id="lambda" type="text"  value="0.0" disabled="disabled"></input>
				</td>
				
				<td id="label">
					<label id="descbeta"  title="Breitengrad des Beobachtungsortes in dez. Grad" disabled="disabled">β<sub>[Grad]</sub>:</label>
				</td>
				
				<td  id="value">
					<input  title="Breitengrad des Beobachtungsortes in dez. Grad" id="beta" type="text"  value="0.0"  disabled="disabled"></input>
				</td>
				
				<td id="label">
					<label id="descmagnitude"  title="Bedeckung der Sonne am Beobachtungsort" disabled="disabled">Mag:</label>
				</td>
				
				<td  id="value">
					<input  title="Bedeckung der Sonne am Beobachtungsort" id="magnitude" type="text"  value="0.0"  disabled="disabled"></input>
				</td>
			
			</tr>
			
			<tr>
			
				<td id="label">
					<label id="desccalctime"  title="Zeit in ms einer kompletten Berechnung" disabled="disabled">Zeit:</label>
				</td>
				
				<td>
					<input title="Zeit in ms einer kompletten Berechnung" id="calctime" class="calctime" type="text" value="0" disabled="disabled"></input>
				</td>
				
				<td id="label">
					<label id="desclongstep"  title="Schrittweite der Berechnung des Längengrades in Grad" disabled="disabled">Länge:</label>
				</td>
				
				<td>
					<input title="Schrittweite der Berechnung des Längengrades in Grad" id="longstep" class="longstep" type="text" value="20.0" ></input>
				</td>
				
				<td id="label">
					<label id="desclatstep"  title="Schrittweite der Berechnung des Breitengrades in Grad" >Breite:</label>
				</td>
				
				<td>
					<input title="Schrittweite der Berechnung des Breitengrades in Grad" id="latstep" class="latstep" type="text" value="10.0" disabled="disabled"></input>
				</td>
				
			</tr>
			
			<tr>
				<td id="label">
					<label id="descdst"  title="Daylight savings time (DST) - Sommer/Winterzeit" >DST:</label>
				</td>
				
				<td>
					<input title="Daylight savings time (DST) - Sommer/Winterzeit" id="dst" class="dst" type="text" value="0" disabled="disabled"></input>
				</td>
			</tr>
			
			<tr>
				<td colspan="1">
					 
				</td>
				<td colspan="6">
					<center>
						<button  id="stopcalc" title="Bricht die Berechnung ab" class="stopcalc" type="button" disabled=true>Stop</button>
						<button id="calc" title="Berechnet eine mögliche Sonnenfinsternis anhand des Datums für den Monat" class="calc" type="button" ><u>B</u>erechnen</button>
					</center>
				</td>
				<td colspan="1">
					 
				</td>
			</tr>
			
			<tr>
				<td colspan="8">
					<div id="progressbar"><div id="speedbar"></div></div>
				</td>
			</tr>
			
			<tr>
				<td id="label" colspan="8">
					<center>Orte der Sonnenfinsternisse nach Peter Duffett-Smith und Jonathan Zwart  sowie Dieter Steffan</center>
				</td>
			</tr>
			
			<tr>
				<td colspan="8">
					 
				</td>
			</tr>
			
			<tr>
				<td id="output" colspan="8">
					<center><textarea title="Ausgabe der Magnitude (Bedeckung) für Längen- und Breitengrad" id="t" class="t" disabled="disabled"></textarea></center>
				</td>
			</tr>
		
		</table>

	</body>

</html>