/**
 * jQuery Shuffle Bannar plugin
 * Copyright (C) cubdesign | http://www.cubdesign.com/
 * Dual licensed under the MIT <http://www.opensource.org/licenses/mit-license.php>
 * and GPL <http://www.opensource.org/licenses/gpl-license.php> licenses.
 * Date: 2010-02-26
 * @author Takeo Tamura
 * @version 0.5.0
 */

(function($) {
    var name_space = 'shuffleBannar';
    $.fn[name_space] = function(options) {
        var elements = this;

        var settings = $.extend({
            'bannarList' : [],
			'interval': 10000,
			'fadeOutTime' : 1000,
			'fadeInTime' : 1000
        }, options);

		
		var addData = function (v) {
            $.data(v, name_space, {});
            return $(v);
        };


		/*
		* シャッフルする
		*/
		var shuffle = function (targetArray)  {
			var i  = targetArray.length;
			 while (i) {
				var j  = Math.floor(Math.random() * i);
				var x  = targetArray[--i];
				targetArray[i] = targetArray[j];
				targetArray[j] = x; 
			 }
			return targetArray; 
		};
	
		//キャッシュ防止用
		var nocache = new Date().getTime();
		
		
		var bannarList = settings.bannarList;
		//シャッフル
		bannarList = shuffle(settings.bannarList);
		
		//今表示しているバナーの番号
		var currentBannarNumber = -1;
		
		//インターバルID
		var iId = -1;

		/*
		* バナーを変更する
		*/
		var changeBannarImage = function ()  {
			clearInterval(iId);
			 $("#shuffleBannar img:first").fadeOut(settings.fadeOutTime,function(){
				$(this).remove();
				loadBannarImage();
			 });
		
		};
		/*
		* バナーを読み込む
		*/
		var loadBannarImage = function ()  {
			currentBannarNumber++;
			
			if( currentBannarNumber == bannarList.length ){
				currentBannarNumber = 0;
			}
			
			var targetBannar = bannarList[ currentBannarNumber ];
			
			
			
			var imageURL = "" + targetBannar.image + "?nocache="+nocache;
			var linkURL = "" + targetBannar.link;
		
			var img = new Image();
		
			 $(img).load(function(){
							$(this).hide();
							$("#shuffleBannar").append(this);
							$(this).fadeIn(settings.fadeInTime);
							$(this).click(function(){location.href=linkURL;});
							iId = setInterval(changeBannarImage,settings.interval)
						}).attr('src', imageURL)
	
		};

        elements.each(function() {
			addData( this );
			loadBannarImage();
        });

        //method chain
        return this;
    };
})(jQuery);
