﻿/*Based on this: http://spitleaf.com/30days/day2.html */
var sliderContent = $('.sliderContent')[0];
var leftLimit = 10; // Min 10px movement to the left

function SpringSlider() {
    var speed;
    var accl = -0.4;

    var sliderControl = $('.sliderControl')[0];

    // Recalculate leftLimit
    var contentWidth = getWidth();
    $(sliderContent).width(contentWidth); //This is not strictly required to be set

    if ((contentWidth - 980) > leftLimit)
        leftLimit = (contentWidth - 980);

    $("#dragger").draggable(
        {   containment: "#draggerContainer",
            axis: "x",
            scroll: false,
            revert: true,
            revertDuration: 300,
            drag: function () { speed = (sliderControl.offsetLeft - 250) * 0.4; },
            stop: function () { speed = 0; }
        }
    );

    var area = Array(341-leftLimit, 0, 341, 0);
    $('#sliderContent').draggable({ axis: "x", containment: area });

    setInterval(function () {
        var contentPosition;
        if (speed == 0) {
            contentPosition = sliderContent.offsetLeft + (sliderControl.offsetLeft - 250) * 0.4 * accl;
        } else {
            contentPosition = sliderContent.offsetLeft + speed * accl;
        }
        contentPosition = constrain(contentPosition, -leftLimit, 0);
        $(sliderContent).css('left', contentPosition + 'px');
    }, 25);
};

function constrain(number, min, max) {
    if (number < min) return min;
    else if (number > max) return max;
    return number;
}

function moveObject(event) {
    var delta = 0;

    if (!event) event = window.event;

    // normalize the delta
    if (event.wheelDelta) {
        // IE and Opera
        delta = event.wheelDelta / 60;
    } else if (event.detail) {
        // W3C
        delta = -event.detail / 2;
    }

    var contentPosition = sliderContent.offsetLeft + (delta * 40);
    contentPosition = constrain(contentPosition, -leftLimit, 0);

    $(sliderContent).css('left', contentPosition + 'px');
    if (event.preventDefault) {
        event.preventDefault();
    } else {
        event.returnValue = false; //IE
    }
}

function getWidth() {
    // Since divs in sliderContent are absolutely positioned, we loop through each div to find the rightmost point
    var currentWidth = 0;
    $('.defaultBox').each(function () {
        var rightMost = parseInt($(this).css("left"), 10) + parseInt($(this).css("width"), 10);
        if (rightMost > currentWidth)
            currentWidth = rightMost;
    });
    return currentWidth + 10; // 10px extra padding
}
