var liqwd = window.liqwd || {};

liqwd.press = (function($){
	
	function init() {
		initIntro();
		initCarousel();
		initFacybox();
		
		$('body').bind('content-resize', initCarousel);
	}
	
	function initIntro() {
		setTimeout(function(){
			$('#press-intro').fadeOut(1500);
		}, 1500);
	}
	
	function initCarousel() {
		$('#press-carousel-wrap').infiniteCarousel();
	}

	function initFacybox() {
		$('#press-carousel > li').click(function(ev){
			var imgListId = $(this).attr('rel');
			if (imgListId) {
				if($('#'+imgListId).is('a')) {
					window.open($('#'+imgListId).attr('href'));
				} else {
					var images = [];
					$('#' + imgListId + ' img').each(function(){
						images.push($(this).attr('src'));
					});
					$.facybox({
						images: images
					});
				}
				
			}
			return false;
		});
	}
	
	return {
		init: init
	};
})(jQuery);

jQuery(document).ready(liqwd.press.init);

jQuery.fn.infiniteCarousel = function () {

    function repeat(str, num) {
        return new Array( num + 1 ).join( str );
    }
  
    return this.each(function () {
		var inited = $(this).data('inited');
		
		if(inited) {
			$('li.cloned', $(this)).remove();
			$('li', $(this)).unbind('mouseenter').unbind('mouseleave');
		}
		
        var $wrapper = $(this).css('overflow', 'hidden'),
            $slider = $wrapper.find('> ul'),
            $items = $slider.find('> li'),
            $single = $items.filter(':first'),
            
            singleWidth = $single.outerWidth()+parseInt($single.css('margin-left')), 
            visible = Math.floor($wrapper.innerWidth() / singleWidth), // note: doesn't include padding or border
            currentPage = 1,
            pages = Math.ceil($items.length / visible);            

		
		// 1. Pad so that 'visible' number will always be seen, otherwise create empty items
		if (($items.length % visible) != 0) {
			$slider.append(repeat('<li class="empty" />', visible - ($items.length % visible)));
			$items = $slider.find('> li');
		}
		
		// 2. Top and tail the list with 'visible' number of items, top has the last section, and tail has the first
		$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'); // reselect
		
		$items.hover(
			function() { $(this).addClass('hover'); },
			function() { $(this).removeClass('hover'); }
		);
		
        // 3. Set the left position to the first 'real' item
        $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
            }, 500, function () {
                if (page == 0) {
                    $wrapper.scrollLeft(singleWidth * visible * pages);
                    page = pages;
                } else if (page > pages) {
                    $wrapper.scrollLeft(singleWidth * visible);
                    // reset back to start position
                    page = 1;
                } 

                currentPage = page;
            });                
            
            return false;
        }
		
		if (inited) {
			$('#press-carousel-prev').unbind();
			$('#press-carousel-next').unbind();
		}
		// 5. Bind to the forward and back buttons
		$('#press-carousel-prev').click(function(){
			return gotoPage(currentPage - 1);
		});
		$('#press-carousel-next').click(function(){
			return gotoPage(currentPage + 1);
		});
		
		var inited = $(this).data('inited', true);
    });  
};

