// **** Copyright by Dipl.-Math. Dipl.-Ing. Wolfgang Krause, www.MoSysReal.org
// **** Globale Variablen und Konstanten
// **** --------------------------------

Leer    = new Array(0);     // Leeres Array
Sprache=0;                  // Benutzte Sprache (0 Englisch, 1 Spanisch, 2 Deutsch)
AusgabeMedium=0;            // Benutztes Ausgabemedium (0 Bildschirm, 1 Drucker)
PositionX=0;                // Maus-X-Position bei Layer (Netscape)
PositionY=0;                // Maus-Y-Position bei Layer (Netscape)


// **** Globale Funktionen
// **** ------------------

// **** Basisfunktionen

// **** Addiert zu einem Nummernstring 1 dazu
function StringPlusEins(Zahlenstring)
{
  var Ergebnis = "";
  var PlusEins = 1;
  for (var i=Zahlenstring.length-1; i >= 0; i--)
  {
    if (PlusEins == 1)
    {
      if (Zahlenstring.charAt(i) == "9")
      {
        Ergebnis = "0" + Ergebnis;
      }
      else
      {
        Ergebnis = String.fromCharCode(Zahlenstring.charCodeAt(i)+1) + Ergebnis;
        PlusEins = 0;
      }
    }
    else Ergebnis = Zahlenstring.charAt(i) + Ergebnis;
  }
  if (PlusEins == 1) Ergebnis = "1" + Ergebnis;
  return Ergebnis;
}


// **** Subtrahiert von einem Nummernstring 1 ab. Parameter > 0!
function StringMinusEins(Zahlenstring)
{
  var Ergebnis = "";
  var MinusEins = 1;
  for (var i=Zahlenstring.length-1; i >= 0; i--)
  {
    if (MinusEins == 1)
    {
      if (Zahlenstring.charAt(i) == "0")
      {
        Ergebnis = "9" + Ergebnis;
      }
      else
      {
        Ergebnis = String.fromCharCode(Zahlenstring.charCodeAt(i)-1) + Ergebnis;
        MinusEins = 0;
      }
    }
    else Ergebnis = Zahlenstring.charAt(i) + Ergebnis;
  }
  return Ergebnis;
}


// **** String, in dem Sonderzeichen internationalisiert sind
function KlarerString(Zeichenkette)
{
  var Ergebnis = "";
  for (var i=0; i < Zeichenkette.length; i++)
  {
    if      (Zeichenkette.slice(i,i+1) == "Ä") Ergebnis = Ergebnis + "&#196;"
    else if (Zeichenkette.slice(i,i+1) == "Ö") Ergebnis = Ergebnis + "&#214;"
    else if (Zeichenkette.slice(i,i+1) == "Ü") Ergebnis = Ergebnis + "&#220;"
    else if (Zeichenkette.slice(i,i+1) == "ä") Ergebnis = Ergebnis + "&#228;"
    else if (Zeichenkette.slice(i,i+1) == "ö") Ergebnis = Ergebnis + "&#246;"
    else if (Zeichenkette.slice(i,i+1) == "ü") Ergebnis = Ergebnis + "&#252;"
    else if (Zeichenkette.slice(i,i+1) == "ß") Ergebnis = Ergebnis + "&#223;"
    else if (Zeichenkette.slice(i,i+1) == "Á") Ergebnis = Ergebnis + "&#193;"
    else if (Zeichenkette.slice(i,i+1) == "Ó") Ergebnis = Ergebnis + "&#211;"
    else if (Zeichenkette.slice(i,i+1) == "á") Ergebnis = Ergebnis + "&#225;"
    else if (Zeichenkette.slice(i,i+1) == "ó") Ergebnis = Ergebnis + "&#243;"
    else                                       Ergebnis = Ergebnis + Zeichenkette.slice(i,i+1);
  }
  return Ergebnis;
}


// **** String,in dem Sonderzeichen und das Leerzeichen durch allgemeine Terme ersetzt sind
function FesterString(Zeichenkette)
{
  var Ergebnis = "";
  for (var i=0; i < Zeichenkette.length; i++)
  {
    if (Zeichenkette.slice(i,i+1) == " ") Ergebnis = Ergebnis + "&#160;"
    else                                  Ergebnis = Ergebnis + KlarerString(Zeichenkette.slice(i,i+1));
  }
  return Ergebnis;
}


// **** Holt Seitenzahl-Endindex aus dem URL-String (Position danach).
function SeiteAusURLEnde(URLString)
{
  return URLString.lastIndexOf(".");
}



// **** Funktionen zum Seitenhandling


// **** Holt Seitenzahl-Anfangsindex aus dem URL-String (direkte Position). Benötigt Endindex.
function SeiteAusURLAnfang(URLString,Seitenende)
{
  var i = Seitenende-1;
  while (i >= 0)
  {
    if ((URLString.charCodeAt(i) < 48) || (URLString.charCodeAt(i) > 57)) break;
    i--;
  }
  if (i == 0) return 0;
  return i + 1;
}


// **** Seite drucken
function printPage() 
{
  if (self.print)
  {
    self.focus();
    self.print();
  }
  else
  {
    self.focus();
    var WebBrowser = '<object id="WebBrowser1" width=0 height=0 classid="clsid:8856F961-340A-11D0-A96B-00C04FD705A2"></object>';
    document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
    WebBrowser1.ExecWB(6,2);
    WebBrowser1.outerHTML = '';
  }
}


// **** Seite holen
function Complete(sWhat)
{
  top.location.replace(sWhat + ".html");
}


// **** Frameset hinzuladen
function AddFrameset(sWhat)
{
  if (self==top) Complete(sWhat);
}




// **** Klasse für grundlegende Objekte, hier werden auch die meisten Browserabhängigkeiten versteckt
// **** ---------------------------------------------------------------------------------------------

// **** ObjName ist der Name des Objekts, das hier gekapselt wird
function Objekte(ObjName)
{
 // **** Member
 if (ObjName == "all")
 {
  this.ObjType        = 0;
  if (document.all)
    this.Obj          = document.all;
  else
    this.Obj          = document;
 }
 else if (ObjName != "")
 {
  this.ObjType       = 1;
  if (document.all)
  {
    this.Obj         = "document.all."+ObjName;
    this.Style       = this.Obj+".style";
//    this.Bild        = "document."+ObjName+"B";
  }
  else if (document.layers)
  {
    this.Obj         = "document."+ObjName;
    this.Style       = this.Obj;
//    this.Bild        = this.Obj+".document."+ObjName+"B";
  }
  else
  {
    this.Obj         = "document.getElementById(\""+ObjName+"\")";
    this.Style       = this.Obj+".style";
//    this.Bild        = "document.getElementById(\""+ObjName+"\").style";
  }
  this.ZIndex        = this.Style+".zIndex";
 }
 else
 {
   this.ObjType      = 2;
 }

 // **** Methoden
 this.BewegeZeiger   = BewegeZeiger;
 this.Breite         = Breite;
 this.Hoehe          = Hoehe;
 this.Sichtbar       = Sichtbar;
 this.GeheNach       = GeheNach;
 this.SetzeZIndex    = SetzeZIndex;
 this.HoleX          = HoleX;
 this.HoleY          = HoleY;
 this.Groessenstring = Groessenstring;
 this.GroessenS      = GroessenS;
 this.GroessenF      = GroessenF;
 this.ULPaddingLeft  = ULPaddingLeft;
 this.TabYPosKorr    = TabYPosKorr;
 this.TabHString     = TabHString;
 this.TabBString     = TabBString;
 this.GetTop         = GetTop;
 this.GetLeft        = GetLeft;
 this.GetX           = GetX;
 this.GetY           = GetY;

 // **** Initialisierung
 if (this.ObjType == 0)
 {
   if (window.captureEvents) if (document.layers) window.captureEvents(Event.MOUSEMOVE);
   window.onmousemove = this.BewegeZeiger;
//   GroessenUeberwachung = new GroessenAnders();
//   GroessenUeberwachung.InitAlteGroesse();
//   window.onresize=GroessenUeberwachung.NeuAufbauen;
 }


 // **** Legt für Netscape und ähnliche Layer-Explorer die Position in die zugehörigen globalen Variablen
 function BewegeZeiger(Ev)
 {
  PositionX = Ev.pageX;
  PositionY = Ev.pageY;
 }


 function GetTop(o)
 {
  if (document.getElementById || document.all)
  {
   var y = 0;
   if (o && o.offsetTop)
   {
    y += parseInt(o.offsetTop);
    {
      if (o.parentNode)
      {
        var oc=o.parentNode;
        if (oc && oc.offsetTop && parseInt(oc.offsetTop) != 80 && window.getSelection && !document.compatMode) // Letzte beiden Bedingungen für Selektion Netscape 6 (alles bezogen auf body)
         y -= parseInt(oc.offsetTop);
      }
      return y;
    }
   }
   return y;
  }
  else
  {
    return o.pageY || o.top;
  }
 }


 function GetLeft(o)
 {
  if (document.getElementById || document.all)
  {
   var x = 0;
   if (o && o.offsetLeft && typeof(o.offsetLeft) == 'number')
   {
    x += parseInt(o.offsetLeft);
    {
      if (o.parentNode)
      {
        var oc=o.parentNode;
        if (oc && oc.offsetLeft && parseInt(oc.offsetLeft) != 256 && window.getSelection && !document.compatMode) // Letzte beiden Bedingungen für Selektion Netscape 6 (alles bezogen auf body)
         x -= parseInt(oc.offsetLeft);
      }
      return x;
    }
   }
   return x;  
  }
  else
  {
    return o.pageX || o.left;
  }
 }

 function GetX()
 {
    return this.GetLeft(eval(this.Obj));
 }

 function GetY()
 {
    return this.GetTop(eval(this.Obj));
 }



 // **** Liefert die Fensterbreite des aktuellen Framens
 function Breite()
 {
  if (document.getElementById && window.innerWidth)
    return window.innerWidth;
  else if (document.all && document.body)
    return document.body.clientWidth;
  else
    return window.innerWidth;
 }


 // **** Liefert die Fensterhöhe des aktuellen Frames
 function Hoehe()
 {
  
  if (document.getElementById && window.innerHeight)
    return window.innerHeight;
  else if (document.all && document.body)
    return document.body.clientHeight;
  else
    return window.innerHeight;
 }


 // **** Macht das Objekt sichtbar oder unsichtbar
 function Sichtbar(Aussage)
 {
  if (Aussage == 1)
    eval(this.Style).visibility = "visible";
  else
    eval(this.Style).visibility = "hidden";
 }


 // **** Ändert die Position des Objekts auf die Parameter-Positionen
 function GeheNach(X,Y)
 {
  if (document.layers)
   eval(this.Obj).moveTo(X,Y);
  else if (navigator.userAgent.toLowerCase().indexOf("opera")>-1)
  {
   eval(this.Style).top=Y;
   eval(this.Style).left=X;
  }
  else
  {
// alert(X);
   eval(this.Style).top=Y+"px";
   eval(this.Style).left=X+"px";
  }
 }

 // **** Ändert die Z-Position des Objekts auf die Parameter-Z-Positionen
 function SetzeZIndex(Zahl)
 {
  if (eval(this.Style).zindex)
    eval(this.Style).zindex= Zahl;
  else
    eval(this.Style).zIndex= Zahl;
 }

 // **** Liefert die X-Koordinate
 function HoleX()
 {
  if (window.captureEvents)
  {
    if (document.layers)
      return PositionX;
    else if (navigator.userAgent.toLowerCase().indexOf("opera")>-1)
      return event.clientX;
    else
      return PositionX;
  }
  else if (document.all)
    return document.body.scrollLeft+event.clientX;
  else return event.clientX;
 }


 // **** Liefert die Y-Koordinate
 function HoleY()
 {
  if (window.captureEvents)
  {
    if (document.layers)
      return PositionY;
    else if (navigator.userAgent.toLowerCase().indexOf("opera")>-1)
      return event.clientY;
    else
      return PositionY;
  }
  else if (document.all)
    return document.body.scrollTop+event.clientY;
  else return event.clientY;
 }


 // **** Liefert eine Groesse, der als String in Tags (zB. Länge, Breite) browserabhängig eingefügt werden kann
 // **** Es erfolgt auch eine Umrechnung auf die Drucker/Bildschirm-Koord-Variante
 function Groessenstring(Groesse)
 {
  if (window.captureEvents)
  {
    if (document.layers)
      return String(Groesse)+"px";
    else if (navigator.userAgent.toLowerCase().indexOf("opera")>-1)
      return "\""+String(Groesse)+"px\"";
    else
    {
      return "\""+String(Groesse)+"px\""; 
    }
  }
  else if (document.all)
  {
    return "\""+String(Groesse)+"px\""; 
  }
  else
  {
    return "\""+String(Groesse)+"px\""; 
  }
 }


 // **** Liefert eine Groesse, der als String in Stiles (zB. Länge, Breite) browserabhängig eingefügt werden kann
 // **** Es erfolgt auch eine Umrechnung auf die Drucker/Bildschirm-Koord-Variante
 function GroessenS(Groesse)
 {
  if (window.captureEvents)
  {
    if (document.layers)
      return String(Groesse)+"px";
    else if (navigator.userAgent.toLowerCase().indexOf("opera")>-1)
      return String(Groesse)+"px";
    else
    {
      return String(Groesse)+"px"; 
    }
  }
  else if (document.all)
  {
    return String(Groesse)+"px"; 
  }
  else
  {
    return String(Groesse)+"px"; 
  }
 }


 // **** Liefert eine Groesse, der als String in Fontangaben (zB. Höhe, Breite) browserabhängig eingefügt werden kann
 // **** Es erfolgt auch eine Umrechnung auf die Drucker/Bildschirm-Koord-Variante
 function GroessenF(Groesse)
 {
  if (window.captureEvents)
  {
    if (document.layers)
      return String(Groesse)+"px";
    else if (navigator.userAgent.toLowerCase().indexOf("opera")>-1)
      return String(Groesse)+"px";
    else
    {
      return String(Groesse)+"px"; 
    }
  }
  else if (document.all)
  {
    return String(Groesse)+"px"; 
  }
  else
  {
    return String(Groesse)+"px"; 
  }
 }


 // **** Liefert das Padding-Left-Maß für UL-Listen abhängig vom Browser
 function ULPaddingLeft()
 {
  if (document.layers)
    return SimpelObj.GroessenS(0);
  else
    return SimpelObj.GroessenS(16);
 }

 // **** Korrektur-Summand für die Y-Position von Tabellen, so daß die H6-Texte überall gleich hoch erscheinen
 function TabYPosKorr()
 {
  if (window.captureEvents)
  {
    if (document.layers)
      return -3;
    else if (navigator.userAgent.toLowerCase().indexOf("opera")>-1)
      return 2;
    else
      return 1;
  }
  else if (document.all)
    return 0;
  else return 0;
 }

 // **** String für die Höhe von Tabellen
 function TabHString(TabH)
 {
    if (window.captureEvents && !document.layers && navigator.userAgent.toLowerCase().indexOf("opera")>-1)
      return "";
    else
      return (" width="+this.Groessenstring(TabH));
 }

 // **** String für die Breite von Tabellen
 function TabBString(TabB)
 {
    if (window.captureEvents && !document.layers && navigator.userAgent.toLowerCase().indexOf("opera")>-1)
      return "";
    else
      return (" width="+this.Groessenstring(TabB));
 }


} // **** Ende der Klasse Objekte



DasObjekt = new Objekte("all");



// **** Klasse für Bewegungen
// **** ---------------------

// **** Enthält Funktionen für Bewegungen
function Bewegung()
{
 // **** Methoden
 this.SchlingernX    = SchlingernX;
 this.SchlingernY    = SchlingernY;
 this.TreibenX       = TreibenX;
 this.TreibenY       = TreibenY;
 this.WabernX        = WabernX;
 this.WabernY        = WabernY;


 // **** Methoden von Bewegung

 function SchlingernX(Zeit,Mitte,Halbachse)
 {
   return Math.floor(Halbachse*Math.cos(Zeit)+Mitte);
 }

 function SchlingernY(Zeit,Mitte,Halbachse)
 {
  return Math.floor(Halbachse*Math.sin(8*Zeit)+Mitte);
 }

 function TreibenX(Zeit,Mitte,Halbachse)
 {
  return Math.floor(Halbachse*Math.cos(Zeit)+Mitte);
 }

 function TreibenY(Zeit,Mitte,Halbachse)
 {
  return Math.floor(Halbachse*Math.sin(5*Zeit)+Mitte);
 }

 function WabernX(Zeit,Breite,Stauch)
 {
  return Math.floor(Breite-Stauch*Math.cos(9*Zeit));
 }

 function WabernY(Zeit,Hoehe,Stauch)
 {
  return Math.floor(Hoehe-Stauch*Math.sin(9*Zeit));
 }

} // **** Ende der Klasse Bewegung



// **** Klasse für einen Textabschnitt
// **** ------------------------------

// **** Abschnitt kann der Textinhalt einer Tabellenzelle oder der einer Div für eine Bildinfo sein
// **** GTexte wird als Namensstrings übergeben, damit sie mittels eval als Referenz genutzt werden können.
// **** GElement besitzt am Anfang den Teilevektor, das Format und die Stilklasse für den Absatz
function Abschnitt(GTexte,GElement)
{
 // **** Member
 this.Texte     = GTexte;          // Name des Texte-Arrays
 this.Saetze    = GElement[0];     // Teile im Absatz (Textnummern und Formatstrings für phys. Formate)
 this.Format    = GElement[1];     // Format für den Absatz
 this.Stil      = GElement[2];     // Stil des Absatzes (Klasse)


 // **** Methoden
 this.Schreibe  = Schreibe;        // Schreibe einen simplen Text
 this.Init      = Init;            // Initialisierung (Schreibe einen Textabschnitt)


 // **** Methoden von Abschnitt

 // **** Schreibt einen simplen Text in die aktuelle Seite. Kann auch Links in einer Map verwalten
 function Schreibe(Nummer,PhysFormate)
 {
  if (PhysFormate.lastIndexOf("B") > -1) document.write("<big class=Norm>");
  if (PhysFormate.lastIndexOf("s") > -1) document.write("<small class=Norm>");
  if (PhysFormate.lastIndexOf("b") > -1) document.write("<b class=Norm>");
  if (PhysFormate.lastIndexOf("i") > -1) document.write("<i class=Norm>");
  if (PhysFormate.lastIndexOf("t") > -1) document.write("<tt class=Norm>");
  if (PhysFormate.lastIndexOf("a") > -1) document.write("<a class=Norm href=");

  if (PhysFormate.lastIndexOf("f") > -1) document.write(FesterString(eval(this.Texte)[Sprache][Nummer]));
  else                                   document.write(KlarerString(eval(this.Texte)[Sprache][Nummer]));

  if (PhysFormate.lastIndexOf("a") > -1) document.write("</a>");
  if (PhysFormate.lastIndexOf("t") > -1) document.write("</tt>");
  if (PhysFormate.lastIndexOf("i") > -1) document.write("</i>");
  if (PhysFormate.lastIndexOf("b") > -1) document.write("</b>");
  if (PhysFormate.lastIndexOf("s") > -1) document.write("</small>");
  if (PhysFormate.lastIndexOf("B") > -1) document.write("</big>");
 }


 // **** Schreibt den ganzen Absatz
 function Init()
 {
  if      (this.Format == "h6")  {if (this.Stil == "") document.write("<h6>");  else document.write("<h6 class="+this.Stil+">");}
  else if (this.Format == "h5")  {if (this.Stil == "") document.write("<h5>");  else document.write("<h5 class="+this.Stil+">");}
  else if (this.Format == "h4")  {if (this.Stil == "") document.write("<h4>");  else document.write("<h4 class="+this.Stil+">");}
  else if (this.Format == "h3")  {if (this.Stil == "") document.write("<h3>");  else document.write("<h3 class="+this.Stil+">");}
  else if (this.Format == "h2")  {if (this.Stil == "") document.write("<h2>");  else document.write("<h2 class="+this.Stil+">");}
  else if (this.Format == "h1")  {if (this.Stil == "") document.write("<h1>");  else document.write("<h1 class="+this.Stil+">");}
  else if (this.Format == "ul")  {if (this.Stil == "") document.write("<ul>");  else document.write("<ul class="+this.Stil+">");}
  else if (this.Format == "div") {if (this.Stil == "") document.write("<div>"); else document.write("<div class="+this.Stil+">");}

  for (var i=0; i < this.Saetze.length; i++)
  {
    if (this.Format == "ul") {if (this.Stil == "") document.write("<li>"); else document.write("<li class="+this.Stil+">");}
//document.write("<li>");
    this.Schreibe(this.Saetze[i][0],this.Saetze[i][1]);
    if (this.Format == "ul")  document.write("</li>");
 //   if (i < this.Saetze.length - 1) document.write(" ");
  }

  if      (this.Format == "div") document.write("</div>");
  else if (this.Format == "ul") document.write("</ul>");
  else if (this.Format == "h1") document.write("</h1>");
  else if (this.Format == "h2") document.write("</h2>");
  else if (this.Format == "h3") document.write("</h3>");
  else if (this.Format == "h4") document.write("</h4>");
  else if (this.Format == "h5") document.write("</h5>");
  else if (this.Format == "h6") document.write("</h6>");
  else if (this.Format == "br") document.write("<br />");
 }


}



// **** Klasse für bewegte Texte und Bilder
// **** -----------------------------------

// **** InfosName sollte unbedingt der Name der Aussagenklasse sein, wenn so eine verwendet wird
function Bewegungen(InfosName)
{
 // **** Member
 this.InfosName = InfosName;
 this.KoordX    = 0;
 this.KoordY    = 0;
 this.KoordTX   = 0;
 this.KoordTY   = 0;
 this.Flag      = 0;
 this.t         = 0;
 this.InfoText  = "";
 this.TreibHB   = 10;
 this.ImgStrA   = new Array();
 this.ImgStrB   = new Array();
 this.Timer     = new Array();
 this.BildNums  = new Array();
 this.BildNums=[];
 this.InfoTexts = new Array();
 this.KoordXs   = new Array();
 this.KoordYs   = new Array();
 this.Flags     = new Array();
 this.ts        = new Array();
 this.BildHs    = new Array();
 this.BildBs    = new Array();  

 // **** Methoden
 this.SchlingernX   = SchlingernX;
 this.SchlingernY   = SchlingernY;
 this.InfoBewegen   = InfoBewegen;
 this.InfoInit      = InfoInit;
 this.InfoEnde      = InfoEnde;
 this.TreibenX      = TreibenX;
 this.TreibenY      = TreibenY;
 this.BildBewegen   = BildBewegen;
 this.BildInit      = BildInit;
 this.BildEnde      = BildEnde;
 this.OverInit      = OverInit;
 this.OverEnde      = OverEnde;

 // **** Methoden von Bewegungen

 function SchlingernX(Param,Mitte,Halbachse)
 {
   return Math.floor(Halbachse*Math.cos(Param)+Mitte);
 }


 function SchlingernY(Param,Mitte,Halbachse)
 {
  return Math.floor(Halbachse*Math.sin(8*Param)+Mitte);
 }


 function OverInit(IText)
 {
  this.InfoText=IText;
  if (this.Flag == 0)
  {
    var LayerObj = new Objekte(this.InfoText);
    this.KoordX=LayerObj.GetX();
    this.KoordY=LayerObj.GetY();
    
    LayerObj.GeheNach(this.KoordX+1,this.KoordY+1);
    var LayerObjT = new Objekte(this.InfoText+"T");
    this.KoordTX=LayerObjT.GetX();
    this.KoordTY=LayerObjT.GetY();
    LayerObjT.GeheNach(this.KoordTX+2,this.KoordTY+2);

    this.t=0;
    this.Flag=1;  
  }
 }


 function OverEnde(IText)
 {
  this.InfoText=IText;
  if (this.Flag == 1)
  {
    var LayerObj = new Objekte(this.InfoText);
    LayerObj.GeheNach(this.KoordX,this.KoordY);

    var LayerObjT = new Objekte(this.InfoText+"T");
    LayerObjT.GeheNach(this.KoordTX,this.KoordTY);

    this.t=0;
    this.Flag=0;  
  }
 }


 function InfoBewegen()
 {
  var LayerObj;
  var x;
  var y;
  var MitteX;
  var MitteY;
  var HalbeBreite=30;
  var HalbeHoehe=20;
  if (this.Flag == 1)
  {
    this.t-=0.03; // Geschwindigkeit
    MitteX=310+Math.floor(this.KoordX/3)
    MitteY=this.KoordY-70;
    if (MitteY < 20) MitteY=this.KoordY+160; 
    x = this.SchlingernX(this.t,MitteX,HalbeBreite);
    y = this.SchlingernY(this.t,MitteY,HalbeHoehe);
    LayerObj = new Objekte(this.InfoText);
    LayerObj.GeheNach(x,y);
  }
  if (this.BildNums.length == 0) this.Timer[0] = window.setTimeout(this.InfosName+".InfoBewegen()",50); 
 }


 function InfoInit(IText)
 {
  this.InfoText=IText+"0";
  var LayerObj = new Objekte(this.InfoText);
  var LayerObjD = new Objekte(IText);
  this.KoordX=LayerObjD.GetX();
  this.KoordY=LayerObjD.GetY();
  this.t=-Math.PI*1;
  this.Flag=1;
  LayerObj.Sichtbar(1);
  LayerObj.SetzeZIndex(50000);
  this.Timer[0] = new Object();

  if (this.BildNums.length == 0) this.InfoBewegen();
 }


 function InfoEnde(IText)
 {
  var x;
  var y;

  this.InfoText=IText+"0";
  if (this.BildNums.length == 0) {if (this.Timer[0]) window.clearTimeout(this.Timer[0]);}

  if(document.all)
  {
      x=-100; y=-100;
  }
  else if (document.layer)
  {
      x=0; y=0;
  }
  else
  {
      x=0; y=0;
  }

  if (this.InfoText)
  {
    var LayerObj = new Objekte(this.InfoText);
    LayerObj.GeheNach(x,y);
    LayerObj.Sichtbar(0);
  }

  this.Flag=0;
 }


 function TreibenX(Param,Mitte,Halbachse)
 {
  return Math.floor(Halbachse*Math.cos(Param)+Mitte);
 }


 function TreibenY(Param,Mitte,Halbachse)
 {
  return Math.floor(Halbachse*Math.sin(5*Param)+Mitte);
 }

 function BildBewegen()
 {
  var LayerObj;
  var Bild;
  var x;
  var y;
  var MitteX;
  var MitteY;
  var HalbeHoehe=5;
  var Aufruf = new String("");

  for (i=0; i<this.BildNums.length; i++)
  {
    Nummer=this.BildNums[i];
    if (this.Flags[i] == 1)
    {
      this.ts[i]-=0.02; // Geschwindigkeit
      MitteX=this.KoordXs[i];
      MitteY=this.KoordYs[i];
      x = this.TreibenX(this.ts[i],MitteX,this.TreibHB);
      y = this.TreibenY(this.ts[i],MitteY,HalbeHoehe);

      if (this.InfoTexts[i])
      {
        LayerObj = new Objekte(this.InfoTexts[i]);
        LayerObj.GeheNach(x,y);
      }
    }
  }

  if (this.Flag==1)
  {
    this.InfoBewegen();
  }

  Aufruf = this.InfosName+".Bewegung.BildBewegen()";
  this.Timer[1] = window.setTimeout(Aufruf,50); 
 }


 function BildInit(KoX,KoY,Phase)
 {
  for (var i=0; i<this.BildNums.length; i++)
  {
    Nummer=this.BildNums[i];
    this.KoordXs[i]=KoX;
    this.KoordYs[i]=KoY-50+KoY*i;
    this.ts[i]=-Math.PI + i*Phase;
    this.KoordXs[i]= this.TreibenX(this.ts[i],KoX,this.TreibHB);
    this.Flags[i]=1;
  }
  this.Timer[1] = new Object();
  this.BildBewegen();
 }

 function BildEnde(IText,Nummer)
 {
  this.InfoTexts[Nummer]=IText;
  if (this.Timer[1]) window.clearTimeout(this.Timer[1]);
  var x;
  var y;
  x=-100;
  y=-100;

  LayerObj = new Objekte(this.InfoTexts[Nummer]);
  LayerObj.GeheNach(x,y);
  this.Flag=0;
 }
} // **** Ende der Klasse Bewegung


// **** Klasse zur Animation von Texten, die an verschiedenen Stellen geöffnet und geschlossen werden.
// **** ----------------------------------------------------------------------------------------
// **** LeftRight: "L", wenn die linke Animation repräsentiert wird, "R", wenn die rechte
// **** Duration ist die Wartezeit am Anfang
// **** TextsLength ist die Anzahl der Texte in der Animation
function TextAnimation(LeftRight, Duration, TextsLength, AnimName)
{
 // **** Member
 this.Left = LeftRight == "L" ? true : false;
 this.Back = String("Back")+LeftRight;
 this.Text = String("Text")+LeftRight;
 this.Imge = String("Image")+LeftRight;
 this.Duration = Duration;
 this.TextsLength = TextsLength;
 this.AnimName = AnimName;
 this.FrameInterval = 50;
 this._dom = (document.all?3:(document.getElementById?1:(document.layers?2:0))); // _dom : 0=other, 1=Mozilla, 2=NN4, 3=IE4/5
 this.J = 0;
 this.ImgPart = 0;
 this.ImgInc = +1;
 this.Zeit = 0;
 this.DoIt = 2;

 // **** Methoden
 this.TurnOn = TurnOn;
 this.TurnOff = TurnOff;
 this.Off = Off;
 this.TextMove = TextMove;
 this.SwitchOff = SwitchOff;
 this.TextLoop = TextLoop;
 this.TurnFirstOn = TurnFirstOn;

 // **** Initialisierung
 if (this._dom) window.setTimeout(this.AnimName+".TextLoop()", this.Duration);

 // **** Methoden von TextAnimation

 function TurnOn()
 {
  if (this.ImgPart <= 10){
   if (this.ImgPart != 10){
    var LayerObj = new Objekte(this.Imge+this.ImgPart);
    LayerObj.Sichtbar(0);
   }
   this.ImgPart += this.ImgInc;
   if (this.Left) window.setTimeout(this.AnimName+".TurnOn()", this.FrameInterval);
   else window.setTimeout(this.AnimName+".TurnOn()", this.FrameInterval+4);
  }
  else {
   this.ImgInc = -1;
   this.ImgPart += this.ImgInc;
   var LayerObj1 = new Objekte(this.Imge+this.ImgPart);
   LayerObj1.Sichtbar(1);
   window.setTimeout(this.AnimName+".TurnOff()", 6000);
  }
  if (this.ImgPart < 10) {
    var LayerObj1 = new Objekte(this.Imge+this.ImgPart);
    LayerObj1.Sichtbar(1);
  }
 }
 
 function TurnOff()
 {
  if (this.ImgPart != 10){
   var LayerObj = new Objekte(this.Imge+this.ImgPart);
   LayerObj.Sichtbar(0);
  }
  this.ImgPart += this.ImgInc;
  if (this.ImgPart == 0){
   this.ImgInc = +1;
   this.Off();
  }
  else{
   if (this.Left) window.setTimeout(this.AnimName+".TurnOff()", this.FrameInterval);
   else window.setTimeout(this.AnimName+".TurnOff()", this.FrameInterval+4);
  }
  if (this.ImgPart > 0 || this.ImgPart == 0) {
    var LayerObj1 = new Objekte(this.Imge+this.ImgPart);
    LayerObj1.Sichtbar(1);
  }
 }
 
 function Off()
 {
  if (this.ImgPart >= 0 && this.ImgPart <= 10) {
    var LayerObj1 = new Objekte(this.Imge+this.ImgPart);
    LayerObj1.Sichtbar(0);
  }
  var LayerObj1 = new Objekte(this.Back);
  LayerObj1.Sichtbar(0);
  for (k=0; k<this.TextsLength; k++) {var LayerObj2 = new Objekte(this.Text+k); LayerObj2.Sichtbar(0);}
 }

 function TextMove(lay, x, y, z)
 {
  var LayerObj = new Objekte(lay);
  LayerObj.Sichtbar(0);
  LayerObj.GeheNach(x,y);
  LayerObj.SetzeZIndex(z);
  LayerObj.Sichtbar(1);
 }

 function SwitchOff()
 {
  if (this.DoIt) window.setTimeout(this.AnimName+".TextLoop()", 1000);
 } 

 function TextLoop()
 {
  if (this.J == (this.TextsLength -1)) {this.J = 0;} else {this.J += 1;}
  var LayerObj1 = new Objekte(this.Text+this.J);
  var x = parseInt(LayerObj1.GetX())-5;
  var y = parseInt(LayerObj1.GetY())-13;
  LayerObj1.Sichtbar(0);
  var LayerObj3 = new Objekte(this.Back);
  LayerObj3.Sichtbar(0);

  for (k=0; k<=10; k++) {
   var LayerObj2 = new Objekte(this.Imge+k);
   LayerObj2.Sichtbar(0);
  }
  for (k=0; k<=10; k++) TextMove(this.Imge+k, x, y, 201+3*this.J);
  TextMove(this.Text+this.J, x+5, y+13, 200+3*this.J);
  TextMove(this.Back, x, y, 199+3*this.J);

  var jetzt = new Date();
  Zeit = jetzt.getTime();
  if (this.DoIt) this.TurnFirstOn();
  var LayerObj2 = new Objekte(this.Back);
  LayerObj2.Sichtbar(1);
  if (this.DoIt) window.setTimeout(this.AnimName+".SwitchOff()", 8300);
 }

 function TurnFirstOn()
 {
   var LayerObj = new Objekte(this.Imge+this.ImgPart);
   LayerObj.Sichtbar(0);
   this.ImgPart += this.ImgInc;
   if (this.ImgPart < 2){
     if (this.Left) window.setTimeout(this.AnimName+".TurnFirstOn()", this.FrameInterval);
     else window.setTimeout(this.AnimName+".TurnFirstOn()", this.FrameInterval+4);
   } else {
    var spaeter = new Date();
    var XZeit = Math.floor(spaeter.getTime() - Zeit);
    if (XZeit < 1*this.FrameInterval+30){
     if (this.Left) window.setTimeout(this.AnimName+".TurnOn()", this.FrameInterval);
     else window.setTimeout(this.AnimName+".TurnOn()", this.FrameInterval+4);
     this.DoIt=1;
    } else {
     this.ImgInc = 1;
     this.ImgPart = 0;
     var LayerObj3 = new Objekte(this.Back);
     LayerObj3.Sichtbar(0);
     if (this.DoIt == 2) this.DoIt = 0;
     for (k=0; k<=10; k++) {
      var LayerObj2 = new Objekte(this.Imge+k);
      LayerObj2.Sichtbar(0);
     }
    }
   }
   var LayerObj1 = new Objekte(this.Imge+this.ImgPart);
   LayerObj1.Sichtbar(1);
  }
} // **** Ende der Klasse 


// **** Bewegungsobjekte

// **** Bewegungsobjekte

Prof0 = new Bewegungen("Prof0");
LogoMSR0 = new Bewegungen("LogoMSR0");
Nichts0 = new Bewegungen("Nichts0");
PrevP0 = new Bewegungen("PrevP0");
NextP0 = new Bewegungen("NextP0");

ThemeLeft1A0 = new Bewegungen("ThemeLeft1A0");
ThemeLeft1B = new Bewegungen("ThemeLeft1B");
ThemeLeft2A0 = new Bewegungen("ThemeLeft2A0");
ThemeLeft2B = new Bewegungen("ThemeLeft2B");

ThreeD1A0 = new Bewegungen("ThreeD1A0");
ThreeD1B = new Bewegungen("NavHalfLeft1B");
Print2A0 = new Bewegungen("Print2A0");
Print2B = new Bewegungen("NavHalfLeft2B");

English1A0 = new Bewegungen("English1A0");
English1B = new Bewegungen("English1B");
Spanish1A0 = new Bewegungen("Spanish1A0");
Spanish1B = new Bewegungen("Spanish1B");
German1A0 = new Bewegungen("German1A0");
German1B = new Bewegungen("German1B");
Plan2A0 = new Bewegungen("Plan2A0");
Plan2B = new Bewegungen("Plan2B");

EMail1A0 = new Bewegungen("EMail1A0");
EMail1B = new Bewegungen("EMail1B");
StartPage1A0 = new Bewegungen("StartPage1A0");
StartPage1B = new Bewegungen("StartPage1B");
Upper1A0 = new Bewegungen("Upper1A0");
Upper1B = new Bewegungen("Upper1B");
Imprint2A0 = new Bewegungen("Imprint2A0");
Imprint2B = new Bewegungen("Imprint2B");

Prev1A0 = new Bewegungen("Prev1A0");
Prev1B = new Bewegungen("Prev1B");
Next2A0 = new Bewegungen("Next2A0");
Next2B = new Bewegungen("Next2B");

ThemeRight1A0 = new Bewegungen("ThemeRight1A0");
ThemeRight1B = new Bewegungen("ThemeRight1B");
ThemeRight2A0 = new Bewegungen("ThemeRight2A0");
ThemeRight2B = new Bewegungen("ThemeRight2B");
