/**
 * 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: "mouseover",
			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("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("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); });
				// 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);