XAL'THOREI ZEITUMRECHNER – BIDIREKTIONAL

Aus die-alien-berichte.toeppervisionen.com
Zur Navigation springen Zur Suche springen

<!DOCTYPE html> <html lang="de"> <head>

 <meta charset="UTF-8">
 <title>Xal'thorei Zeitumrechner – Bidirektional</title>
 <style>
   body {
     background: linear-gradient(135deg, #0f2027, #203a43, #2c5364);
     color: #fff;
     font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
     margin: 0;
     padding: 0;
   }
   .nav {
     display: flex;
     justify-content: center;
     background-color: #203a43;
   }
   .nav button {
     background: none;
     border: none;
     color: #fff;
     font-size: 1.1em;
     padding: 15px 25px;
     cursor: pointer;
   }
   .nav button.active {
     background-color: #4CAF50;
   }
   .container {
     padding: 20px 30px;
     max-width: 600px;
     margin: 20px auto;
     background: rgba(0, 0, 0, 0.75);
     border-radius: 10px;
     box-shadow: 0 4px 10px rgba(0,0,0,0.5);
   }
   label {
     display: block;
     margin-bottom: 5px;
     font-weight: bold;
   }
   input, textarea {
     width: 100%;
     padding: 8px;
     margin-bottom: 15px;
     border: none;
     border-radius: 5px;
     font-size: 1em;
   }
   button.action, button.copy {
     width: 100%;
     padding: 10px;
     font-size: 1.1em;
     border: none;
     border-radius: 5px;
     background-color: #4CAF50;
     color: white;
     cursor: pointer;
     margin-top: 10px;
   }
   button.action:hover, button.copy:hover {
     background-color: #45a049;
   }
   .output {
     margin-top: 20px;
     padding: 15px;
     background: rgba(255,255,255,0.1);
     border-radius: 5px;
     font-size: 1.1em;
     text-align: center;
     word-wrap: break-word;
   }
   .hidden { display: none; }
 </style>

</head> <body>

Xal'thorei Zeitumrechner (Vorwärts)

   <label for="jahr">Jahr (JJJJ):</label>
   <input type="number" id="jahr" placeholder="z.B. 2025" required>
   
   <label for="monat">Monat (MM):</label>
   <input type="number" id="monat" placeholder="z.B. 03" required>
   
   <label for="tag">Tag (TT):</label>
   <input type="number" id="tag" placeholder="z.B. 21" required>
   
   <label for="stunde">Stunde (HH):</label>
   <input type="number" id="stunde" placeholder="z.B. 15" required>
   
   <label for="minute">Minute (mm):</label>
   <input type="number" id="minute" placeholder="z.B. 42" required>
   
   <label for="sekunde">Sekunde (ss):</label>
   <input type="number" id="sekunde" placeholder="z.B. 30" required>
   
   <label for="sternensystem">Sternensystem (Name):</label>
   <input type="text" id="sternensystem" placeholder="Standard: Sonnensystem">
   
   <label for="galaxiensystem">Galaxiensystem (Name):</label>
   <input type="text" id="galaxiensystem" placeholder="Standard: Milchstrasse">
   
   <button class="action" onclick="convertToXalThorei()">Umrechnen</button>
   
     Deine Xal'thoreiische Zeitangabe erscheint hier...
   <button class="copy" onclick="copyToClipboard('outputForward')">Ergebnis kopieren</button>
 <script>
   // Navigation zum Wechseln zwischen den Modi
   function showSection(section) {
     document.getElementById('forwardSection').classList.add('hidden');
     document.getElementById('reverseSection').classList.add('hidden');
     document.getElementById('btnForward').classList.remove('active');
     document.getElementById('btnReverse').classList.remove('active');
     if (section === 'forward') {
       document.getElementById('forwardSection').classList.remove('hidden');
       document.getElementById('btnForward').classList.add('active');
     } else {
       document.getElementById('reverseSection').classList.remove('hidden');
       document.getElementById('btnReverse').classList.add('active');
     }
   }
   
   // Verbesserte pad-Funktion: Füllt mit führenden Nullen bis zur gewünschten Länge.
   function pad(num, size) {
     let s = num.toString();
     while (s.length < size) {
       s = "0" + s;
     }
     return s;
   }
   
   // Caesar-Chiffre (Shift +n oder -n)
   function caesarShift(str, shift) {
     let result = "";
     for (let i = 0; i < str.length; i++) {
       let c = str.charCodeAt(i);
       if (c >= 65 && c <= 90) { // Großbuchstaben
         result += String.fromCharCode(((c - 65 + shift + 26) % 26) + 65);
       } else if (c >= 97 && c <= 122) { // Kleinbuchstaben
         result += String.fromCharCode(((c - 97 + shift + 26) % 26) + 97);
       } else {
         result += str.charAt(i);
       }
     }
     return result;
   }
   
   // Mappings für griechische Darstellung
   const greekTens = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta"];
   const greekOnes = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa"];
   
   function digitToGreekTens(digit) {
     return greekTens[digit];
   }
   function digitToGreekOnes(digit) {
     return greekOnes[digit];
   }
   function greekTensToDigit(word) {
     return greekTens.indexOf(word);
   }
   function greekOnesToDigit(word) {
     return greekOnes.indexOf(word);
   }
   
   // Feste Xal'thorei-Begriffe für Stundenwerte (0 bis 23)
   const xalHourMapping = [
     "Zerex",    // 0
     "Onar",     // 1
     "Duvar",    // 2
     "Trion",    // 3
     "Quarix",   // 4
     "Pentor",   // 5
     "Hexor",    // 6
     "Septor",   // 7
     "Octor",    // 8
     "Nonor",    // 9
     "Decor",    // 10
     "Elvar",    // 11
     "Dozen",    // 12
     "Tredor",   // 13
     "Quintor",  // 14
     "Sexor",    // 15
     "Septon",   // 16
     "Octon",    // 17
     "Novor",    // 18
     "Vigintar", // 19
     "Vigintun", // 20
     "Vigintdu", // 21
     "Viginttri",// 22
     "Vigintqua" // 23
   ];
   
   // Vorwärtsmodus: Menschliche Zeit → Xal'thorei-Zeit
   function convertToXalThorei() {
     const jahr = parseInt(document.getElementById('jahr').value, 10);
     const monat = parseInt(document.getElementById('monat').value, 10);
     const tag = parseInt(document.getElementById('tag').value, 10);
     const stunde = parseInt(document.getElementById('stunde').value, 10);
     const minute = parseInt(document.getElementById('minute').value, 10);
     const sekunde = parseInt(document.getElementById('sekunde').value, 10);
     
     if (isNaN(jahr) || isNaN(monat) || isNaN(tag) || isNaN(stunde) || isNaN(minute) || isNaN(sekunde)) {
       document.getElementById('outputForward').textContent = "Bitte fülle alle Felder korrekt aus.";
       return;
     }
     
     // Chrono-Intervall:
     // Erstelle den 8-stelligen String: YYMMDDHH (JJJJ mod 100)
     const jahrStr = pad(jahr % 100, 2);
     const monatStr = pad(monat, 2);
     const tagStr = pad(tag, 2);
     const stundeStr = pad(stunde, 2);
     const ciNumberStr = jahrStr + monatStr + tagStr + stundeStr;
     const ciNumber = parseInt(ciNumberStr, 10);
     // Umrechnung in Basis36 und auf 6 Stellen polstern
     let ciExotic = ciNumber.toString(36).toUpperCase();
     ciExotic = pad(ciExotic, 6);
     
     // Minute in griechische Darstellung (Tens/Ones, getrennt durch "/")
     const mTens = digitToGreekTens(Math.floor(minute / 10));
     const mOnes = digitToGreekOnes(minute % 10);
     
     // Solare Impulsphase: Sekunde in griechische Darstellung
     const sTens = digitToGreekTens(Math.floor(sekunde / 10));
     const sOnes = digitToGreekOnes(sekunde % 10);
     
     // Sternensystem:
     let ssInput = document.getElementById('sternensystem').value.trim();
     if (!ssInput) ssInput = "Sonnensystem";
     const encryptedSS = caesarShift(ssInput, 2);
     // Suffix: Monat (2-stellig) + Tag (2-stellig) + "_" + fester Xal'thorei-Stundenbegriff
     const suffixSS = monatStr + tagStr + "_" + xalHourMapping[stunde];
     
     // Galaxiensystem:
     let gsInput = document.getElementById('galaxiensystem').value.trim();
     if (!gsInput) gsInput = "Milchstrasse";
     const encryptedGS = caesarShift(gsInput, 2);
     // Suffix: Minute (2-stellig) + Sekunde (2-stellig)
     const suffixGS = pad(minute, 2) + pad(sekunde, 2);
     
     const xalString = `Chrono-Intervall ${ciExotic}-${mTens}/${mOnes}; Solare Impulsphase ${sTens}/${sOnes}; Sternensystem ${encryptedSS}-${suffixSS}; Galaxiensystem ${encryptedGS}-${suffixGS}`;
     
     document.getElementById('outputForward').textContent = xalString;
   }
   
   // Rückwärtsmodus: Xal'thorei-Zeit → Menschliche Zeit
   function convertToHuman() {
     const inputStr = document.getElementById('xalInput').value.trim();
     if (!inputStr) {
       document.getElementById('outputReverse').textContent = "Bitte gib eine Xal'thorei-Zeitangabe ein.";
       return;
     }
     try {
       // Aufteilen in Komponenten anhand von ";"
       const parts = inputStr.split(";");
       if (parts.length < 4) throw "Ungültiges Format";
       
       // 1. Chrono-Intervall: Format: "Chrono-Intervall {ciExotic}-{mTens}/{mOnes}"
       const ciPart = parts[0].trim().replace("Chrono-Intervall ", "");
       const ciSplit = ciPart.split("-");
       if (ciSplit.length !== 2) throw "Fehler bei Chrono-Intervall";
       const ciExotic = ciSplit[0].trim();
       const minuteGreekPart = ciSplit[1].trim();
       const mgSplit = minuteGreekPart.split("/");
       if (mgSplit.length !== 2) throw "Fehler bei Minute-Greek";
       const mTensWord = mgSplit[0].trim();
       const mOnesWord = mgSplit[1].trim();
       const minuteDecoded = greekTensToDigit(mTensWord) * 10 + greekOnesToDigit(mOnesWord);
       
       // Umrechnung von ciExotic (Basis36) zurück in 8-stelligen String (Format: YYMMDDHH)
       const ciNumber = parseInt(ciExotic, 36);
       let ciStr = pad(ciNumber, 8);
       const yy = ciStr.substring(0,2);
       const mmFromCI = ciStr.substring(2,4);
       const dd = ciStr.substring(4,6);
       const hh = ciStr.substring(6,8);
       
       // 2. Solare Impulsphase: Format: "Solare Impulsphase {sTens}/{sOnes}"
       const siPart = parts[1].trim().replace("Solare Impulsphase ", "");
       const siSplit = siPart.split("/");
       if (siSplit.length !== 2) throw "Fehler bei Solare Impulsphase";
       const sTensWord = siSplit[0].trim();
       const sOnesWord = siSplit[1].trim();
       const secondDecoded = greekTensToDigit(sTensWord) * 10 + greekOnesToDigit(sOnesWord);
       
       // 3. Sternensystem: Format: "Sternensystem {encryptedSS}-{suffixSS}"
       const ssPart = parts[2].trim().replace("Sternensystem ", "");
       const ssSplit = ssPart.split("-");
       if (ssSplit.length !== 2) throw "Fehler bei Sternensystem";
       const encryptedSS = ssSplit[0].trim();
       const suffixSS = ssSplit[1].trim();
       // SuffixSS Format: MMDD_<XalHourTerm>
       const suffixParts = suffixSS.split("_");
       if (suffixParts.length !== 2) throw "Fehler bei Sternensystem-Suffix Format";
       const mm_fromSuffix = suffixParts[0].substring(0,2);
       const dd_fromSuffix = suffixParts[0].substring(2,4);
       const xalHourTerm = suffixParts[1];
       const hourDecoded = xalHourMapping.indexOf(xalHourTerm);
       if (hourDecoded === -1) throw "Ungültiger Xal'thorei-Stundenbegriff";
       
       // 4. Galaxiensystem: Format: "Galaxiensystem {encryptedGS}-{suffixGS}"
       const gsPart = parts[3].trim().replace("Galaxiensystem ", "");
       const gsSplit = gsPart.split("-");
       if (gsSplit.length !== 2) throw "Fehler bei Galaxiensystem";
       const encryptedGS = gsSplit[0].trim();
       const suffixGS = gsSplit[1].trim();
       // SuffixGS: 4-stellig: Minute (2) + Sekunde (2)
       const minute_fromSuffix = parseInt(suffixGS.substring(0,2), 10);
       const second_fromSuffix = parseInt(suffixGS.substring(2,4), 10);
       
       // Optional: Konsistenzprüfung für Monat und Tag
       if (mmFromCI !== mm_fromSuffix) {
         console.warn("Warnung: Monatswerte stimmen nicht überein.");
       }
       if (dd !== dd_fromSuffix) {
         console.warn("Warnung: Tageswerte stimmen nicht überein.");
       }
       
       // Bei Inkonsistenzen bei Minute und Sekunde: Wir übernehmen die Werte aus dem Galaxiensystem-Suffix.
       let finalMinute = minuteDecoded;
       let finalSecond = secondDecoded;
       if (minute_fromSuffix !== minuteDecoded || second_fromSuffix !== secondDecoded) {
         finalMinute = minute_fromSuffix;
         finalSecond = second_fromSuffix;
         console.warn("Warnung: Minuten/Sekunden-Werte stimmen nicht überein; es werden die Werte aus dem Galaxiensystem übernommen.");
       }
       
       // Entschlüssle Sternensystem und Galaxiensystem
       const ssName = caesarShift(encryptedSS, -2);
       const gsName = caesarShift(encryptedGS, -2);
       
       // Menschliche Zeit zusammenstellen (Jahr: 20YY)
       const humanYear = "20" + yy;
       const humanMonth = mmFromCI;
       const humanDay = dd;
       // Wir nutzen den Xal'thorei-Stundenbegriff aus dem Sternensystem-Suffix
       const humanHour = pad(hourDecoded, 2);
       const humanMinute = pad(finalMinute, 2);
       const humanSecond = pad(finalSecond, 2);
       
       const humanTime = `Jahr: ${humanYear}, Monat: ${humanMonth}, Tag: ${humanDay}, Stunde: ${humanHour}, Minute: ${humanMinute}, Sekunde: ${humanSecond}

(Sternensystem: ${ssName}, Galaxiensystem: ${gsName})`;

       document.getElementById('outputReverse').textContent = humanTime;
     } catch (err) {
       document.getElementById('outputReverse').textContent = "Fehler beim Umrechnen: " + err;
     }
   }
   
   // Funktion zum Kopieren des Inhalts eines Elements in die Zwischenablage
   function copyToClipboard(elementId) {
     const text = document.getElementById(elementId).textContent;
     navigator.clipboard.writeText(text).then(function() {
       alert("Ergebnis wurde in die Zwischenablage kopiert.");
     }, function(err) {
       alert("Fehler beim Kopieren: " + err);
     });
   }
 </script>

</body> </html>