/**
 * @author Remy Sharp
 * @date 2008-03-27
 * @url http://jqueryfordesigners.com/coda-popup-bubbles/
 * @license Creative Commons License - ShareAlike http://creativecommons.org/licenses/by-sa/3.0/
 *
 * See URL for markup examples and screencast
 */

(function($) {
    $.fn.bubble = function(options) {
        var defaults = {
            'trigger': '.trigger',
            'popup': '.popup',
            'distance': 10,
            'hideDelay': 500,
            'effectTime': 250
        };

        var settings = $.extend({}, defaults, options);

        return this.each(function() {
            var hideDelayTimer = null;

            var trigger = $(settings.trigger, this);
            var popup = $(settings.popup, this);

            $([trigger.get(0), popup.get(0)]).mouseover(function() {
                if (hideDelayTimer) clearTimeout(hideDelayTimer);


                if (popup.is(':animated, :visible')) {
                    return;
                } else {
                    trigger.parent().css({
                        zIndex: 10
                    });
                    popup.css({
                        display: 'block',
                        top: 4, // -120
                        left: 38
                    }).animate({
                        opacity: 1,
                        left: '+=' + settings.distance + 'px'
                    }, settings.effectTime);
                }
            }).mouseout(function() {

                if (hideDelayTimer) clearTimeout(hideDelayTimer);

                hideDelayTimer = setTimeout(function() {
                    hideDelayTimer = null;
                    popup.animate({
                        left: '+=' + settings.distance + 'px',
                        opacity: 0
                    },
                    settings.effectTime, 'swing', function() {
                        popup.css('display', 'none');
                        popup.parent().css('zIndex', 0);
                    });

                }, settings.hideDelay);
            });
        });
    }
})(jQuery);
