/**
 * Image gallery
 * Version: 23 Nov 2009
 * Depends on jQuery 1.3.2
 */
(function(){
	jQuery.fn.photoGallery = function(config){

		// Config
		config = jQuery.extend({
			selected: 0,
			speed: 300,
			events: 'click',
			position: 'TOP'
		},config);

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

		var classNameThumbnail = "imagegallery-thumbnail";
		var classNameThumbnailSelected = "imagegallery-thumbnail-selected";

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

		// Constructor
		var constructor = function(){
			// Search inner elements
			jQuery('ul > li', target).map(function(i){

				// Create temporary array
				var temp = new Array();
				// Set in array's index
				temp["src"] = jQuery("a", this).attr("href");
				temp["alt"] = jQuery("a img", this).attr("alt");
				temp["caps"] = jQuery("a", this).attr("title");
				if(jQuery("a img", this).attr("alt")) temp["caps"] = jQuery("a img", this).attr("alt");
				if(jQuery('span.caption', this).html()) temp["caps"] = jQuery("span.caption", this).html();
				// Images preload
				jQuery("<img />").attr({
					src: temp["src"]
				}).appendTo(this).css({display:"none"});

				// Append temporary array to galleryItems
				galleryItems.push(temp);

				// Reset to list's inner
				jQuery("a", this).attr({href:"javascript:void(0);", target:"", rel:"", title:""});
				jQuery("span.caption", this).css({display:"none"});

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

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

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

			// Image gallery positioning
			var galleryStage = '<div class="imagegallery-stage"><img /><p class="imagegallery-caption" /></div>';
			if(position.toUpperCase() == 'BOTTOM'){
				jQuery(target).append('<div class="imagegallery-stage"><img /><p class="imagegallery-caption" /></div>');
			}else{
				jQuery(target).prepend('<div class="imagegallery-stage"><img /><p class="imagegallery-caption" /></div>');
			}

			// Image gallery initial setting
			if(galleryItems.length > selected) imageGalleryChange(selected);
				else imageGalleryChange(0);
		}
		constructor();

		// Image gallery select
		var imageGallerySelect = function(num){
			// If arguments number and current number
			if(currentNum != num){
				// Remove the selected name list elements
				jQuery("ul>li", target).map(function(i){ jQuery(this).removeClass(classNameThumbnailSelected); });
				// Append the selected name to list a element
				jQuery("ul>li", target).eq(num).addClass(classNameThumbnailSelected);
				// Imagegallery stage blink
				jQuery(".imagegallery-stage", target).fadeOut(speed, function(){
					imageGalleryChange(num);
					jQuery(this).fadeIn(speed);
				});
			}
			currentNum = num;
		}

		// Image gallery Change over image
		function imageGalleryChange(num){
			if(galleryItems.length){
				
				// Change over image
				// jQuery(".imagegallery-stage", target).empty();
				// jQuery(".imagegallery-stage", target).wrapInner(galleryItems[num]);
				jQuery(".imagegallery-stage img", target).attr({
					src:galleryItems[num]["src"],
					title:galleryItems[num]["alt"],
					alt:galleryItems[num]["alt"]
				});
				// Append and remove the caption to image gallery
				if(galleryItems[num]["caps"]){
					jQuery('.imagegallery-caption', target).css({display:"block"}).html(galleryItems[num]["caps"]);
				}else{
					jQuery('.imagegallery-caption', target).css({display:"none"}).empty();
				}
			}
		}
	}
})(jQuery);