/* * jQuery Nivo Slider v2.3 * 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 *  * May 2010 - Pick random effect from specified set of effects by toronegro * May 2010 - controlNavThumbsFromRel option added by nerd-sh * May 2010 - Do not start nivoRun timer if there is only 1 slide by msielski * April 2010 - controlNavThumbs option added by Jamie Thompson (http://jamiethompson.co.uk) * March 2010 - manualAdvance option added by HelloPablo (http://hellopablo.co.uk) */(function($) {    var NivoSlider = function(element, options){        //Defaults are below        var settings = $.extend({}, $.fn.nivoSlider.defaults, options);        //Useful variables. Play carefully.        var vars = {            currentSlide: 0,            currentImage: '',            totalSlides: 0,            randAnim: '',            running: false,            paused: false,            stop:false        };        //Get this slider        var slider = $(element);        slider.data('nivo:vars', vars);        slider.css('position','relative');        slider.addClass('nivoSlider');        //Find our slider children        var kids = slider.children("img");        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');            }            //Get img width & height            var childWidth = child.width();            if(childWidth == 0) childWidth = child.attr('width');            var childHeight = child.height();            if(childHeight == 0) childHeight = child.height();            //Resize the slider            if(childWidth > slider.width()){                slider.width(childWidth);            }            if(maxHeight){                slider.height(maxHeight);            }else{                if(childHeight > slider.height()){                    slider.height(childHeight);                }            }            if(link != ''){                link.css('display','none');            }            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','#fff 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_div')!= ''){            $(vars.currentImage.attr('title_div')).html(vars.currentImage.attr('post_title'))        }        if(vars.currentImage.attr('txt_div')!= ''){            $(vars.currentImage.attr('txt_div')).html($(vars.currentImage.attr('post_txt')).html());        }        var title = vars.currentImage.attr('title');        if(title){            if(title.substr(0,1) == '#') title = $(title).html();            $('.nivo-caption p', slider).html(title);            $('.nivo-caption', slider).fadeIn(settings.animSpeed);        }        //In the words of Super Mario "let's a go!"        var timer = 0;        if(!settings.manualAdvance && kids.length > 1){            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 != undefined){            var nivoControl = settings.controlNav; /* $('<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>');                }            }            //Set initial active link            $('a:eq('+ vars.currentSlide +')', nivoControl).addClass('active');            $('a', nivoControl).live('click', function(){                if(vars.running) return false;                if($(this).hasClass('active')) return false;                clearInterval(timer);                timer = '';                slider.css('background','#fff url('+ vars.currentImage.attr('src') +') no-repeat');                vars.currentSlide = $(this).attr('rel') - 1;                nivoRun(slider, kids, settings, 'control');            });        }              //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);        });        // Private run method        var nivoRun = function(slider, kids, settings, nudge){            //Get our vars            var vars = slider.data('nivo:vars');            //Trigger the lastSlide callback            if(vars && (vars.currentSlide == vars.totalSlides - 1)){                 settings.lastSlide.call(this);            }            // Stop            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','#fff url('+ vars.currentImage.attr('src') +') no-repeat');            } else {                if(nudge == 'prev'){                    slider.css('background','#fff url('+ vars.currentImage.attr('src') +') no-repeat');                }                if(nudge == 'next'){                    slider.css('background','#fff url('+ vars.currentImage.attr('src') +') no-repeat');                }            }            vars.currentSlide++;            //Trigger the slideshowEnd callback            if(vars.currentSlide == vars.totalSlides){                vars.currentSlide = 0;                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 != undefined){                $('a', settings.controlNav).removeClass('active');                $('a:eq('+ vars.currentSlide +')', settings.controlNav).addClass('active');            }            //Process caption            if(vars.currentImage.attr('title') != ''){                var title = vars.currentImage.attr('title');                if(title.substr(0,1) == '#') title = $(title).html();                if($('.nivo-caption', slider).css('display') == 'block'){                    $('.nivo-caption p', slider).fadeOut(settings.animSpeed, function(){                        $(this).html(title);                        $(this).fadeIn(settings.animSpeed);                    });                } else {                    $('.nivo-caption p', slider).html(title);                }                $('.nivo-caption', slider).fadeIn(settings.animSpeed);            } else {                $('.nivo-caption', slider).fadeOut(settings.animSpeed);            }            if(vars.currentImage.attr('title_div') != ''){                var titleDiv =vars.currentImage.attr('post_title');                    $(vars.currentImage.attr('title_div')).fadeOut(settings.animSpeed, function(){                        $(this).html(titleDiv);                        $(this).fadeIn(settings.animSpeed);                    });                $(vars.currentImage.attr('title_div')).fadeIn(settings.animSpeed);            } else {                $(vars.currentImage.attr('title_div')).fadeOut(settings.animSpeed);            }            if(vars.currentImage.attr('txt_div') != ''){                var slidetxt =$(vars.currentImage.attr('post_txt')).html();                    $(vars.currentImage.attr('txt_div')).fadeOut(settings.animSpeed, function(){                        $(this).html(slidetxt);                        $(this).fadeIn(settings.animSpeed);                    });                $(vars.currentImage.attr('txt_div')).fadeIn(settings.animSpeed);            } else {                $(vars.currentImage.attr('txt_div')).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: '#fff 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 random effect from specified set (eg: effect:'fold,fade')            if(settings.effect.indexOf(',') != -1){                var anims = settings.effect.split(',');                vars.randAnim = $.trim(anims[Math.floor(Math.random()*anims.length)]);            }            //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++;                });            }        }        // For debugging        var trace = function(msg){            if (this.console && typeof console.log != "undefined")                console.log(msg);        }        // Start / Stop        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');            }        }        //Trigger the afterLoad callback        settings.afterLoad.call(this);    };    $.fn.nivoSlider = function(options) {        return this.each(function(){            var element = $(this);            // Return early if this element already has a plugin instance            if (element.data('nivoslider')) return;            // Pass options to plugin constructor            var nivoslider = new NivoSlider(this, options);            // Store plugin object in this element's data            element.data('nivoslider', nivoslider);        });    };    //Default settings    $.fn.nivoSlider.defaults = {        effect:'random',        slices:15,        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,        beforeChange: function(){},        afterChange: function(){},        slideshowEnd: function(){},        lastSlide: function(){},        afterLoad: function(){}    };    $.fn._reverse = [].reverse;})(jQuery);
