/**
 * @title "Ankama Japan Carousel"
 * @version "0.1 - 2010/3/25"
 *
 * @author "Matthieu Guillemot"
 * @url "http://www.ankama.jp/"
 *
 * Copyright 2010, Ankama Japan.
 */
(function($) {
	$.fn.carousel = function(params) {
		// Check for required elements
	    if (this.length != 1) {
	        return;
	    }

		var carousel = this;
		var pages = params.pages;

		// Create container for incoming scroll image and preload 2nd image
		$('.image-container', carousel).append('<img class="image-right" src="' + pages[0].bigImg + '" alt="' + pages[0].bigText + '" width="997" height="354">');

		// Preload other images (3rd++)
		for (var i = 2; i < pages.length; i++) {
		    preloadImages(pages[i].bigImg);
		}

		var animating = false;
		var nodes = $('ul li', carousel);
		for (i = 0; i < nodes.length; i++) {
		    var node = nodes[i];
		    var page = pages[i];
		    page.li = node;
		    page.img = $('img', node)[0];
		    page.url = $('a', node).attr('href');
		}

		function scroll(found) {
		    if (animating) {
		        return;
		    }

		    animating = true;
		    var clickedPage = pages[found];
		    var followers = [];
		    for (var i = found + 1; i < pages.length; i++) {
		        var page = pages[i];
		        followers.push(page.img);
		    }

		    $('.image-right', carousel).attr('src', clickedPage.bigImg);

		    $(clickedPage.img).animate({
		        left: '-=182px',
		        opacity: '0'
		    }, 750, 'easeInOutExpo');

		    $(followers).animate({
		        top: '-=115px'
		    }, 750, 'easeInOutExpo');

		    $('.text', carousel).fadeOut(375, function() {
		        $('a', this).attr('href', clickedPage.url);
		        $('h2', this).text(clickedPage.bigText);
		        $('h3', this).text(clickedPage.smallText);
		    }).fadeIn(375);

		    $('.image-container', carousel).animate({
		        left: '-=997px'
		    }, 750, 'easeInOutExpo', function() {
		        for (var i = 0; i < pages.length; i++) {
		            var page = pages[i];
		            $(page.img).css('top', '0px')
		                        .css('left', '0px')
		                        .css('opacity', '1');
		        }

		        var ol = clickedPage.li.parentNode;
		        ol.removeChild(clickedPage.li);
		        ol.appendChild(clickedPage.li);
		        pages.remove(found);
		        pages.push(clickedPage);

		        var currentImage = $('.image-right', carousel).attr('src');
		        $('.image-left', carousel).attr('src', currentImage);
		        $('.image-container', carousel).css('left', '0px');

		        animating = false;
		    });
		}

		$('ul a', carousel).each(function(i, node) {
		    var parent = this.parentNode;
		    var img = $('img', node)[0];
		    parent.removeChild(this);
		    parent.appendChild(img);
		});

		$('ul img', carousel).click(function(e) {
		    for (var i = 0; i < pages.length; i++) {
		        var page = pages[i];
		        if (page.img == this) {
		            reinitAutoScroll();
		            scroll(i);
		            return;
		        }
		    }
		});

		function reinitAutoScroll() {
		    carousel.stopTime('firstAuto').stopTime('auto').oneTime(params.initialAutoTime, 'firstAuto', function() {
		        carousel.everyTime(params.autoTime, 'auto', function() {
		            scroll(0);
		        });
		    });
		}

		reinitAutoScroll();

	};
})(jQuery);
