$.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=$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;$wrapper.scrollLeft(singleWidth*(visible));var test=this;function gotoPage(page){var dir=page<currentPage?-1:1,n=Math.abs(currentPage-page),left=singleWidth*dir;$wrapper.filter(':not(:animated)').animate({scrollLeft:'+='+left},500,function(){if(page==(-1*(visible)+1)){$wrapper.scrollLeft(singleWidth*(pages));page=pages+1;}else if(page>=pages+1){$wrapper.scrollLeft(singleWidth*(visible));page=1;}
currentPage=page;$(".wrapper li").each(function(i){if(($(this).offset().left>78)&&($(this).offset().left<83)){}});});return false;}
if(length_of_li>visible){$wrapper.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);});}});};