/*!

 * jQuery UI Effects Fold 1.11.4

 * http://jqueryui.com

 *

 * Copyright jQuery Foundation and other contributors

 * Released under the MIT license.

 * http://jquery.org/license

 *

 * http://api.jqueryui.com/fold-effect/

 */

(function( factory ) {

	if ( typeof define === "function" && define.amd ) {



		// AMD. Register as an anonymous module.

		define([

			"jquery",

			"./effect"

		], factory );

	} else {



		// Browser globals

		factory( jQuery );

	}

}(function( $ ) {



return $.effects.effect.fold = function( o, done ) {



	// Create element

	var el = $( this ),

		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],

		mode = $.effects.setMode( el, o.mode || "hide" ),

		show = mode === "show",

		hide = mode === "hide",

		size = o.size || 15,

		percent = /([0-9]+)%/.exec( size ),

		horizFirst = !!o.horizFirst,

		widthFirst = show !== horizFirst,

		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],

		duration = o.duration / 2,

		wrapper, distance,

		animation1 = {},

		animation2 = {};



	$.effects.save( el, props );

	el.show();



	// Create Wrapper

	wrapper = $.effects.createWrapper( el ).css({

		overflow: "hidden"

	});

	distance = widthFirst ?

		[ wrapper.width(), wrapper.height() ] :

		[ wrapper.height(), wrapper.width() ];



	if ( percent ) {

		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];

	}

	if ( show ) {

		wrapper.css( horizFirst ? {

			height: 0,

			width: size

		} : {

			height: size,

			width: 0

		});

	}



	// Animation

	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;

	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;



	// Animate

	wrapper

		.animate( animation1, duration, o.easing )

		.animate( animation2, duration, o.easing, function() {

			if ( hide ) {

				el.hide();

			}

			$.effects.restore( el, props );

			$.effects.removeWrapper( el );

			done();

		});



};



}));

