(function ($){ $.effects.drop = function (o){ return this.queue(function (){ var el = $(this), props = ['position', 'top', 'left', 'opacity'] ; var mode = $.effects.setMode(el, o.options.mode || 'hide'); var direction = o.options.direction || 'left'; $.effects.save(el, props); _AN_Call_show('show', el); $.effects.createWrapper(el); var ref = (direction == 'up' || direction == 'down')? 'top': 'left'; var motion = (direction == 'up' || direction == 'left')? 'pos': 'neg'; var distance = o.options.distance || (ref == 'top'? el.outerHeight({ margin: true } ) / 2: el.outerWidth({ margin: true } ) / 2); if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos'? - distance: distance); var animation = { opacity: mode == 'show'? 1: 0} ; animation[ref] = (mode == 'show'? (motion == 'pos'? '+=': '-='): (motion == 'pos'? '-=': '+=')) + distance; el.animate(animation, { queue: false , duration: o.duration, easing: o.options.easing, complete: function (){ if (mode == 'hide') el.hide(); $.effects.restore(el, props); $.effects.removeWrapper(el); if (o.callback) o.callback.apply(this, arguments); el.dequeue(); } } ); } ); } ; } )(jQuery);