<!-- Javascripts für die Einblendung von PopUp-Fensterchen zu Informationszwecke -->

// Initialisiere die automatische Kennungsvergabe
var quickinfoPlusRegList = new Object();
var quickinfoPlusNextAutoID = 1;

// Aktiviere die Ereignisbehandlung
document.onmousemove = repositionQuickInfoPlus;

/* ----------------------------------------------------------------------------------------------------
      Aufgabe: Blende eine neue Box (QuickInfo plus) ein
      Eingabe: die Kennung (ID) der Box (in Kurzform), das Array mit den Eigenschaften der
               QuickInfo-Box, sowie die ID der Variante der QuickInfo-Box, welche durch das
               Eigenschaften-Array definiert werden
      Ausgabe: die ggf. automatisch vergebene Kennung in Langform
    Bemerkung: keine
   ---------------------------------------------------------------------------------------------------- */
    function showQuickInfoPlus(boxID, elementdata, selectedVariant) {
      // Aufbereitung der übergebenen Daten
      // -> Kennung (ID)
      if ((boxID == undefined) || (boxID == "") || (boxID == 0)) {
        boxID = quickinfoPlusNextAutoID;
        boxID = boxID + 1;
       }
      boxID = "quickinfoplusID" + boxID.toLowerCase();
      // -> Position
      if (elementdata["position"] == undefined) {
        elementdata["position"] = new Array();
       }
      if (elementdata["position"].constructor.toString().indexOf("Array") != -1) {
        if ((elementdata["position"]["x"] == undefined) || (parseInt(elementdata["position"]["x"]) == NaN)) {
          elementdata["position"]["x"] = null;
         }
        if ((elementdata["position"]["y"] == undefined) || (parseInt(elementdata["position"]["y"]) == NaN)) {
          elementdata["position"]["y"] = null;
         }
       }
      // -> Größe
      if (elementdata["dimension"] == undefined) {
        elementdata["dimension"] = new Array();
       }
      if ((elementdata["dimension"]["x"] == undefined) || (parseInt(elementdata["dimension"]["x"]) == NaN)) {
        elementdata["dimension"]["x"] = null;
       }
      if ((elementdata["dimension"]["y"] == undefined) || (parseInt(elementdata["dimension"]["y"]) == NaN)) {
        elementdata["dimension"]["y"] = null;
       }
      // -> Verschiebung
      if (elementdata["movement"] == undefined) {
        elementdata["movement"] = new Array();
       }
      if ((elementdata["movement"]["x"] == undefined) || (parseInt(elementdata["movement"]["x"]) == NaN)) {
        elementdata["movement"]["x"] = null;
       }
      if ((elementdata["movement"]["y"] == undefined) || (parseInt(elementdata["movement"]["y"]) == NaN)) {
        elementdata["movement"]["y"] = null;
       }
      // -> automatische Positionierung
      var autopositionMode = false;
      var autopositionLimit = "nothing";
      if (elementdata["autoposition"] != undefined) {
        elementdata["autoposition"] = elementdata["autoposition"].toLowerCase();
        if ((elementdata["autoposition"] == "bymousebottomright") || (elementdata["autoposition"] == "bymousebottomrightwithrepositioning")) {
          autopositionMode = elementdata["autoposition"];
          if ((elementdata["position"]["x"] != null) || (elementdata["position"]["y"] != null)) {
            if ((elementdata["position"]["x"] == null) && (elementdata["position"]["y"] != null)) {
              autopositionLimit = "fixY";
             } else if ((elementdata["position"]["x"] != null) && (elementdata["position"]["y"] == null)) {
              autopositionLimit = "fixX";
             } else {
              autopositionMode = false;
             }
           }
         }
       }
      // -> Muster (teilweise vordefiniert)
      if (elementdata["standardtype"]) {
        elementdata["standardtype"] = elementdata["standardtype"].toLowerCase();
       }
      if ((elementdata["standardtype"] != "simple") && (elementdata["standardtype"] != "verysimple")) {
        elementdata["standardtype"] = undefined;
       }
      if ((elementdata["pattern"] == undefined) && (elementdata["standardtype"] == undefined)) {
        elementdata["standardtype"] = "simple";
       }
      // Erstelle das Muster anhand der Standardtypen
      if (elementdata["standardtype"] == "verysimple") {
        var pattern = "";
        pattern = pattern + "<div class=\"content\">" + "\r\n";
        pattern = pattern + " <p class=\"content\">{content}</p>" + "\r\n";
        pattern = pattern + "</div>" + "\r\n";
        elementdata["pattern"] = pattern;
       }
      if (elementdata["standardtype"] == "simple") {
        var pattern = "";
        pattern = pattern + "<div class=\"boxtitle\">" + "\r\n";
        pattern = pattern + " <p class=\"boxtitle\">{boxtitle}</p>" + "\r\n";
        pattern = pattern + "</div>" + "\r\n";
        pattern = pattern + "<div class=\"content\">" + "\r\n";
        pattern = pattern + " <p class=\"content\">{content}</p>" + "\r\n";
        pattern = pattern + "</div>" + "\r\n";
        elementdata["pattern"] = pattern;
       }
      // Erstelle den Inhalt der Box
      content = elementdata["pattern"];
      var variantNotFounded = true;
      if ((elementdata["variants"] != undefined) && (selectedVariant != undefined)) {
        for (var key in elementdata["variants"]) {
          if (key == selectedVariant) {
            for (var subkey in elementdata["variants"][key]) {
              var temp = new RegExp("{" + subkey + "}", "gi");
              content = content.replace(temp, elementdata["variants"][key][subkey]);
             }
            variantNotFounded = false;
            break;
           }
         }
       }
      // Entferne alle "überflüssigen" Marken
      content = content.replace(/\\\{/, "%7b");
      content = content.replace(/\\}/, "%7d");
      content = content.replace(/{.+}/, "");
      content = content.replace(/%7b/, "{");
      content = content.replace(/%7d/, "}");
      // Erzeuge das DIV-Tag, welches als Basis dient
      var DIVpopupinfoBase = document.createElement("div");
      with (DIVpopupinfoBase) {
        visible = true;
        style.position = "absolute";
        if (elementdata["position"]["x"] != null) {
          style.left = elementdata["position"]["x"] + "px";
         }
        if (elementdata["position"]["y"] != null) {
          style.top = elementdata["position"]["y"] + "px";
         }
        if (elementdata["dimension"]["x"] != null) {
          style.width = elementdata["dimension"]["x"] + "px";
         }
        if (elementdata["dimension"]["y"] != null) {
          style.height = elementdata["dimension"]["y"] + "px";
         }
        if (elementdata["movement"]["x"] != null) {
          setAttribute("movementX", elementdata["movement"]["x"]);
         }
        if (elementdata["movement"]["y"] != null) {
          setAttribute("movementY", elementdata["movement"]["y"]);
         }
        if (autopositionMode != false) {
          setAttribute("autopositionMode", autopositionMode);
          setAttribute("autopositionLimit", autopositionLimit);
         }
        innerHTML = content;
       }
      // Füge das erzeugte DIV-Tag in die HTML-Seite ein
      var reservedPlace = document.getElementsByTagName("body")[0];
      newElement = DIVpopupinfoBase;
      newElement.id = boxID;
      newElement.className = "quickinfoplusStandart";
      reservedPlace.appendChild(newElement);
      // Registriere die erzeugte QuickInfo-Box
      quickinfoPlusRegList[newElement.id] = "QuickInfo plus";
      // Gebe die Kennung (ID) der erzeugten QuickInfo-Box zurück
      return newElement.id;
     }

/* ----------------------------------------------------------------------------------------------------
      Aufgabe: Blende eine QuickInfo-Box aus
      Eingabe: die Kennung (ID) der Box (in Kurz- oder Langform)
      Ausgabe: nichts
    Bemerkung: keine
   ---------------------------------------------------------------------------------------------------- */
    function hideQuickInfoPlus(boxID) {
      // Aufbereitung der übergebenen Daten
      if ((boxID != undefined) && (boxID != "") && (boxID != 0)) {
        // -> Kennung (ID)
        if (boxID.substr(0, "quickinfoplusID".length) != "quickinfoplusID") {
          boxID = "quickinfoplusID" + boxID.toLowerCase();
         }
        // Ermittle das übergeordnete Objekt
        var reservedPlace = document.getElementsByTagName("body")[0];
        // Ermittle das Objekt für die QuickInfo-Box
        var currentQuickInfo = document.getElementById(boxID);
        if (currentQuickInfo != undefined) {
          // Entferne das ermittelte Objekt
          reservedPlace.removeChild(currentQuickInfo);
         }
       }
     }

/* ----------------------------------------------------------------------------------------------------
      Aufgabe: Passe die Position der aktuellen QuickInfo-Box an den Mauszeiger an
      Eingabe: nichts
      Ausgabe: nichts
    Bemerkung: keine
   ---------------------------------------------------------------------------------------------------- */
    function repositionQuickInfoPlus(currentEvent) {
      for (boxID in quickinfoPlusRegList) {
        // Ermittle das Objekt für die QuickInfo-Box
        var currentQuickInfo = document.getElementById(boxID);
        if (currentQuickInfo != undefined) {
          // Autopositionierungsmodi:
          var autopositionMode = currentQuickInfo.getAttribute("autopositionMode");
          var autopositionLimit = currentQuickInfo.getAttribute("autopositionLimit");
          if ((autopositionMode != undefined) && (autopositionLimit != undefined)) {
            with (currentQuickInfo) {
              if ((autopositionMode == "bymousebottomright") || (autopositionMode == "bymousebottomrightwithrepositioning")) {
                // Bestimme die aktuelle Position des Mauszeigers
                currentMousePosition = new Array();
                // (Version für IE und Opera)
                if (window.event != undefined) {
                  currentMousePosition["x"] = parseInt(window.event.clientX) + parseInt(document.body.scrollLeft);
                  currentMousePosition["y"] = parseInt(window.event.clientY) + parseInt(document.body.scrollTop);
                // (Version für Mozilla [Netscape/Firefox])
                 } else {
                  currentMousePosition["x"] = currentEvent.pageX;
                  currentMousePosition["y"] = currentEvent.pageY;
                 }
                // Korrektur der bestimmten Werte, um den Mauszeiger zu kompensieren
                currentMousePosition["x"] = currentMousePosition["x"] + 15;
                currentMousePosition["y"] = currentMousePosition["y"] + 15;
                // Unterscheide die einzelnen Typen der Automatischen Positionierung
                if (autopositionMode == "bymousebottomrightwithrepositioning") {
                  // Bestimme die aktuelle Größe der Box
                  currentBoxSize = new Array();
                  currentBoxSize["x"] = style.width.substr(0, style.width.length - 2);
                  currentBoxSize["x"] = eval(currentBoxSize["x"]);
                  currentBoxSize["y"] = style.height.substr(0, style.height.length - 2);
                  currentBoxSize["y"] = eval(currentBoxSize["y"]);
                  // Bestimme die Größe des genutzten Fensters
                  windowSize = new Array();
                  // (Version für Mozilla [Netscape/Firefox] und Opera)
                  if (window.innerWidth != undefined) {
                    windowSize["x"] = window.innerWidth - 10;
                    windowSize["y"] = window.innerHeight - 5;
                  // (Version für IE)
                   } else {
                    windowSize["x"] = document.body.offsetWidth - 25;
                    windowSize["y"] = document.body.offsetHeight - 10;
                   }
                  // Korrigiere die neue Position, falls die Quickinfo-Box damit aus dem Browserfenster herausrutschen würde
                  if ((currentMousePosition["x"] + currentBoxSize["x"]) > windowSize["x"]) {
                    currentMousePosition["x"] = currentMousePosition["x"] - currentBoxSize["x"] - 15;
                   }
                  if ((currentMousePosition["y"] + currentBoxSize["y"]) > windowSize["y"]) {
                    currentMousePosition["y"] = currentMousePosition["y"] - currentBoxSize["y"] - 15;
                   }
                 }
                // Verschiebe die Quickinfo-Box
                var newPositionX = false;
                if ((autopositionLimit == "nothing") || (autopositionLimit == "fixY")) {
                  newPositionX = true;
                  style.left = currentMousePosition["x"];
                 }
                var newPositionY = false;
                if ((autopositionLimit == "nothing") || (autopositionLimit == "fixX")) {
                  newPositionY = true;
                  style.top = currentMousePosition["y"];
                 }
               }
             }
           }
          // generell mögliche Verschiebung der Objekte abweichend vom Standard
          with (currentQuickInfo) {
            var movementX = currentQuickInfo.getAttribute("movementX");
            if ((movementX != undefined) && (newPositionX == true)) {
              style.left = parseInt(style.left.replace(/px/, "")) + parseInt(movementX);
             }
            var movementY = currentQuickInfo.getAttribute("movementY");
            if ((movementY != undefined) && (newPositionY == true)) {
              style.top = parseInt(style.top.replace(/px/, "")) + parseInt(movementY);
             }
           }
         }
       }
     }