(function ($) {
    $.msgGrowl = function (config) {
        var defaults, options, container, msgGrowl, content, title, text, close;
        defaults = {
            type: '',
            title: '',
            text: '',
            lifetime: 6500,
            sticky: false,
            position: 'bottom-right',
            closeTrigger: true,
            onOpen: function () {},
            onClose: function () {}
        };
        options = $.extend(defaults, config);
        container = $('.msgGrowl-container.' + options.position);
        if (!container.length) {
            container = $('<div>', {
                'class': 'msgGrowl-container ' + options.position
            }).appendTo('body')
        }
        msgGrowl = $('<div>', {
            'class': 'msgGrowl ' + options.type
        });
        content = $('<div>', {
            'class': 'msgGrowl-content'
        }).appendTo(msgGrowl);
        text = $('<span>', {
            text: options.text
        }).appendTo(content);
        if (options.closeTrigger) {
            close = $('<div>', {
                'class': 'msgGrowl-close',
                'click': function (e) {
                    e.preventDefault();
                    $(this).parent().fadeOut('medium', function () {
                        $(this).remove();
                        if (typeof options.onClose === 'function') {
                            options.onClose()
                        }
                    })
                }
            }).appendTo(msgGrowl)
        }
        if (options.title != '') {
            title = $('<h4>', {
                text: options.title
            }).prependTo(content)
        }
        if (options.lifetime > 0 && !options.sticky) {
            setTimeout(function () {
                if (typeof options.onClose === 'function') {
                    options.onClose()
                }
                msgGrowl.fadeOut('medium', function () {
                    $(this).remove()
                })
            }, options.lifetime)
        }
        container.addClass(options.position);
        if (options.position.split('-')[0] == 'top') {
            msgGrowl.prependTo(container).hide().fadeIn('slow')
        } else {
            msgGrowl.appendTo(container).hide().fadeIn('slow')
        }
        if (typeof options.onOpen === 'function') {
            options.onOpen()
        }
    }
})(jQuery);
