﻿jQuery.iPikaChoose = {
	build : function(user_options)
	{
		var user_options;
		var defaults = {
			show_captions: true,
			slide_enabled: true,
			auto_play: true,
			show_prev_next: true,
			slide_speed: 5000,
			thumb_width: 60,
			thumb_height: 42
		};

		return $(this).each(
			function() {
				var options = $.extend(defaults, user_options);
				var $images = $(this).children('li').children('img');
				$images.fadeOut(1);
				
				var $ulist = $(this);
				$images.each(LoadImages);
				$(this).before("<div class='pika_main'></div>");
				var $main_div = $(this).prev(".pika_main");
				
				if(options.slide_enabled){
					$main_div.append("<div class='pika_play'></div>");
					var $play_div = $(this).prev(".pika_main").children(".pika_play");
					$play_div.html("<a class='pika_play_button'><img src='play.gif' alt='Play'></a><a class='pika_stop_button'><img src='play.gif' alt='Stop'></a>");
					$play_div.fadeOut(1);
					var $play_anchor = $play_div.children('a:first');
					var $stop_anchor = $play_div.children('a:last');
				}
				$main_div.append("<div class='pika_subdiv'></div>");
				var $sub_div = $main_div.children(".pika_subdiv");
				
				$sub_div.append("<img />");
				var $main_img = $sub_div.children("img");
				
				if(options.show_captions){
					$sub_div.append("<div class='pika_caption'></div>");
					var $caption_div = $sub_div.children(".pika_caption");
				}
							
				$(this).after("<div class='pika_navigation'></div>");
				var $navigation_div = $(this).next(".pika_navigation");
				$navigation_div.prepend("<a>上一张</a> :: <a>下一张</a>");
				var $previous_image_anchor = $navigation_div.children('a:first');
				var $next_image_anchor = $navigation_div.children('a:last');
				
				if(!options.show_prev_next){
					$navigation_div.css("display","none");
				}
				
				var $playing = options.auto_play;
				
				$main_img.wrap("<a></a>");
				var $main_link = $main_img.parent("a");
				
				function LoadImages(){
					$(this).bind("load", function(){

					var $w = $(this).width();
					var $h = $(this).height();
					if($w===0){$w = $(this).attr("width");}
					if($h===0){$h = $(this).attr("height");}
					var $rw = options.thumb_width/$w;
					var $rh = options.thumb_height/$h;
					
					if($rw<$rh){
						var $ratio = $rh;
						var $left = (($w*$ratio-options.thumb_width)/2)*-1;
						$left = Math.round($left);
						$(this).css({left:$left});
					}else{
						var $ratio = $rw;
						$top = 0;
						$(this).css({top:$top});
					}
					var $width = Math.round($w*$ratio);
					var $height = Math.round($h*$ratio);
					$(this).css("position","relative");
					$(this).width($width).height($height);
					var imgcss={
						width: $width,
						height: $height
					};
					$(this).css(imgcss);					
					
					$(this).fadeTo(250,0.4);	
					if($(this).hasClass('pika_first')){
						$(this).trigger("click",["auto"]);
					}
				});
				$(this).clone(true).insertAfter(this);
				
				$(this).remove();

				$images = $ulist.children('li').children('img');
				}
			function activate(){
				$images.bind("click",image_click);
				if(options.slide_enabled){
					if(options.auto_play){
						$playing = true;
						$play_anchor.hide();
						$stop_anchor.show();
					}else{
						$play_anchor.show();
						$stop_anchor.hide();
					}
				}
				
				prep_thumbs();
				$previous_image_anchor.bind("click",previous_image);
				$next_image_anchor.bind("click",next_image);	
			}
			
	
			function prep_thumbs(){
					$images.filter(":last").addClass("pika_last");
					$images.filter(":first").addClass("pika_first");
					$images.each(function(){
											var licss = {
							width: options.thumb_width+"px",
							height: options.thumb_height+"px",
							"list-style": "none",
							overflow: "hidden"
						};
						$(this).parent('li').css(licss);
						$(this).hover(
							function(){$(this).fadeTo(250,1);},
							function(){if(!$(this).hasClass("pika_selected")){$(this).fadeTo(250,0.4);}}
						);
					});

			}
			function image_click(event, how){
					if(how!="auto"){
						if(options.slide_enabled){
							$stop_anchor.hide();
							$play_anchor.show();
							$playing=false;
						}
						$sub_div.stop();
						$sub_div.dequeue();
					}
					var $image_source = $(this).attr("src");
					var $image_link = $(this).attr("ref");
					var $image_caption = $(this).attr("title");
								
					$images.filter(".pika_selected").fadeTo(250,0.4); 
					$images.filter(".pika_selected").removeClass("pika_selected"); 
					$(this).fadeTo(250,1);
					$(this).addClass("pika_selected");
					$sub_div.fadeTo(500,0.05,function(){
						$main_img.attr("src",$image_source);
						$main_link.attr("href", $image_link);
						if(options.show_captions){$caption_div.html($image_caption);}
					});
					$sub_div.fadeTo(800,1,function(){
						if($playing){
							$(this).animate({top:0},options.slide_speed, function(){
								if($playing){$next_image_anchor.trigger("click",["auto"]);}
							});
						}
					});
			}//end image_click function
			
			function next_image(event, how){
				if($images.filter(".pika_selected").hasClass("pika_last")){
					$images.filter(":first").trigger("click",how);
				}else{
					$images.filter(".pika_selected").parent('li').next('li').children('img').trigger("click",how);
				}
			}//end next image function
			
			function previous_image(event, how){
				if($images.filter(".pika_selected").hasClass("pika_first")){
					$images.filter(":last").trigger("click",how);
				}else{
					$images.filter(".pika_selected").parent('li').prev('li').children('img').trigger("click",how);
				}
			}//end previous image function
			
			function play_button(){
				$main_div.hover(
					function(){$play_div.fadeIn(400);},
					function(){$play_div.fadeOut(400);}
				);
				$play_anchor.bind("click", function(){
					$playing = true;
					$next_image_anchor.trigger("click",["auto"]);
					$(this).hide();
					$stop_anchor.show();
				});
				$stop_anchor.bind("click", function(){
					$playing = false;
					$(this).hide();
					$play_anchor.show();
				});
			}
			if(options.slide_enabled){play_button();}
			activate();

		});//end return this.each
	}//end build function
};	
jQuery.fn.PikaChoose = jQuery.iPikaChoose.build;
