﻿$.fn.newsCarousel = function() {
    return this.each(function() {
        var wrapper = $("> div", this).css("overflow","hidden");
        var slider = wrapper.find("> ul");
        var items = slider.find("> li");
        var single = items.filter(":first");
        var singleHeight = single.outerHeight(); 
        var visible = Math.ceil(wrapper.innerHeight() / singleHeight);
        var currentPage = 1;
        var pages = items.length;  

        items.filter(':first').before(items.slice(- visible).clone().addClass('cloned'));
        items.filter(':last').after(items.slice(0, visible).clone().addClass('cloned'));
        items = slider.find('> li');
        wrapper.scrollTop(singleHeight * visible);
        
        function gotoPage(page) {
            wrapper.filter(':not(:animated)').animate({
                scrollTop : '+=' + singleHeight
            }, 800, function () {
                if (page == 0) {
                    wrapper.scrollTop(singleHeight * visible * pages);
                    page = pages;
                } else if (page > pages) {
                    wrapper.scrollTop(singleHeight * visible);
                    page = 1;
                } 
                currentPage = page;
            });                
            return false;
        }
        
        $(this).bind('next', function () {
            gotoPage(currentPage + 1);
        });
    });
};