﻿(function($) { var ver = '1.0'; if ($.support == undefined) { $.support = { opacity: !($.browser.msie)} } function debug(s) { if ($.fn.rotate.debug) log(s) } function log() { if (window.console && window.console.log) window.console.log('[rotate] ' + Array.prototype.join.call(arguments, ' ')); $('body').append('<div>' + Array.prototype.join.call(arguments, ' ') + '</div>') }; $.fn.rotate = function(options) { options = $.extend({ fx: 'fade', timeout: 5000, speed: 2000, pause: 1, random: 1, rotateImageClass: 'img.slideImage', imagesClass: 'span.slide', imageContainer: 'slides' }, options); this.each(function() { var $this = $(this); options.images = $this.find(options.imagesClass); options.imageCount = options.images.length; if (options.imageCount == 1) { var $image = $('.' + options.rotateImageClass); var image = options.images[0].innerHTML; $image.attr('src', image) } else setup() }); function setup() { var rotatorImage = $(options.rotateImageClass); options.firstSlide = true; if (options.startingSlide) options.startingSlide = parseInt(options.startingSlide); if (options.random) { options.randomMap = []; for (var i = 0; i < options.imageCount; i++) options.randomMap.push(i); options.randomMap.sort(function(a, b) { return Math.random() - 0.5 }); options.randomIndex = 0; options.startingSlide = options.randomMap[0] } else if (options.startingSlide >= options.imageCount) options.startingSlide = 0; options.currSlide = options.startingSlide = options.startingSlide || 0; var first = options.startingSlide; if (options.pause) rotatorImage.hover(function() { options.cyclePause = true }, function() { options.cyclePause = null }); if (options.timeout) { options.timeout = parseInt(options.timeout); while ((options.timeout - options.speed) < 250) options.timeout += options.speed } options.currSlide = options.lastSlide = first; if (options.random) { options.nextSlide = options.currSlide; if (++options.randomIndex == options.imageCount) options.randomIndex = 0; options.nextSlide = options.randomMap[options.randomIndex] } else options.nextSlide = options.startingSlide >= (this.imageCount.length - 1) ? 0 : options.startingSlide + 1; rotatorImage.cycleTimeout = setTimeout(function() { rotateImage() }, 10) } function rotateImage() { if (options.busy) return; var rotatorImage = $('.' + options.rotateImageClass); var curr = options.images[options.currSlide]; var next = options.images[options.nextSlide]; if (!options.cyclePause) { if (options.nextSlide != options.currSlide) { options.busy = 1; if (options.fx == 'fade') fadeImage() } options.lastSlide = options.currSlide; if (options.random) { options.currSlide = options.nextSlide; if (++options.randomIndex == options.imageCount) options.randomIndex = 0; options.nextSlide = options.randomMap[options.randomIndex] } else { var roll = (options.nextSlide + 1) == options.imageCount; options.nextSlide = roll ? 0 : options.nextSlide + 1; options.currSlide = roll ? options.imageCount - 1 : options.nextSlide - 1 } } var ms = options.timeout; if (options.cyclePause) ms = 10; if (ms > 0) rotatorImage.cycleTimeout = setTimeout(function() { rotateImage() }, ms) } function fadeImage() { var $image = $('.' + options.rotateImageClass); var nextImage = options.images[options.nextSlide].innerHTML; if (options.firstSlide) { options.firstSlide = false; $image.attr('src', nextImage); loadAllImages() } else { $image.fadeOut(options.speed / 2, function() { $image.attr('src', nextImage); $image.fadeIn(options.speed / 2) }) } options.busy = false } function loadAllImages() { if (options.imageCount == 0) return; var imageContainer = $('#' + options.imageContainer); var index = 1; var $image = $('.' + options.rotateImageClass); for (var index = 1; index < options.imageCount; index++) { var curImage = options.images[index].innerHTML; var img = $('<img>'); img.attr('id', options.imageContainer + '-' + index); img.attr('height', $image.attr('height')); img.attr('width', $image.attr('width')); img.attr('src', curImage); imageContainer.append(img) } } } })(jQuery);