function KlasseDialog(Hoehe, Breite, Verzoegerung)
  {
  function _Oeffnen()
    {
    // prüfen ob das IFrame vorhanden ist, wenn ja dieses löschen
    if (__Frame != null)
      {
      // prüfen ob das IFrame noch verknüpft ist
      if (__Frame.parentNode != null) __Frame.parentNode.removeChild(__Frame);
      
      // löschen des IFrames
      delete __Frame;
      }
      
    // erzeugen eines IFrames
    __Frame = ErzeugeElement("iframe", __Anzeige, {"src" : __URI}, {"background" : "#ffffff", "border" : "0", "height" : "100%", "margin" : "0", "padding" : "0", "visibility" : "hidden", "width" : "100%"});
    
    // setzen des neuen Zustandes
    __Status = (__Status | 1);
    
    // immer TRUE zurückgeben
    return true;
    }
    
  function _Schliessen()
    {
    // prüfen ob das IFrame vorhanden ist, wenn ja dieses löschen
    if (__Frame != null)
      {
      // prüfen ob das IFrame noch verknüpft ist
      if (__Frame.parentNode != null) __Frame.parentNode.removeChild(__Frame);
      
      // löschen des IFrames
      delete __Frame;
      }
      
    // IFrame auf NULL setzen
    __Frame = null;
    
    // setzen des neuen Zustandes
    __Status = (__Status & 254);
    
    // immer TRUE zurückgeben
    return true;
    }
    
  function _Einblenden()
    {
    // prüfen ob DOM-Elemente initialisiert werden müssen
    if (__Schritt == 0)
      {
      // initialisieren der Hintergrundabdeckung
      SetzeCSS(__Schatten, {"display" : "block"});

      // initialisieren der Dialogbox
      SetzeCSS(__Zentrierung, {"display" : "block"});
      
      // setzen des neuen Zustandes
      __Status = (__Status | 2);
      }
      
    // je nach Stufe die Transparenz der Hintergrundabdeckung anpassen
    SetzeCSS(__Schatten, {"opacity" : (__Schritt + 1) / __Schritte * 0.75});
    
    // immer TRUE zurückgeben
    return true;
    }
    
  function _Ausblenden()
    {
    // prüfen ob DOM-Elemente initialisiert werden müssen
    if (__Schritt == 0) SetzeCSS(__Zentrierung, {"display" : "none"});
    
    // je nach Stufe die Transparenz der Hintergrundabdeckung und des Dialogs anpassen
    SetzeCSS(__Schatten, {"opacity" : (__Schritte - __Schritt - 1) / __Schritte * 0.75});
    
    // prüfen ob DOM-Elemente ausgeblendet werden müssen
    if (__Schritt + 1 == __Schritte)
      {
      // abschalten der Hintergrundabdeckung
      SetzeCSS(__Schatten, {"display" : "none"});

      // setzen des neuen Zustandes
      __Status = (__Status & 249);
      }
    
    // immer TRUE zurückgeben
    return true;
    }
    
  function _Anzeigen()
    {
    // prüfen ob ein IFrame angezeigt wird
    if (__Frame == null) throw {"code" : 0, "data" : {"code" : 1, "message" : "Dialog kann nicht ohne URI angezeigt werden."}};
    
    // prüfen ob IFrame initialsiert werden muss
    if (__Schritt == 0)
      {
      // einschalten des IFrames
      SetzeCSS(__Frame, {"opacity" : 0, "visibility" : "visible"});
      
      // setzen des neuen Zustandes
      __Status = (__Status | 4);
      }
    
    // je nach Stufe die Transparenz des IFrames anpassen
    SetzeCSS(__Frame, {"opacity" : (__Schritt + 1) / __Schritte});
    
    // immer TRUE zurückgeben
    return true;
    }
    
  function _Verbergen()
    {
    // je nach Stufe die Transparenz des IFrames anpassen
    SetzeCSS(__Frame, {"opacity" : (__Schritte - __Schritt - 1) / __Schritte});
    
    // prüfen ob IFrame abgeblendet werden muss
    if (__Schritt + 1 == __Schritte)
      {
      // abschalten des IFrames
      SetzeCSS(__Frame, {"visibility" : "hidden"});
      
      // setzen des neuen Zustandes
      __Status = (__Status & 251);
      }
    
    // immer TRUE zurückgeben
    return true;
    }
    
  function _SetzeHoehe()
    {
    // je nach Stufe die Höhe des Dialogfeldes anpassen
    SetzeCSS(__Rahmen, {"top" : Math.floor((__QuellHoehe + ((__ZielHoehe - __QuellHoehe) / __Schritte * (__Schritt + 1))) / 2) * -1, "height" : Math.floor(__QuellHoehe + ((__ZielHoehe - __QuellHoehe) / __Schritte * (__Schritt + 1)))});
    SetzeCSS(__Anzeige, {"height" : Math.floor(__QuellHoehe + ((__ZielHoehe - __QuellHoehe) / __Schritte * (__Schritt + 1)) - 2)});
    
    // Ausgangshöhe neu berechnen
    if (__Schritt + 1 == __Schritte) __QuellHoehe = __ZielHoehe;
    else __QuellHoehe = Math.floor((Math.floor(__QuellHoehe + ((__ZielHoehe - __QuellHoehe) / __Schritte * (__Schritt + 1))) + __QuellHoehe * 4) / 5);
    
    // immer TRUE zurückgeben
    return true;
    }
    
  function _SetzeBreite()
    {
    // je nach Stufe die Breite des Dialogfeldes anpassen
    SetzeCSS(__Rahmen, {"left" : Math.floor((__QuellBreite + ((__ZielBreite - __QuellBreite) / __Schritte * (__Schritt + 1))) / 2) * -1, "width" : Math.floor(__QuellBreite + ((__ZielBreite - __QuellBreite) / __Schritte * (__Schritt + 1)))});
    SetzeCSS(__Anzeige, {"width" : Math.floor(__QuellBreite + ((__ZielBreite - __QuellBreite) / __Schritte * (__Schritt + 1)) - 2)});
    
    // Ausgangsbreite neu berechnen
    if (__Schritt + 1 == __Schritte) __QuellBreite = __ZielBreite;
    else __QuellBreite = Math.floor((Math.floor(__QuellBreite + ((__ZielBreite - __QuellBreite) / __Schritte * (__Schritt + 1))) + __QuellBreite * 4) / 5);
    
    // immer TRUE zurückgeben
    return true;
    }
    
  function _NaechsterSchritt()
    {
    // prüfen ob neue Sequenz eingeleitet werden muss
    if ((__Schritt >= __Schritte) && (__Sequenz.length > 0))
      {
      // initialisieren der URI, wenn vorhanden
      if (__Sequenz[0].uri) __URI = __Sequenz[0].uri;
      
      // initialisieren der Höhe, wenn vorhanden
      if (__Sequenz[0].hoehe) __ZielHoehe = __Sequenz[0].hoehe;
      
      // initialisieren der Breite, wenn vorhanden
      if (__Sequenz[0].breite) __ZielBreite = __Sequenz[0].breite;
      
      // nächsten Sequenztyp ermitteln
      __Typ = __Sequenz[0].typ;
      
      // nächste Sequenzlänge ermitteln
      __Schritte = __Sequenz[0].schritte;
      
      // Sequenzschritt initialisieren
      __Schritt = 0;
      
      // löschen der Sequenz aus der Liste
      __Sequenz.shift();
      }
      
    // prüfen ob eine Sequenz ausgeführt werden muss
    if (__Schritt < __Schritte)
      {
      // je nach Sequenztyp die passende Funktion ausführen
      switch (__Typ)
        {
        case 0  : _Oeffnen(); break;
        case 1  : _Schliessen(); break;
        case 2  : _Einblenden(); break;
        case 3  : _Ausblenden(); break;
        case 4  : _Anzeigen(); break;
        case 5  : _Verbergen(); break;
        case 6  : _SetzeHoehe(); break;
        case 7  : _SetzeBreite(); break;
        }
        
      // Sequenzstufe um ein erhöhen
      __Schritt++;
      }
    
    // immer TRUE zurückgeben
    return true;
    }
    
  // Funktion für das Initialsieren eines Dialoges definieren
  this.oeffnen = function(URI)
    {
    // prüfen ob die URI sich ändert
    if ((__URI != URI) || ((__Status & 1) == 0))
      {
      // je nach aktuellem Zustand eine neue Sequenz generieren
      if ((__Status & 4) != 0) __Sequenz = [{"typ" : 5, "schritte" : __UerberblendSchritte}, {"typ" : 0, "schritte" : 1, "uri" : URI}];
      else if ((__Status & 2) == 0) __Sequenz = [{"typ" : 0, "schritte" : 1, "uri" : URI}, {"typ" : 2, "schritte" : __UerberblendSchritte}];
      else __Sequenz = [{"typ" : 0, "schritte" : 1, "uri" : URI}];
      }
      
    // immer TRUE zurückgeben
    return true;
    }
  
  // Funktion für das Deinitialisieren eines Dialoges definieren
  this.schliessen = function()
    {
    // abschalten der Dialoganpassung
    __DialogAnpassung = null;
    
    // initialisieren der Sequenz
    __Sequenz = [];
    
    // prüfen ob der Dialog ausgeblendet werden muss
    if ((__Status & 2) != 0) __Sequenz.push({"typ" : 3, "schritte" : __UerberblendSchritte});
    
    // prüfen ob das Frame geschlossen werden muss
    if ((__Status & 1) != 0) __Sequenz.push({"typ" : 1, "schritte" : 1});
    
    // immer TRUE zurückgeben
    return true;
    }
    
  // Funktion für das Einblenden eines Dialoges definieren
  this.anzeigen = function(URI, Hoehe, Breite)
    {
    // prüfen ob die URI sich ändert
    if (((URI != null) && (__URI != URI)) || ((__Status & 1) == 0))
      {
      // je nach aktuellem Zustand eine neue Sequenz generieren
      if ((__Status & 4) != 0) __Sequenz = [{"typ" : 5, "schritte" : __UerberblendSchritte}, {"typ" : 0, "schritte" : 1, "uri" : URI}];
      else __Sequenz = [{"typ" : 0, "schritte" : 1, "uri" : URI}];
      }
    else if ((__Status & 1) == 0) __Sequenz = [{"typ" : 0, "schritte" : 1, "uri" : __URI}]
    else __Sequenz = [];
    
    // prüfen ob das Dialogfeld angezeigt werden muss
    if ((__Status & 2) == 0) __Sequenz.push({"typ" : 2, "schritte" : __UerberblendSchritte});
    
    // prüfen ob die Höhe geändert werden muss
    if ((Hoehe != null) && (__ZielHoehe != Hoehe + 2)) __Sequenz.push({"typ" : 6, "schritte" : __ZoomSchritte, "hoehe" : Hoehe + 2});

    // prüfen ob die Breite geändert werden muss
    if ((Breite != null) && (__ZielBreite != Breite + 2)) __Sequenz.push({"typ" : 7, "schritte" : __ZoomSchritte, "breite" : Breite + 2});
    
    // einblenden des IFrames
    if ((__Status & 4) == 0) __Sequenz.push({"typ" : 4, "schritte" : __UerberblendSchritte});
    
    // immer TRUE zurückgeben
    return true;
    }
    
  // Funktion für das Ausblenden eines Dialoges definieren
  this.verbergen = function()
    {
    // initialisieren der Sequenz
    __Sequenz = [];
    
    // prüfen ob der Dialog ausgeblendet werden muss
    if ((__Status & 2) != 0) __Sequenz = [{"typ" : 5, "schritte" : __UerberblendSchritte}];
    
    // immer TRUE zurückgeben
    return true;
    }
    
  // Funktion für das Verändern der Größe eines Dialoges definieren
  this.zoomen = function(Hoehe, Breite)
    {
    // initialisieren der Sequenz
    __Sequenz = [];
    
    // prüfen ob die Höhe geändert werden muss
    if ((Hoehe != null) && (__ZielHoehe != Hoehe + 2))
      {
      // prüfen ob die Höhe verdeckt oder offen verändert wird
      if ((__Status & 2) == 0) __Sequenz.push({"typ" : 6, "schritte" : 1, "hoehe" : Heohe + 2});
      else __Sequenz.push({"typ" : 6, "schritte" : __ZoomSchritte, "hoehe" : Hoehe + 2});
      }

    // prüfen ob die Breite geändert werden muss
    if ((Breite != null) && (__ZielBreite != Breite + 2))
      {
      // prüfen ob die Breite verdeckt oder offen verändert wird
      if ((__Status & 2) == 0) __Sequenz.push({"typ" : 7, "schritte" : 1, "breite" : Breite + 2});
      else __Sequenz.push({"typ" : 7, "schritte" : __ZoomSchritte, "breite" : Breite + 2});
      }
    
    // immer TRUE zurückgeben
    return true;
    }
    
  // Ausgangs Breite und Höhe übernehmen
  var __QuellBreite = Breite;
  var __ZielBreite = Breite;
  var __QuellHoehe = Hoehe;
  var __ZielHoehe = Hoehe;
  
  // URI initialisieren
  var __URI = null;
  
  // Zustand initialsieren
  var __Status = 0;
  
  // Stufenzähler, -begrenzer und -typ initialsieren
  var __Schritt = 0;
  var __Schritte = 0;
  var __Typ = 0;
  
  // Verzögerung zwischen den Stufen übernehmen
  var __Verzoegerung = Verzoegerung;
    
  // definieren der Länge der einzelnen Animationssequenzen (in Zeiteinheiten von __Delay)
  var __ZoomSchritte = 20;
  var __UerberblendSchritte = 10;
  
  // Sequenzliste initialisieren
  var __Sequenz = [];
  
  // erzeugen der DOM-Elemente des Dialogs, bis auf das Frame
  var __Schatten = ErzeugeElement("div", null, {"onclick" : this.schliessen}, {"background" : "#334455", "display" : "none", "height" : "100%", "left" : 0, "opacity" : 0, "overflow" : "hidden", "position" : "absolute", "top" : 0, "width" : "100%"});
  var __Zentrierung = ErzeugeElement("div", null, null, {"background" : "#ffffff", "display" : "none", "height" : 1, "left" : "50%", "overflow" : "visible", "position" : "absolute", "top" : "50%", "width" : 1});
  var __Rahmen = ErzeugeElement("div", __Zentrierung, null, {"background" : "#000000", "height" : __ZielHoehe, "left" : Math.floor(__ZielBreite / 2 * -1), "opacity" : 1, "overflow" : "hidden", "position" : "absolute", "top" : Math.floor(__ZielHoehe / 2 * -1), "width" : __ZielBreite});
  var __Anzeige = ErzeugeElement("div", __Rahmen, null, {"background" : "#ffffff url('/grafik/warten.gif') no-repeat center center", "height" : __ZielHoehe - 2, "left" : 1, "overflow" : "hidden", "position" : "absolute", "top" : 1, "width" : __ZielBreite - 2});
  var __Frame = null;
  
  // Sequenzinterval starten
  var __Interval = window.setInterval(_NaechsterSchritt, __Verzoegerung);
  }