/*
 * jQuery UI Effects Transfer @VERSION
 *
 * Copyright (c) 2008 Aaron Eisenberger (aaronchi@gmail.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Transfer
 *
 * Depends:
 *      effects.core.js
 */
(function($) {

$.effects.transfer = function(o) {

        return this.queue(function() {

                // Create element
                var el = $(this);
               
                // Set options
                var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode
                var target = $(o.options.to); // Find Target
                var position = el.offset();
                var transfer = $('<div class="ui-effects-transfer"></div>').appendTo(document.body);
                if(o.options.className) transfer.addClass(o.options.className);
               
                // Set target css
                transfer.addClass(o.options.className);
                transfer.css({
                        top: position.top,
                        left: position.left,
                        height: el.outerHeight() - parseInt(transfer.css('borderTopWidth')) - parseInt(transfer.css('borderBottomWidth')),
                        width: el.outerWidth() - parseInt(transfer.css('borderLeftWidth')) - parseInt(transfer.css('borderRightWidth')),
                        position: 'absolute'
                });
               
                // Animation
                position = target.offset();
                animation = {
                        top: position.top,
                        left: position.left,
                        height: target.outerHeight() - parseInt(transfer.css('borderTopWidth')) - parseInt(transfer.css('borderBottomWidth')),
                        width: target.outerWidth() - parseInt(transfer.css('borderLeftWidth')) - parseInt(transfer.css('borderRightWidth'))
                };
               
                // Animate
                transfer.animate(animation, o.duration, o.options.easing, function() {
                        transfer.remove(); // Remove div
                        if(o.callback) o.callback.apply(el[0], arguments); // Callback
                        el.dequeue();
                });
               
        });
       
};

})(jQuery);
