DHTML_Debug                = 0;        // 0 = aus; 1 = Statuszeile; 2 = Statuszeile und Message-Box

DHTML_Browser                = (
                                (navigator.appName == "Netscape" && ! navigator.userAgent.match(/Opera/i) ||
                                 navigator.appName == "Microsoft Internet Explorer") &&
                                 Number(navigator.appVersion.substr(0,1)) >= 4
                          )
DHTML_Ver                = Number(navigator.appVersion.substr(0,1));
DHTML_Nam                = navigator.appName;
DHTML_Moz                = (DHTML_Nam == "Netscape" && DHTML_Ver >= 5) ? 1 : 0;
DHTML_IE                = (DHTML_Nam == "Microsoft Internet Explorer") ? 1 : 0;
DHTML_NS                = (DHTML_Nam == "Netscape") ? 1 : 0;
DHTML_NS4                = (DHTML_NS && DHTML_Ver == 4) ? 1 : 0;

// Das folgende war offenbar ein Bug im Mozilla, der spätestens mit der 0.9.7er behoben wurde
// DHTML_ParentProblem        = DHTML_Moz;
DHTML_ParentProblem        = 0;

// Status ausgeben (für Debug-Zwecke)
function DHTML_Stat (Status) {
  if (DHTML_Debug)
    { window.status = Status; }
  if (DHTML_Debug == 2)
    { alert(Status); }
}

// Gibt das zur ID gehörende Objekt zurück
function All (ID) {
  if (document.documentElement)        { return document.getElementById (ID); }
  else if (document.all)        { return document.all[ID]; }
  else if (document.layers)        { return document.layers[ID]; }
}

// Object-orientierter Ansatz auf Basis dieser Bibliothek
function DHTML_Object (ID, ParentID) {
  ParentID                = (ParentID) ? ParentID : '';
  this.object                = All(ID);
  this.parent                = All(ParentID);
  this.top                = new Function ('Param', "if (Param || Param == 0) { SetObjectOffsetTop                (All('"+ID+"'), Param); } Top = GetObjectOffsetTop        (All('"+ID+"')); if (DHTML_ParentProblem && '"+ParentID+"') { Obj = new DHTML_Object('"+ParentID+"'); Top        = Top        - Obj.top();        } return Top");
  this.left                = new Function ('Param', "if (Param || Param == 0) { SetObjectOffsetLeft        (All('"+ID+"'), Param); } Left = GetObjectOffsetLeft        (All('"+ID+"')); if (DHTML_ParentProblem && '"+ParentID+"') { Obj = new DHTML_Object('"+ParentID+"'); Left        = Left        - Obj.left();        } return Left");
  this.width                = new Function ('Param', "if (Param || Param == 0) { SetObjectWidth                (All('"+ID+"'), Param); } return GetObjectWidth                (All('"+ID+"'))");
  this.height                = new Function ('Param', "if (Param || Param == 0) { SetObjectHeight                (All('"+ID+"'), Param); } return GetObjectHeight        (All('"+ID+"'))");
  this.visibility        = new Function ('Param', "if (Param || Param == 0) { SetObjectVisibility        (All('"+ID+"'), Param); } return GetObjectVisibility        (All('"+ID+"'))");
  this.transparency        = new Function ('Param', "if (Param || Param == 0) { SetObjectTransparency        (All('"+ID+"'), Param); } return GetObjectTransparency        (All('"+ID+"'))");
  this.image                = new Function ('Param', "return GetInnerImage (All('"+ID+"'), Param)");
  this.actual                = new Object;
  this.actual.height        = GetObjectHeightDefault(All(ID));
  this.actual.width        = GetObjectWidthDefault(All(ID));
  this.style                = this.object.style;
}

// Y-Koordinate des sichtbaren Dokumenten-Ausschnitts ermitteln
function GetWindowOffsetTop() {
  if (String(window.innerHeight) != 'undefined')        { return window.pageYOffset; }
  else if (document.body)                                { return document.body.scrollTop; }
}

// Innere Fensterbreite (sichtbarer Bereich) ermitteln
function GetWindowWidth() {
  if (String(window.innerWidth) != 'undefined')        { return window.innerWidth; }
  else if (document.body)                        { return document.body.clientWidth; }
}

// Innere Fensterhöhe (sichtbarer Bereich) ermitteln
function GetWindowHeight() {
  if (String(window.innerHeight) != 'undefined')        { return window.innerHeight; }
  else if (document.body)                                { return document.body.clientHeight; }
}

// Objektbreite ermitteln
function GetObjectWidth(Object) {
  if (document.documentElement || document.all)        {
    Clip = Object.style.clip;
    if (! Clip) { return Object.offsetWidth; }
    else {
      Result = GetClipElement (Clip, 'Right');
      return (Result == 'auto') ? Object.offsetWidth : Result;
    }
  }
  else if (document.layers)                        { return Object.clip.width; }
}

// Standard-Objektbreite (vor dem Ändern)
function GetObjectWidthDefault (Object) {
  if (document.documentElement || document.all)        { return Object.offsetWidth; }
  else if (document.layers)                        { return Object.document.width; }
}

// Objekthöhe ermitteln
function GetObjectHeight(Object) {
  if (document.documentElement || document.all)        {
    Clip = Object.style.clip;
    if (! Clip) { return Object.offsetHeight; }
    else {
      Result = GetClipElement (Clip, 'Bottom');
      return (String(Result) == 'auto') ? Object.offsetHeight : Result;
    }
  }
  else if (document.layers)                        { return Object.clip.height; }
}

function GetClipElement (Clip, Element) {
  var i = 0;
  Clip = Clip.substr(Clip.indexOf('(') + 1);
  Clip = Clip.substr(0, Clip.length - 1);
  var Clippers = Clip.split (" ");
  for (i = 0; i < Clippers.length; i++) {
    if (Clippers[i] != 'auto')
    { Clippers[i] = Number(Clippers[i].replace (/\D/g, "")); }
  }
  var ClipTop = Clippers[0];
  var ClipRight = Clippers[1];
  var ClipBottom = Clippers[2];
  var ClipLeft = Clippers[3];
  if (Element == 'Top')                { return ClipTop; }
  else if (Element == 'Right')        { return ClipRight; }
  else if (Element == 'Bottom')        { return ClipBottom; }
  else if (Element == 'Left')        { return ClipLeft; }
  else                                { return -1; }
}

// Standard-Objekthöhe (vor dem Ändern)
function GetObjectHeightDefault (Object) {
  if (document.documentElement || document.all)        { return Object.offsetHeight; }
  else if (document.layers)                        { return Object.document.height; }
}

// Objekthöhe setzen
function SetObjectHeight(Object, Height) {
  if (document.documentElement || document.all)        {
    var Clip = Object.style.clip;
    var Width;
    if (Clip) {
      Width = GetClipElement (Clip, 'Right');
    } else {
      Width = 'auto';
    }
    Object.style.clip = 'rect(auto '+Width+' '+Height+' auto)';
  }
  else if (document.layers)                        { Object.clip.height = Height; }
}

function SetObjectWidth(Object, Width) {
  if (document.documentElement || document.all)        {
    var Clip = Object.style.clip;
    var Height;
    if (Clip) {
      Height = GetClipElement (Clip, 'Bottom');
    } else {
      Height = 'auto';
    }
    Object.style.clip = 'rect(auto '+Width+' '+Height+' auto)';
  }
  else if (document.layers)                        { Object.clip.width = Width; }
}

// Objekt-Abstand von oben ermitteln
function GetObjectOffsetTop(Object) {
  if (String(Object.offsetTop) != 'undefined')        { return Object.offsetTop; }
  else if (document.layers)                        { return Object.top; }
}

// Objekt-Abstand von oben setzen
function SetObjectOffsetTop(Object, Offset) {
  if (Object.style)                                { Object.style.top = Offset; }
  else if (String(Object.top) != 'undefined')        { Object.top = Offset; }
}

// Objekt-Abstand von links ermitteln
function GetObjectOffsetLeft(Object) {
  if (String(Object.offsetLeft) != 'undefined')        { return Object.offsetLeft; }
  else if (document.layers)                        { return Object.left; }
}

// Object-Abstand von links setzen
function SetObjectOffsetLeft(Object, Offset) {
  if (Object.style)                                { Object.style.left = Offset; }
  else if (String(Object.left) != 'undefined')        { Object.left = Offset; }
}

// Benanntes Img-Objekt innerhalb von Layern
function GetInnerImage(Object, ID) {
  if (Object.document)        { return Object.document.images[ID]; }
  else                        { return document.images[ID]; }
}

// Objekt sichtbar oder unsichtbar machen
function SetObjectVisibility(Object, Status) {
  DHTML_Stat ("SetObjectVisibility("+Object+", "+Status+");");
  if (Status)                { Status = 'visible'; }
  else                        { Status = 'hidden'; }
  if (Object.style)        { Object.style.visibility = Status; }
  else                        { Object.visibility = Status; }
}

// Objektsichtbarkeit ermitteln
// -1 = nicht ermittelbar :(
//  1 = sichtbar
//  0 = nicht sichtbar
function GetObjectVisibility(Object) {
  if (Object.style)        { Return = Object.style.visibility; }
  else                        { Return = Object.visibility; }
  return (Return == "visible" || Return == "show") ? 1 : (Return) ? 0 : -1;
}

// Transparenz setzen
function SetObjectTransparency(Object, Amount) {
  if (DHTML_IE)
    { Object.style.filter = 'Alpha (style=0, opacity='+Math.round(100*Amount)+')'; }
/*  else if (DHTML_Moz)
    { Object.style. = Amount; } */
}

function GetObjectTransparency(Object) {
  if (Object.style && Object.style.filter)
    { return Number(String(Object.style.filter.match(/opacity.*$/)).replace(/\D/g, ''))/100; }
  else
    { return -1; }
}

// Rahmen um Links entfernen
function ButtonBlur (Button) {
  if (DHTML_IE || DHTML_Moz) {
    Button.blur();
  }
}