/**
 * Photo gallery
 * Version: 10 Aug 2009
 * Depends on jQuery 1.3.2
 */
(function(){
	jQuery.fn.photoGallery = function(config){

		// Extends
		config = jQuery.extend({
			selected: 0,
			speed: 300,
			events: "click",
			position: "bottom"
		},config);

		// Properties
		var target   = this;
		var selected = config.selected;
		var speed    = config.speed;
		var events   = config.events;
		var position = config.position;

		var classNameStage = "photogallery-stage";
		var classNameThumbnail = "photogallery-thumbnail";
		var classNameThumbnailSelected = "photogallery-thumbnail-selected";

		var currentNum = selected;
		var galleryItems = new Array();

		// Constructor
		var constructor = function(){

			// 画像プリロード用ブロック
			jQuery(target).append(jQuery('<div id="preloader" style="display:none;"></div>'));

			jQuery("ul li",target).map(function(i){

				// 一時配列を生成
				var temp = new Array();
				temp["href"] = jQuery("a",this).attr("href");
				if(jQuery("a",this).attr("target") == "_blank") temp["external"] = true;
					else if(jQuery("a",this).attr("rel") == "external") temp["external"] = true;
					else temp["external"] = false;
				temp["alt"] = jQuery("img",this).attr("alt");
				temp["name"] = jQuery("img",this).attr("name");
				galleryItems.push(temp);

				// 画像をプリロード
				jQuery("#preloader").append(jQuery("<img src='" + temp['name'] + "' />"));

				// リンクをリセット
				jQuery("a",this).attr({href:"javascript:void(0);",target:"",rel:""});

				if(events == "click") jQuery(this).click(function(){ photoGallerySelect(i); });
					// else jQuery(this).mouseover(function(){ photoGallerySelect(i); });
				if(events == "mouseover") jQuery(this).mouseover(function(){ photoGallerySelect(i); });

				// Add class name on regular thumbnails.
				jQuery(this).addClass(classNameThumbnail);

				// Add class name on selected thumbnail.
				if(i == selected) jQuery(this).addClass(classNameThumbnailSelected);
			});

			if(position == "top") jQuery(target).append(jQuery("<div class="+classNameStage+"><a><img /></a></div>"));
				else jQuery(target).prepend(jQuery("<div class="+classNameStage+"><a><img /></a></div>"));

			photoGalleryChange(selected);
		}
		constructor();

		// Photo gallery select
		var photoGallerySelect = function(num){
			if(num != currentNum){
				// リストの選択済みクラス名を削除
				jQuery("ul li",target).map(function(i){
					jQuery(this).removeClass(classNameThumbnailSelected);
				});
				// リストの選択された要素にクラス名を追加
				jQuery("ul li",target).eq(num).addClass(classNameThumbnailSelected);
				jQuery("."+classNameStage,target).fadeOut(speed,function(){
					photoGalleryChange(num);
					jQuery(this).fadeIn(speed);
				});
			}
			currentNum = num;
		}

		// Photo gallery change
		function photoGalleryChange(num){
			// 画像を変更
			jQuery("."+classNameStage+" img",target).attr({
				src:galleryItems[num]["name"],
				title:galleryItems[num]["alt"],
				alt:galleryItems[num]["alt"]
			});
			// リンクを指定
			if(galleryItems[num]["href"]){
				if(galleryItems[num]["external"]){
					jQuery("."+classNameStage+" a",target).attr({href:galleryItems[num]["href"],target:"_blank"});
				}else{
					jQuery("."+classNameStage+" a",target).attr({href:galleryItems[num]["href"],target:""});
				}
			}else{
				jQuery("."+classNameStage+" a",target).attr({href:"javascript:void(0);",target:""});
			}
		}
	}
})(jQuery);
