(function () {
	jQuery.fn.infiniteCarousel = function () {
		function repeat(str, n) {
    		return new Array( n + 1 ).join(str);
		}

		return this.each(function () {
            // magic!
            var wrapper     = $('> div', this).css('overflow', 'hidden'),
                slider      = wrapper.find('> ul').width(9999),
                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);
                
            /* TASKS */
            
            // 1. pad the pages with empty element if required
            if(items.length % visible != 0) {
                // pad
                slider.append(repeat('<li class="empty" />', visible - (items.length % visible)));
                items = slider.find('> li');
            }
            
            // 2. create the carousel padding on left and right (cloned)
            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');
            
            // 3. reset scroll
            wrapper.scrollLeft(singleWidth * visible);
            
            // 4. paging function
            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
                }, 35000, 'linear', function () {
                    // if page == last page - then reset position
                    if(page > pages) {
                        wrapper.scrollLeft(singleWidth * visible);
                        page = 1;
                    } else if(page == 0) {
                        page = pages;
                        wrapper.scrollLeft(singleWidth * visible * pages);
                    }
                    
                    currentPage = page;
                });
            }
                        
            $(this).bind('goto', function (event, page) {
                gotoPage(page);
            });
            
            // THIS IS NEW CODE FOR THE AUTOMATIC INFINITE CAROUSEL
            $(this).bind('next', function () {
                gotoPage(currentPage + 1);
            });
        });
	};
})(jQuery);

$(document).ready(function() {
	// THIS IS NEW CODE FOR THE AUTOMATIC INFINITE CAROUSEL
    var autoscrolling = true;
    
    $('.infiniteCarousel').infiniteCarousel();

	$('.marque').mouseover(function () {
        autoscrolling = false;
    }).mouseout(function () {
        autoscrolling = true;
    });
    
    setInterval(function () {
        if(autoscrolling) {
            $('.infiniteCarousel').trigger('next');
        }
    }, 10);
    
    $('#slideshow-big').cycle({
	    fx     : 'fade', 
		pager  : '.controller',
		before : function() { 
			var slides = $('.slideshow-big > div').size();
			var index  = $('#slideshow-big div:visible').index();
				index  = ((index+1) < slides) ? index+1: 0;
			
			$('#bg').cycle(index);
		}
	});
    
    $('#bg').cycle({
	    fx      : 'fade', 
		timeout : 0
	});
});
