/* * jQuery Nivo Slider v1.9 * http://nivo.dev7studios.com * * Copyright 2010, Gilbert Pellegrom * Free to use and abuse under the MIT license. * http://www.opensource.org/licenses/mit-license.php *  * April 2010 - controlNavThumbs option added by Jamie Thompson (http://jamiethompson.co.uk) * March 2010 - manualAdvance option added by HelloPablo (http://hellopablo.co.uk) */(function($) {	$.fn.nivoSlider = function(options) {		//Defaults are below		var settings = $.extend({}, $.fn.nivoSlider.defaults, options);		return this.each(function() {			//Useful variables. Play carefully.			var vars = {				currentSlide: 0,				currentImage: '',				totalSlides: 0,				randAnim: '',				running: false,				paused: false,				stop:false			};					//Get this slider			var slider = $(this);			slider.data('nivo:vars', vars);			slider.css('position','relative');			slider.width('1px');			slider.height('1px');			slider.addClass('nivoSlider');						//Find our slider children			var kids = slider.children();			kids.each(function() {				var child = $(this);				if(!child.is('img')){					if(child.is('a')){						child.addClass('nivo-imageLink');					}					child = child.find('img:first');				}				//Don't ask				var childWidth = child.width();				if(childWidth == 0) childWidth = child.attr('width');				var childHeight = child.height();				if(childHeight == 0) childHeight = child.attr('height');				//Resize the slider				if(childWidth > slider.width()){					slider.width(childWidth);				}				if(childHeight > slider.height()){					slider.height(childHeight);				}				child.css('display','none');				vars.totalSlides++;			});						//Set startSlide			if(settings.startSlide > 0){				if(settings.startSlide >= vars.totalSlides) settings.startSlide = vars.totalSlides - 1;				vars.currentSlide = settings.startSlide;			}						//Get initial image			if($(kids[vars.currentSlide]).is('img')){				vars.currentImage = $(kids[vars.currentSlide]);			} else {				vars.currentImage = $(kids[vars.currentSlide]).find('img:first');			}						//Show initial link			if($(kids[vars.currentSlide]).is('a')){				$(kids[vars.currentSlide]).css('display','block');			}						//Set first background			slider.css('background','url('+ vars.currentImage.attr('src') +') no-repeat');						//Add initial slices			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' })					);				} else {					slider.append(						$('<div class="nivo-slice"></div>').css({ left:(sliceWidth*i)+'px', width:sliceWidth+'px' })					);				}			}						//Create caption			slider.append(				$('<div class="nivo-caption"><p></p></div>').css({ display:'none', opacity:settings.captionOpacity })			);						//Process initial  caption			if(vars.currentImage.attr('title') != ''){				$('.nivo-caption p', slider).html(vars.currentImage.attr('title'));									$('.nivo-caption', slider).fadeIn(settings.animSpeed);			}						//In the words of Super Mario "let's a go!"			var timer = 0;			if(!settings.manualAdvance){				timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);			}			//Add Direction nav			if(settings.directionNav){				slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">Prev</a><a class="nivo-nextNav">Next</a></div>');								//Hide Direction nav				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');				});			}						//Add Control nav			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');						}						nivoControl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('src').replace(settings.controlNavThumbsSearch, settings.controlNavThumbsReplace) +'"></a>');					} else {						nivoControl.append('<a class="nivo-control" rel="'+ i +'">'+ i +'</a>');					}									}				//Set initial active link				$('.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');				});			}						//Keyboard Navigation			if(settings.keyboardNav){				$(window).keypress(function(event){					//Left					if(event.keyCode == '37'){						if(vars.running) return false;						clearInterval(timer);						timer = '';						vars.currentSlide-=2;						nivoRun(slider, kids, settings, 'prev');					}					//Right					if(event.keyCode == '39'){						if(vars.running) return false;						clearInterval(timer);						timer = '';						nivoRun(slider, kids, settings, 'next');					}				});			}						//For pauseOnHover setting			if(settings.pauseOnHover){				slider.hover(function(){					vars.paused = true;					clearInterval(timer);					timer = '';				}, function(){					vars.paused = false;					//Restart the timer					if(timer == '' && !settings.manualAdvance){						timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);					}				});			}						//Event when Animation finishes			slider.bind('nivo:animFinished', function(){ 				vars.running = false; 				//Hide child links				$(kids).each(function(){					if($(this).is('a')){						$(this).css('display','none');					}				});				//Show current link				if($(kids[vars.currentSlide]).is('a')){					$(kids[vars.currentSlide]).css('display','block');				}				//Restart the timer				if(timer == '' && !vars.paused && !settings.manualAdvance){					timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);				}				//Trigger the afterChange callback				settings.afterChange.call(this);			});		});				function nivoRun(slider, kids, settings, nudge){			//Get our vars			var vars = slider.data('nivo:vars');			if((!vars || vars.stop) && !nudge) return false;						//Trigger the beforeChange callback			settings.beforeChange.call(this);								//Set current background before change			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;				//Trigger the slideshowEnd callback				settings.slideshowEnd.call(this);			}			if(vars.currentSlide < 0) vars.currentSlide = (vars.totalSlides - 1);			//Set vars.currentImage			if($(kids[vars.currentSlide]).is('img')){				vars.currentImage = $(kids[vars.currentSlide]);			} else {				vars.currentImage = $(kids[vars.currentSlide]).find('img:first');			}						//Set acitve links			if(settings.controlNav){				$('.nivo-controlNav a', slider).removeClass('active');				$('.nivo-controlNav a:eq('+ vars.currentSlide +')', slider).addClass('active');			}						//Process caption			if(vars.currentImage.attr('title') != ''){				if($('.nivo-caption', slider).css('display') == 'block'){					$('.nivo-caption p', slider).fadeOut(settings.animSpeed, function(){						$(this).html(vars.currentImage.attr('title'));						$(this).fadeIn(settings.animSpeed);					});				} else {					$('.nivo-caption p', slider).html(vars.currentImage.attr('title'));				}									$('.nivo-caption', slider).fadeIn(settings.animSpeed);			} else {				$('.nivo-caption', slider).fadeOut(settings.animSpeed);			}						//Set new slice backgrounds			var  i = 0;			$('.nivo-slice', slider).each(function(){				var sliceWidth = Math.round(slider.width()/settings.slices);				$(this).css({ height:'0px', opacity:'0', 					background: 'url('+ vars.currentImage.attr('src') +') no-repeat -'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%' });				i++;			});						if(settings.effect == 'random'){				var anims = new Array("sliceDownRight","sliceDownLeft","sliceUpRight","sliceUpLeft","sliceUpDown","sliceUpDownLeft","fold","fade");				vars.randAnim = anims[Math.floor(Math.random()*(anims.length + 1))];				if(vars.randAnim == undefined) vars.randAnim = 'fade';			}					//Run effects			vars.running = true;			if(settings.effect == 'sliceDown' || settings.effect == 'sliceDownRight' || vars.randAnim == 'sliceDownRight' ||				settings.effect == 'sliceDownLeft' || vars.randAnim == 'sliceDownLeft'){				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'){				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'){				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'){				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'){				var i = 0;				$('.nivo-slice', slider).each(function(){					$(this).css('height','100%');					if(i == settings.slices-1){						$(this).animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });					} else {						$(this).animate({ opacity:'1.0' }, (settings.animSpeed*2));					}					i++;				});			}		}	};		//Default settings	$.fn.nivoSlider.defaults = {		effect:'random',		slices:30,		animSpeed:500,		pauseTime:5000,		startSlide:0,		directionNav:false,		directionNavHide:true,		controlNav:false,		controlNavThumbs:false,		controlNavThumbsSearch: '.jpg',		controlNavThumbsReplace: '_thumb.jpg',		keyboardNav:true,		pauseOnHover:true,		manualAdvance:false,		captionOpacity:0.8,		beforeChange: function(){},		afterChange: function(){},		slideshowEnd: function(){}	};		$.fn.reverse = [].reverse;	})(jQuery);
