/* javascript doc
 * Le Yang x-team.com
 * 2009/09/25
 */


$.fn.infiniteCarousel = function (options) {
		
		var defaults = {
			autoRun: false  // auto running
		};
		var options = $.extend(defaults, options);

    function repeat(str, num) {
        return new Array( num + 1 ).join( str );
    }
  	
    return this.each(function () {
    		var obj = this;
    		var arrayInterval = new Array();
        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 = Math.ceil($items.length / visible),
            
            currentPage_holder = $('p.pagination', this).find('span:eq(0)'),
            totalPage_holder = $('p.pagination', this).find('span:eq(1)');
            totalPage_holder.html(pages);

        // 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
        
        // 3. Set the left position to the first 'real' item
        $wrapper.scrollLeft(singleWidth * visible);
        
        // 4. paging function
        function gotoPage(page) {
        		if (options.autoRun){
        			clearInterval(arrayInterval[currentPage]);
        		}
            var dir = page < currentPage ? -1 : 1,
                n = Math.abs(currentPage - page),
                left = singleWidth * dir * visible * n;
            
            $wrapper.filter(':not(:animated)').animate({
                scrollLeft : '+=' + left
            }, 800, 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;
                currentPage_holder.html(currentPage);
                
                $('ul.pagination li a', obj).each(function(){
                	$(this).removeClass('current');
                	if (parseInt($(this).html()) == currentPage){
                		$(this).addClass('current');
                	}
                });
                
                if (options.autoRun){
									arrayInterval[currentPage] = setInterval(function(){
					        	return gotoPage(currentPage + 1);
					        	
					        }, 3000);
					      }
            });                
            

            return false;
        }
        
        // 5. Bind to the forward and back buttons
        $('.prev', this).click(function () {
            return gotoPage(currentPage - 1);
            
        });
        
        $('.next', this).click(function () {
        		
            return gotoPage(currentPage + 1);
        });
        
        // create a public interface to move to a specific page
        $(this).bind('goto', function (event, page) {
            gotoPage(page);
        });
        
        
        // automatical running
				if (options.autoRun){
					arrayInterval[currentPage] = setInterval(function(){
	        	return gotoPage(currentPage + 1);
	        	
	        }, 3000);
				}

    });  
};


/**
 * stencyl
 */
var stencyl = function($){
	
	
	// hover event
	function hoverToggleEvent(obj){
		obj.each(function(){
			if (!$(this).hasClass('search')){
					$(this).hover(function(){
							$(this).addClass('hover');
					}, function(){
							$(this).removeClass('hover');
					})
			}
		});
	}

	
	
	return { 
		setup : function(){
			hoverToggleEvent($('.header-navigation li'));
			hoverToggleEvent($('#navigation li'));
			hoverToggleEvent($('#tabs li'));
			hoverToggleEvent($('.game-data li'));
			hoverToggleEvent($('.dimout > .subbar > ul > li'));
			hoverToggleEvent($('.toolbar ul li'));
			hoverToggleEvent($('.hidebar'));
		
		}

	}
}(jQuery);


jQuery(document).ready(function() {
	stencyl.setup();
	if ($('.carousel').length > 0){
		$('.carousel').infiniteCarousel();
	}
	if ($('.slideshow').length > 0){
		$('.slideshow').infiniteCarousel({
			autoRun: true
		});
	}
	
	//dimout effect for IE6
	if ($.browser.version == '6.0'){
		$('.dimout').css('top', document.documentElement.clientHeight - 52);
		var top = parseInt($('.dimout').css('top'));
		  $(window).scroll(function () { 
				$('.dimout').css('top',  top + parseInt(document.documentElement.scrollTop) )

    	});
	}
	
	
	
});


