/**
 * Funktionen für Layer
 * @package JavaScript
 * @subpackage Layer
 * @author Alexander Zimmermann <zimmermann@twt.de>
 * @version $Id: twt_layer.js,v 1.1 2006/04/25 09:49:11 kevin Exp $
 * @filesource
 * @desc Funktionen rund um die Browserversion, Einstellungen, etc.
 * Hinweise: Opera (3) nur unter 5.12 getestet Opera unterstüzt kein
 * style.clip, deswegen werden die Werte Left, Top, Right etc. zurückgegeben.
 * Benötigt twt_browser.js
 * @toDo: style: overflow, (wenn inhalt größer als aLayer wird)
 */

/**
 * Version des Browsers ermitteln und Global bereit stellen.
 */
Browser = new TWT_GetBrowser();

/**
 * Layer Konstanten
 */
var CONST_DIV_TOP = 5;
var CONST_DIV_LEFT = 5;
var CONST_DIV_WIDTH = 200;
var CONST_DIV_HEIGHT = 200;
var CONST_DIV_POS = 'absolute';


/**
 * Layer Erzeugen
 */
function TLayer_Create(fLayerName, fLayerPosition, fLayerLeft, fLayerTop,
    fLayerWidth, fLayerHeight, fLayerBackground, fLayerBGColor, fLayerOverflow,
    fLayerVisibility, fLayerText)
{
  var result;
  // Prüfungen
  var lt = ( fLayerPosition == "") ? fLayerPosition : CONST_DIV_TOP;
  var ll = ( fLayerPosition == "") ? fLayerPosition : CONST_DIV_LEFT;
  var lw = ( fLayerPosition == "") ? fLayerPosition : CONST_DIV_WIDTH;
  var lh = ( fLayerPosition == "") ? fLayerPosition : CONST_DIV_HEIGHT;
  var lp = ( fLayerPosition == "") ? fLayerPosition : CONST_DIV_POS;

  switch(Browser.browser)
  {
    case 'ie':
      LayerConstruct = '<div '
      + 'name="' + fLayerName + '"'
      + 'id="' + fLayerName + '" '
      + 'style="position:' + fLayerPosition + '; '
      + 'top: ' + fLayerTop + 'px; '
      + 'left: ' + fLayerLeft + 'px; '
      + 'width:' + fLayerWidth + 'px; '
      + 'height:' + fLayerHeight + 'px; ';

      if (fLayerBackground != "")
        LayerConstruct += 'background-image: url(' + fLayerBackground + ') ';

      if (fLayerBGColor != "")
        LayerConstruct += 'background-color:' + fLayerBGColor + '; ';

      if (fLayerOverflow != "")
        LayerConstruct += 'overflow:hidden; ';

      LayerConstruct += 'visibility: ' + fLayerVisibility + ';">\n'
      + fLayerText + '\n'
      + '</div>';
      document.body.insertAdjacentHTML("beforeEnd", LayerConstruct);
      result = getLayer(fLayerName);
      break;
    case 'netscape':
      LayerConstruct = '<div '
      + 'name="' + fLayerName + '"'
      + 'id="' + fLayerName + '" '
      + 'style="position:' + fLayerPosition + '; '
      + 'top: ' + fLayerTop + 'px; '
      + 'left: ' + fLayerLeft + 'px; '
      + 'width:' + fLayerWidth + 'px; '
      + 'height:' + fLayerHeight + 'px; ';

      if (fLayerBackground != "")
        LayerConstruct += 'background-image: url(' + fLayerBackground + ') ';

      if (fLayerBGColor != "")
        LayerConstruct += 'background-color:' + fLayerBGColor + '; ';

      if (fLayerOverflow != "")
        LayerConstruct += 'overflow:hidden; ';

      LayerConstruct += 'visibility: ' + fLayerVisibility + ';">\n'
      + fLayerText + '\n'
      + '</div>';
      document.body.insertAdjacentHTML("beforeEnd", LayerConstruct);
      result = getLayer(fLayerName);
      break;
    case 'mozilla':
      LayerConstruct = '<div '
      + 'name="' + fLayerName + '"'
      + 'id="' + fLayerName + '" '
      + 'style="position:' + fLayerPosition + '; '
      + 'top: ' + fLayerTop + 'px; '
      + 'left: ' + fLayerLeft + 'px; '
      + 'width:' + fLayerWidth + 'px; '
      + 'height:' + fLayerHeight + 'px; ';

      if (fLayerBackground != "")
        LayerConstruct += 'background-image: url(' + fLayerBackground + ') ';

      if (fLayerBGColor != "")
        LayerConstruct += 'background-color:' + fLayerBGColor + '; ';

      if (fLayerOverflow != "")
        LayerConstruct += 'overflow:hidden; ';

      LayerConstruct += 'visibility: ' + fLayerVisibility + ';">\n'
      + fLayerText + '\n'
      + '</div>';
      document.body.insertAdjacentHTML("beforeEnd", LayerConstruct);
      result = getLayer(fLayerName);
      break;
    case 'opera':
      LayerConstruct = '<div '
      + 'name="' + fLayerName + '"'
      + 'id="' + fLayerName + '" '
      + 'style="position:' + fLayerPosition + '; '
      + 'top: ' + fLayerTop + 'px; '
      + 'left: ' + fLayerLeft + 'px; '
      + 'width:' + fLayerWidth + 'px; '
      + 'height:' + fLayerHeight + 'px; ';

      if (fLayerBackground != "")
        LayerConstruct += 'background-image: url(' + fLayerBackground + ') ';

      if (fLayerBGColor != "")
        LayerConstruct += 'background-color:' + fLayerBGColor + '; ';

      if (fLayerOverflow != "")
        LayerConstruct += 'overflow:hidden; ';

      LayerConstruct += 'visibility: ' + fLayerVisibility + ';">\n'
      + fLayerText + '\n'
      + '</div>';
      document.body.insertAdjacentHTML("beforeEnd", LayerConstruct);
      result = getLayer(fLayerName);
      break;
    case 'konqueror':
      LayerConstruct = '<div '
      + 'name="' + fLayerName + '"'
      + 'id="' + fLayerName + '" '
      + 'style="position:' + fLayerPosition + '; '
      + 'top: ' + fLayerTop + 'px; '
      + 'left: ' + fLayerLeft + 'px; '
      + 'width:' + fLayerWidth + 'px; '
      + 'height:' + fLayerHeight + 'px; ';

      if (fLayerBackground != "")
        LayerConstruct += 'background-image: url(' + fLayerBackground + ') ';

      if (fLayerBGColor != "")
        LayerConstruct += 'background-color:' + fLayerBGColor + '; ';

      if (fLayerOverflow != "")
        LayerConstruct += 'overflow:hidden; ';

      LayerConstruct += 'visibility: ' + fLayerVisibility + ';">\n'
      + fLayerText + '\n'
      + '</div>';
      document.body.insertAdjacentHTML("beforeEnd", LayerConstruct);
      result = getLayer(fLayerName);
      break;
    default:
      LayerConstruct = '<div '
      + 'name="' + fLayerName + '"'
      + 'id="' + fLayerName + '" '
      + 'style="position:' + fLayerPosition + '; '
      + 'top: ' + fLayerTop + 'px; '
      + 'left: ' + fLayerLeft + 'px; '
      + 'width:' + fLayerWidth + 'px; '
      + 'height:' + fLayerHeight + 'px; ';

      if (fLayerBackground != "")
        LayerConstruct += 'background-image: url(' + fLayerBackground + ') ';

      if (fLayerBGColor != "")
        LayerConstruct += 'background-color:' + fLayerBGColor + '; ';

      if (fLayerOverflow != "")
        LayerConstruct += 'overflow:hidden; ';

      LayerConstruct += 'visibility: ' + fLayerVisibility + ';">\n'
      + fLayerText + '\n'
      + '</div>';
      document.body.insertAdjacentHTML("beforeEnd", LayerConstruct);
      result = getLayer(fLayerName);
      break;
  }
  return result;
} // Ende Funktion TLayer_Create


/**
 * Layer Sichtbarkeit
 */

/**
 * Den angegebenen Layer verstecken.
 * @param     object    aLayer Layerobjekt das versteckt werden soll.
 * @access    public
 * @see       showLayer
 */
function hideLayer(aLayer)
{
  switch (Browser.browser)
  {
    case 'ie':
      aLayer.style.visibility = "hidden";
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        aLayer.visibility = "hide";
      else
        aLayer.style.visibility = "hidden";
      break;
    case 'mozilla':
      aLayer.style.visibility = "hidden";
      break;
    case 'opera':
      aLayer.style.visibility = "hidden";
      break;
    case 'konqueror':
      aLayer.style.visibility = "hidden";
      break;
    default:
      aLayer.style.visibility = "hidden";
      break;
  } // switch
} // Ende Funktion


/**
 * Den angegebenen Layer wieder anzeigen.
 * @param     object    aLayer Layerobjekt das wieder angezeigt werden soll.
 * @access    public
 * @see       hideLayer
 */
function showLayer(aLayer)
{
  switch (Browser.browser)
  {
    case 'ie':
      aLayer.style.visibility = "visible";
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        aLayer.visibility = "show";
      else
        aLayer.style.visibility = "visible";
      break;
    case 'mozilla':
      aLayer.style.visibility = "visible";
      break;
    case 'opera':
      aLayer.style.visibility = "visible";
      break;
    case 'konqueror':
      aLayer.style.visibility = "visible";
      break;
    default:
      aLayer.style.visibility = "visible";
      break;
  } // switch
} // Ende Funktion


/**
 * Vererbung des Layers
 * @param     string   aLayer Layer der die Vererbung erhalten soll.
 * @access    public
 */
function inheritLayer(aLayer)
{
  switch (Browser.browser)
  {
    case 'ie':
      aLayer.style.visibility = "inherit";
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        aLayer.visibility = "inherit";
      else
        aLayer.style.visibility = "inherit";
      break;
    case 'mozilla':
      aLayer.style.visibility = "inherit";
      break;
    case 'opera':
      // OPERA kennt inherit überhaupt nicht
      aLayer.style.visibility = "visible";
      break;
    case 'konqueror':
      aLayer.style.visibility = "inherit";
      break;
    default:
      aLayer.style.visibility = "inherit";
      break;
  } // switch
} // Ende Funktion


/**
 * Ermitteln wie die Sichtbarkeit des Layers ist (sichtab oder versteckt, vererbt).
 * @param     object    aLayer Layer für den die Sichtbarkeit ermittelt wird.
 * @return    string    Wert der Sichtbarkeit (visible, hidden) [inherit?]
 * @access    public
 * @see       showLayer, hideLayer
 */
function getVisibility(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      result = aLayer.style.visibility;
      break;
    case 'netscape':
      if (Browser.majorver == 4)
      {
        if (aLayer.visibility == "show")
          result = "visible";
        if (aLayer.visibility == "hide")
          result = "hidden";
      }
      else
        result = aLayer.style.visibility;
      break;
    case 'mozilla':
      result = aLayer.style.visibility;
      break;
    case 'opera':
     result = aLayer.style.visibility;
      break;
    case 'konqueror':
      result = aLayer.style.visibility;
      break;
    default:
      result = aLayer.style.visibility;
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Layer Positionierung und Größe
 */

/**
 * Position links (Spalte), des Layers ermitteln.
 * @param     object    aLayer Layer für den die Position bestimmt werden soll
 * @return    integer   Wert für die Postition links.
 * @access    public
 * @see       getTop, getBottom, getRight
 */
function getLeft(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      result = aLayer.style.pixelLeft;
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.left;
      else
        result = parseInt(aLayer.style.left);
      break;
    case 'mozilla':
      result = parseInt(aLayer.style.left);
      break;
    case 'opera':
      // Es geht auch wie IE .pixelLeft anstatt .left
      result = parseInt(aLayer.style.left);
      break;
    case 'konqueror':
      result = parseInt(aLayer.style.pixelLeft);
      break;
    default:
      result = parseInt(aLayer.style.left);
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Position oben (Zeile), des Layers ermitteln.
 * @param     object    aLayer Layer für den die Position bestimmt werden soll
 * @return    integer   Wert für die Postition oben.
 * @access    public
 * @see       getBottom, getRight, getLeft
 */
function getTop(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      result = aLayer.style.pixelTop;
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.top;
      else
        result = parseInt(aLayer.style.top);
      break;
    case 'mozilla':
      result = parseInt(aLayer.style.top);
      break;
    case 'opera':
      // Es geht auch wie IE .pixelTop anstatt .top
      result = parseInt(aLayer.style.top);
      break;
    case 'konqueror':
      result = parseInt(aLayer.style.pixelTop);
      break;
    default:
      result = parseInt(aLayer.style.top);
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Position rechts (Spalte), des Layers ermitteln.
 * @param     object    aLayer Layer für den die Position bestimmt werden soll
 * @return    integer   Wert für die Postition rechts.
 * @access    public
 * @see       getTop, getBottom, getLeft
 */
function getRight(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      result = aLayer.style.pixelLeft + getWidth(aLayer);
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.left + getWidth(aLayer);
      else
        result = getLeft(aLayer) + getWidth(aLayer);
      break;
    case 'mozilla':
      result = getLeft(aLayer) + getWidth(aLayer);
      break;
    case 'opera':
      result = getLeft(aLayer) + getWidth(aLayer);
      break;
    case 'konqueror':
      result = aLayer.style.pixelLeft + getWidth(aLayer);
      break;
    default:
      result = getLeft(aLayer) + getWidth(aLayer);
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Position unten (Zeile), des Layers ermitteln.
 * @param     object    aLayer Layer für den die Position bestimmt werden soll
 * @return    integer   Wert für die Postition unten.
 * @access    public
 * @see       getTop, getRight, getLeft
 */
function getBottom(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      result = aLayer.style.pixelTop + getHeight(aLayer);
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.top + getHeight(aLayer);
      else
        result = getTop(aLayer) + getHeight(aLayer);
      break;
    case 'mozilla':
      result = getTop(aLayer) + getHeight(aLayer);
      break;
    case 'opera':
      result = getTop(aLayer) + getHeight(aLayer);
      break;
    case 'konqueror':
      result = aLayer.style.pixelTop + getHeight(aLayer);
      break;
    default:
      result = getTop(aLayer) + getHeight(aLayer);
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Ermittelt die Breite des Layers.
 * @param     object    aLayer Layer für den die Breite bestimmt werden soll.
 * @return    integer   Breite
 * @access    public
 * @see       getHeight
 */
function getWidth(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      if (aLayer.style.pixelWidth)
        result =  aLayer.style.pixelWidth;
      else
        result =  aLayer.clientWidth;
      break;
    case 'netscape':
      if (Browser.majorver == 4)
      {
        if (aLayer.document.width)
          result =  aLayer.document.width;
        else
          result =  aLayer.clip.right - aLayer.clip.left;
      }
      else
        result = parseInt(aLayer.style.width);
      break;
    case 'mozilla':
      result = parseInt(aLayer.style.width);
      break;
    case 'opera':
      // nicht bekannt aLayer.style.width
      result = parseInt(aLayer.style.pixelWidth);
      break;
    case 'konqueror':
      if (aLayer.style.pixelWidth)
        result =  parseInt(aLayer.style.pixelWidth);
      else
        result =  parseInt(aLayer.clientWidth);
      break;
    default:
      result = parseInt(aLayer.style.width);
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Ermittelt die Höhe des Layers ermitteln.
 * @param     object    aLayer Layer für den die Höhe bestimmt werden soll.
 * @return    integer   Höhe
 * @access    public
 * @see       getWidth
 */
function getHeight(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      if (aLayer.style.pixelHeight)
        result = aLayer.style.pixelHeight;
      else
        result = aLayer.clientHeight;
      break;
    case 'netscape':
      if (Browser.majorver == 4)
      {
        if (aLayer.document.height)
          result = aLayer.document.height;
        else
          result = aLayer.clip.bottom - aLayer.clip.top;
      }
      else
        result = parseInt(aLayer.style.height);
      break;
    case 'mozilla':
      result = parseInt(aLayer.style.height);
      break;
    case 'opera':
      // Nicht bekannt aLayer.style.height);
      result = parseInt(aLayer.style.pixelHeight);
      break;
    case 'konqueror':
      result = parseInt(aLayer.style.height);
      break;
    default:
      result = parseInt(aLayer.style.height);
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Layer bewegen
 */

/**
 * Bewegt den Layer an die Position x, y.
 * Dabei gibt x die linke und y die Position oben an.
 * @param     object    aLayer Layer der bewegt werden soll.
 * @return    object
 * @access    public
 * @see       moveLayerBy
 */
function moveLayerTo(aLayer, tox, toy)
{
  switch (Browser.browser)
  {
    case 'ie':
      aLayer.style.left = tox;
      aLayer.style.top  = toy;
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        aLayer.moveTo(tox, toy);
      else
      {
        aLayer.style.left = tox;
        aLayer.style.top  = toy;
      }
      break;
    case 'mozilla':
      aLayer.style.left = tox;
      aLayer.style.top  = toy;
      break;
    case 'opera':
      aLayer.style.left = tox;
      aLayer.style.top  = toy;
      break;
    case 'konqueror':
      aLayer.style.left = tox;
      aLayer.style.top  = toy;
      break;
    default:
      aLayer.style.left = tox;
      aLayer.style.top  = toy;
      break;
  } // switch
} // Ende Funktion


/**
 * Bewegt den Layer um die in byx und byy angegebenen Pixel.
 * Dabei enthält byx den Werte in der Verschiebung nach links und byy den
 * Wert für die Verschiebung nach oben. Negativwerte bewegen den Layer in die
 * entgegen gesetzte Richtung.
 * @param     object    aLayer Layer der bewegt werden soll.
 * @access    public
 * @see       moveLayerTo
 */
function moveLayerBy(aLayer, byx, byy)
{
  switch (Browser.browser)
  {
    case 'ie':
      aLayer.style.pixelLeft += byx;
      aLayer.style.pixelTop  += byy;
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        aLayer.moveBy(byx, byy);
      else
      {
        aLayer.style.left = parseInt(aLayer.style.left) + byx;
        aLayer.style.top  = parseInt(aLayer.style.top) + byy;
      }
      break;
    case 'mozilla':
      aLayer.style.left = parseInt(aLayer.style.left) + byx;
      aLayer.style.top  = parseInt(aLayer.style.top) + byy;
      break;
    case 'opera':
      aLayer.style.left += byx;
      aLayer.style.top  += byy;
      break;
    case 'konqueror':
      aLayer.style.left = parseInt(aLayer.style.left) + byx;
      aLayer.style.top  = parseInt(aLayer.style.top) + byy;
      break;
    default:
      aLayer.style.left = parseInt(aLayer.style.left) + byx;
      aLayer.style.top  = parseInt(aLayer.style.top) + byy;
      break;
  } // switch
} // Ende Funktion


/**
 * Layer Ebenen (zIndex)
 */

/**
 * Ermittelt die Ebene in der sich der Layer (Zahl) befindet.
 * @param     object    aLayer Layerobjekt für das die Ebene ermittelt wird.
 * @return    integer   Ebene in der sich der Layer befindet.
 * @access    public
 * @see       setzIndex
 */
function getzIndex(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      result = aLayer.style.zIndex;
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.zIndex;
      else
        result = aLayer.style.zIndex;
      break;
    case 'mozilla':
      result = aLayer.style.zIndex;
      break;
    case 'opera':
      result = aLayer.style.zIndex;
      break;
    case 'konqueror':
      result = aLayer.style.zIndex;
      break;
    default:
      result = aLayer.style.zIndex;
      break;
  } // switch
  return result;
} // Ende Funktion getzIndex


/**
 * Setzt die Ebene des Layer (Zahl).
 * @param     object    aLayer Layerobjekt für das die Ebene gesetzt wird.
 * @access    public
 * @see       getzIndex
 */
function setzIndex(aLayer, z)
{
  switch (Browser.browser)
  {
    case 'ie':
      aLayer.style.zIndex = z;
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        aLayer.zIndex = z;
      else
        aLayer.style.zIndex = z;
      break;
    case 'mozilla':
      aLayer.style.zIndex = z;
      break;
    case 'opera':
      aLayer.style.zIndex = z;
      break;
    case 'konqueror':
      aLayer.style.zIndex = z;
      break;
    default:
      aLayer.style.zIndex = z;
      break;
  } // switch
} // Ende Funktion setzIndex


/**
 * Layer Bereich (Clipping)
 */

/**
 * Anzeigebereich des angegeben Layers an allen vier Ecken setzen.
 * @param     object    aLayer Layerobjekt für den der Anzeigebreich verändert wird.
 * @param     integer   clipleft Linke Einschränkung für den Anzeigebereich.
 * @param     string    cliptop Obere Einschränkung für den Anzeigebereich.
 * @param     string    clipright Rechte Einschränkung für den Anzeigebereich.
 * @param     string    clipbottom Untere Einschränkung für den Anzeigebereich.
 * @access    public
 * @see       getClipLeft, getClipTop, getClipRight, getClipBottom, , getClipWidth, getClipHeight
 */
function clipLayer(aLayer, clipleft, cliptop, clipright, clipbottom)
{
  switch (Browser.browser)
  {
    case 'ie':
      aLayer.style.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
      break;
    case 'netscape':
      if (Browser.majorver == 4)
      {
        aLayer.clip.left   = clipleft;
        aLayer.clip.top    = cliptop;
        aLayer.clip.right  = clipright;
        aLayer.clip.bottom = clipbottom;
      }
      else
      {
        aLayer.style.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
      }
      break;
    case 'mozilla':
      aLayer.style.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
      break;
    case 'opera':
      // aLayer.style.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
      break;
    case 'konqueror':
      // aLayer.style.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
      break;
    default:
      aLayer.style.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
      break;
  } // switch
} // Ende Funktion clipLayer


/**
 * Linken Anzeigebereich ermitteln
 * @param     object    aLayer Layerobjekt zur Ermittlung des linken Wertes.
 * @return    integer   Wert für Links.
 * @access    public
 * @see       getClipTop, getClipRight, getClipBottom, getClipWidth, getClipHeight
 */
function getClipLeft(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[3];
      }
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.clip.left;
      else
      {
        var rect_str = aLayer.style.clip;
        if (rect_str=='')
          result = -1;
        else
        {
          var pos = parse_clip_values(aLayer.style.clip);
          result = pos[3];
        }
      }
      break;
    case 'mozilla':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[3];
      }
      break;
    case 'opera':
      result = getLeft(aLayer);
      break;
    case 'konqueror':
      result = getLeft(aLayer);
      break;
    default:
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[3];
      }
      break;
  } // switch
  return result;
} // Ende Funktion getClipLeft


/**
 * Oberen Anzeigebereich ermitteln
 * @param     object    aLayer Layerobjekt zur Ermittlung des oberen Wertes.
 * @return    integer   Wert für oben.
 * @access    public
 * @see       getClipLeft, getClipRight, getClipBottom, getClipWidth, getClipHeight
 */
function getClipTop(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[0];
      }
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.clip.top;
      else
      {
        var rect_str = aLayer.style.clip;
        if (rect_str=='')
          result = -1;
        else
        {
          var pos = parse_clip_values(aLayer.style.clip);
          result = pos[0];
        }
      }
      break;
    case 'mozilla':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[0];
      }
      break;
    case 'opera':
       result = getTop(aLayer);
       break;
    case 'konqueror':
       result = getTop(aLayer);
       break;
    default:
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[0];
      }
      break;
  } // switch
  return result;
} // Ende Funktion getClipTop


/**
 * Rechten Anzeigebereich ermitteln
 * @param     object    aLayer Layerobjekt zur Ermittlung des rechten Wertes.
 * @return    integer   Wert für rechts.
 * @access    public
 * @see       getClipLeft, getClipTop, getClipBottom, getClipWidth, getClipHeight
 */
function getClipRight(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[1];
      }
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.clip.right;
      else
      {
        var rect_str = aLayer.style.clip;
        if (rect_str=='')
          result = -1;
        else
        {
          var pos = parse_clip_values(aLayer.style.clip);
          result = pos[1];
        }
      }
      break;
    case 'mozilla':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[1];
      }
      break;
    case 'opera':
      result = getRight(aLayer);
      break;
    case 'konqueror':
      result = getRight(aLayer);
      break;
    default:
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[1];
      }
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Unteren Anzeigebereich ermitteln
 * @param     object    aLayer Layerobjekt zur Ermittlung des unteren Wertes.
 * @return    integer   Wert für unten.
 * @access    public
 * @see       getClipLeft, getClipTop, getClipRight, getClipWidth, getClipHeight
 */
function getClipBottom(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[2];
      }
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.clip.bottom;
      else
      {
        var rect_str = aLayer.style.clip;
        if (rect_str=='')
          result = -1;
        else
        {
          var pos = parse_clip_values(aLayer.style.clip);
          result = pos[2];
        }
      }
      break;
    case 'mozilla':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[2];
      }
      break;
    case 'opera':
      result = getBottom(aLayer);
      break;
    case 'konqueror':
      result = getBottom(aLayer);
      break;
    default:
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[2];
      }
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Breite des Anzeigebereich ermitteln
 * @param     object    aLayer Layerobjekt zur Ermittlung der Breite des Anzeigebereichs.
 * @return    integer   Wert der Breite des Anzeigebereichs.
 * @access    public
 * @see       getClipHeight, getClipLeft, getClipTop, getClipRight, getClipBottom
 */
function getClipWidth(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[1] - pos[3];    // pos[3] - pos[1];
      }
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.clip.width;
      else
      {
        var rect_str = aLayer.style.clip;
        if (rect_str=='')
          result = -1;
        else
        {
          var pos = parse_clip_values(aLayer.style.clip);
          result = pos[1] - pos[3];    // pos[3] - pos[1];
        }
      }
      break;
    case 'mozilla':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[1] - pos[3];    // pos[3] - pos[1];
      }
      break;
    case 'opera':
      result = getClipRight(aLayer) - getClipLeft(aLayer);
      break;
    case 'konqueror':
      result = getClipRight(aLayer) - getClipLeft(aLayer);
      break;
    default:
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[1] - pos[3];    // pos[3] - pos[1];
      }
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Höhe des Anzeigebereich ermitteln
 * @param     object    aLayer Layerobjekt zur Ermittlung der Höhe des Anzeigebereichs.
 * @return    integer   Wert der Höhe des Anzeigebereichs.
 * @access    public
 * @see       getClipWidth, getClipLeft, getClipTop, getClipRight, getClipBottom
 */
function getClipHeight(aLayer)
{
  var result;
  switch (Browser.browser)
  {
    case 'ie':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[2] - pos[0];    // pos[0] - pos[2];
      }
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = aLayer.clip.height;
      else
      {
        var rect_str = aLayer.style.clip;
        if (rect_str=='')
          result = -1;
        else
        {
          var pos = parse_clip_values(aLayer.style.clip);
          result = pos[2] - pos[0];    // pos[0] - pos[2];
        }
      }
      break;
    case 'mozilla':
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[2] - pos[0];    // pos[0] - pos[2];
      }
      break;
    case 'opera':
      result = getClipBottom(aLayer) - getClipTop(aLayer);
      break;
    case 'konqueror':
      result = getClipBottom(aLayer) - getClipTop(aLayer);
      break;
    default:
      var rect_str = aLayer.style.clip;
      if (rect_str=='')
        result = -1;
      else
      {
        var pos = parse_clip_values(aLayer.style.clip);
        result = pos[2] - pos[0];    // pos[0] - pos[2];
      }
      break;
  } // switch
  return result;
} // Ende Funktion


/**
 * Für IE, Netscape 6 und Mozilla die erhaltenen Werte in Integer umwandeln.
 * Die Informationen über das Clipping werden immer mit Wert und der Einheit
 * Pixel zurück gegeben. Hier wird der Wert von der Einheit getrennt.
 * @param     string    rect_str
 * @return    object
 * @access    public
 * @see
 */
function parse_clip_values(rect_str)
{
  var rect_values = new Array();
  var i;

  i = rect_str.indexOf("(");
  rect_values[0] = parseInt(rect_str.substring(i + 1, rect_str.length), 10);
  i = rect_str.indexOf(" ", i + 1);
  rect_values[1] = parseInt(rect_str.substring(i + 1, rect_str.length), 10);
  i = rect_str.indexOf(" ", i + 1);
  rect_values[2] = parseInt(rect_str.substring(i + 1, rect_str.length), 10);
  i = rect_str.indexOf(" ", i + 1);
  rect_values[3] = parseInt(rect_str.substring(i + 1, rect_str.length), 10);
  return rect_values;
} // Ende Funktion parse_clip_values


/**
 * Hintergrundfarbe des Layers setzen.
 * Hinweis: Ist ein Hintergrundbild gesetzt, wird die Farbe nicht angezeigt.
 * Das Image kann durch setzen des Parameters "delimg" auf true gelöscht werden
 * @param     string
 * @access    public
 */
function setBgColor(aLayer, color, delimg)
{
  // Auf True setzen, damit ein evtl. vorhandenes Bild gelöscht wird, falls der
  // Anwender vergisst den Wert zu setzen.
  if (delimg == null)
    delimg = true;
  switch (Browser.browser)
  {
    case 'ie':
      aLayer.style.backgroundColor = color;
      if (delimg)
        aLayer.style.backgroundImage = "";
      break;
    case 'netscape':
      if (Browser.majorver == 4)
      {
        aLayer.bgColor = color;
        if (delimg)
          aLayer.background.src = "";
      }
      else
      {
        aLayer.style.backgroundColor = color;
        if (delimg)
          aLayer.style.backgroundImage = "";
      }
      break;
    case 'mozilla':
      aLayer.style.backgroundColor = color;
      if (delimg)
        aLayer.style.backgroundImage = "";
      break;
    case 'opera':
      aLayer.style.background = color;
      // Löscht das Bild, einfach irgendwas eintragen was nicht existiert
      if (delimg)
        aLayer.style.backgroundImage = "url('nil')";
      break;
    case 'konqueror':
      aLayer.style.backgroundColor = color;
      if (delimg)
        aLayer.style.backgroundImage = "";
      break;
    default:
      aLayer.style.backgroundColor = color;
      if (delimg)
        aLayer.style.backgroundImage = "";
      break;
  } // switch
} // Ende Funktion setBgColor


/**
 * Hintergrundbild für den Scroller setzen.
 * @param     object    aLayer Layerobjekt für den das Hintergrundbild gesetz
 * werden soll.
 * @param     string    imgsrc Bildqueller unter Angabe des Verzeichnis und
 * Bildnamen.
 * @access    public
 * @see       setBgColor
 */
function setBgImage(aLayer, imgsrc)
{
  switch (Browser.browser)
  {
    case 'ie':
      aLayer.style.backgroundImage = "url(" + imgsrc + ")";
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        aLayer.background.src = imgsrc;
      else
        aLayer.style.backgroundImage = "url(" + imgsrc + ")";
      break;
    case 'mozilla':
      aLayer.style.backgroundImage = "url(" + imgsrc + ")";
      break;
    case 'opera':
      aLayer.style.backgroundImage = "url(" + imgsrc + ")";
      break;
    case 'konqueror':
      aLayer.style.backgroundImage = "url(" + imgsrc + ")";
      break;
    default:
      aLayer.style.backgroundImage = "url(" + imgsrc + ")";
      break;
  } // switch
} // Ende Funktion setBgImage


/**
 * Das Layerobjekt aus der HTML - Struktur ermitteln.
 * @param     string    lname Name des Layerobjekts das gefunden werden soll.
 * @return    object    Layerelement in der HTML - Struktur.
 * @access    public
 * @see       getLayer
 */
function getLayer(lname)
{
  var result;

  switch(Browser.browser)
  {
    case 'ie':
      result = eval('document.all.' + lname);
      break;
    case 'netscape':
      if (Browser.majorver == 4)
        result = findLayer(lname);
      else
        result = document.getElementById(lname);
      break;
    case 'mozilla':
      result = document.getElementById(lname);
      break;
    case 'opera':
      result = document.getElementById(lname);
      break;
    case 'konqueror':
      result = document.getElementById(lname);
      break;
    default:
      result = document.getElementById(lname);
      break;
  } // switch

  return result;
} // Ende Funktion getLayer


/**
 * Sucht den in Layername angegeben Layer (div, layer) in der HTML - Struktur.
 * @param     string    lname Name des Layerobjekts das gefunden werden soll.
 * @return    object    Layerelement in der HTML - Struktur.
 * @access    public
 * @see       getLayer
 */
function findLayer(lname)
{
  var i, alayer;

  for (i = 0; i < document.layers.length; i++)
  {
    alayer = document.layers[i];
    if (alayer.name == lname)
      return alayer;
    if (aLayer.document.layers.length > 0)
      if ((alayer = findLayer(lname, alayer.document)) != nil)
        return alayer;
  } // for (i = 0; i < document.layers.length; i++)
  return nil;
} // Ende Funktion findLayer

