﻿// Create scrolling variable if it doesn't exist
if (!Scrolling) var Scrolling = {};

//ScrollTween constructor
Scrolling.ScrollTween = function() {
    //private variables
    var self = this;
    var _steps = [0, 25, 50, 70, 85, 95, 97, 99, 100];
    var _values = [];
    var _idle = true;
    var o, _inc, _timer;

    //private functions
    function tweenTo(y) {
        if (!_idle) return false;

        var d = o.getDimensions();
        if (y < 0) y = 0;
        if (y > d.theight - d.vheight)
            y = d.theight - d.vheight;

        var dist = y - d.y;
        _inc = 0;
        _timer = null;
        _values = [];
        _idle = false;

        for (var i = 0; i < _steps.length; i++) {
            _values[i] = Math.round(d.y + dist * (_steps[i] / 100));
        }

        _timer = window.setInterval(function() {
            o.scrollTo(_values[_inc]);
            if (_inc == _steps.length - 1) {
                window.clearInterval(_timer);
                _idle = true;
            } else _inc++;
        }, o.stepSpeed);
    };

    function tweenBy(y) {
        o.tweenTo(o.getDimensions().y + y);
    };

    function setSteps(s) {
        _steps = s;
    };

    //public functions
    this.apply = function(p) {
        o = p;
        o.tweenTo = tweenTo;
        o.tweenBy = tweenBy;
        o.setSteps = setSteps;
        o.stepSpeed = 30;
    };
};
