/*
 * jQuery Nivo Slider v2.6
 * http://nivo.dev7studios.com
 *
 * Copyright 2011, Gilbert Pellegrom
 * Free to use and abuse under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * March 2010
 */

(function($)
{
	var NivoSlider=function(element,options)
	{
		var settings=$.extend({},$.fn.nivoSlider.defaults,options);
		var vars={currentSlide:0,currentImage:'',totalSlides:0,randAnim:'',running:false,paused:false,stop:false};
		var slider=$(element);
		slider.data('nivo:vars',vars);
		slider.css('position','relative');
		slider.addClass('nivoSlider');
		var kids=slider.children();
		
		kids.each(function()
		{
			var child=$(this);
			var link='';
			if(!child.is('img'))
			{
				if(child.is('a'))
				{
					child.addClass('nivo-imageLink');
					link=child;
				}
				child=child.find('img:first');
			}
			var childWidth=child.width();
			if(childWidth==0)
				childWidth=child.attr('width');
			
			var childHeight=child.height();
			if(childHeight==0)
				childHeight=child.attr('height');
			
			if(childWidth>slider.width())
			{
				slider.width(childWidth);
			}
			
			if(childHeight>slider.height())
			{
				slider.height(childHeight);
			}
			
			if(link!='')
			{
				link.css('display','none');
			}
			
			child.css('display','none');
			vars.totalSlides++;
		});
	
	if(settings.startSlide>0)
	{
		if(settings.startSlide>=vars.totalSlides)
			settings.startSlide=vars.totalSlides-1;
		
		vars.currentSlide=settings.startSlide;
	}
	
	if($(kids[vars.currentSlide]).is('img'))
	{
		vars.currentImage=$(kids[vars.currentSlide]);
	}
	else
	{
		vars.currentImage=$(kids[vars.currentSlide]).find('img:first');
	}
	
	if($(kids[vars.currentSlide]).is('a'))
	{
		$(kids[vars.currentSlide]).css('display','block');
	}
	
	slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
	
	slider.append($('<div class="nivo-caption"><p></p></div>').css({display:'none',opacity:settings.captionOpacity}));
	

	
	var processCaption=function(settings)
	{
		var nivoCaption=$('.nivo-caption',slider);
		
		if(vars.currentImage.attr('title')!=''&&vars.currentImage.attr('title')!=undefined)
		{
			var title=vars.currentImage.attr('title');					//#cap0 etc
			
			if(title.substr(0,1)=='#')
				title=$(title).html();
			
			if(nivoCaption.css('display')=='block')
			{
				nivoCaption.find('p').fadeOut(settings.animSpeed,function()
				{
					$(this).html(title);
					$(this).fadeIn(settings.animSpeed);
				});
			}
			else
			{
				nivoCaption.find('p').html(title);
			}
			
			nivoCaption.fadeIn(settings.animSpeed);
		}
		else
		{
			nivoCaption.fadeOut(settings.animSpeed);
		}
	}
	
	processCaption(settings);
	var timer=0;
	if(!settings.manualAdvance&&kids.length>1)
	{
		timer=setInterval(function()
		{
			nivoRun(slider,kids,settings,false);
		}
		,settings.pauseTime);
	}
	
	if(settings.directionNav)
	{
		slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+settings.prevText+'</a><a class="nivo-nextNav">'+settings.nextText+'</a></div>');
		
		if(settings.directionNavHide)
		{
			$('.nivo-directionNav',slider).hide();
			slider.hover(function()
			{
				$('.nivo-directionNav',slider).show();
			},
			function()
			{
				$('.nivo-directionNav',slider).hide();
			});
		}
	
		$('a.nivo-prevNav',slider).live('click',function()
		{
			if(vars.running)
				return false;
			
			clearInterval(timer);
			timer='';
			vars.currentSlide-=2;
			nivoRun(slider,kids,settings,'prev');
		});
		
		$('a.nivo-nextNav',slider).live('click',function()
		{
			if(vars.running)
				return false;
			
			clearInterval(timer);
			timer='';
			nivoRun(slider,kids,settings,'next');
		});
	}
	
	if(settings.controlNav)
	{
		var nivoControl=$('<div class="nivo-controlNav"></div>');
		slider.append(nivoControl);
		for(var i=0;i<kids.length;i++)
		{
			if(settings.controlNavThumbs)
			{
				var child=kids.eq(i);
				if(!child.is('img'))
				{
					child=child.find('img:first');
				}
				
				if(settings.controlNavThumbsFromRel)
				{
					nivoControl.append('<a class="nivo-control" rel="'+i+'"><img src="'+child.attr('rel')+'" alt="" /></a>');
				}
				else{
					nivoControl.append('<a class="nivo-control" rel="'+i+'"><img src="'+child.attr('src').replace(settings.controlNavThumbsSearch,settings.controlNavThumbsReplace)+'" alt="" /></a>');
				}
			}
			else
			{
				nivoControl.append('<a class="nivo-control" rel="'+i+'">'+(i+1)+'</a>');
			}
		}
		
		$('.nivo-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active');
		$('.nivo-controlNav a',slider).live('click',function()
		{
			if(vars.running)return false;
			if($(this).hasClass('active'))return false;
			clearInterval(timer);
			timer='';
			slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
			vars.currentSlide=$(this).attr('rel')-1;
			nivoRun(slider,kids,settings,'control');
		});
	}
	
	if(settings.keyboardNav)
	{
		$(window).keypress(function(event)
		{
			if(event.keyCode=='37')
			{
				if(vars.running)return false;
				clearInterval(timer);
				timer='';
				vars.currentSlide-=2;
				nivoRun(slider,kids,settings,'prev');
			}
			
			if(event.keyCode=='39')
			{
				if(vars.running)return false;
				clearInterval(timer);
				timer='';
				nivoRun(slider,kids,settings,'next');
			}
		});
	}
	
	if(settings.pauseOnHover)
	{
		slider.hover(function()
		{
			vars.paused=true;
			clearInterval(timer);
			timer='';
		},function()
		{
			vars.paused=false;
			if(timer==''&&!settings.manualAdvance)
			{
				timer=setInterval(function()
				{
					nivoRun(slider,kids,settings,false);
				},settings.pauseTime);
			}
		});
	}
	slider.bind('nivo:animFinished',function()
	{
		vars.running=false;
		$(kids).each(function()
		{
			if($(this).is('a'))
			{
				$(this).css('display','none');
			}
		});
	
		if($(kids[vars.currentSlide]).is('a'))
		{
			$(kids[vars.currentSlide]).css('display','block');
		}
		
		if(timer==''&&!vars.paused&&!settings.manualAdvance)
		{
			timer=setInterval(function()
			{
				nivoRun(slider,kids,settings,false);
			},settings.pauseTime);
		}
		
		settings.afterChange.call(this);
	});

	var createSlices=function(slider,settings,vars)
	{
		for(var i=0;i<settings.slices;i++)
		{
			var sliceWidth=Math.round(slider.width()/settings.slices);
			if(i==settings.slices-1)
			{
				slider.append($('<div class="nivo-slice"></div>').css({left:(sliceWidth*i)+'px',width:(slider.width()-(sliceWidth*i))+'px',height:'0px',opacity:'0',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'}));
			}
			else
			{
				slider.append($('<div class="nivo-slice"></div>').css({left:(sliceWidth*i)+'px',width:sliceWidth+'px',height:'0px',opacity:'0',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'}));
			}
		}
	}
	
	var createBoxes=function(slider,settings,vars)
	{
		var boxWidth=Math.round(slider.width()/settings.boxCols);
		var boxHeight=Math.round(slider.height()/settings.boxRows);
		for(var rows=0;rows<settings.boxRows;rows++)
		{
			for(var cols=0;cols<settings.boxCols;cols++)
			{
				if(cols==settings.boxCols-1)
				{
					slider.append($('<div class="nivo-box"></div>').css({opacity:0,left:(boxWidth*cols)+'px',
																		top:(boxHeight*rows)+'px',
																		width:(slider.width()-(boxWidth*cols))+'px',
																		height:boxHeight+'px',
																		background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((boxWidth+(cols*boxWidth))-boxWidth)+'px -'+((boxHeight+(rows*boxHeight))-boxHeight)+'px'}));
				}
				else
				{
					slider.append($('<div class="nivo-box"></div>').css({opacity:0,left:(boxWidth*cols)+'px',
																		top:(boxHeight*rows)+'px',
																		width:boxWidth+'px',
																		height:boxHeight+'px',
																		background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((boxWidth+(cols*boxWidth))-boxWidth)+'px -'+((boxHeight+(rows*boxHeight))-boxHeight)+'px'}));
				}
			}
		}
	}
	
	var nivoRun=function(slider,kids,settings,nudge)
	{
		var vars=slider.data('nivo:vars');
		if(vars&&(vars.currentSlide==vars.totalSlides-1))
		{
			settings.lastSlide.call(this);
		}
		
		if((!vars||vars.stop)&&!nudge)
			return false;
		
		settings.beforeChange.call(this);
		if(!nudge)
		{
			slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
		}
		else
		{
			if(nudge=='prev')
			{
				slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
			}
			
			if(nudge=='next')
			{
				slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');
			}
		}
	
		vars.currentSlide++;
		if(vars.currentSlide==vars.totalSlides)
		{
			vars.currentSlide=0;
			settings.slideshowEnd.call(this);
		}
		
		if(vars.currentSlide<0)
			vars.currentSlide=(vars.totalSlides-1);
		
		if($(kids[vars.currentSlide]).is('img'))
		{
			vars.currentImage=$(kids[vars.currentSlide]);
		}
		else
		{
			vars.currentImage=$(kids[vars.currentSlide]).find('img:first');
		}
		
		if(settings.controlNav)
		{
			$('.nivo-controlNav a',slider).removeClass('active');
			$('.nivo-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active');
		}
		
		processCaption(settings);
		$('.nivo-slice',slider).remove();
		$('.nivo-box',slider).remove();
		
		if(settings.effect=='random')
		{
			var anims=new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade','boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
			vars.randAnim=anims[Math.floor(Math.random()*(anims.length+1))];
			if(vars.randAnim==undefined)vars.randAnim='fade';
		}
		
		if(settings.effect.indexOf(',')!=-1)
		{
			var anims=settings.effect.split(',');
			vars.randAnim=anims[Math.floor(Math.random()*(anims.length))];
			if(vars.randAnim==undefined)vars.randAnim='fade';
		}
		
		vars.running=true;
		if(settings.effect=='sliceDown'||settings.effect=='sliceDownRight'||vars.randAnim=='sliceDownRight'||settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft')
		{
			createSlices(slider,settings,vars);
			var timeBuff=0;
			var i=0;
			var slices=$('.nivo-slice',slider);
			
			if(settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft')
				slices=$('.nivo-slice',slider)._reverse();
			
			slices.each(function()
			{
				var slice=$(this);
				slice.css({'top':'0px'});
				if(i==settings.slices-1)
				{
					setTimeout(function()
					{
						slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed,'',
									function(){slider.trigger('nivo:animFinished');});
					},
					(100+timeBuff));
				}
				else
				{
					setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed);},(100+timeBuff));
				}
			
				timeBuff+=50;
				i++;
			});	
		}
		else if(settings.effect=='sliceUp'||settings.effect=='sliceUpRight'||vars.randAnim=='sliceUpRight'||settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft')
		{
			createSlices(slider,settings,vars);
			var timeBuff=0;
			var i=0;
			var slices=$('.nivo-slice',slider);
			if(settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft')
				slices=$('.nivo-slice',slider)._reverse();
			
			slices.each(function()
			{
				var slice=$(this);
				slice.css({'bottom':'0px'});
				if(i==settings.slices-1)
				{
					setTimeout(function()
					{
						slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed,'',function()
						{
							slider.trigger('nivo:animFinished');
						});
					},(100+timeBuff));
				}
				else
				{
					setTimeout(function()
					{
						slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed);
					},(100+timeBuff));
				}
				
				timeBuff+=50;i++;
			});
		}
		else if(settings.effect=='sliceUpDown'||settings.effect=='sliceUpDownRight'||vars.randAnim=='sliceUpDown'||settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft')
		{
			createSlices(slider,settings,vars);
			var timeBuff=0;
			var i=0;
			var v=0;
			var slices=$('.nivo-slice',slider);
			
			if(settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft')
				slices=$('.nivo-slice',slider)._reverse();
				
			slices.each(function()
			{
				var slice=$(this);
				if(i==0)
				{
					slice.css('top','0px');
					i++;
				}
				else
				{
					slice.css('bottom','0px');
					i=0;
				}
				
				if(v==settings.slices-1)
				{
					setTimeout(function()
					{
						slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed,'',function()
						{
							slider.trigger('nivo:animFinished');
						});
					},(100+timeBuff));
				}
				else
				{
					setTimeout(function()
					{
						slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed);
					},(100+timeBuff));
				}
				timeBuff+=50;
				v++;
			});
		}
		else if(settings.effect=='fold'||vars.randAnim=='fold')
		{
			createSlices(slider,settings,vars);
			var timeBuff=0;
			var i=0;
			$('.nivo-slice',slider).each(function()
			{
				var slice=$(this);
				var origWidth=slice.width();
				slice.css({top:'0px',height:'100%',width:'0px'});
				if(i==settings.slices-1)
				{
					setTimeout(function()
					{
						slice.animate({width:origWidth,opacity:'1.0'},settings.animSpeed,'',function(){
							slider.trigger('nivo:animFinished');
						});
					},(100+timeBuff));
				}
				else
				{
					setTimeout(function()
					{
						slice.animate({width:origWidth,opacity:'1.0'},settings.animSpeed);
					},(100+timeBuff));
				}
				
				timeBuff+=50;i++;
			});
		}
		else if(settings.effect=='fade'||vars.randAnim=='fade')
		{
			createSlices(slider,settings,vars);
			var firstSlice=$('.nivo-slice:first',slider);
			firstSlice.css({'height':'100%','width':slider.width()+'px'});
			firstSlice.animate({opacity:'1.0'},(settings.animSpeed*2),'',function()
			{
				slider.trigger('nivo:animFinished');
			});
		}
		else if(settings.effect=='slideInRight'||vars.randAnim=='slideInRight')
		{
			createSlices(slider,settings,vars);
			var firstSlice=$('.nivo-slice:first',slider);
			firstSlice.css({'height':'100%','width':'0px','opacity':'1'});
			firstSlice.animate({width:slider.width()+'px'},(settings.animSpeed*2),'',function()
			{
				slider.trigger('nivo:animFinished');
			});
		}
		else if(settings.effect=='slideInLeft'||vars.randAnim=='slideInLeft')
		{
			createSlices(slider,settings,vars);
			var firstSlice=$('.nivo-slice:first',slider);
			firstSlice.css({'height':'100%','width':'0px','opacity':'1','left':'','right':'0px'});
			firstSlice.animate({width:slider.width()+'px'},(settings.animSpeed*2),'',function()
			{
				firstSlice.css({'left':'0px','right':''});
				slider.trigger('nivo:animFinished');
			});
		}
		else if(settings.effect=='boxRandom'||vars.randAnim=='boxRandom')
		{
			createBoxes(slider,settings,vars);
			var totalBoxes=settings.boxCols*settings.boxRows;
			var i=0;
			var timeBuff=0;
			var boxes=shuffle($('.nivo-box',slider));
			boxes.each(function()
			{
				var box=$(this);
				if(i==totalBoxes-1)
				{
					setTimeout(function()
					{
						box.animate({opacity:'1'},settings.animSpeed,'',function()
						{
							slider.trigger('nivo:animFinished');
						});
					},(100+timeBuff));
				}
				else
				{
					setTimeout(function()
					{
						box.animate({opacity:'1'},settings.animSpeed);
					},(100+timeBuff));
				}
				
				timeBuff+=20;
				i++;
			});
		}
		else if(settings.effect=='boxRain'||vars.randAnim=='boxRain'||settings.effect=='boxRainReverse'||vars.randAnim=='boxRainReverse'||settings.effect=='boxRainGrow'||vars.randAnim=='boxRainGrow'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse')
		{
			createBoxes(slider,settings,vars);
			var totalBoxes=settings.boxCols*settings.boxRows;
			var i=0;
			var timeBuff=0;
			var rowIndex=0;
			var colIndex=0;
			var box2Darr=new Array();
			box2Darr[rowIndex]=new Array();
			var boxes=$('.nivo-box',slider);
			if(settings.effect=='boxRainReverse'||vars.randAnim=='boxRainReverse'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse')
			{
				boxes=$('.nivo-box',slider)._reverse();
			}
			boxes.each(function()
			{
				box2Darr[rowIndex][colIndex]=$(this);
				colIndex++;
				if(colIndex==settings.boxCols)
				{
					rowIndex++;
					colIndex=0;
					box2Darr[rowIndex]=new Array();
				}
			});
			
			for(var cols=0;cols<(settings.boxCols*2);cols++)
			{
				var prevCol=cols;
				for(var rows=0;rows<settings.boxRows;rows++)
				{
					if(prevCol>=0&&prevCol<settings.boxCols)
					{
						(function(row,col,time,i,totalBoxes)
						{
							var box=$(box2Darr[row][col]);
							var w=box.width();
							var h=box.height();
							if(settings.effect=='boxRainGrow'||vars.randAnim=='boxRainGrow'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse')
							{
								box.width(0).height(0);
							}
							
							if(i==totalBoxes-1)
							{
								setTimeout(function()
								{
									box.animate({opacity:'1',width:w,height:h},settings.animSpeed/1.3,'',function(){
										slider.trigger('nivo:animFinished');
									});
								},(100+time));
							}
							else{
								setTimeout(function(){
									box.animate({opacity:'1',width:w,height:h},settings.animSpeed/1.3);
								},(100+time));
							}
						})
						(rows,prevCol,timeBuff,i,totalBoxes);
						i++;
					}
					prevCol--;
				}
				timeBuff+=100;
			}
		}
	}
	
	var shuffle=function(arr)
	{
		for(var j,x,i=arr.length;i;j=parseInt(Math.random()*i),x=arr[--i],arr[i]=arr[j],arr[j]=x);return arr;
	}
	var trace=function(msg)
	{
		if(this.console&&typeof console.log!="undefined")
			console.log(msg);
	}
	this.stop=function()
	{
		if(!$(element).data('nivo:vars').stop)
		{
			$(element).data('nivo:vars').stop=true;
			trace('Stop Slider');
		}
	}
	this.start=function()
	{
		if($(element).data('nivo:vars').stop)
		{
			$(element).data('nivo:vars').stop=false;
			trace('Start Slider');
		}
	}
	
	settings.afterLoad.call(this);
	return this;
};

$.fn.nivoSlider=function(options)
{
	return this.each(function(key,value)
	{
		var element=$(this);
		if(element.data('nivoslider'))
			return element.data('nivoslider');
		
		var nivoslider=new NivoSlider(this,options);
		element.data('nivoslider',nivoslider);
	});
};

$.fn.nivoSlider.defaults={effect:'random',slices:15,boxCols:8,boxRows:4,animSpeed:500,pauseTime:3000,startSlide:0,directionNav:true,directionNavHide:true,controlNav:true,controlNavThumbs:false,controlNavThumbsFromRel:false,controlNavThumbsSearch:'.jpg',controlNavThumbsReplace:'_thumb.jpg',keyboardNav:true,pauseOnHover:true,manualAdvance:false,captionOpacity:0.8,prevText:'Prev',nextText:'Next',beforeChange:function(){},afterChange:function(){},slideshowEnd:function(){},lastSlide:function(){},afterLoad:function(){}};$.fn._reverse=[].reverse;})(jQuery);
	





