/*

	2009.03.06
	SlideView Component
	developled by Robin at ELFVision and PageTalks
	used mainly in the WUSESKY Project
	
	Visit Robin's:
	http://www.elfvision.com/
	http://pagetalks.com/
	
	and See our Project
	http://www.wusesky.com/

*/

jQuery.iSlideView = {
	build: function(user_options) {
		var defaults = {
			thumbPrefix: "thumb_",
			slideBy : 1,
			speed: 500
		};
		return jQuery(this).each(function() {
			var options = jQuery.extend(defaults, user_options);
			var config;
		        var drawNextSlide = 1;	
			var x =jQuery(this);
			var list  = x.find(".slideView");
			var links = list.find("a");
			var images = list.find("img");
		
			var stopSlideShow = false;	
			//Prepare DOM
			x.prepend("<span class='desc'></span><span class='arrowL arrow'><</span><div class='wrap'><ul class='thumbList'></ul></div><span class='arrowR arrow'>></span>");
			var thumbList = x.find(".thumbList");
			var i=0;
			images.each(function() {
				var l = jQuery(this);
				thumbList.append("<li>"+
					"<a href='#' id='"+ (i+1) +"'><img src='"+getThumbName(l.attr("src"),options.thumbPrefix)+"' alt='"+l.attr("alt")+"' /></a></li>");
				i++;
			});
			
			//Force to hide overflow
			x.css("overflow","hidden");
			
			//Attach events
			var arrow = x.find(".arrow");
			var back = x.find(".arrowL");
			var next = x.find(".arrowR");
			var desc = x.find(".desc");
			var liW = thumbList.find("li").width();
			var xW = x.width();
			var xH = x.height();
			var thumbW = thumbList.width(); //458px
			var li = thumbList.find("li");
			var tLink = thumbList.find("a");
			var totalW = li.length * liW;
			var xTotalH = li.length * xH;
			
			back.hide();
			x.find(".wrap").fadeTo("fast",0.6);
			
			desc.text(images.eq(0).attr("alt")).fadeTo("fast",0.6).hover(function() {
				jQuery(this).fadeTo("fast",0.9);
			},function() {
				jQuery(this).fadeTo("fast",0.6);
			});
			
			list.css("height",xTotalH);
			thumbList.css( "width", totalW );
			
			var Pointer = 0;
			var total = li.length;
			
			$.timer(5000, function (timer) {
  				if (!stopSlideShow) {
					if (Pointer != i-1) {
						var offsetL =  parseInt(thumbList.css("left")) - liW * options.slideBy;
                                		thumbList.animate({
                                        	left: offsetL + "px"
                                		},options.speed,function() {
                                        	if(Pointer>=total-1) {
                                                	next.hide();
                                        	}
                                        	desc.text(images.eq(Pointer).attr("alt"));
                                        	var offsetT = - (xH * Pointer);
                                        	list.animate({
                                                	top: offsetT
                                        	},options.speed);
                                		});
                                		Pointer++;

                                		if(Pointer!=0) {
                                        		back.show().fadeTo("fast",0.6);
	                                	}
						timer.reset(5000);
					} else {
						Pointer = 0;
						var offsetL =  parseInt(thumbList.css("left")) + liW * options.slideBy;
		                                thumbList.animate({
	                                        left: offsetL + "px"
        		                        },options.speed,function() {
                        	                if(Pointer==0) {
                                	                back.hide();
                                        	        next.show().fadeTo("fast",0.6);
                                        	}
                                        	desc.text(images.eq(Pointer).attr("alt"));
	                                       var offsetT = - (xH * Pointer);
	                                       list.animate({
	                                               top: offsetT
        	                               },options.speed);
	
        		                      });

                        		     //Pointer--;
                                                if(Pointer!=0) {
                                                        back.show().fadeTo("fast",0.6);
                                                }
                                                timer.reset(5000);
					}
				} else {
					timer.stop();
				}
  			});

	
			next.click(function() {
				var offsetL =  parseInt(thumbList.css("left")) - liW * options.slideBy;

				thumbList.animate({
					left: offsetL + "px"
				},options.speed,function() {
					if(Pointer>=total-1) {
						next.hide();
					}
					desc.text(images.eq(Pointer).attr("alt"));
					var offsetT = - (xH * Pointer);
					list.animate({
						top: offsetT
					},options.speed);
				});
				Pointer++;
				
				if(Pointer!=0) {
					back.show().fadeTo("fast",0.6);
				}
				stopSlideShow = true;
			});
			
			back.click(function() {
				var offsetL =  parseInt(thumbList.css("left")) + liW * options.slideBy;
				thumbList.animate({
					left: offsetL + "px"
				},options.speed,function() {
					if(Pointer==0) {
						back.hide();
						next.show().fadeTo("fast",0.6);
					}
					desc.text(images.eq(Pointer).attr("alt"));
					var offsetT = - (xH * Pointer);
					list.animate({
						top: offsetT
					},options.speed);
					
				});
				
				Pointer--;
				stopSlideShow = true;
			});
			
			tLink.hover(function() {
				var id = $(this).attr("id")-1;				
				var offsetT = - (xH * id);
				desc.text(images.eq(id).attr("alt"));
					list.animate({
						top: offsetT
					},options.speed);
			},function() {
				var offsetT = - (xH * Pointer);
				desc.text(images.eq(Pointer).attr("alt"));
				list.animate({
					top: offsetT
				},options.speed);
			});
			
			thumbList.hover(function() {
				x.find(".wrap").fadeTo("fast",0.8);
			},
			function() {
				x.find(".wrap").fadeTo("fast",0.6);
			});
			
			arrow.fadeTo("fast",0.6).hover(function() {
				jQuery(this).fadeTo("fast",0.9);
			},
			function() {
				jQuery(this).fadeTo("fast",0.6);
			}
			);
			
		});
	}
}

jQuery.fn.slideView = jQuery.iSlideView.build;

//Helping functions

function getThumbName(n,prefix) {
	var arr = n.split("/");
	var tl = n.length;
	var w = arr[arr.length-1].length;
	return n.substr(0,tl-w-1)+"/"+prefix+arr[arr.length-1];
}

function focusTo(pointer,list,height,speed,desc,text) {
	//alert(pointer);
	var id = pointer - 1;
	var offsetT = - (height * id);
	list.animate({
		top: offsetT
	},speed);
	desc.text(text);
}
