$.fn.infiniteCarousel=function(prev_id,next_id){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.floor($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;}$(prev_id,this).click(function(){return gotoPage(currentPage-1);});$(next_id,this).click(function(){return gotoPage(currentPage+1);});});};
