/*
    Datei: fixlayer.js
    Datum: 17.05.04
    Autor: J. Strübig <jstruebig@web.de>

*/

////////////////////////////////////////////////////////////
// Ein Layer fixieren
var canFix = null;

function fixLayer(id) {
	var win = window;
	var obj = document.getElementById ? win.document.getElementById(id)
	: document.all ? win.document.all[id] : document.layers ? win.document.layers[id] : null;
	
	if(!obj) return alert('Fehler\n\nID:' + id + ' existiert nicht.');
	
	// Ein Test, ob der Browser position:fixed umsetzt
	if(canFix == null) {
		var top = obj.offsetTop;
		obj.style.position = 'fixed';
		win.scrollBy(0,1);
		canFix = (top != obj.offsetTop)
		win.scrollBy(0,1);
	}
	
	if(canFix) {
		obj.style.position = 'fixed';
		return;
	}
	
    if(obj.style) obj.style.position = 'absolute';
    _STICKY_OBJ_[_STICKY_OBJ_.length] =  new Sticky(obj);

    _fixLayer_();

	// Nur einmal initialisieren
    if(_STICKY_OBJ_.length > 1) return obj;

    if (typeof win.onscroll != 'undefined') win.onscroll = _fixLayer_;
    else if(typeof document.layers != 'undefined') setInterval ('_fixLayer_()', 150);
    else window.setInterval ('_fixLayer_()', 150);

    return obj
}

////////////////////////////////////////////////////////////
// Sticky -> Hilfsstruktur um die Startwerte zu sichern
function Sticky(obj) {
    this.top  = obj.offsetTop ? obj.offsetTop: obj.top ;
    this.left = obj.offsetLeft? obj.offsetLeft :obj.left ;
    this.obj  = obj;
}

////////////////////////////////////////////////////////////
// Die eigentliche Funktion um einen Layer zu fixieren
function _fixLayer_(){
	var w = window;
	var doc = w.document;
	var oLeft = typeof w.pageXOffset != 'undefined' ? w.pageXOffset : // MZ/NC
       (doc.compatMode && doc.compatMode == "CSS1Compat") ?  // IE im strict Modus
       doc.documentElement.scrollLeft : // Strict Modus
       doc.body.scrollLeft; // Quirks Modus.

   var oTop = typeof w.pageYOffset != 'undefined' ? w.pageYOffset :
       (doc.compatMode && doc.compatMode == "CSS1Compat") ?
       doc.documentElement.scrollTop :
       doc.body.scrollTop;
	   
    for(var i = 0; i < _STICKY_OBJ_.length; i++){
       var l = _STICKY_OBJ_[i];
       if(!l) continue;

       var top = l.top + oTop;
       var left = l.left + oLeft;

       if(l.obj.moveTo) l.obj.moveTo(top, left);
       else {l.obj.style.top = top + 'px'; l.obj.style.left = left + 'px'};
    }
}
var _STICKY_OBJ_ = new Array(); // benötigt fixLayer

