(function($) {
   
    $.fn.slider = function(params) {

        params = $.extend({
            show: 3,
            delay: 1000,
            padding: 5,
            border: 1,
            margin: 5
        }, params);
        
        var itemArray = [];
        var currentItem = 0;
        var obj = this;
        
        function _init() {
            
            $(obj).find('li').each(function() {
                itemArray.push(new Array($(this).attr('id'), $(this).height()));
            });
            
            for (var i = 0; i < params.show -1; i++)
            {
                $('#' + itemArray[i]).clone().appendTo($('#' + $(obj).attr('id') + ' ul')).attr('id', function() {
                    return this.id + '-c';
                });
            }
                
            $(obj).find("li[id$='-c']").each(function() {
                itemArray.push(new Array($(this).attr('id'), $(this).height()));
            });
            
            $(obj).find('li').each(function() {
                $(this).hide();
            });
            
            if (currentItem < itemArray.length - (params.show -2))
                for ( var i = currentItem; i < currentItem + params.show; i++ ) {
                    $('#' + itemArray[i][0]).show();
                }
        }
        
        function _nextItem() {
            
            currentItem++;
            
            var height = 0;
            height += params.show * (params.padding + params.border + params.margin);
            
            for (var i = (currentItem-1); i < (currentItem + (params.show-1)); i++)
                height += itemArray[i][1];

            if (currentItem < itemArray.length - (params.show -1))
            {
                $('#' + itemArray[(currentItem + params.show - 1)][0]).show();
                $('#' + itemArray[currentItem-1][0]).hide();
            }
            else
            {
                $('#' + itemArray[currentItem-1][0]).hide();
                $(obj).find("li[id$='-c']").each(function() {
                    $(this).hide();
                });
                
                currentItem = 0;
                for (var i = currentItem; i < params.show; i++)
                    $('#' + itemArray[i][0]).show();
            }
            
            $('#slider').height(height).delay(params.delay).show('1', _nextItem);
        }
        
        _init();
        _nextItem();
        
        return this;
    };

})(jQuery);

(function($) {
    $(document).ready(function(){
        $('#slider').slider({show: 3, delay: 5000});
    });
})(jQuery);
