scrollers = {};
scroller.speed=100;

function scroller(wnId, lyrId, cntId) {
    this.id = wnId;
    scrollers[this.id] = this;
    this.animString = "scrollers." + this.id;
    this.load(lyrId, cntId);
};
scroller.loadLayer = function(wnId, id, cntId) {
    if(scrollers[wnId])
        scrollers[wnId].load(id, cntId);
};
scroller.prototype.load = function(lyrId, cntId) {
    if( ! document.getElementById)
        return;
    var wndo,
    lyr;
    if(this.lyrId) {
        lyr = document.getElementById(this.lyrId);
        lyr.style.visibility = "hidden";
    }
    lyr = document.getElementById(lyrId);
    wndo = document.getElementById(this.id);
    lyr.style.top = this.y = 0;
    lyr.style.left = this.x = 0;
    this.maxY = (lyr.offsetHeight - wndo.offsetHeight > 0) ? lyr.offsetHeight - wndo.offsetHeight: 0;
    this.wd = cntId ? document.getElementById(cntId).offsetWidth: lyr.offsetWidth;
    this.maxX = (this.wd - wndo.offsetWidth > 0) ? this.wd - wndo.offsetWidth: 0;
    this.lyrId = lyrId;
    lyr.style.visibility = "visible";
    this.on_load();
    this.ready = true;
};
scroller.prototype.on_load = function() {};
scroller.prototype.shiftTo = function(lyr, x, y) {
    if( ! lyr.style ||! scroller.scrdy)
        return;
    lyr.style.left = (this.x = x) + "px";
    lyr.style.top = (this.y = y) + "px";
};
scroller.GeckoTableBugFix = function() {
    var ua = navigator.userAgent;
    if(ua.indexOf("Gecko") >- 1 && ua.indexOf("Firefox") ==- 1 && ua.indexOf("Safari") ==- 1 && ua.indexOf("Konqueror") ==- 1) {
        scroller.hold = [];
        for(
        var i = 0; arguments[i]; i ++ ) {
            if(scrollers[arguments[i]]) {
                var wndo = document.getElementById(arguments[i]);
                var holderId = wndo.parentNode.id;
                var holder = document.getElementById(holderId);
                document.body.appendChild(holder.removeChild(wndo));
                wndo.style.zIndex = 1000;
                var pos = getPageOffsets(holder);
                wndo.style.left = pos.x + "px";
                wndo.style.top = pos.y + "px";
                scroller.hold[i] = [arguments[i], holderId];
            }
        }
        window.addEventListener("resize", scroller.rePositionGecko, true);
    }
};
scroller.rePositionGecko = function() {
    if(scroller.hold) {
        for(
        var i = 0; scroller.hold[i]; i ++ ) {
            var wndo = document.getElementById(scroller.hold[i][0]);
            var holder = document.getElementById(scroller.hold[i][1]);
            var pos = getPageOffsets(holder);
            wndo.style.left = pos.x + "px";
            wndo.style.top = pos.y + "px";
        }
    }
};
function getPageOffsets(el) {
    var left = el.offsetLeft;
    var top = el.offsetTop;
    if(el.offsetParent && el.offsetParent.clientLeft || el.offsetParent.clientTop) {
        left += el.offsetParent.clientLeft;
        top += el.offsetParent.clientTop;
    }
    while(el = el.offsetParent) {
        left += el.offsetLeft;
        top += el.offsetTop;
    }
    return {
        x: left,
        y: top
    };
};

scroller.scrdy=true;
