/*
fcSlider-versão beta 1.00 (Criado:21/11/2010)
Copyright © 2010 Manoel Messias Santos Neto. All rights reserved.
Aracaju-Sergipe-Brasil
-----------------------------------------------------------------
O uso deste software é 100% free para uso pessoal e comercial,
desde que mantidas as informações de autoria acima.
-----------------------------------------------------------------
Para comunicar erros,sugestões,correções e críticas:
manoel@formaecor.com.br | www.formaecor.com.br
*/
 
(function($)
{
	$.fn.fcSlider=function(opt)
	{
		var defaults=
		{
			btPrev:null,
			btNext:null,
			btPause:null,
			btPlay:null,
			Buttons:null,// Work if Visibles=1
			ActiveButton:null,
			Subtitle:null,
			SubtitleOpacity:.8,
			SubtitleSpeed:400,
			First:1,
			Speed:800,
			TimeOut:4000,
			Effect:0,// 0:Fade,1:Slide,2:Courtain,3:Wave,4:Zipper
			EffectFirst:false,
			Visibles:1,
			Circular:true,
			Auto:true,
			Resize:0,
			TilesColor:'#fff',
			Tiles:10,
			Rate:0.75,
			AutoRate:true,
			Vertical:false,// Work only if Effect:1
			PreFunc:null
		};
		var opt=$.extend(defaults,opt);

		return this.each(function()
		{
			var $this=this,
				obj=$('ul',this),
			    nSlides=$("li",obj).length;

			if(opt.Effect!=1)
			{
				opt.Vertical=false;
			}
			
			if(opt.Vertical)
			{
				var nHeightObj=obj.height(),
				    nHeight=$("li:first",obj).outerHeight(true),	
				    nOutHeight=nHeight-$("li:first",obj).height(),
				    nOutHeightTotal=nOutHeight*opt.Visibles;				
			  	if(opt.Resize==0)
				{
					nHeight=(nHeightObj-nOutHeightTotal)/opt.Visibles;
					$("li",obj).css({height:nHeight});
					nHeight+=nOutHeight;
				}
				else if(opt.Resize==1)
				{
					obj.css({height:nHeight*opt.Visibles});
					$("li",obj).css({height:nHeight-nOutHeight});
				}
				var nWidth=obj.width();
				nOutWidth=$("li:first",obj).outerWidth(true)-$("li:first",obj).width();
				if(opt.AutoRate)
				{
					nWidth=(nHeight-nOutHeight)/opt.Rate;
					$("li",obj).css({width:nWidth});
					nWidth+=nOutWidth;
					$(obj).css({width:nWidth});
				}
				else
				{
					$("li",obj).css({width:nWidth-nOutWidth});
				}
			}
			else
			{
				var nWidthObj=obj.width(),
				    nWidth=$("li:first",obj).outerWidth(true),
					nOutWidth=nWidth-$("li:first",obj).width(),
					nOutWidthTotal=nOutWidth*opt.Visibles;
			  	if(opt.Resize==0)
				{
					nWidth=(nWidthObj-nOutWidthTotal)/opt.Visibles;
					$("li",obj).css({width:nWidth});
					nWidth+=nOutWidth;
				}
				else if(opt.Resize==1)
				{
					obj.css({width:nWidth*opt.Visibles});
					$("li",obj).css({width:nWidth-nOutWidth});
				}
				var nHeight=obj.height();
				nOutHeight=$("li:first",obj).outerHeight(true)-$("li:first",obj).height();
				if(opt.AutoRate)
				{
					nHeight=(nWidth-nOutWidth)*opt.Rate;
					$("li",obj).css({height:nHeight});
					nHeight+=nOutHeight;
					$(obj).css({height:nHeight});
				}
				else
				{
					$("li",obj).css({height:nHeight-nOutHeight});
				}
			}
			var nInterval;
			if(opt.First<1)
			{
				opt.First=1;
			}
			else if(opt.First>nSlides)
			{
				opt.First=nSlides;
			}			
			var nActual=opt.First,
			    nPrev,
				nWidthTile=(nWidthObj/opt.Tiles)+1;

			obj.css({margin:"0px",padding:"0px",overflow:"hidden",position:"relative","list-style":"none"});

			htmlTile="";
			if(opt.Effect==1)
			{
				$("li",obj).wrapAll("<div id='wrapSlides' style='position:absolute;left:0px;top:0px;height:"+($(obj).height()*2)+"px;width:"+($(obj).width()*2)+"px;'></div>");
			}			
			else if(opt.Effect==2)
			{
				for(i=1;i<=opt.Tiles;i++)
				{
					nLeftTile=(i-1)*(100/opt.Tiles);
					htmlTile+='<div id="fcSliderTile'+i+'" style="background:'+opt.TilesColor+';z-index:100;position:absolute;top:0px;left:'+nLeftTile+'%;width:0px;height:100%;"></div>';
				}
			}
			else if(opt.Effect==3 || opt.Effect==4)
			{
				for(i=1;i<=opt.Tiles;i++)
				{
					nLeftTile=(i-1)*(100/opt.Tiles);
					htmlTile+='<div id="fcSliderTile'+i+'" style="background:'+opt.TilesColor+';z-index:100;position:absolute;top:-'+nHeight+'px;left:'+nLeftTile+'%;width:'+nWidthTile+'px;height:'+nHeight+'px;"></div>';
				}
			}
			jQuery(htmlTile).appendTo(obj);		
			
			if(opt.Effect==3 || opt.Effect==4)
			{
			   $("[id^='fcSliderTile']",obj).css({opacity:.1});
			}

			$("li",obj).css({overflow:"hidden",position:"absolute",top:"0px",'z-index':'0'}).hide();
			$(opt.btNext+','+opt.btPrev+','+opt.btPause+','+opt.btPlay+','+opt.Buttons,$this).css("cursor","pointer");
			
			if(opt.Auto)
			{
				$(opt.btPlay,$this).hide();
			}
			else
			{
				$(opt.btPause,$this).hide();
			}

			if($(opt.Subtitle,obj))
			{
				$(opt.Subtitle,obj).css({overflow:'hidden',position:'absolute',width:'100%','z-index':'110',left:'0',opacity:opt.SubtitleOpacity});
				var nHeightSubtitle=$(opt.Subtitle+':first',obj).height();
				$(opt.Subtitle,obj).css({bottom:-nHeightSubtitle,height:nHeightSubtitle});
				$(opt.Subtitle,obj).wrapInner("<div style='padding:12px;'></div>");
			}

			if(opt.StartEffect)
			{
				showSlides("N");
			}
			else
			{
				Aux=opt.Speed;
				opt.Speed=0;
				buttonOn();
				showSlides("N");
				opt.Speed=Aux;
			}

			$(opt.btNext,$this).click(moveNext);
			$(opt.btPrev,$this).click(movePrev);
			$(opt.btPause,$this).click(Pause);
			$(opt.btPlay,$this).click(Play);
			if(opt.Visibles==1)
			{
				$(opt.Buttons,$this).click(function()
				{
					nPrev=nActual;
					buttonOff();
					nActual=$(opt.Buttons,$this).index(this)+1;
					buttonOn();
					showSlides("B");
					return(false);
				});				
			}
			else
			{
				$(opt.Buttons,$this).hide();
			}

			function showSlides(cDirection)
			{
				clearInterval(nInterval);
                if(opt.PreFuncition)
				{
                    o.beforeStart.call(this, curr );
				}				
				if(opt.Effect==0)
				{
					if($(opt.Subtitle,obj))
					{
						$(opt.Subtitle,obj).animate({bottom:-nHeightSubtitle},100);
					}					
					if (opt.Visibles>1)
					{
						$("li",obj).attr("alt","").hide();
					}
					else
					{
						$("li",obj).attr("alt","").fadeOut(opt.Speed);
					}
					positionSlides(cDirection);
					$("[alt='li-visible']",obj).fadeIn(opt.Speed,function() {showSubtitle();});
				}
				else if(opt.Effect==1)
				{
					if($(opt.Subtitle,obj))
					{
						$(opt.Subtitle,obj).animate({bottom:-nHeightSubtitle},100);
					}					
					$("li",obj).hide();
					if(opt.Vertical)
					{
						if(cDirection=="N" || cDirection=="B")
						{
							$("#wrapSlides",obj).css({top:0});											
							positionSlides(cDirection);
							$("#wrapSlides",obj).stop().animate({top:-nHeight},opt.Speed,function() {showSubtitle();});
						}
						else if(cDirection=="P")
						{
							$("#wrapSlides",obj).css({top:-nHeight});
							positionSlides(cDirection);
							$("#wrapSlides",obj).stop().animate({top:0},opt.Speed,function() {showSubtitle();});
						}
					}
					else
					{
						if(cDirection=="N" || cDirection=="B")
						{
							$("#wrapSlides",obj).css({left:0});
							positionSlides(cDirection);
							$("#wrapSlides",obj).stop().animate({left:-nWidth},opt.Speed,function() {showSubtitle();});
						}
						else if(cDirection=="P")
						{
							$("#wrapSlides",obj).css({left:-nWidth});
							positionSlides(cDirection);
							$("#wrapSlides",obj).stop().animate({left:0},opt.Speed,function() {showSubtitle();});
						}						
					}
				}				
				else if(opt.Effect==2)
				{
					$("[id^='fcSliderTile']",obj).css({opacity:1});
					for(i=1;i<opt.Tiles;i++)
					{
						$("#fcSliderTile"+i,obj).animate({width:nWidthTile+'px'},opt.Speed*.2);
					}
					$("#fcSliderTile"+opt.Tiles,obj).animate({width:nWidthTile+'px'},{duration:opt.Speed*.2,complete:function()
					{
						$("li",obj).hide();
						positionSlides(cDirection);
						showSubtitle();
						$("[id^='fcSliderTile']",obj).animate({width:0,opacity:0},{duration:opt.Speed*.8});
					}});
				}
				else if(opt.Effect==3)
				{
					for(i=1;i<opt.Tiles;i++)
					{
						$("#fcSliderTile"+i,obj).animate({top:0,opacity:1},opt.Speed*(i/opt.Tiles)*.5);
					}
					$("#fcSliderTile"+opt.Tiles,obj).animate({top:0,opacity:1},
					{
						duration:opt.Speed*(i/opt.Tiles)*.5,
						complete:function()
						{
							$("li",obj).hide();
							positionSlides(cDirection);
							showSubtitle();
							for(j=1;j<opt.Tiles;j++)
							{
								$("#fcSliderTile"+j,obj).animate({top:'100%',opacity:.1},{duration:opt.Speed*(j/opt.Tiles)*.5});
							}
							$("#fcSliderTile"+opt.Tiles,obj).animate({top:'100%',opacity:.1},{duration:opt.Speed*(j/opt.Tiles)*.5});
						}
					});					
				}
				else if(opt.Effect==4)
				{
					$("[id^='fcSliderTile']:odd",obj).css({top:-nHeight});
					$("[id^='fcSliderTile']:even",obj).css({top:+nHeight});
					for(i=1;i<opt.Tiles;i++)
					{
						$("#fcSliderTile"+i,obj).animate({top:0,opacity:1},opt.Speed*.35);
					}
					$("#fcSliderTile"+opt.Tiles,obj).animate({top:0,opacity:1},
					{
						duration:opt.Speed*.35,
						complete:function()
						{
							$("li",obj).hide();
							positionSlides(cDirection);
							showSubtitle();
							$("[id^='fcSliderTile']:odd",obj).animate({top:+nHeight,opacity:.1},{duration:opt.Speed*.65});
							$("[id^='fcSliderTile']:even",obj).animate({top:-nHeight,opacity:.1},{duration:opt.Speed*.65});							
						}
					});					
				}
				if(opt.Auto)
				{
					nInterval=setInterval(function() {movePrev();},opt.TimeOut);			
				}
			}

			function positionSlides(cDirection)
			{
				posVisibles=opt.Visibles;
				if(opt.Effect==1)
				{
					nActualVis=nActual;
					if(cDirection=="N" || cDirection=="B")
					{
						nPrevVis=nActualVis-1;
						if(nPrevVis<1)
						{
							nPrevVis=nSlides;
						}
						if(opt.Vertical)
						{
							$("li",obj).eq(nPrevVis-1).css({'top':0,'z-index':'2'}).show();
							nOffset=nHeight;
						}
						else
						{
							$("li",obj).eq(nPrevVis-1).css({'left':0,'z-index':'2'}).show();
							nOffset=nWidth;
						}
					}
					else
					{
						posVisibles=opt.Visibles+1;
						nOffset=0;
					}
				}
				for (nLaco=0;nLaco<posVisibles;nLaco++)
				{
					nActualVis=nActual+nLaco;
					if(nActualVis>nSlides)
					{
						nActualVis=nActual+nLaco-nSlides;
					}
					if(opt.Effect==0)
					{
						$("li",obj).eq(nActualVis-1).attr('alt','li-visible').css({'left':nLaco*nWidth});
					}
					else if(opt.Effect==1)
					{
						if(opt.Vertical)
						{
							$("li",obj).eq(nActualVis-1).css({'top':nLaco*nHeight+nOffset}).show();
						}
						else
						{
							$("li",obj).eq(nActualVis-1).css({'left':nLaco*nWidth+nOffset}).show();
						}
					}
					else
					{
						$("li",obj).eq(nActualVis-1).css({'left':nLaco*nWidth,'z-index':'2'}).show();
					}
				}
			}
			
			function showSubtitle()
			{
				if($(opt.Subtitle,obj))
				{
					$(opt.Subtitle,obj).animate({bottom:'0px'},opt.SubtitleSpeed);
				}
			}
			
			function movePrev()
			{
				buttonOff();
				++nActual;
				if(opt.Circular)
				{
					if(nActual>nSlides)
					{
						nActual=1;
					}
					showSlides("N");
				}
				else
				{
					if(nActual-2+opt.Visibles<nSlides)
					{
						showSlides("N");
					}
					else
					{
						--nActual;
					}
				}
				buttonOn();				
			}
			
			function moveNext()
			{
				buttonOff();
				--nActual;
				if(opt.Circular)
				{				
					if(nActual<1)
					{
						nActual=nSlides;
					}
					showSlides("P");
				}
				else
				{
					if(nActual>0)
					{
						showSlides("P");
					}
					else
					{
						++nActual;
					}
				}
				buttonOn();				
			}
			
			function Pause()
			{
				clearInterval(nInterval);
				opt.Auto=false;
				$(opt.btPlay,$this).show();
				$(opt.btPause,$this).hide();
			}
			
			function Play()
			{
				opt.Auto=true;
				$(opt.btPlay,$this).hide();
				$(opt.btPause,$this).show();
				movePrev();
			}
			
			function buttonOff()
			{
				if( opt.Buttons != null )
				{
					button = $(opt.Buttons,$this).eq(nActual-1);
					button.removeClass(opt.ActiveButton.replace(".",""));
				}
			}
			
			function buttonOn()
			{
				if( opt.Buttons != null )
				{				
					button = $(opt.Buttons,$this).eq(nActual-1);
					button.removeClass(opt.Buttons.replace(".","")).addClass(opt.ActiveButton.replace(".","")).addClass(opt.Buttons.replace(".",""));
				}
			}			

		});
	};
})(jQuery);
