
if (typeof Object.create !== 'function') { Object.create = function(o) { function F() { } F.prototype = o; return new F(); }; } (function($) { $.fn.extend({ advListRotator: function(options) { if (this.length) { return this.each(function() { var obj = Object.create(AdvancedListRotatorClass); obj.init(this, options); $.data(this, 'advListRotator', AdvancedListRotatorClass); }); } return false; } }); })(jQuery); var AdvancedListRotatorClass = { init: function(element, options) { var c = this; c.settings = jQuery.extend({ rotationInterval: 5000, effectTimer: 1000, effect: false, effectOptions: {}, itemControl: {}, shuffle: false, randomStart: false, autoStart: true, disableRotationEngine: false, helper: false, activeItemClass: 'alrActiveItem', helperActiveItemClass: 'alrHelperActiveItem', helperInteraction: 'mouseover', startIndex: 0, nextItemElement: false, nextItemElementInteraction: 'click', previousItemElement: false, previousItemElementInteraction: 'click', randomEffect: false, randomEffects: new Array('blind', 'clip', 'explode', 'fade', 'fold'), debug: false, debugLevel: new Array('debug', 'info', 'warn', 'error') }, c.settings, options); c.effectOptions = jQuery.extend({}, c.effectOptions, c.settings.effectOptions); c.itemControl = jQuery.extend({}, c.itemControl, c.settings.itemControl); c.listRotator = element; c.$listRotator = jQuery(element); c.totalItems = c.$listRotator.find('li').length; c.currentItem = (c.settings.startIndex >= 0 && c.settings.startIndex < c.totalItems) ? c.settings.startIndex : 0; c.currentEffect = false; c.shuffledItems = new Array(); c.tId = null; c.userInteraction = false; c.calculateNextItem = true; c.animationRunning = false; if (c.settings.randomStart) { c.currentItem = c.random(c.totalItems); } c.shuffledItems.push(c.currentItem); c.previousItem = c.currentItem; if (c.settings.debug && c.in_array('debug', c.settings.debugLevel)) { console.debug('init: totalItems: ' + c.totalItems); console.debug('init: startIndex: ' + c.currentItem); if (c.settings.shuffle) { console.debug('init: Pushed ' + c.currentItem + ' into shufflelist'); } } c.$listRotator.children().each(function(index) { if (index == c.currentItem) { if (c.settings.effect == 'slide') { var pos = '-' + c.currentItem * c.effectOptions.slideBy; c.$listRotator.css('left', pos); } jQuery(this).show(); jQuery(this).addClass(c.settings.activeItemClass); c.setHelperClass(c, index, true); } }); if (jQuery(c.settings.helper).length > 0) { jQuery(c.settings.helper).children().each(function() { jQuery(this).bind(c.settings.helperInteraction, function() { c.userInteraction = true; c.stopRotationEngine(c); c.currentEffect = c.getItemEffect(c); if (c.currentEffect != 'slide' && c.currentEffect !== false) { c.$listRotator.children().hide(); } c.$listRotator.children().removeClass(c.settings.activeItemClass); jQuery(c.settings.helper).children().removeClass(c.settings.helperActiveItemClass); c.currentItem = jQuery(this).index(); c.$listRotator.children().each(function(index) { if (index == c.currentItem) { jQuery(this).stop(); jQuery(this).css('opacity', 1); jQuery(this).show(); if (c.settings.effect == 'slide') { c.runEffect(c, jQuery(this), false); } jQuery(this).addClass(c.settings.activeItemClass); c.setHelperClass(c, index, true); return false; } return true; }); }); jQuery(this).bind('mouseout', function() { c.startRotationEngine(c); }); }); } if (jQuery(c.settings.nextItemElement).length > 0) { jQuery(c.settings.nextItemElement).bind(c.settings.nextItemElementInteraction, function() { c.moveToNextItem(c); }); } if (jQuery(c.settings.previousItemElement).length > 0) { jQuery(c.settings.previousItemElement).bind(c.settings.previousItemElementInteraction, function() { c.moveToPreviousItem(c); }); } if (c.settings.autoStart) { c.startRotationEngine(c); } }, rotationEngine: function(c) { c.stopRotationEngine(c); c.userInteraction = false; c.$listRotator.children().each(function(index) { if (index == c.currentItem) { if (c.calculateNextItem) { if (c.settings.shuffle) { c.currentItem = c.shuffleRotationEngine(c, c.totalItems); } else { c.currentItem++; c.currentItem = (c.currentItem >= c.totalItems) ? 0 : c.currentItem; } } else { if (c.settings.shuffle) { if (c.shuffledItems.length >= 1) { for (var j = 0; j < c.shuffledItems.length; j++) { if (c.shuffledItems[j] == c.previousItem) { do { j--; c.previousItem = (j < 0) ? c.shuffleRotationEngine(c, c.totalItems) : c.shuffledItems[j]; } while (c.currentItem == c.previousItem); break; } } } else { c.previousItem = c.shuffleRotationEngine(c, c.totalItems); } c.currentItem = c.previousItem; } else { c.currentItem--; c.currentItem = (c.currentItem < 0) ? (c.totalItems - 1) : c.currentItem; } } c.$listRotator.children().each(function(idx) { if (idx == c.currentItem) { jQuery(this).show(); c.setHelperClass(c, idx, true); c.setHelperClass(c, index, false); return false; } return true; }); c.calculateNextItem = true; c.runEffect(c, jQuery(this), true); return false; } return true; }); }, continueRotation: function(c, e, h) { if (!c.userInteraction) { if (h && c.currentEffect) { e.hide(); } e.removeClass(c.settings.activeItemClass); c.$listRotator.children().each(function(index) { if (index == c.currentItem) { jQuery(this).addClass(c.settings.activeItemClass); return false; } return true; }); this.startRotationEngine(c); } }, runEffect: function(c, e, runCallback) { c.animationRunning = true; c.currentEffect = c.getItemEffect(c); if (c.currentEffect == 'slide') { var pos = '-' + c.currentItem * c.effectOptions.slideBy; c.$listRotator.animate({ left: pos }, c.getItemEffectTimer(c), 'swing', function() { c.animationRunning = false; if (runCallback) { c.continueRotation(c, e, false); } }); } else if (e.effect && c.currentEffect != 'fade' && c.currentEffect !== false) { e.effect(c.currentEffect, c.getItemEffectOptions(c), c.getItemEffectTimer(c), function() { c.animationRunning = false; if (runCallback) { c.continueRotation(c, e, true); } }); } else if (c.currentEffect == 'fade') { e.fadeOut(c.getItemEffectTimer(c), function() { c.animationRunning = false; if (runCallback) { c.continueRotation(c, e, true); } }); } else { if (c.settings.debug) { if (c.currentEffect !== false) { console.debug('runEffect: Missing jQuery UI effects; Cannot run ' + c.currentEffect + '; Using none'); } } c.animationRunning = false; if (runCallback) { c.continueRotation(c, e, true); } } }, stopRotationEngine: function(c) { if (c.tId) { clearInterval(c.tId); c.tId = null; if (c.settings.debug && c.in_array('info', c.settings.debugLevel)) { console.info('stopRotationEngine: Rotation Engine stopped'); } } }, startRotationEngine: function(c) { c.stopRotationEngine(c); if (!c.settings.disableRotationEngine) { var rInt = c.getItemRotationInterval(c); c.tId = setInterval(function() { c.rotationEngine(c) }, rInt); if (c.settings.debug && c.in_array('info', c.settings.debugLevel)) { console.info('startRotationEngine: Rotation Engine started; interval ' + rInt + '; currentItem ' + c.currentItem); } var link_id = c.$listRotator[0].children[c.currentItem].children[0].name; if (!c.in_array(link_id, impressions)) { $.ajax({ type: "POST", url: advertTrackingURL, data: "advertid=" + link_id }); impressions.push(link_id); } } }, shuffleRotationEngine: function(c, max) { var number = c.random(max); while (c.in_array(number, c.shuffledItems) || number == c.previousItem) { number = c.random(max); } c.previousItem = number; c.shuffledItems.push(number); if (c.shuffledItems.length == c.totalItems) { c.shuffledItems = new Array(); } if (c.settings.debug && c.in_array('debug', c.settings.debugLevel)) { console.debug('shuffleRotationEngine: Number ' + number + ' generated'); if (c.shuffledItems.length <= 0) { console.debug('shuffleRotationEngine: Shufflelist was reset'); } } return number; }, in_array: function(needle, haystack) { for (n in haystack) { if (haystack[n] == needle) { return true; } } return false; }, random: function(max) { return Math.floor(Math.random() * max); }, setHelperClass: function(c, n, status) { if (jQuery(c.settings.helper).length > 0) { jQuery(c.settings.helper).children().each(function(index) { if (index == n) { if (status) { jQuery(this).addClass(c.settings.helperActiveItemClass); } else { jQuery(this).removeClass(c.settings.helperActiveItemClass); } return false; } return true; }); } return false; }, moveToNextItem: function(c) { if (!c.animationRunning) { c.userInteraction = true; c.rotationEngine(c); } }, moveToPreviousItem: function(c) { if (!c.animationRunning) { c.userInteraction = true; c.calculateNextItem = false; c.rotationEngine(c); } }, getItemObj: function(c) { var obj = eval("c.itemControl.listIndex_" + c.currentItem); return (typeof (obj) == 'undefined') ? false : obj; }, getItemEffect: function(c) { var obj = c.getItemObj(c); if (obj !== false) { if (typeof (obj.randomEffect) != 'undefined' && obj.randomEffect) { return c.getRandomItemEffect(c, obj); } else if (typeof (obj.effect) != 'undefined') { if (c.settings.debug) { console.debug('getItemEffect: itemControl effect found; Using ' + obj.effect + ' for item ' + c.currentItem); } return obj.effect; } } return c.getRandomEffect(c); }, getItemEffectTimer: function(c) { var obj = c.getItemObj(c); if (obj !== false) { return (typeof (obj.effectTimer) == 'undefined') ? c.settings.effectTimer : obj.effectTimer; } return c.settings.effectTimer; }, getItemEffectOptions: function(c) { var obj = c.getItemObj(c); if (obj !== false) { return (typeof (obj.effectOptions) == 'undefined') ? c.effectOptions : jQuery.extend({}, c.effectOptions, obj.effectOptions); } return c.effectOptions; }, getItemRotationInterval: function(c) { var obj = c.getItemObj(c); if (obj !== false) { return (typeof (obj.rotationInterval) == 'undefined') ? c.settings.rotationInterval : obj.rotationInterval; } return c.settings.rotationInterval; }, getRandomEffect: function(c) { if (c.settings.randomEffect) { var randomEffectNumber = c.random(c.settings.randomEffects.length); if (c.settings.debug) { console.debug('getRandomEffect: true; Using ' + c.settings.randomEffects[randomEffectNumber] + ' for item ' + c.currentItem); } return c.settings.randomEffects[randomEffectNumber]; } if (c.settings.debug) { var effect = (c.settings.effect) ? c.settings.effect : 'none'; console.debug('getRandomEffect: false; Using ' + effect + ' for item ' + c.currentItem); } return c.settings.effect; }, getRandomItemEffect: function(c, obj) {
    var randomEffectNumber
    if (typeof (obj.randomEffects) != 'undefined') { randomEffectNumber = c.random(obj.randomEffects.length); if (c.settings.debug) { console.debug('getRandomItemEffect: found itemControl randomEffects; Using ' + obj.randomEffects[randomEffectNumber] + ' for item ' + c.currentItem); } return obj.randomEffects[randomEffectNumber]; } randomEffectNumber = c.random(c.settings.randomEffects.length); if (c.settings.debug) { console.debug('getRandomItemEffect: no itemControl randomEffects, using standard; Using ' + c.settings.randomEffects[randomEffectNumber] + ' for item ' + c.currentItem); } return c.settings.randomEffects[randomEffectNumber];
} 
}
