PageSourceSearch

https://andreasviklund.com/wp-content/themes/dt-konstruktor/js/jquery.nivo.ext.js?ver=6.8.10

js andreasviklund.com collected 2026-10-02 03:12:26 UTC 26,087 bytes, 731 lines download raw bytes

1/*
2 * jQuery Nivo Slider v2.6
3 * https://nivo.dev7studios.com
4 *
5 * Copyright 2011, Gilbert Pellegrom
6 * Free to use and abuse under the MIT license.
7 * https://www.opensource.org/licenses/mit-license.php
8 * 
9 * March 2010
10 */
11
12(function($) {
13
14    var NivoSlider = function(element, options){
15		//Defaults are below
16		var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
17
18        //Useful variables. Play carefully.
19        var vars = {
20            currentSlide: 0,
21            currentImage: '',
22            totalSlides: 0,
23            randAnim: '',
24            running: false,
25            paused: false,
26            stop: true
27        };
28
29		if(settings.autoslide == true) {
30			vars.stop = false;
31		}
32    
33        //Get this slider
34        var slider = $(element);
35        slider.data('nivo:vars', vars);
36        slider.css('position','relative');
37        slider.addClass('nivoSlider');
38        
39        //Find our slider children
40        var kids = slider.children();
41        kids.each(function() {
42            var child = $(this);
43            var link = '';
44            if(!child.is('img')){
45                if(child.is('a')){
46                    child.addClass('nivo-imageLink');
47                    link = child;
48                }
49                child = child.find('img:first');
50            }
51            //Get img width & height
52            var childWidth = child.width();
53            if(childWidth == 0) childWidth = child.attr('width');
54            var childHeight = child.height();
55            if(childHeight == 0) childHeight = child.attr('height');
56            //Resize the slider
57            if(childWidth > slider.width()){
58                slider.width(childWidth);
59            }
60            if(childHeight > slider.height()){
61                slider.height(childHeight);
62            }
63            if(link != ''){
64                link.css('display','none');
65            }
66            child.css('display','none');
67            vars.totalSlides++;
68        });
69        
70        //Set startSlide
71        if(settings.startSlide > 0){
72            if(settings.startSlide >= vars.totalSlides) settings.startSlide = vars.totalSlides - 1;
73            vars.currentSlide = settings.startSlide;
74        }
75        
76        //Get initial image
77        if($(kids[vars.currentSlide]).is('img')){
78            vars.currentImage = $(kids[vars.currentSlide]);
79        } else {
80            vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
81        }
82        
83        //Show initial link
84        if($(kids[vars.currentSlide]).is('a')){
85            $(kids[vars.currentSlide]).css('display','block');
86        }
87        
88        //Set first background
89        slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
90
91        //Create caption
92        slider.append(
93            $('<div class="nivo-caption"></div>').css({ display:'none', opacity:settings.captionOpacity })
94        );
95
96		// Process caption function
97		var processCaption = function(settings){
98			var nivoCaption = $('.nivo-caption', slider);
99			if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){
100				var title = vars.currentImage.attr('title');
101				var has_that_class = false;
102
103				
104				if(title.substr(0,1) == '.' || title.substr(0,1) == '#') {
105					title = slider.parent().find(title);
106					has_that_class = title.hasClass('no-slide-desc');
107					title = title.html();
108				}
109
110				if(nivoCaption.css('display') == 'block'){
111					nivoCaption.fadeOut(settings.animSpeed, function(){
112						$(this).html(title);
113						/*nivo_cufon_me()*/
114						$(this).delay(settings.animSpeed).fadeIn(settings.animSpeed);
115					});
116				} else {
117					nivoCaption.html(title);
118				}
119				
120				if( has_that_class ) {
121					nivoCaption.addClass('no-slide-desc');
122				}else {
123					nivoCaption.removeClass('no-slide-desc');
124				}
125				
126				/*nivo_cufon_me()*/
127				nivoCaption.delay(settings.animSpeed).fadeIn(settings.animSpeed);
128			} else {
129				/*nivo_cufon_me()*/
130				nivoCaption.fadeOut(settings.animSpeed);
131			}
132		}
133		
134        //Process initial  caption
135        processCaption(settings);
136        
137        //In the words of Super Mario "let's a go!"
138        var timer = 0;
139        if(!settings.manualAdvance && kids.length > 1){
140            timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
141        }
142
143        //Add Direction nav
144        if(settings.directionNav || settings.customNav){
145            if(settings.directionNav){
146				slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
147           
148				//Hide Direction nav
149				if(settings.directionNavHide){
150					$('.nivo-directionNav', slider).hide();
151					slider.hover(function(){
152						$('.nivo-directionNav', slider).show();
153					}, function(){
154						$('.nivo-directionNav', slider).hide();
155					});
156				}
157				
158				$('.nivo-prevNav', slider).on('click', function(){
159					if(vars.running) return false;
160					clearInterval(timer);
161					timer = '';
162					vars.currentSlide -= 2;
163					nivoRun(slider, kids, settings, 'prev');
164				});
165				
166				$('.nivo-nextNav', slider).on('click', function(){
167					if(vars.running) return false;
168					clearInterval(timer);
169					timer = '';
170					nivoRun(slider, kids, settings, 'next');
171				});
172
173			} else {
174
175				$(settings.customNavPrev).on('click', function(){
176					if(vars.running) return false;
177					clearInterval(timer);
178					timer = '';
179					vars.currentSlide -= 2;
180					nivoRun(slider, kids, settings, 'prev');
181				});
182
183				$(settings.customNavNext).on('click', function(){
184					if(vars.running) return false;
185					clearInterval(timer);
186					timer = '';
187					nivoRun(slider, kids, settings, 'next');
188				});
189			}
190        }
191        
192        //Add Control nav
193        if(settings.controlNav){
194            var nivoControl = $('<div class="nivo-controlNav"></div>');
195            slider.append(nivoControl);
196            for(var i = 0; i < kids.length; i++){
197                if(settings.controlNavThumbs){
198                    var child = kids.eq(i);
199                    if(!child.is('img')){
200                        child = child.find('img:first');
201                    }
202                    if (settings.controlNavThumbsFromRel) {
203                        nivoControl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('rel') + '" alt="" /></a>');
204                    } else {
205                        nivoControl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('src').replace(settings.controlNavThumbsSearch, settings.controlNavThumbsReplace) +'" alt="" /></a>');
206                    }
207                } else {
208                    nivoControl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
209                }
210                
211            }
212            //Set initial active link
213            $('.nivo-controlNav a:eq('+ vars.currentSlide +')', slider).addClass('active');
214            
215            $('.nivo-controlNav a', slider).on('click', function(){
216                if(vars.running) return false;
217                if($(this).hasClass('active')) return false;
218                clearInterval(timer);
219                timer = '';
220                slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
221                vars.currentSlide = $(this).attr('rel') - 1;
222                nivoRun(slider, kids, settings, 'control');
223            });
224        }
225        
226        //Keyboard Navigation
227        if(settings.keyboardNav){
228            $(window).keypress(function(event){
229                //Left
230                if(event.keyCode == '37'){
231                    if(vars.running) return false;
232                    clearInterval(timer);
233                    timer = '';
234                    vars.currentSlide-=2;
235                    nivoRun(slider, kids, settings, 'prev');
236                }
237                //Right
238                if(event.keyCode == '39'){
239                    if(vars.running) return false;
240                    clearInterval(timer);
241                    timer = '';
242                    nivoRun(slider, kids, settings, 'next');
243                }
244            });
245        }
246        
247        //For pauseOnHover setting
248        if(settings.pauseOnHover){
249            slider.hover(function(){
250                vars.paused = true;
251                clearInterval(timer);
252                timer = '';
253            }, function(){
254                vars.paused = false;
255                //Restart the timer
256                if(timer == '' && !settings.manualAdvance){
257                    timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
258                }
259            });
260        }
261        
262        //Event when Animation finishes
263        slider.bind('nivo:animFinished', function(){ 
264            vars.running = false; 
265            //Hide child links
266            $(kids).each(function(){
267                if($(this).is('a')){
268                    $(this).css('display','none');
269                }
270            });
271            //Show current link
272            if($(kids[vars.currentSlide]).is('a')){
273                $(kids[vars.currentSlide]).css('display','block');
274            }
275            //Restart the timer
276            if(timer == '' && !vars.paused && !settings.manualAdvance){
277                timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
278            }
279            //Trigger the afterChange callback
280            settings.afterChange.call(this);
281        });
282        
283        // Add slices for slice animations
284        var createSlices = function(slider, settings, vars){
285            for(var i = 0; i < settings.slices; i++){
286				var sliceWidth = Math.round(slider.width()/settings.slices);
287				if(i == settings.slices-1){
288					slider.append(
289						$('<div class="nivo-slice"></div>').css({ 
290							left:(sliceWidth*i)+'px', width:(slider.width()-(sliceWidth*i))+'px',
291							height:'0px', 
292							opacity:'0', 
293							background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((sliceWidth + (i * sliceWi
293dth)) - sliceWidth) +'px 0%'
294						})
295					);
296				} else {
297					slider.append(
298						$('<div class="nivo-slice"></div>').css({ 
299							left:(sliceWidth*i)+'px', width:sliceWidth+'px',
300							height:'0px', 
301							opacity:'0', 
302							background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%'
303						})
304					);
305				}
306			}
307        }
308		
309		// Add boxes for box animations
310		var createBoxes = function(slider, settings, vars){
311			var boxWidth = Math.round(slider.width()/settings.boxCols);
312			var boxHeight = Math.round(slider.height()/settings.boxRows);
313			
314			for(var rows = 0; rows < settings.boxRows; rows++){
315				for(var cols = 0; cols < settings.boxCols; cols++){
316					if(cols == settings.boxCols-1){
317						slider.append(
318							$('<div class="nivo-box"></div>').css({ 
319								opacity:0,
320								left:(boxWidth*cols)+'px', 
321								top:(boxHeight*rows)+'px',
322								width:(slider.width()-(boxWidth*cols))+'px',
323								height:boxHeight+'px',
324								background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((boxWidth + (cols * boxWidth)) - boxWidth) +'px -'+ ((boxHeight + (rows * boxHeight)) - boxHeight) +'px'
325							})
326						);
327
328					} else {
329						slider.append(
330							$('<div class="nivo-box"></div>').css({ 
331								opacity:0,
332								left:(boxWidth*cols)+'px', 
333								top:(boxHeight*rows)+'px',
334								width:boxWidth+'px',
335								height:boxHeight+'px',
336								background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((boxWidth + (cols * boxWidth)) - boxWidth) +'px -'+ ((boxHeight + (rows * boxHeight)) - boxHeight) +'px'
337							})
338						);
339					}
340				}
341			}
342		}
343
344        // Private run method
345		var nivoRun = function(slider, kids, settings, nudge){
346			
347			//Get our vars
348			var vars = slider.data('nivo:vars');
349            
350            //Trigger the lastSlide callback
351            if(vars && (vars.currentSlide == vars.totalSlides - 1)){ 
352				settings.lastSlide.call(this);
353			}
354            
355            // Stop
356			if((!vars || vars.stop) && !nudge) return false;
357			
358			//Trigger the beforeChange callback
359			settings.beforeChange.call(this);
360					
361			//Set current background before change
362			if(!nudge){
363				slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
364			} else {
365				if(nudge == 'prev'){
366					slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
367				}
368				if(nudge == 'next'){
369					slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
370				}
371			}
372			vars.currentSlide++;
373            //Trigger the slideshowEnd callback
374			if(vars.currentSlide == vars.totalSlides){ 
375				vars.currentSlide = 0;
376				settings.slideshowEnd.call(this);
377			}
378			if(vars.currentSlide < 0) vars.currentSlide = (vars.totalSlides - 1);
379			//Set vars.currentImage
380			if($(kids[vars.currentSlide]).is('img')){
381				vars.currentImage = $(kids[vars.currentSlide]);
382			} else {
383				vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
384			}
385			
386			//Set active links
387			if(settings.controlNav){
388				$('.nivo-controlNav a', slider).removeClass('active');
389				$('.nivo-controlNav a:eq('+ vars.currentSlide +')', slider).addClass('active');
390			}
391			
392			//Process caption
393			processCaption(settings);
394			
395			// Remove any slices from last transition
396			$('.nivo-slice', slider).remove();
397			
398			// Remove any boxes from last transition
399			$('.nivo-box', slider).remove();
400			
401			if(settings.effect == 'random'){
402				var anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
403                'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
404				vars.randAnim = anims[Math.floor(Math.random()*(anims.length + 1))];
405				if(vars.randAnim == undefined) vars.randAnim = 'fade';
406			}
407            
408            //Run random effect from specified set (eg: effect:'fold,fade')
409            if(settings.effect.indexOf(',') != -1){
410                var anims = settings.effect.split(',');
411                vars.randAnim = anims[Math.floor(Math.random()*(anims.length))];
412				if(vars.randAnim == undefined) vars.randAnim = 'fade';
413            }
414		
415			//Run effects
416			vars.running = true;
417			if(settings.effect == 'sliceDown' || settings.effect == 'sliceDownRight' || vars.randAnim == 'sliceDownRight' ||
418				settings.effect == 'sliceDownLeft' || vars.randAnim == 'sliceDownLeft'){
419				createSlices(slider, settings, vars);
420				var timeBuff = 0;
421				var i = 0;
422				var slices = $('.nivo-slice', slider);
423				if(settings.effect == 'sliceDownLeft' || vars.randAnim == 'sliceDownLeft') slices = $('.nivo-slice', slider)._reverse();
424				
425				slices.each(function(){
426					var slice = $(this);
427					slice.css({ 'top': '0px' });
428					if(i == settings.slices-1){
429						setTimeout(function(){
430							slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
431						}, (100 + timeBuff));
432					} else {
433						setTimeout(function(){
434							slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed);
435						}, (100 + timeBuff));
436					}
437					timeBuff += 50;
438					i++;
439				});
440			} 
441			else if(settings.effect == 'sliceUp' || settings.effect == 'sliceUpRight' || vars.randAnim == 'sliceUpRight' ||
442					settings.effect == 'sliceUpLeft' || vars.randAnim == 'sliceUpLeft'){
443				createSlices(slider, settings, vars);
444				var timeBuff = 0;
445				var i = 0;
446				var slices = $('.nivo-slice', slider);
447				if(settings.effect == 'sliceUpLeft' || vars.randAnim == 'sliceUpLeft') slices = $('.nivo-slice', slider)._reverse();
448				
449				slices.each(function(){
450					var slice = $(this);
451					slice.css({ 'bottom': '0px' });
452					if(i == settings.slices-1){
453						setTimeout(function(){
454							slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
455						}, (100 + timeBuff));
456					} else {
457						setTimeout(function(){
458							slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed);
459						}, (100 + timeBuff));
460					}
461					timeBuff += 50;
462					i++;
463				});
464			} 
465			else if(settings.effect == 'sliceUpDown' || settings.effect == 'sliceUpDownRight' || vars.randAnim == 'sliceUpDown' || 
466					settings.effect == 'sliceUpDownLeft' || vars.randAnim == 'sliceUpDownLeft'){
467				createSlices(slider, settings, vars);
468				var timeBuff = 0;
469				var i = 0;
470				var v = 0;
471				var slices = $('.nivo-slice', slider);
472				if(settings.effect == 'sliceUpDownLeft' || vars.randAnim == 'sliceUpDownLeft') slices = $('.nivo-slice', slider)._reverse();
473				
474				slices.each(function(){
475					var slice = $(this);
476					if(i == 0){
477						slice.css('top','0px');
478						i++;
479					} else {
480						slice.css('bottom','0px');
481						i = 0;
482					}
483					
484					if(v == settings.slices-1){
485						setTimeout(function(){
486							slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
487						}, (100 + timeBuff));
488					} else {
489						setTimeout(function(){
490							slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed);
491						}, (100 + timeBuff));
492					}
493					timeBuff += 50;
494					v++;
495				});
496			} 
497			else if(settings.effect == 'fold' || vars.randAnim == 'fold'){
498				createSlices(slider, settings, vars);
499				var timeBuff = 0;
500				var i = 0;
501				
502				$('.nivo-slice', slider).each(function(){
503					var slice = $(this);
504					var origWidth = slice.width();
505					slice.css({ top:'0px', height:'100%', width:'0px' });
506					if(i == settings.slices-1){
507						setTimeout(function(){
508							slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
509						}, (100 + timeBuff));
510					} else {
511						setTimeout(function(){
512							slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
513						}, (100 + timeBuff));
514					}
515					timeBuff += 50;
516					i++;
517				});
518			}  
519			else if(settings.effect == 'fade' || vars.randAnim == 'fade'){
520				createSlices(slider, settings, vars);
521				
522				var firstSlice = $('.nivo-slice:first', slider);
523                firstSlice.css({
524                    'height': '100%',
525                    'width': slider.width() + 'px'
526                });
527    
528				firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
529			}          
530            else if(settings.effect == 'slideInRight' || vars.randAnim == 'slideInRight'){
531				createSlices(slider, settings, vars);
532				
533                var firstSlice = $('.nivo-slice:first', slider);
534                firstSlice.css({
535                    'height': '100%',
536                    'width': '0px',
537                    'opacity': '1'
538                });
539
540                firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
541            }
542            else if(settings.effect == 'slideInLeft' || vars.randAnim == 'slideInLeft'){
543				createSlices(slider, settings, vars);
544				
545                var firstSlice = $('.nivo-slice:first', slider);
546                firstSlice.css({
547                    'height': '100%',
548                    'width': '0px',
549                    'opacity': '1',
550                    'left': '',
551                    'right': '0px'
552                });
553
554                firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ 
555                    // Reset positioning
556                    firstSlice.css({
557                        'left': '0px',
558                        'right': ''
559                    });
560                    slider.trigger('nivo:animFinished'); 
561                });
562            }
563			else if(settings.effect == 'boxRandom' || vars.randAnim == 'boxRandom'){
564				createBoxes(slider, settings, vars);
565				
566				var totalBoxes = settings.boxCols * settings.boxRows;
567				var i = 0;
568				var timeBuff = 0;
569				
570				var boxes = shuffle($('.nivo-box', slider));
571				boxes.each(function(){
572					var box = $(this);
573					if(i == totalBoxes-1){
574						setTimeout(function(){
575							box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
576						}, (100 + timeBuff));
577					} else {
578						setTimeout(function(){
579							box.animate({ opacity:'1' }, settings.animSpeed);
580						}, (100 + timeBuff));
581					}
582					timeBuff += 20;
583					i++;
584				});
585			}
586			else if(settings.effect == 'boxRain' || vars.randAnim == 'boxRain' || settings.effect == 'boxRainReverse' || vars.randAnim == 'boxRainReverse' || 
587                    settings.effect == 'boxRainGrow' || vars.randAnim == 'boxRainGrow' || settings.effect == 'boxRainGrowReverse' || vars.randAnim == 'boxRainGrowReverse'){
588				createBoxes(slider, settings, vars);
589				
590				var totalBoxes = settings.boxCols * settings.boxRows;
591				var i = 0;
592				var timeBuff = 0;
593				
594				// Split boxes into 2D array
595				var rowIndex = 0;
596				var colIndex = 0;
597				var box2Darr = new Array();
598				box2Darr[rowIndex] = new Array();
599				var boxes = $('.nivo-box', slider);
600				if(settings.effect == 'boxRainReverse' || vars.randAnim == 'boxRainReverse' ||
601                   settings.effect == 'boxRainGrowReverse' || vars.randAnim == 'boxRainGrowReverse'){
602					boxes = $('.nivo-box', slider)._reverse();
603				}
604				boxes.each(function(){
605					box2Darr[rowIndex][colIndex] = $(this);
606					colIndex++;
607					if(colIndex == settings.boxCols){
608						rowIndex++;
609						colIndex = 0;
610						box2Darr[rowIndex] = new Array();
611					}
612				});
613				
614				// Run animation
615				for(var cols = 0; cols < (settings.boxCols * 2); cols++){
616					var prevCol = cols;
617					for(var rows = 0; rows < settings.boxRows; rows++){
618						if(prevCol >= 0 && prevCol < settings.boxCols){
619							/* Due to some weird JS bug with loop vars 
620							being used in setTimeout, this is wrapped
621							with an anonymous function call */
622							(function(row, col, time, i, totalBoxes) {
623								var box = $(box2Darr[row][col]);
624                                var w = box.width();
625                                var h = box.height();
626                                if(settings.effect == 'boxRainGrow' || vars.randAnim == 'boxRainGrow' ||
627                                   settings.effect == 'boxRainGrowReverse' || vars.randAnim == 'boxRainGrowReverse'){
628                                    box.width(0).height(0);
629                                }
630								if(i == totalBoxes-1){
631									setTimeout(function(){
632										box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
633									}, (100 + time));
634								} else {
635									setTimeout(function(){
636										box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
637									}, (100 + time));
638								}
639							})(rows, prevCol, timeBuff, i, totalBoxes);
640							i++;
641						}
642						prevCol--;
643					}
644					timeBuff += 100;
645				}
646			}
647		}
648		
649		// Shuffle an array
650		var shuffle = function(arr){
651			for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x);
652			return arr;
653		}
654        
655        // For debugging
656        var trace = function(msg){
657            if (this.console && typeof console.log != "undefined")
658                console.log(msg);
659        }
660        
661        // Start / Stop
662        this.stop = function(){
663            if(!$(element).data('nivo:vars').stop){
664                $(element).data('nivo:vars').stop = true;
665                trace('Stop Slider');
666            }
667        }
668        
669        this.start = function(){
670            if($(element).data('nivo:vars').stop){
671                $(element).data('nivo:vars').stop = false;
672                trace('Start Slider');
673            }
674        }
675        
676        //Trigger the afterLoad callback
677        settings.afterLoad.call(this);
678		
679		return this;
680    };
681        
682    $.fn.nivoSlider = function(options) {
683    
684        return this.each(function(key, value){
685            var element = $(this);
686            // Return early if this element already has a plugin instance
687            if (element.data('nivoslider')) return element.data('nivoslider');
688            // Pass options to plugin constructor
689            var nivoslider = new NivoSlider(this, options);
690            // Store plugin object in this element's data
691            element.data('nivoslider', nivoslider);
692        });
693
694	};
695	
696	//Default settings
697	$.fn.nivoSlider.defaults = {
698		effect: 'random',
699		slices: 15,
700		boxCols: 8,
701		boxRows: 4,
702		animSpeed: 500,
703		pauseTime: 3000,
704		startSlide: 0,
705		directionNav: true,
706		customNav: false,
707		customNavPrev: '',
708		customNavNext: '',
709		directionNavHide: true,
710		controlNav: true,
711		controlNavThumbs: false,
712        controlNavThumbsFromRel: false,
713		controlNavThumbsSearch: '.jpg',
714		controlNavThumbsReplace: '_thumb.jpg',
715		keyboardNav: true,
716		pauseOnHover: true,
717		manualAdvance: false,
718		captionOpacity:1,
719		prevText: 'Prev',
720		nextText: 'Next',
721
722		beforeChange: function(){},
723		afterChange: function(){},
724		slideshowEnd: function(){},
725        lastSlide: function(){},
726        afterLoad: function(){}
727	};
728	
729	$.fn._reverse = [].reverse;
730
731})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.