// ===================================================================
// Author: Frank Stroebel
// WWW: http://www.chessgamble.de/
// ===================================================================

/* SOURCE FILE: ZeitanzeigeUpdate.js */

//
// Vorgehen: Siehe "JavaScript Zeitaufdatierung.txt"
//

// Globale Variablen
var timerHandleZeit = null;      // Der Timer
var timerInterval;               // Interval: Schnellschach 1000, Fernschach 60000
var timerIntervalBeiZeit = 2000; // Interval bei ZÜ: 2 Sekunden
var initialTimerInterval;        // Timerintervall beim ersten Starten des Timers
var anzIntervallGewartet = 0;    // Wie oft wir auf die Initialisierung gewartet haben
var spielform;                   // "Fernschach" oder "Schnellschach"
var amZug;                       // Wer am Zug ist: "W", "S", "K" (K = Keiner, d.h. die Partie läuft nicht)
var userFarbe;                   // Farbe des Betrachters, "W", "S", "K" (K = Keine, d.h Betrachter ist nicht an der Partie beteiligt
var sekundenWertBeiAbfrage;      // Bei Fernschach: Wieviele Sekunden von dieser Minute bereits abgelaufen sind

// Zeit-Variablen für Schnellschach
var schnellMin, schnellSek;
// Zeit-Variablen für Fernschach
var fernTage, fernStd, fernMin;

var zeitUeberschritten = false;
var zeitUeberschrittenText = T_Tim_ZUeKurz;
var zeitUeberschrittenTextBalken = T_Tim_ZUeLang;

//
// Der Timer hat angeschlagen: Zeit aufdatieren.
//
function ZeitanzeigeUpdateTimerExpired()
{
  //alert("Timer expired, Zeitanzeige aktualisieren...");
  
  if (!zeitUeberschritten) {
    // Zeit aufdatieren
    UpdateZeitWerte();
    // Und anzeigen
    PrintNeueZeit();
    
    // Und wieder den Timer starten...
    if (!zeitUeberschritten) {
      timerHandleZeit = setTimeout('ZeitanzeigeUpdateTimerExpired()', timerInterval);
    }
    else {
      // Damit die Auto-Aktualisierung bei ZÜ automatisch funktioniert starten wir nochmal mit 3 Sekunden.
      // Siehe "Autoaktualisierung und Partieauflistung Gesamtkonzept.txt".
      
      // Start aber nur, wenn der Betrachter an der Partie beteiligt und nicht am Zug ist. D.h. wenn der Gegner die ZÜ hat.
      if (((userFarbe == "W") && (amZug == "S")) ||
          ((userFarbe == "S") && (amZug == "W"))) {
        timerHandleZeit = setTimeout('ZeitanzeigeUpdateTimerExpired()', timerIntervalBeiZeit);
      }
    }
  }
  else {
    // Zeit war schon vor dem Start des Timers überschritten.
    // D.h. das war das Warten auf das reload für die automatische Partiewertung.
    // Also aktuelle Seite neu anspringen:
    document.location.href = document.URL;
  }
}

//
// Schreibt die neue Zeit in das Document
//
function PrintNeueZeit()
{
  // Ausgabe in den Balken oben bei ZÜ
  if (zeitUeberschritten) {
    document.getElementById("PartieStatusBalkenText").innerHTML  = zeitUeberschrittenTextBalken;
  }
  
  // Ausgabe in die Zeit-Felder
  if (spielform == "Schnellschach") {
    if (amZug == "W") {
      // Die Zeit von W läuft
      if (zeitUeberschritten) {
        document.getElementById("IdSchnellschachMinutenW").innerHTML  = zeitUeberschrittenText;
        document.getElementById("IdSchnellschachSekundenW").innerHTML = zeitUeberschrittenText;
      }
      else {
        document.getElementById("IdSchnellschachMinutenW").innerHTML  = schnellMin;
        document.getElementById("IdSchnellschachSekundenW").innerHTML = schnellSek;
      }
    }
    else {
      // Die Zeit von S läuft
      if (zeitUeberschritten) {
        document.getElementById("IdSchnellschachMinutenS").innerHTML  = zeitUeberschrittenText;
        document.getElementById("IdSchnellschachSekundenS").innerHTML = zeitUeberschrittenText;
      }
      else {
        document.getElementById("IdSchnellschachMinutenS").innerHTML  = schnellMin;
        document.getElementById("IdSchnellschachSekundenS").innerHTML = schnellSek;
      }
    }
  }
  else {
    // Fernschach
    if (amZug == "W") {
      // Die Zeit von W läuft
      if (zeitUeberschritten) {
        document.getElementById("IdFernschachTageRestZeitW").innerHTML     = zeitUeberschrittenText;
        document.getElementById("IdFernschachStundenRestZeitW").innerHTML  = zeitUeberschrittenText;
        document.getElementById("IdFernschachMinutenRestZeitW").innerHTML  = zeitUeberschrittenText;
      }
      else {
        document.getElementById("IdFernschachTageRestZeitW").innerHTML     = fernTage;
        document.getElementById("IdFernschachStundenRestZeitW").innerHTML  = fernStd;
        document.getElementById("IdFernschachMinutenRestZeitW").innerHTML  = fernMin;
      }
    }
    else {
      // Die Zeit von S läuft
      if (zeitUeberschritten) {
        document.getElementById("IdFernschachTageRestZeitS").innerHTML     = zeitUeberschrittenText;
        document.getElementById("IdFernschachStundenRestZeitS").innerHTML  = zeitUeberschrittenText;
        document.getElementById("IdFernschachMinutenRestZeitS").innerHTML  = zeitUeberschrittenText;
      }
      else {
        document.getElementById("IdFernschachTageRestZeitS").innerHTML     = fernTage;
        document.getElementById("IdFernschachStundenRestZeitS").innerHTML  = fernStd;
        document.getElementById("IdFernschachMinutenRestZeitS").innerHTML  = fernMin;
      }
    }
  }
}

//
// Aktualisiert die Zeit-Variablen
//
function UpdateZeitWerte()
{
  if (spielform == "Schnellschach") {
    // Schnellschach: Wir sind eine Sekunde weiter. Restzeit ist also eine Sekunde weniger
    DecrementEineSekundeBeiSchnellschach();
  }
  else {
    // Fernschach: Wir sind eine Minute weiter. Restzeit ist also eine Minute weniger.
    stundeExceeded = false;
    fernMin--;
    if (fernMin < 0) {
      fernMin = 59;
    }
    if (fernMin == 59) {
      fernStd--;
    }
    if (fernStd < 0) {
      fernStd = 23;
      stundeExceeded = true;
    }
    if (stundeExceeded) {
      fernTage--;
    }
    if (fernTage < 0) {
      zeitUeberschritten = true;
    }
  }
}

//
// Zieht eine Sekunde von der Schnellschach-Zeit ab.
//
function DecrementEineSekundeBeiSchnellschach()
{
  schnellSek--;
  if (schnellSek < 0) {
    schnellSek = 59;
  }
  if (schnellSek == 59) {
    schnellMin--;
  }
  if (schnellMin < 0) {
    zeitUeberschritten = true;
  }
}

//
// Initialisiert die Zeit-Variablen aus dem Document heraus
// Return: True, wenn die Partie läuft, d.h. es ist dann der Timer zu starten
//
function InitValuesFromDocument()
{
  var resultPartieLaeuft = false;
  
  if (document.getElementById("IdAmZug") != null) {
    amZug = document.getElementById("IdAmZug").innerHTML;
    if (amZug != "K") {
      // Es ist überhaupt einer am Zug, d.h. die Partie läuft
      resultPartieLaeuft = true;
      
      // Weitere Parameter aus dem Doc lesen
      spielform = document.getElementById("IdSpielform").innerHTML;
      sekundenWertBeiAbfrage = document.getElementById("IdSekundenWertBeiAbfrage").innerHTML;
      userFarbe = document.getElementById("IdUserFarbe").innerHTML;
      if (spielform == "Fernschach") {
        // Minütliches Update
        timerInterval = 60000;
        initialTimerInterval = (60 - sekundenWertBeiAbfrage) * 1000;
      }
      else {
        // Sekündlich
        timerInterval = 1000;
        initialTimerInterval = 500;  // Beim Start halbe Sekunde
      }
      
      if (spielform == "Schnellschach") {
        if (amZug == "W") {
          // Die Zeit von W läuft
          schnellMin = document.getElementById("IdSchnellschachMinutenW").innerHTML;
          schnellMin *= 1;
          schnellSek = document.getElementById("IdSchnellschachSekundenW").innerHTML;
          schnellSek *= 1;
        }
        else {
          // Die Zeit von S läuft
          schnellMin = document.getElementById("IdSchnellschachMinutenS").innerHTML;
          schnellMin *= 1;
          schnellSek = document.getElementById("IdSchnellschachSekundenS").innerHTML;
          schnellSek *= 1;
        }
        
        // Jetzt noch die Wartezeit für die Initialisierung abziehen
        for (var i = 0; i < anzIntervallGewartet; i++) {
          DecrementEineSekundeBeiSchnellschach();
        }
      }
      else {
        // Fernschach
        if (amZug == "W") {
          // Die Zeit von W läuft
          fernTage      = document.getElementById("IdFernschachTageRestZeitW").innerHTML;
          fernTage      *= 1;
          fernStd       = document.getElementById("IdFernschachStundenRestZeitW").innerHTML;
          fernStd       *= 1;
          fernMin       = document.getElementById("IdFernschachMinutenRestZeitW").innerHTML;
          fernMin       *= 1;
        }
        else {
          // Die Zeit von S läuft
          fernTage      = document.getElementById("IdFernschachTageRestZeitS").innerHTML;
          fernTage      *= 1;
          fernStd       = document.getElementById("IdFernschachStundenRestZeitS").innerHTML;
          fernStd       *= 1;
          fernMin       = document.getElementById("IdFernschachMinutenRestZeitS").innerHTML;
          fernMin       *= 1;
        }
      }
    }
  }
  
  return resultPartieLaeuft;
}

//
// Starte die Zeitanzeige.
// Wird von PHP nach Anzeige der Partie aufgerufen. Ebenso nach einem Update von unten.
//
function startZeitanzeigeUpdate()
{
  //alert("ZeitanzeigeUpdate start...");
  // Evtl. bereits laufenden Timer stoppen
  if (timerHandleZeit != null) {
    //alert("Laufenden Timer stoppen...");
    clearTimeout(timerHandleZeit);
    timerHandleZeit = null;
  }
  
  // Aktuelle Zeitdaten holen
  var partieLaeuft = InitValuesFromDocument();
  if (partieLaeuft) {
    // Timer aufsetzen
    timerHandleZeit = setTimeout('ZeitanzeigeUpdateTimerExpired()', initialTimerInterval);
  }
}

