﻿(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', imagePath: '/images/', url: '', data: {} }, options); $('.' + options.rotateImageClass).live('click', function () { imageClick() }); this.each(function () { var $this = $(this); if (options.url != null && options.url != '') { options.service = true; getDataFromWebService(); if (options.ImageItems != null) { options.imageCount = options.ImageItems.length; if (options.ImageItems.length == 1) { var $image = $('.' + options.rotateImageClass); $image.attr('src', options.imagePath + options.ImageItems[0].Image); $image.attr('url', options.ImageItems[0].Url); setupUrl(options.ImageItems[0].Url); $image.attr('alt', options.ImageItems[0].Title) } else setup() } } else { options.service = false; 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 imageContainer = $('#' + options.imageContainer); if (imageContainer.length == 0) { $('<span></span>').attr({ id: options.imageContainer }).css('display', 'none').appendTo(document.body) } 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 getDataFromWebService() { $.ajax({ type: "POST", url: options.url, async: false, contentType: "application/json; charset=utf-8", dataType: "json", data: options.data, dataFilter: function (data) { return data }, success: function (data) { options.ImageItems = data.d }, error: function (xhr, status, error) { alert('test') } }) } function rotateImage() { if (options.busy) return; var rotatorImage = $('.' + options.rotateImageClass); 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 = ''; var alt = ''; var url = ''; if (options.service) { nextImage = options.imagePath + options.ImageItems[options.nextSlide].Image; url = options.ImageItems[options.nextSlide].Url; alt = options.ImageItems[options.nextSlide].Title } else nextImage = options.images[options.nextSlide].innerHTML; if (options.firstSlide) { options.firstSlide = false; $image.attr('src', nextImage); $image.attr('url', url); setupUrl(url); $image.attr('alt', alt); loadAllImages() } else { $image.fadeOut(options.speed / 2, function () { $image.attr('src', nextImage); $image.attr('url', url); setupUrl(url); $image.attr('alt', alt); $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 = ''; var alt = ''; var url = ''; if (options.service) { curImage = options.imagePath + options.ImageItems[index].Image; url = options.ImageItems[index].Url; alt = options.ImageItems[index].Title } else curImage = options.images[index].innerHTML; var img = $('<img>'); var h = $image.attr('height'); var w = $image.attr('width'); img.attr('id', options.imageContainer + '-' + index); if (h != null && h != 0 && h != 1) img.attr('height', $image.attr('height')); if (w != null && w != 0 && w != 1) img.attr('width', $image.attr('width')); img.attr('src', curImage); img.attr('url', url); img.attr('alt', alt); imageContainer.append(img) } } function setupUrl(url) { var $image = $('.' + options.rotateImageClass); if (url == '') { $image.css('cursor', 'default') } else { $image.css('cursor', 'pointer') } } function imageClick() { var $image = $('.' + options.rotateImageClass); var url = $image.attr('url'); if (url != '') location.href = url } } })(jQuery)
