/*!

* jQuery UI Effects Scale 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/scale-effect/
*/

(function( factory ) {

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

        // AMD. Register as an anonymous module.
        define([
                "jquery",
                "./effect",
                "./effect-size"
        ], factory );
} else {

        // Browser globals
        factory( jQuery );
}

}(function( $ ) {

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

// Create element
var el = $( this ),
        options = $.extend( true, {}, o ),
        mode = $.effects.setMode( el, o.mode || "effect" ),
        percent = parseInt( o.percent, 10 ) ||
                ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
        direction = o.direction || "both",
        origin = o.origin,
        original = {
                height: el.height(),
                width: el.width(),
                outerHeight: el.outerHeight(),
                outerWidth: el.outerWidth()
        },
        factor = {
                y: direction !== "horizontal" ? (percent / 100) : 1,
                x: direction !== "vertical" ? (percent / 100) : 1
        };

// We are going to pass this effect to the size effect:
options.effect = "size";
options.queue = false;
options.complete = done;

// Set default origin and restore for show/hide
if ( mode !== "effect" ) {
        options.origin = origin || [ "middle", "center" ];
        options.restore = true;
}

options.from = o.from || ( mode === "show" ? {
        height: 0,
        width: 0,
        outerHeight: 0,
        outerWidth: 0
} : original );
options.to = {
        height: original.height * factor.y,
        width: original.width * factor.x,
        outerHeight: original.outerHeight * factor.y,
        outerWidth: original.outerWidth * factor.x
};

// Fade option to support puff
if ( options.fade ) {
        if ( mode === "show" ) {
                options.from.opacity = 0;
                options.to.opacity = 1;
        }
        if ( mode === "hide" ) {
                options.from.opacity = 1;
                options.to.opacity = 0;
        }
}

// Animate
el.effect( options );

};

}));