(function ($, undefined){ $.effects.fold = function (o){ return this.queue(function (){ var el = $(this), props = ['position', 'top', 'bottom', 'left', 'right'] ; var mode = $.effects.setMode(el, o.options.mode || 'hide'); var size = o.options.size || 15; var horizFirst = !(!o.options.horizFirst); var duration = o.duration? o.duration / 2: $.fx.speeds._default / 2; $.effects.save(el, props); _AN_Call_show('show', el); var wrapper = $.effects.createWrapper(el).css({ overflow: 'hidden'} ); var widthFirst = ((mode == 'show') != horizFirst); var ref = widthFirst? ['width', 'height'] : ['height', 'width'] ; var distance = widthFirst? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()] ; var percent = /([0-9]+)%/.exec(size); if (percent) size = parseInt(percent[1], 10) / 100 * distance[mode == 'hide'? 0: 1]; if (mode == 'show') wrapper.css(horizFirst? { height: 0, width: size} : { height: size, width: 0} ); var animation1 = { } , animation2 = { } ; animation1[ref[0]] = mode == 'show'? distance[0]: size; animation2[ref[1]] = mode == 'show'? distance[1]: 0; wrapper.animate(animation1, duration, o.options.easing).animate(animation2, duration, o.options.easing, function (){ if (mode == 'hide') el.hide(); $.effects.restore(el, props); $.effects.removeWrapper(el); if (o.callback) o.callback.apply(el[0], arguments); el.dequeue(); } ); } ); } ; } )(jQuery);