(function ($) {
    $.fn.infiniteScroller = function (options) {
        var settings = {
            slideTime: 2500,
            transitionSpeed: 500,
            autoSlide: true,
            easingMode: 'easeOutQuint'
        };
        var options = $.extend(settings, options);
        return this.each(function () {
            var easing = settings.easingMode;
            var animating = false;
            var hovered = false;
            var $container = $(this).find('div.carousel');
            var $scroller = $(this).find('div.carousel').children('div');
            var $scrollerItem = $(this).find('div.carousel').children('div').children('ul')
            $('<div class="carousel-nav"><a href="#" class="carousel-nav-next" title="next">&nbsp;</a><a href="#" class="carousel-nav-prev" title="previous">&nbsp;</a></div>').insertBefore($container);
            var $prev = $(this).find('a.carousel-nav-prev');
            var $next = $(this).find('a.carousel-nav-next');
            var slideWidth = $scrollerItem.width();
            var slideListWidth = slideWidth * ($scrollerItem.size());
            var leftValue = slideWidth * (-1);
            $container.css({
                'overflow-x': 'hidden'
            });
            $scroller.css({
                'left': leftValue,
                'width': slideListWidth
            });
            function rotateSlides() {
                run = setInterval(function () {
                    $next.click();
                }, settings.slideTime);
            }
            $prev.click(function () {
                this.blur();
                if (!animating) {
                    animating = true;
                    var offsetRight = parseInt($scroller.css("left")) + slideWidth;
                    $scroller.animate({
                        left: offsetRight
                    }, settings.transitionSpeed, settings.easingMode, function () {
                        $scroller.children('ul:first').before($scroller.children('ul:last'));
                        $scroller.css({
                            'left': leftValue
                        });
                        animating = false;
                    });
                }
                return false
            });
            $next.click(function () {
                this.blur();
                if (!animating) {
                    animating = true;
                    var offsetLeft = parseInt($scroller.css("left")) - slideWidth;
                    $scroller.animate({
                        left: offsetLeft
                    }, settings.transitionSpeed, settings.easingMode, function () {
                        $scroller.children('ul:last').after($scroller.children('ul:first'));
                        $scroller.css({
                            'left': leftValue
                        });
                        animating = false;
                    });
                }
                return false
            });
            if (settings.autoSlide) {
                rotateSlides();
                $(this).hover(
                function () {
                    clearInterval(run);
                    hovered = true;
                }, function () {
                    run = setInterval(function () {
                        $next.click();
                    }, settings.slideTime);
                    hovered = false;
                });
            }
        });
    };
})(jQuery);
$(document).ready(function () {
    $('.tiny-slideshow').infiniteScroller();
});
