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

//
// Funktionen für die Partieanzeige bzgl. Manipulation durch Benutzereingaben.
//

// Die eigenen Figuren: {"a1", "a2", ...}
var feldNamenMitEigenenFiguren;

// zielFeldNamenDerEigenenFiguren[Index] = {"e2", "f3", ...} oder = {}, wenn die Figur kein Zielfeld hat
// Hierbei entspricht der Index dem des Arrays "feldNamenMitEigenenFiguren"
var zielFeldNamenDerEigenenFiguren;

// Der Name des Feldes auf dem aktuell ein bauer umgeandelt wird (falls einer umgewandelt wird)
var feldNameBauerUmwandlung = "";

var dropClassNamepraefix = "drop_";
var theIdPartieImHauptfenster = -1;

//
// Initialisiert das Brett für Drag'n'drop
//
// Params:
// - initialCall:
//        True, wenn es direkt nach dem Seite laden aufgerufen wird.
//        In diesem Fall müssen wir das Brett nicht neu zeichnen.
//        Andernfalls wurde es von "resetpressed()" aufgerufen und das Brett muss zurück gesetzt werden.
// - calledFromTestspiel:
//        In diesem Fall muss das Brett neu gezeichnet werden.
//
function InitPartieanzeigeDragDrop(initialCall, calledFromTestspiel)
{
  // Erst mal prüfen ob überhaupt eine Partie angezeigt wird und wir am Zug sind
  theIdPartieImHauptfenster = document.getElementById('IdPartieImHauptfenster').innerHTML;
  theIdPartieImHauptfenster *= 1;
  
  if ((document.getElementById('IdAmZug') != null) && (document.getElementById('IdUserFarbe') != null)) {
    var amZugFarbe = document.getElementById('IdAmZug').innerHTML;
    var userFarbe = document.getElementById('IdUserFarbe').innerHTML;
    if ((userFarbe != "K") && (amZugFarbe != "K") && (amZugFarbe == userFarbe)) {
      // Der Betrachter ist am Zug. Andernfalls ist nichts zu tun.
      
      // Klick-EventHandler an alle Felder hängen
      $(".feld").click(function() {
        var feldName = $(this).attr('id');
        feldName = feldName.substr(feldName.length - 2, 2);
        FeldKlicked(feldName);
      });
      
      // Alles auf "nichts getan" zurück setzen
      document.Zugeingabe.inputvon.value = "";
      document.Zugeingabe.inputnach.value = "";
      RemoveAllFeldMarkierungen();
      
      //
      // Jetzt müssen wir die ziehbaren Figuren draggable machen
      //
      
      // Dazu nutzen wir functions aus "PartieAnzeige.js": Aktuelle Stellung auf Brett-Array aufbauen
      var letzterZugId = document.getElementById('ZugLetzter').innerHTML;
      // "letzterZugId" ist jetzt z.B. "W15" oder "0": Es wurde noch gar kein Zug gemacht
      ErstelleAnalyseBrettAusFEN("IdZugSelected_" + letzterZugId)
      // Ggf. Brett neu zeichnen
      if (!initialCall || calledFromTestspiel) {
        //alert('InitPartieanzeigeDragDrop: Jetzt Brett zeichnen...');
        ZeichneAktuellesBrett();
      }
      
      if (initialCall) {
        PartieAnalyseObjekt.Init();
        // Nun lassen wir uns die Namen der Felder geben, auf denen eigene Figuren stehen die ziehen können
        feldNamenMitEigenenFiguren = PartieAnalyseObjekt.GetFeldNamenMitEigenenZiehbarenFiguren(amZugFarbe);
        // feldNamenMitEigenenFiguren enthält jetzt: "b1", "f5", ...
        
        // Nun müssen wir für all diese die jeweils möglichen Zielfelder ermitteln
        zielFeldNamenDerEigenenFiguren = new Array();
        for (var i=0; i<feldNamenMitEigenenFiguren.length; i++) {
          PartieAnalyseObjekt.ErmittleAlleZielFelderDerFigur(i);
        }
        // zielFeldNamenDerEigenenFiguren enthält jetzt alle Zielfelder aller eigenen Figuren.
        // Diese Listen werden jetzt noch bereinigt.
        // Z.B. werden bei Räuberschach die Nicht-Schlagzüge rausgenommen, falls es mind. einen Schlagzug gibt.
        zielFeldNamenDerEigenenFiguren = PartieAnalyseObjekt.BereinigeZugmoeglichkeiten(feldNamenMitEigenenFiguren, zielFeldNamenDerEigenenFiguren, amZugFarbe);
      }
      
      // Alle draggables an die eigenen Figuren hängen
      for (var i=0; i<feldNamenMitEigenenFiguren.length; i++) {
        var feldImgName = "FeldImgName_" + feldNamenMitEigenenFiguren[i];
        
        // Beim Überfahren der Felder mit eigenen Figuren soll sich der cursor ändern
        $(document.getElementsByName(feldImgName)).addClass("CursorMove");
        
        // Die Figur muss noch für jedes Zielfeld eine Klasse für das droppable bekommen, damit es vom droppable akzeptiert wird
        AddZielfelderClasses(i);
        
        // Draggable an die eigene Figur anhängen
        $(document.getElementsByName(feldImgName)).draggable({
          disabled: false,
          revert: "invalid",
          //cursor: "move",
          start: function( event, ui ) {
            // Dragging gestartet...
            OnDraggingStarted(event, ui);
          },
          stop: function( event, ui ) {
            // Dragging gestoppt...
            OnDraggingStopped(event, ui);
          }
        });
        
      }
      
      // Alle droppables erzeugen
      var alleFelder = PartieAnalyseObjekt.GetAlleFelder();
      for (var i=0; i<alleFelder.length; i++) {
        var zielFeldName = alleFelder[i];
        if (IsFeldVonEigenerFigurErreichbar(zielFeldName)) {
          // Das Feld ist erreichbar: Droppable
          var zielFeldImgName = "FeldImgName_" + zielFeldName;
          var dropClassName = "." + dropClassNamepraefix + zielFeldName;
          
          // Dropable anhängen
          $(document.getElementsByName(zielFeldImgName)).droppable({
            accept: dropClassName,
            activeClass: "fst-feld-ui-state-highlight",  // Vorher: ui-state-hover oder ui-state-highlight
            hoverClass: "fst-feld-ui-state-active",      // Vorher: ui-state-active
            tolerance: 'intersect',
            drop: function( event, ui ) {
              // Figur wurde gedroppt...
              OnDropped(event, ui);
            }
          });
          
        }
      }
      
    }
  }
}

//
// EventHandler: Wird aufgerufen, wenn das dragging gestartet wurde.
//
// Params: Siehe "jQueryUI EventArgs.txt"
//
function OnDraggingStarted(event, ui)
{
  // Dragging gestartet: Von-Feld aktualisieren
  // event.target enthält das img-Objekt!
  var draggedImgName = $(event.target).attr("name");
  // draggedImgName = "FeldImgName_e4"
  var draggedAusgangsFeldName = draggedImgName.substr(draggedImgName.length - 2);

  RemoveAllFeldMarkierungen();
  
  // Wir befüllen das von-Feld und leeren das nach-Feld
  document.Zugeingabe.inputvon.value = draggedAusgangsFeldName;
  document.Zugeingabe.inputnach.value = "";
}

//
// EventHandler: Wird aufgerufen, wenn das dragging gestoppt wurde.
// ACHTUNG: Das ist der Fall, wenn es zurück fliegt!
//          Wenn es korrekt gedroppt wurde, kommt das "droppable.drop".
//
// Params: Siehe "jQueryUI EventArgs.txt"
//
function OnDraggingStopped(event, ui)
{
  // von- und nach-Feld leeren
  document.Zugeingabe.inputvon.value = "";
  document.Zugeingabe.inputnach.value = "";
}

//
// EventHandler: Wird aufgerufen, wenn gedroppt wurde.
//
// Params: Siehe "jQueryUI EventArgs.txt"
//
function OnDropped(event, ui)
{
  // event.target enthält das img-Objekt!
  var droppedImgName = $(event.target).attr("name");
  // droppedImgName = "FeldImgName_e2" (das ist der Name des Bildes, auf das gedroppt wurde)
  var zielFeldName = droppedImgName.substr(droppedImgName.length - 2);
  
  var draggedImgName = $(ui.draggable).attr("name");
  // draggedImgName = "FeldImgName_g1" (das ist der Name des Bildes, das gedraggt wurde)
  var startFeldName = draggedImgName.substr(draggedImgName.length - 2);

  // Ersetze Zielfeld-Bild durch das gedraggte
  document.images[droppedImgName].src = $(ui.draggable).attr("src");
  
  
  
  //
  // Gedraggtes Bild löschen, sonst schwebt es noch über dem Zielfeld
  //
  
  // Damit gibt es den Error:
  //document.images[draggedImgName].src = 'FSTSchach/FST_Bilder/Figuren/png/w.png';
  
  // Damit gibt es keinen Error, aber direkt danach kann keine Figur auf das Feld ziehen:
  //$(document.getElementsByName(draggedImgName)).remove();

  // So geht es:  
  // <td id="Feld_a8" class="feld feldWeiss"><img name="FeldImgName_a8" class="feldImg" src="FSTSchach/FST_Bilder/Figuren/png/tsw.png" alt=""></td>
  var posUnterstrich = draggedImgName.indexOf("_");
  var feldName = draggedImgName.substr(posUnterstrich + 1);
  var feldImgName = 'FeldImgName_' + feldName;
  var feldId = 'Feld_' + feldName;
  var bildDateiName = 'FSTSchach/FST_Bilder/Figuren/png/w.png';
  var htmlBildDarstellung = "<img name=\"" + feldImgName + "\" class=\"feldImg\" src=\"" + bildDateiName + "\" alt=\"\">";
  document.getElementById(feldId).innerHTML = htmlBildDarstellung;
  
  //
  // Ende Gedraggtes Bild löschen, sonst schwebt es noch über dem Zielfeld
  //
  
  
  
  
  // Jetzt müssen die "von" und "nach" Eingabefelder befüllt werden...
  document.Zugeingabe.inputvon.value = startFeldName;
  document.Zugeingabe.inputnach.value = zielFeldName;
  
  // Falls Rochade, Bauerumwandlung oder e.p.
  StarteSonderAktionNachZug(startFeldName, zielFeldName, "");
  //alert('startFeldName = ' + startFeldName + ', zielFeldName = ' + zielFeldName);
  
  // Der cursor-Style soll beim Überfahren nicht mehr auf move gehen
  $(".ui-draggable").removeClass("CursorMove");
  // Und den Cursor gleich auf normal setzen
  document.body.style.cursor = "default";

  // Dann müssen wir von allen Figuren die draggable waren das draggable disablen
  $(".ui-draggable").draggable("destroy");
  //$(".ui-draggable").draggable("option", "disabled", true);

  // und den "Ziehen"-Button auffällig machen
  //$(document.getElementById('IdZiehenButton')).addClass('ButtonAuffaellig');
  
  // Zug richtig ausführen: D.h. das Formular abschicken
  FuehreZugAus("ZugAusfuehren");
        
  // Zug auf dem Brett ausgeführt und gezeichnet
}

//
// Zug richtig ausführen: D.h. das Formular abschicken
//
// <input type="hidden" name="Zugart" id="Zugart" value="Ungueltig">
// - Auswertung normaler Zug ($_POST["Zugart"] == "ZugAusfuehren")
// - Partie aufgeben         ($_POST["Zugart"] == "PartieAufgeben")
// - Remis annehmen          ($_POST["Zugart"] == "RemisAnnehmen")
//
function FuehreZugAus(zugTyp)
{
  // Value des hidden-Eingabefeldes setzen
  document.getElementById('Zugart').value = zugTyp;
  if (zugTyp == "PartieAufgeben") {
    testspielUserGibtAuf = true;
  }
  
  // Formular abschicken
  //document.Zugeingabe.submit();
  setTimeout('FormularSenden()', 0);
}

var formularSendenFreigegeben = true;
var typDesLetztenZuges = "";
var notationDesLetztenZuges = "";
//
// Aufruf über Timer wegen redraw
//
function FormularSenden()
{
  // Formular abschicken
  if (formularSendenFreigegeben) {
    if (theIdPartieImHauptfenster == 0) {
      // Testspielchen: Der Benutzer hat einen Zug ausgeführt
      // zugTyp = "Rochade", "EP", "" (normaler Zug)
      OnUserZugImTestspielAusgefuehrt(typDesLetztenZuges);
    }
    else {
      // Normale Partie: Formular abschicken
      document.Zugeingabe.submit();
    }
  }
  else {
    // Da ist der Bauer-Umwandeln Dialog noch zu Gange. Wir warten etwas...
    setTimeout('FormularSenden()', 500);
  }
}

//
// Hängt für die eigene Figur "PartieUI.js::feldNamenMitEigenenFiguren[figurIndex]"
// für jedes ihrer Zielfelder eine Klasse hinzu, damit es vom droppable akzeptiert wird.
//
function AddZielfelderClasses(figurIndex)
{
  var feldImgName = "FeldImgName_" + feldNamenMitEigenenFiguren[figurIndex];

  var zielFeldNamen = zielFeldNamenDerEigenenFiguren[figurIndex];
  for (var i=0; i<zielFeldNamen.length; i++) {
    var zielFeldName = zielFeldNamen[i];
    var dropClassName = dropClassNamepraefix + zielFeldName;
    // Klasse für das Zielfeld hinzufügen    
    $(document.getElementsByName(feldImgName)).addClass(dropClassName);
  }
}

//
// True, wenn das Feld von einer eigenen Figur erreichbar ist.
//
function IsFeldVonEigenerFigurErreichbar(feldName)
{
  // Alle Zielfelder aller eigenen Figuren durchsuchen
  for (var i=0; i<zielFeldNamenDerEigenenFiguren.length; i++) {
    var zielFelder = zielFeldNamenDerEigenenFiguren[i];
    for (var j=0; j<zielFelder.length; j++) {
      if (zielFelder[j] == feldName) {
        // Das ist erreichbar
        return true;
      }
    }
  }  
  return false;
}

//
// Benutzer hat "Eingabe löschen" gedrückt.
// Setze alle Aktionen zurück.
//
function resetpressed()
{
  // Zug auf dem Brett zurücknehmen
  InitPartieanzeigeDragDrop(false, false);
}

function RemoveAllFeldMarkierungen()
{
  $(".fst-feld-ui-state-active").removeClass("fst-feld-ui-state-active");
  $(".fst-feld-ui-state-highlight").removeClass("fst-feld-ui-state-highlight");
}

//
// Spieler hat ein Feld auf dem Brett angeklickt.
// Der Feldname wird in das Formular übernommen, falls das Zugeingabe-Formular sichtbar ist.
//
// Feld = "e4"
//
function FeldKlicked(Feld)
{
  if (($(".ZugEingabeBereich") != null) && (!$(".ZugEingabeBereich").hasClass("Unsichtbar"))) {
    // Benutzer darf ziehen, andernfalls machen wir nichts
    if ((document.Zugeingabe.inputvon.value == "") && (document.Zugeingabe.inputnach.value == "")) {
      // Beide Eingabefelder leer: Startfeld angeklickt
      if ($(document.getElementsByName("FeldImgName_" + Feld)).hasClass("ui-draggable")) {
        // Wir reagieren nur, wenn hier auch eine eigene Figur steht: Es ist draggable
        StartFeldAngeklickt(Feld);
      }
    }
    else if ((document.Zugeingabe.inputvon.value != "") && (document.Zugeingabe.inputnach.value == "")) {
      // Zielfeld angeklickt
      if ($(document.getElementsByName("FeldImgName_" + Feld)).hasClass("fst-feld-ui-state-highlight")) {
        // Wir reagieren nur, wenn dieses Feld auch für die Figur erreichbar ist: Es hat die abgefragte Eigenschaft
        document.Zugeingabe.inputnach.value = Feld;
        
        // Figur vom Start- zum Zielfeld fliegen lassen
        BewegeFigurOptisch(document.Zugeingabe.inputvon.value, document.Zugeingabe.inputnach.value);
        RemoveAllFeldMarkierungen();
        
        // Falls Rochade, Bauerumwandlung oder e.p.
        StarteSonderAktionNachZug(document.Zugeingabe.inputvon.value, document.Zugeingabe.inputnach.value, "");
  
        // und den "Ziehen"-Button auffällig machen
        //$(document.getElementById('IdZiehenButton')).addClass('ButtonAuffaellig');
  
        // Zug richtig ausführen: D.h. das Formular abschicken
        FuehreZugAus("ZugAusfuehren");
      }
      else {
        // Kein mögliches Zielfeld angeklickt
        if ($(document.getElementsByName("FeldImgName_" + Feld)).hasClass("ui-draggable")) {
          // Aber eine eigene Figur: Nehmen wir also diese wieder als neuen Start
          RemoveAllFeldMarkierungen();
          StartFeldAngeklickt(Feld);
        }
      }
    }
    else {
      // Beide Felder sind befüllt oder nur das nach: Keine Reaktion
    }
  }
}

//
// Falls Rochade, Bauerumwandlung oder e.p. ausgeführt wurde, müssen zusätzliche optische Dinge gemacht werden.
// Der eigentliche Zug ist bereits optisch ausgeführt.
// Auf dem Analyse-Brett steht noch die Stellung vor dem Zug.
//
// Params:
// - startFeldName, zielFeldName: "e4"
// - umwandelFigur:
//   "" falls ganz normal der Umwandel-Dialog geöffnet werden soll
//   oder "q", "r", "b", "n" falls es sich um den Gegenzug der JS-Schachengine handelt.
//                           Diese gibt ihre Umwandelfigur natürlich schon vor.
//
function StarteSonderAktionNachZug(startFeldName, zielFeldName, umwandelFigur)
{
  var spezialZug = PartieAnalyseObjekt.IsSpezialZug(startFeldName, zielFeldName);

  switch (spezialZug) {
    case "RochadeWk":
      // Rochade: Turm bewegen
      BewegeFigurOptisch("h1", "f1");
      typDesLetztenZuges = "Rochade";
      break;
    case "RochadeWl":
      // Rochade: Turm bewegen
      BewegeFigurOptisch("a1", "d1");
      typDesLetztenZuges = "Rochade";
      break;
    case "RochadeSk":
      // Rochade: Turm bewegen
      BewegeFigurOptisch("h8", "f8");
      typDesLetztenZuges = "Rochade";
      break;
    case "RochadeSl":
      // Rochade: Turm bewegen
      BewegeFigurOptisch("a8", "d8");
      typDesLetztenZuges = "Rochade";
      break;
    case "Umwandlung":
      // Bauerumwandlung: Umwandlungsfeld merken
      feldNameBauerUmwandlung = zielFeldName;
      if (umwandelFigur == "") {
        typDesLetztenZuges = "";
        // Figur-Auswahl-Dialog für Bauerumwandlung anzeigen
        $("#IdBauerUmwandlungDialog").dialog('open');
        // Die Auswertung der gewünschten Figur: Siehe "PartieAnzeige.js::InitPartieAnzeigejQueryUI()::Bauerumwandlung-Dialog"
        // Diese führt dann nach "OnUmwandelFigurGewaehlt()" (s.u.).
      }
      else {
        // Die Umwandelfigur ist bereits gewählt (von der JS-Schachengine).
        typDesLetztenZuges = umwandelFigur;
        //
        // Die gewählte Figur auf das Zielfeld zeichnen
        //
        var feldBildName = "FeldImgName_" + feldNameBauerUmwandlung;
        // figurBildName z.B. 'FSTSchach/FST_Bilder/Figuren/png/dww.png'
        var figurBildName = 'FSTSchach/FST_Bilder/Figuren/png/';
        // Figur-Typ
        if (umwandelFigur == "q") {
          figurBildName += "d";
        }
        else if (umwandelFigur == "r") {
          figurBildName += "t";
        }
        else if (umwandelFigur == "b") {
          figurBildName += "l";
        }
        else if (umwandelFigur == "n") {
          figurBildName += "s";
        }
        else {
          // Default, sollte nicht passieren
          figurBildName += "d";
        }
        // Eigenfarbe
        figurBildName += document.getElementById('IdAmZug').innerHTML.toLowerCase();
        // Feldhintergrund
        if (PartieAnalyseObjekt.IsFeldWeiss(feldNameBauerUmwandlung)) {
          figurBildName += 'w';
        }
        else {
          figurBildName += 's';
        }
        // Postfix
        figurBildName += '.png';
        // Zeichnen
        document.images[feldBildName].src = figurBildName;
      }
      break;
    case "EP":
      // Schlagen e.p.: Geschlagenen Bauern entfernen
      var feldBildName = "FeldImgName_" + bauerDoppelschritt;
      var figurBildName;
      // Feldfarbe bestimmen
      if (PartieAnalyseObjekt.IsFeldWeiss(bauerDoppelschritt)) {
        figurBildName = 'FSTSchach/FST_Bilder/Figuren/png/w.png';
      }
      else {
        figurBildName = 'FSTSchach/FST_Bilder/Figuren/png/s.png';
      }
      // Zeichnen
      document.images[feldBildName].src = figurBildName;
      typDesLetztenZuges = "EP";
      break;
    default:
      typDesLetztenZuges = "";
      break;
  }
}

//
// Spieler hat eine Figur ausgewählt, in die umgewandelt werden soll.
//
// Param: "D", "T", "L", "S". Bei Räuberschach geht auch K.
//
function OnUmwandelFigurGewaehlt(neueFigur)
{
  //
  // Nach-Eingabefeld aktualisieren
  //
  document.Zugeingabe.inputnach.value += neueFigur;
  
  //
  // Die gewählte Figur auf das Zielfeld zeichnen
  //
  var feldBildName = "FeldImgName_" + feldNameBauerUmwandlung;
  
  // figurBildName z.B. 'FSTSchach/FST_Bilder/Figuren/png/dww.png'
  var figurBildName = 'FSTSchach/FST_Bilder/Figuren/png/';
  // Figur-Typ
  figurBildName += neueFigur.toLowerCase();
  // Eigenfarbe
  figurBildName += document.getElementById('IdAmZug').innerHTML.toLowerCase();
  // Feldhintergrund
  if (PartieAnalyseObjekt.IsFeldWeiss(feldNameBauerUmwandlung)) {
    figurBildName += 'w';
  }
  else {
    figurBildName += 's';
  }
  // Postfix
  figurBildName += '.png';
  // Zeichnen
  document.images[feldBildName].src = figurBildName;
  
  typDesLetztenZuges = "";
  if (neueFigur == "K") {
    typDesLetztenZuges = "k";
  }
  if (neueFigur == "D") {
    typDesLetztenZuges = "q";
  }
  if (neueFigur == "T") {
    typDesLetztenZuges = "r";
  }
  if (neueFigur == "L") {
    typDesLetztenZuges = "b";
  }
  if (neueFigur == "S") {
    typDesLetztenZuges = "n";
  }
  
  formularSendenFreigegeben = true;
}

//
// Bewegt das Figur-Bild optisch auf dem Brett.
//
// Params: "e4"
//
function BewegeFigurOptisch(startFeldName, zielFeldName)
{
  var startBildName = "FeldImgName_" + startFeldName;
  var zielBildName  = "FeldImgName_" + zielFeldName;
  
  // Ersetze Zielfeld-Bild durch das vom Start-Feld
  document.images[zielBildName].src = document.images[startBildName].src;
  // Das Start-Feld wird leer
  if (PartieAnalyseObjekt.IsFeldWeiss(startFeldName)) {
    //document.images[startBildName].src = 'FST_Bilder/Figuren/png/w.png';
    document.images[startBildName].src = 'FSTSchach/FST_Bilder/Figuren/png/w.png';
  }
  else {
  
    //alert('Startfeld vorher = ' + document.images[startBildName].src);
    // Startfeld vorher = file:///C:/FST/fst/cg_111201/FSTSchach/FST_Bilder/Figuren/png/bss.png
    
    //document.images[startBildName].src = 'FST_Bilder/Figuren/png/s.png';
    document.images[startBildName].src = 'FSTSchach/FST_Bilder/Figuren/png/s.png';
    
    //alert('Startfeld danach = ' + document.images[startBildName].src);
    // Startfeld danach = file:///C:/FST/fst/cg_111201/FST_Bilder/Figuren/png/s.png
  }
}

//
// Der Spieler hat eine eigene Figur angeklickt: Das soll das Startfeld seines Zuges sein.
//
function StartFeldAngeklickt(Feld)
{
  document.Zugeingabe.inputvon.value = Feld;
  document.Zugeingabe.inputnach.value = "";
  // Und das Feld als selektiert markieren
  // "FeldImgName_e4"
  $(document.getElementsByName("FeldImgName_" + Feld)).addClass("fst-feld-ui-state-active");
  // Mögliche Zielfelder markieren
  var zielFeldNamenDerFigur = GetZielFeldNamenDerFigurFromArray(Feld);
  for (var i=0; i<zielFeldNamenDerFigur.length; i++) {
    $(document.getElementsByName("FeldImgName_" + zielFeldNamenDerFigur[i])).addClass("fst-feld-ui-state-highlight");
  }
}

//
// Bestimmt aus dem Array zielFeldNamenDerEigenenFiguren die Zielfeldnamen der Figur auf dem angegebenen Feld.
//
function GetZielFeldNamenDerFigurFromArray(Feld)
{
  /*
  // Die eigenen Figuren: {"a1", "a2", ...}
  var feldNamenMitEigenenFiguren;

  // zielFeldNamenDerEigenenFiguren[Index] = {"e2", "f3", ...} oder = {}, wenn die Figur kein Zielfeld hat
  // Hierbei entspricht der Index dem des Arrays "feldNamenMitEigenenFiguren"
  var zielFeldNamenDerEigenenFiguren;
  */
  for (var i=0; i<feldNamenMitEigenenFiguren.length; i++) {
    if (feldNamenMitEigenenFiguren[i] == Feld) {
      var Index = i;
      break;
    }
  }
  return zielFeldNamenDerEigenenFiguren[Index];
}

