(function ($) { $.fn.fadeTransition = function(options) { var options = $.extend({pauseTime: 5000, transitionTime: 2000, ignore: null, delayStart: 0, pauseNavigation: false}, options); var transitionObject; Trans = function(obj) { var timer = null; var current = 0; var els = (options.ignore)?$("> *:not(" + options.ignore + ")", obj):$("> *", obj); $(obj).css("position", "relative"); els.css("display", "none").css("left", "0").css("top", "0"); if (options.delayStart > 0) { setTimeout(showFirst, options.delayStart); } else showFirst(); function showFirst() { if (options.ignore) { $(options.ignore, obj).fadeOut(options.transitionTime); $(els[current]).fadeIn(options.transitionTime); } else { $(els[current]).css("display", "block"); } } function transition(next) { $(els[current]).fadeOut(options.transitionTime); $(els[next]).fadeIn(options.transitionTime); current = next; cue(); }; function cue() { if ($("> *", obj).length < 2) return false; if (timer) clearTimeout(timer); if (!options.pauseNavigation) { timer = setTimeout(function() { transition((current + 1) % els.length | 0)} , options.pauseTime); } }; this.showItem = function(item) { if (timer) clearTimeout(timer); transition(item); }; cue(); } this.showItem = function(item) { transitionObject.showItem(item); }; return this.each(function() { transitionObject = new Trans(this); }); } })(jQuery);