function jsScroller (o, w, h) {
    var self = this;
    var list = o.getElementsByTagName("div");
    for (var i = 0; i < list.length; i++) {
        if (list[i].className.indexOf("Scroller-Container") > -1) {
            o = list[i];
        }
    }
    this._setPos = function (x, y) {
        if (x < this.viewableWidth - this.totalWidth)
            x = this.viewableWidth - this.totalWidth;
        if (x > 0) x = 0;
        if (y < this.viewableHeight - this.totalHeight)
            y = this.viewableHeight - this.totalHeight;
        if (y > 0) y = 0;
        this._x = x;
        this._y = y;
        with (o.style) {
            left = this._x +"px";
            top  = this._y +"px";
        }
    };
    this.reset = function () {
        this.content = o;
        this.totalHeight = o.offsetHeight;
        this.totalWidth  = o.offsetWidth;
        this._x = 0;
        this._y = 0;
        with (o.style) {
            left = "0px";
            top  = "0px";
        }
    };
    this.scrollBy = function (x, y) {
        this._setPos(this._x + x, this._y + y);
    };
    this.scrollTo = function (x, y) {
        this._setPos(-x, -y);
    };
    this.stopScroll = function () {
        if (this.scrollTimer) window.clearInterval(this.scrollTimer);
    };
    this.startScroll = function (x, y) {
        this.stopScroll();
        this.scrollTimer = window.setInterval(
            function(){ self.scrollBy(x, y); }, 40
        );
    };
    this.swapContent = function (c, w, h) {
        o = c;
        var list = o.getElementsByTagName("div");
        for (var i = 0; i < list.length; i++) {
            if (list[i].className.indexOf("Scroller-Container") > -1) {
                o = list[i];
            }
        }
        if (w) this.viewableWidth  = w;
        if (h) this.viewableHeight = h;
        this.reset();
    };
    this.content = o;
    this.viewableWidth  = w;
    this.viewableHeight = h;
    this.totalWidth  = o.offsetWidth;
    this.totalHeight = o.offsetHeight;
    this.scrollTimer = null;
    this.reset();
};