/*
    Datei: layer.js
    Datum: 22.11.2002
    Autor: J. Strübig <jstruebig@web.de>

    Beschreibung: Funktionen um Layer mit Hilfe von Javascript zu manipulieren.


    Funktionsliste:

     getById(id [, doc]);
     Sucht den Layer mit der id im Dokument doc (oder im aktuellen Dokument).

     fixLayer(id)
     fixiert einen Layer an der momentanen Position.

     setVis(obj, mode)
     zeigt/versteckt einen Layer.

     pagePos(obj [, x, y])
     Die Position eines Layer.

     pageOffset()
     aktuelle Scrollposition der Seite.

*/


///////////////////////////////////////////////////////////
// getById(id [, doc])

function getById(id, doc)
{
    if(!doc) doc = window.document;
    if(typeof id == 'undefined') return null;

    var obj = null;
    if(document.getElementById) obj = doc.getElementById(id);
    else if(document.layers) obj = _findObj_(id, doc);
    else if(document.all) obj = doc.all[id];
    return obj;
}
////////////////////////////////////////////////////////////
// Ein Layer fixieren

function fixLayer(id)
{
    var obj = getById(id);
    if(!obj) return;
    _STICKY_OBJ_[_STICKY_OBJ_.length] = new Sticky(obj);

    if (typeof window.onscroll != 'undefined') window.onscroll = _fixLayer_;
    else if(document.layers) setInterval ('_fixLayer_()', 50);
    else setInterval ('_fixLayer_()', 50);

    _fixLayer_();
}

////////////////////////////////////////////////////////////
// setVis
function setVis(obj, mode)
{
    if(!obj) return null;
    if(document.layers)
    {
         var vis = mode ? 'show' : 'hidden';
         obj['visibility'] = vis;
         return obj['visibility'];
    }
    var vis = mode ? 'visible' : 'hidden';
    return obj.style['visibility'] =  vis;
}

////////////////////////////////////////////////////////////
// pagePos(obj [,y, x])

function pagePos(obj, y, x)
{
    if(!obj) return null;
    if(typeof x != 'undefined' && typeof y != 'undefined')
    {
         if(document.layers) obj.moveTo(x,y);
         else
         {
              obj.style.left = x;
              obj.style.top = y;
         }
    }
    var pos = {x:0, y:0};
    if(obj.style)
    {
        pos.x += obj.offsetLeft;
        pos.y += obj.offsetTop;
    }
    else
    {
        pos.x = obj.left;
        pos.y = obj.top;
    }
    return pos;
}
////////////////////////////////////////////////////////////
// offset
function pageOffset()
{
    var pos = {x:0,y:0};
    pos.x = typeof window.pageXOffset != 'undefined' ? window.pageXOffset : document.body.scrollLeft;
    pos.y = typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.body.scrollTop;
    return pos;
}

/* Globale Hilfsfunktionen */

////////////////////////////////////////////////////////////
// Nur für den NC 4.x um Layer zu finden.

function _findObj_(n, doc)
{
    if(doc[n]) return doc[n];

    for(var i = 0; i < doc.layers.length; i++)
    {
         if(typeof doc.layers[i].document != 'undefined')
         {
              var obj = _findObj_(n, doc.layers[i].document);
              if(obj) return obj;
         }
    }
    return null;
}


////////////////////////////////////////////////////////////
// Sticky -> Hilfsstruktur um die Startwerte zu sichern

function Sticky(obj)
{
    var pos = pagePos(obj);
    this.x = pos.x;
    this.y = pos.y;
    this.obj = obj;
}
////////////////////////////////////////////////////////////
// Die eigentliche Funktion um einen Layer zu fixieren

function _fixLayer_()
{
    var pos = pageOffset();
    for(var i = 0; i < _STICKY_OBJ_.length; i++)
    {
       var l = _STICKY_OBJ_[i];
       if(!l) continue;
       pagePos(l.obj, l.y + pos.y, l.x + pos.x);
    }
}
var _STICKY_OBJ_ = new Array(); // benötigt fixLayer

////////////////////////////////////////////////////////////
// NN resize Bug
if(document.layers) top.onresize = reload_nn_bug;
function reload_nn_bug(){ window.location.reload(true);}
