(function ($) {
    $.fn.infiniteScroller = function (options) {
        var settings = {
            minSlidesNum: 2,
            slideTime: 2500,
            transitionSpeed: 350,
            autoSlide: true
        };
        var options = $.extend(settings, options);
		var actAsScroller;
        return this.each(function () {
            var animating = false;
            var hovered = false;
            var $carousel = $(this).find('div.carousel');
            var $slideList = $(this).find('ul');
			if ($slideList.children().size() >= 2) {
                $('<a href="#" class="carousel-nav-prev" title="previous">&nbsp;</a><a href="#" class="carousel-nav-next" title="next">&nbsp;</a>').insertBefore($carousel);
				actAsScroller = true;
            }
            var $prev = $(this).find('a.carousel-nav-prev');
            var $next = $(this).find('a.carousel-nav-next');
            var slideWidth = $slideList.children('li').width();
			if(actAsScroller){
            	var slideListWidth = slideWidth * ($slideList.children().size());
			}
            var leftValue = slideWidth * (-1);
            if (actAsScroller) {
                $carousel.css('overflow-x', 'hidden');
				$slideList.children('li:first').before($slideList.children('li:last'));
				$slideList.css({
					'left': leftValue,
					'width': slideListWidth
				});
            } else {
				$carousel.css('overflow-x', 'hidden');
			}
            function rotateSlides() {
                run = setInterval(function () {
                    $next.click();
                }, settings.slideTime);
            }
            $prev.click(function () {
                this.blur();
                if (!animating) {
                    animating = true;
                    offsetRight = parseInt($slideList.css("left")) + slideWidth;
                    $slideList.animate({
                        left: offsetRight
                    }, settings.transitionSpeed, function () {
                        $slideList.children('li:first').before($slideList.children('li:last'));
                        $slideList.css({
                            'left': leftValue
                        });
                        animating = false;
                    });
                }
                return false
            });
            $next.click(function () {
                this.blur();
                if (!animating) {
                    animating = true;
                    var offsetLeft = parseInt($slideList.css("left")) - slideWidth;
                    $slideList.animate({
                        left: offsetLeft
                    }, settings.transitionSpeed, function () {
                        $slideList.children('li:last').after($slideList.children('li:first'));
                        $slideList.css({
                            'left': leftValue
                        });
                        animating = false;
                    });
                }
                return false
            });
            if (settings.autoSlide && actAsScroller) {
                if ($slideList.children().size() >= settings.minSlidesNum) {
                    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();
});
