$.fn.infiniteCarousel = function (wrapperSelector) {
    function repeat(str, num) {
        return new Array( num + 1 ).join( str );
    }
  
    return this.each(function () {
        var $wrapper = $(wrapperSelector, this),
            $slider = $wrapper.find('> ul'),
            $items = $slider.find('> li'),
            $single = $items.filter(':first'),
            
            singleWidth = $single.outerWidth(), //parseInt($single.width()) + parseInt($single.css('padding-left')) + parseInt($single.css('padding-right')),
            visible = Math.ceil($wrapper.innerWidth() / singleWidth), // note: doesn't include padding or border
            currentPage = 0,
            pages = $items.length - visible;


        $('a.back', this).click(function () {
            return gotoPage(currentPage - 1);                
        });
        
        $('a.forward', this).click(function () {
            return gotoPage(currentPage + 1);
        });
        
        // 5. paging function
        function gotoPage(page) {
		if (page < 0) { page = 0; }
		if (page > pages) { page = pages; }
		if (page != currentPage) {
			$wrapper.filter(':not(:animated)').animate({ scrollLeft : + singleWidth * page }, 300);
			currentPage = page;
		}
            
		return false;
        }
        
        // create a public interface to move to a specific page
        $(this).bind('goto', function (event, page) {
            gotoPage(page);
        });
    });  
};

$(function () {
    $('#scrollButtons > div').before('<a href="#" class="back"><img border=0 src="/bitrix/templates/main/images/i_left.gif" width="20" height="23" class="scrollLeft" /></a>').after('<a class="forward" href="#"><img border=0 src="/bitrix/templates/main/images/i_right.gif" width="20" height="23" class="scrollRight" /></a>').parent().infiniteCarousel('> div');
});