﻿// Create scrolling variable if it doesn't exist
if (!Scrolling) var Scrolling = {};

//Scroller constructor
Scrolling.Scroller = function(o, w, h, t) {
    //get the container
    var list = o.getElementsByTagName("div");
    for (var i = 0; i < list.length; i++) {
        if (list[i].className.indexOf("Scroller-Container") > -1) {
            o = list[i];
        }
    }

    //private variables
    var self = this;
    var _vwidth = w;
    var _vheight = h;
    var _twidth = o.offsetWidth
    var _theight = o.offsetHeight;
    var _hasTween = t ? true : false;
    var _timer, _x, _y;

    //public variables
    this.onScrollStart = function() { };
    this.onScrollStop = function() { };
    this.onScroll = function() { };
    this.scrollSpeed = 30;

    //private functions
    function setPosition(x, y) {
        if (x < _vwidth - _twidth)
            x = _vwidth - _twidth;
        if (x > 0) x = 0;
        if (y < _vheight - _theight)
            y = _vheight - _theight;
        if (y > 0) y = 0;

        _x = x;
        _y = y;

        o.style.left = _x + "px";
        o.style.top = _y + "px";
    };

    //public functions
    this.scrollBy = function(x, y) {
        setPosition(_x - x, _y - y);
        this.onScroll();
    };

    this.scrollTo = function(x, y) {
        setPosition(-x, -y);
        this.onScroll();
    };

    this.startScroll = function(x, y) {
        this.stopScroll();
        this.onScrollStart();
        _timer = window.setInterval(
			function() { self.scrollBy(x, y); }, this.scrollSpeed
		);
    };

    this.stopScroll = function() {
        if (_timer) window.clearInterval(_timer);
        this.onScrollStop();
    };

    this.reset = function() {
        _twidth = o.offsetWidth
        _theight = o.offsetHeight;
        _x = 0;
        _y = 0;

        o.style.left = "0px";
        o.style.top = "0px";

        if (_hasTween) t.apply(this);
    };

    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) _vwidth = w;
        if (h) _vheight = h;
        this.reset();
    };

    this.getDimensions = function() {
        return {
            vwidth: _vwidth,
            vheight: _vheight,
            twidth: _twidth,
            theight: _theight,
            x: -_x, y: -_y
        };
    };

    this.getContent = function() {
        return o;
    };

    this.reset();
};
