$.fn.infiniteCarousel=function(){function repeat(str,num){return new Array(num+1).join(str);}
return this.each(function(){var $scrollerWrapper=$('> div',this).css('overflow','hidden'),$slider=$scrollerWrapper.find('> ul'),$items=$slider.find('> li'),$single=$items.filter(':first'),singleWidth=$single.outerWidth(),visible=Math.ceil($scrollerWrapper.innerWidth()/singleWidth),currentPage=1,pages=$items.length;if(($items.length%visible)!==0){$items=$slider.find('> li');}
$items.filter(':first').before($items.slice($items.length-visible,$items.length).clone().addClass('cloned'));$items.filter(':last').after($items.slice(0,visible).clone().addClass('cloned'));$items=$slider.find('> li');var length_of_li=$items.length-$items.filter('.cloned').length;$scrollerWrapper.scrollLeft(singleWidth*(visible));var test=this;function gotoPage(page){var dir=page<currentPage?-1:1,n=Math.abs(currentPage-page),left=singleWidth*dir;$scrollerWrapper.filter(':not(:animated)').animate({scrollLeft:'+='+left},500,function(){if(page==(-1*(visible)+1)){$scrollerWrapper.scrollLeft(singleWidth*(pages));page=pages+1;}else if(page>=pages+1){$scrollerWrapper.scrollLeft(singleWidth*(visible));page=1;}
currentPage=page;$(".scrollerWrapper li").each(function(i){if(($(this).offset().left>78)&&($(this).offset().left<83)){}});});return false;}
if(length_of_li>visible){$scrollerWrapper.after('<a class="arrow back"></a><a class="arrow forward"></a>');$('a.back',this).mouseover(function(){$('a.back').addClass("backon");});$('a.back',this).mouseout(function(){$('a.back').removeClass("backon");});$('a.forward',this).mouseover(function(){$('a.forward').addClass("fwdon");});$('a.forward',this).mouseout(function(){$('a.forward').removeClass("fwdon");});$('a.back',this).click(function(){gotoPage(currentPage-1,self);});$('a.forward',this).click(function(){gotoPage(currentPage+1,self);});$('a.back',this).hover(function(self){this.alertTimerId=setInterval(function(self){gotoPage(currentPage-1,self);},200);},function(self){clearInterval(this.alertTimerId);});$('a.forward',this).hover(function(self){this.alertTimerId=setInterval(function(self){gotoPage(currentPage+1,self);},200);},function(self){clearInterval(this.alertTimerId);});$(this).bind('goto',function(event,page){gotoPage(page);});}});};
