$.fn.infiniteCarousel=function(){function repeat(str,num){return new Array(num+1).join(str)}return this.each(function(){var $wrapper=$('> div',this).css('overflow','hidden'),$slider=$wrapper.find('> ul'),$items=$slider.find('> li'),$single=$items.filter(':first'),singleWidth=$single.outerWidth(),visible=Math.ceil($wrapper.innerWidth()/singleWidth),currentPage=1,pages=Math.ceil($items.length/visible);if(($items.length%visible)!=0){$slider.append(repeat('<li class="empty" />',visible-($items.length%visible)));$items=$slider.find('> li')}$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.scrollLeft(singleWidth*visible);function gotoPage(page){var dir=page<currentPage?-1:1,n=Math.abs(currentPage-page),left=singleWidth*dir*visible*n;$wrapper.filter(':not(:animated)').animate({scrollLeft:'+='+left},500,function(){if(page==0){$wrapper.scrollLeft(singleWidth*visible*pages);page=pages}else if(page>pages){$wrapper.scrollLeft(singleWidth*visible);page=1}currentPage=page});return false}$wrapper.after('<a class="arrow back">&lt;</a><a class="arrow forward">&gt;</a>');$('a.back',this).click(function(){return gotoPage(currentPage-1)});$('a.forward',this).click(function(){return gotoPage(currentPage+1)});$(this).bind('goto',function(event,page){gotoPage(page)})})};$(document).ready(function(){$('.infiniteCarousel').infiniteCarousel()});