﻿

(function($) {

    function SmoothScroller(obj) {

        if (typeof SmoothScroller._initialized == 'undefined') {

            SmoothScroller.prototype.init = function(obj) {
                this.carousel = obj;
                this.setCarrouselWidth();
                $(settings.itemsHolderQuery).attr('id', 'carousel-holder');
                this.distance = settings.distance;
                this.maxLeft = Math.round($(settings.itemsHolderQuery).parent().width() - $(settings.itemsHolderQuery).width());
                this.leftDivider = Math.floor($(this.carousel).offset().left + ($(this.carousel).width() * 0.4));
                //console.log('leftDivider: ' + this.leftDivider);
                this.rightDivider = Math.ceil($(this.carousel).offset().left + ($(this.carousel).width() * 0.6));
                //console.log('rightDivider: ' + this.rightDivider);
                this.listenToMove();
            };

            SmoothScroller.prototype.setCarrouselWidth = function() {
                var width = 0;
                $(settings.itemsHolderQuery).children().each(function() {
                    width += $(this).outerWidth(true);
                });
                $(settings.itemsHolderQuery).css('width', width);
            };

            SmoothScroller.prototype.clear = function() {
                clearInterval(this.interval);
                this.interval = null;
                this.movingLeft = null;
                this.movingRight = null;
                //console.log('clearing');
            };

            SmoothScroller.prototype.listenToMove = function() {
                var ss = this;

                $(this.carousel).mousemove(function($e) {
                    if ($e.pageX > ss.leftDivider && $e.pageX < ss.rightDivider) {
                        ss.clear();
                    } else if ($e.pageX < ss.leftDivider) {
                        if (ss.movingLeft) return;
                        //console.log('left');
                        ss.clear();
                        ss.movingLeft = true;
                        /*
                        $(settings.itemsHolderQuery).animate({
                            left: 0
                        }, 500, 'linear');
                        */
                        ss.interval = setInterval(function() { ss.backwards(); }, settings.interval);
                    } else if ($e.pageX > ss.rightDivider) {
                        if (ss.movingRight) return;
                        ss.clear();
                        ss.movingRight = true;
                        /*
                        $(settings.itemsHolderQuery).animate({
                            left: ss.maxLeft
                        }, 500, 'linear');
                        */
                        ss.interval = setInterval(function() { ss.forwards(); }, settings.interval);

                    } else { }
                });
            };

            SmoothScroller.prototype.forwards = function() {
                //console.log('moving left');
                var left = ($(settings.itemsHolderQuery).position().left) + (-this.distance);
                //document.getElementById('carousel-holder').style.left = ((left < this.maxLeft) ? this.maxLeft : left) + 'px';
                $(settings.itemsHolderQuery).css('left', ((left < this.maxLeft) ? this.maxLeft : left));
            };

            SmoothScroller.prototype.backwards = function() {
                //console.log('moving right');
                var left = ($(settings.itemsHolderQuery).position().left) - (-this.distance);
                //document.getElementById('carousel-holder').style.left = ((left > -1) ? 0 : left) + 'px';
                $(settings.itemsHolderQuery).css('left', ((left > -1) ? 0 : left));
            };
        }
        SmoothScroller._initialized = true;
        this.init(obj);
    }

    $.fn.SmoothScroller = function(options) {

        settings = jQuery.extend({
            itemsHolderQuery: '.img_carousel ul',
            interval: 5,
            distance: 5
        }, options);

        return this.each(function() {
            var carousel = new SmoothScroller(this);
        });
    };

})(jQuery);

$(document).ready(function() {
    $('.carousel').SmoothScroller();
});
