00000001 /* **********************************************************************************
00000002 Definition der im Modul verwendeten Variablen, Eventhandler und Funktionen.
00000003 Auslesen der Eingabe Datumswerte im manuellen Modus. Feststellen von Zeitzone
00000004 und DST sowie Berechnung und Ausgabe des:
00000005 - Julianischen Datums und dessen gregorianische Rückrechnung
00000006 - Modified Julianischen Datums und dessen Rückrechnung
00000007 - UT = Universal Time Ausgabe
00000008 - UTC = Universal Time Coordinated Ausgabe
00000009 ********************************************************************************** */
00000010
00000011 var d = null;
00000012 var actualDate = null;
00000013 var calcDate = null;
00000014 var year = "";
00000015 var month = "";
00000016 var day = "";
00000017 var hour = "";
00000018 var minute = "";
00000019 var second = "";
00000020 var millisecond = "";
00000021 var JD0 = 0;
00000022 var JD = 0;
00000023 var MJD = 0;
00000024 // Das Datum vom 1. Januar des aktuellen Jahres
00000025 var jan = null;
00000026 // Das Datum vom 1. Juli des aktuellen Jahres
00000027 var jul = null;
00000028 // Zeitzonenwert = Timezone + DST
00000029 // Standard ist Winterzeit, also GMT + 1 h
00000030 var TIMEZONE = 0;
00000031 // Differenz zwischen Juli und Januar. Wenn DST dann ist die Differnz 1,
00000032 // ansonsten 0
00000033 var diff = 0;
00000034
00000035
00000036 /* **********************************************************************************
00000037 Objekte für die Eingabe Datums- und Zeitfelder. Dienen der Bedienung
00000038 und Ausgabe der Ergebnisse.
00000039 ********************************************************************************** */
00000040
00000041 var objDate = document.getElementById("date");
00000042 var objTime = document.getElementById("time");
00000043 var objSec = document.getElementById("second");
00000044 var objMilliSec = document.getElementById("msecond");
00000045 var output = document.getElementById("kontrolldatum");
00000046 var outputLT = document.getElementById("LT");
00000047 var outputUT = document.getElementById("UT");
00000048 var outputJD1 = document.getElementById("JD1");
00000049 var outputMJD = document.getElementById("MJD");
00000050 var outputDateMJD = document.getElementById("DateMJD");
00000051 var outputDate1 = document.getElementById("DateJD1");
00000052 var objTimezone = document.getElementById("Zeitzone");
00000053 var objDST = document.getElementById("DST");
00000054 var objCalc = document.getElementById("calc");
00000055 var divAutomatic = document.getElementById("automatic");
00000056
00000057
00000058 // Wartefunktion die verwendet werden kann.
00000059 // Die Funktion, in der sie verwendet wird muss vom Typ async sein:
00000060 //
00000061 // async function myFunction(){....}
00000062 //
00000063 function Sleep(milliseconds) {
00000064 return (new Promise(resolve => setTimeout(resolve, milliseconds)));
00000065 }
00000066
00000067
00000068 // Aktuelles Datum und Uhrzeit in den Pickern setzen
00000069 setActualDateAndTime();
00000070
00000071 /* ******************************************************
00000072 Die Funktion füllt eine Zeichenketten mit Zahl vorne
00000073 mit n-Zeichen auf.
00000074 Z.B. 1 -> 01
00000075 izahl = Die Zahl ohne führende Nullen
00000076 ianzStellen = Die gewünschte Anzahl von Stellen
00000077 sFuelzeichen = Das gewünschet führende Zeichen
00000078
00000079 Rückgabewert = Z.B. "01" oder "0001"
00000080 *************************************************** */
00000081 function LPad( iZahl, iAnzStellen, sFuellzeichen )
00000082 {
00000083 var sZahl = iZahl + "";
00000084 while( sZahl.length < iAnzStellen )
00000085 sZahl = sFuellzeichen + sZahl;
00000086 return sZahl;
00000087 }
00000088
00000089
00000090 // Die Funktion setzt das aktuelle Datum und Uhrzeit in den Pickern.
00000091 //
00000092 function setActualDateAndTime(){
00000093 var h = "";
00000094 var m = "";
00000095 var s = "";
00000096 var ms = "";
00000097 // Datumspicker mit aktuellem Datum versehen.
00000098 d = new Date(); // Aktuelles Datum holen
00000099 objDate.valueAsDate = d; // und dem Datumspicker zuweisen
00000100 // Stunde und Minute mit "0" auffüllen und Time Picker
00000101 // damit initialisieren.
00000102 if ((h = d.getHours()) < 10)
00000103 h = LPad(h, 2, "0");
00000104 if ((m = d.getMinutes()) < 10)
00000105 m = LPad(m, 2, "0");
00000106 objTime.value = h + ":" + m;
00000107 // Sekunden mit "0" auffüllen und Sekunden Picker
00000108 // damit initialisieren.
00000109 s = d.getSeconds();
00000110 objSec.value = s;
00000111 // Millisekunden und Millisekunden Picker
00000112 // damit initialisieren.
00000113 ms = d.getMilliseconds();
00000114 objMilliSec.value = ms;
00000115 }
00000116
00000117
00000118 // Bei Programmstart DST und Timezone ermitteln sowie
00000119 // die Select Boxen vorbelegen.
00000120 //
00000121 calcDSTandTimezone();
00000122
00000123
00000124 // Event Listener beim Klick auf den Button "Berechnen"
00000125 // startet die Verarbeitung.
00000126 //
00000127 objCalc.addEventListener("click", getDateValues);
00000128
00000129
00000130 /* **********************************************************************************
00000131 Eventhandler für die Eingabe Datums- und Zeitfelder. Bei Klick darauf werden
00000132 die Ausgabefelder gelöscht.
00000133 ********************************************************************************** */
00000134
00000135 // Bei Klick auf das Datums Input Element wird das Kontrolldatum
00000136 // gelöscht.
00000137 //
00000138 objDate.addEventListener("click", function () {
00000139 eraseOutputFields();
00000140 });
00000141
00000142
00000143 // Bei Klick auf das Time Input Element wird das Kontrolldatum
00000144 // gelöscht.
00000145 //
00000146 objTime.addEventListener("click", function () {
00000147 eraseOutputFields();
00000148 });
00000149
00000150
00000151 // Bei Klick auf das Second Input Element wird das Kontrolldatum
00000152 // gelöscht.
00000153 //
00000154 objSec.addEventListener("click", function () {
00000155 eraseOutputFields();
00000156 });
00000157
00000158
00000159 // Bei Klick auf das Milli-Second Input Element wird das Kontrolldatum
00000160 // gelöscht.
00000161 //
00000162 objMilliSec.addEventListener("click", function () {
00000163 eraseOutputFields();
00000164 });
00000165
00000166
00000167 // Löscht die Ausgabefelder.
00000168 //
00000169 function eraseOutputFields(){
00000170 output.value = "";
00000171 outputLT.value = "";
00000172 outputUT.value = "";
00000173 outputJD1.value = "";
00000174 outputDate1.value = "";
00000175 outputMJD.value = "";
00000176 outputDateMJD.value = "";
00000177 document.getElementById("mstimelaps").value = "";
00000178 document.getElementById("msvelosity").value = "";
00000179 document.getElementById("msprogresstime").value = "";
00000180 }
00000181
00000182
00000183 // Bei einem Klick auf den Radio Button "Automatisch"
00000184 // werden die Datums- und Time Picker ausgeschaltet.
00000185 //
00000186 function disableDateTimePicker(){
00000187 objDate.disabled = true;
00000188 objTime.disabled = true;
00000189 objSec.disabled = true;
00000190 objMilliSec.disabled = true;
00000191 }
00000192
00000193
00000194 // Bei einem Klick auf den Radio Button "Manuell"
00000195 // werden die Datums- und Time Picker eingeschaltet.
00000196 //
00000197 function enableDateTimePicker(){
00000198 objDate.disabled = false;
00000199 objTime.disabled = false;
00000200 objSec.disabled = false;
00000201 objMilliSec.disabled = false;
00000202 }
00000203
00000204
00000205
00000206 /* **********************************************************************************
00000207 Eventhandler für die manuelle oder automatische Verarbeitung bei einem Klick auf
00000208 die Radio Buttons Manuell oder Automatisch.
00000209 ********************************************************************************** */
00000210
00000211 // Eventhandler bwi Klick auf den Radio Button "Manuell".
00000212 //
00000213 var objCalcManual = document.getElementById("calcManual");
00000214 objCalcManual.addEventListener("click", function () {
00000215 // Stoppt den Worker für das Datum Overlay.
00000216 //
00000217 if (wAutomaticTime) stopWorker();
00000218 // Wenn der Worker für die Berechnung "Ab aktuellem Datum" endlos läuft,
00000219 // dann stoppe Ihn
00000220 if (workerActualEndless) stopWorkerActualDateEndless();
00000221 objCalcManual.checked = "checked"; // Schaltet Radion Button Manuell "Ein".
00000222 objCalcAutomatic.checked = ""; // Button "Automatisch" wird ausgeschaltet.
00000223 divAutomatic.style.visibility = "hidden"; // Overlay wird geschllossen.
00000224 objCalc.disabled = false; // Button "Berechnen" des Hauptformulars ist "Ein".
00000225 setActualDateAndTime(); // Aktuelles Datum und Uhrzeit als Startdatum setzen.
00000226 eraseOutputFields(); // Die Ausgabefelder löschen.
00000227 enableDateTimePicker(); // Die obigen Datumspicker einschalten.
00000228 document.getElementById("msvelosity").value = "N/A";
00000229 document.getElementById("mstimelaps").value = "N/A";
00000230 document.getElementById("msprogresstime").value = "N/A";
00000231 });
00000232
00000233
00000234 // Eventhandler für die Auswahl des Radio Buttons "Automatisch".
00000235 //
00000236 var objCalcAutomatic = document.getElementById("calcAutomatic");
00000237 objCalcAutomatic.addEventListener("click", function () {
00000238 // Wenn der Worker für die Berechnung "Ab aktuellem Datum" endlos läuft,
00000239 // dann stoppe Ihn
00000240 if (workerActualEndless) stopWorkerActualDateEndless();
00000241 objCalcUntilDateAutomatic.disabled = false;
00000242 objCalcManual.checked = ""; // Manuell Ausschalten.
00000243 objCalcAutomatic.checked = "checked"; // Automatisch markieren.
00000244 divAutomatic.style.visibility = "visible"; // Das Overlay für die Einstellungen Anzeigen.
00000245 objCalc.disabled = true; // "Berechnen" Button im Hauptformular Ausgrauen.
00000246 setActualDateAndTimeAutomatic(); // Aktuelles Datum und Uhrzeit im Overlay setzen.
00000247 disableDateTimePicker(); // Die obigen Datumsoicker ausschalten.
00000248 });
00000249
00000250
00000251
00000252
00000253 // HTML Element für Dropdowns automatisch
00000254 // selektieren.
00000255 // arrSelect = Objekt auf das Select Element
00000256 // sItem = Wert = value, der in