/*
* jquery nivo slider v2.5.1
* 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
*/
$(window).load(function() {
$('#slider').nivoslider();
});
(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($('
').css({
display: 'none',
opacity: settings.captionopacity
}));
var processcaption = function(settings) {
var nivocaption = $('.nivo-caption', slider);
if (vars.currentimage.attr('title') != '') {
var title = vars.currentimage.attr('title');
if (title.substr(0, 1) == '#') title = $(title).html();
if (nivocaption.css('display') == 'block') {
nivocaption.find('p').fadeout(settings.animspeed, function() {
$(this).html(title);
cufon.replace('.nivo-caption p p',{ fontfamily: '宋体' });
$(this).fadein(settings.animspeed);
});
} else {
nivocaption.find('p').html(title);
}
cufon.replace('.nivo-caption p p',{ fontfamily: '宋体' });
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('');
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 = $('');
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('
');
} else {
nivocontrol.append('
');
}
} else {
nivocontrol.append('' + (i + 1) + '');
}
}
$('.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($('').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($('').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($('').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($('').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: 1,
prevtext: 'prev',
nexttext: 'next',
beforechange: function() {},
afterchange: function() {},
slideshowend: function() {},
lastslide: function() {},
afterload: function() {}
};
$.fn._reverse = [].reverse;
})(jquery);