(function($) {

    $.dialog = function(text, options, focus)
    {
        var settings = $.extend({}, $.dialog.defaults, options, {focus: focus});

        $.removeDialog();

        var dialog = $('<div></div>')
        .attr('id', 'dialogBox')
        .css(
        {
            width: '100%',
            height: 0,
            overflow: 'hidden',
            top: 0,
            left:0
        })
        .appendTo('body');

        var box = $('<div></div>').attr(
        {
            id: settings.id,
            className: settings.className
        })
        .css('position', 'absolute')
        .appendTo(dialog);

        var boxContent = box.clone().attr(
        {
            id: settings.id + 'Content',
            className: settings.className  + 'Content'
        })
        .css('background', 'none')
        .html(text)
        .appendTo(dialog);

        if(settings.closeButton)
        {
            settings.closeButton = typeof(settings.closeButton) == 'string' ? settings.closeButton : ''

            $('<span></span>').attr('className', 'dialogClose')
            .attr(
            {
                alt:  settings.closeButton,
                title: settings.closeButton
            })
            .text(settings.closeButton)
            .mousedown(function()
            {
                $.removeDialog('slow');
            })
            .prependTo(boxContent);
        }


        $(box)
        .roundedCorners('bl br', settings.roundedCorner)
        .fadeTo(0, settings.opacity);
        
        // simula o preenchimento da DIV, mesmo ela estando fora
        $('<div></div>').css('height',  boxContent[0].offsetHeight).appendTo(box);

        setTimeout(function()
        {
            var focus = $(settings.focus);

            if(settings.focus && focus.length > 0)
            {
                var top = focus.offset().top - boxContent[0].offsetHeight;
                
                if($.browser.safari)
                    document.body.scrollTop = top;
                else
                    document.documentElement.scrollTop = top;

                if($.browser.msie && $.browser.version <= 6)
                {
                    $(window).trigger('scroll');
                }
            }

            var autoClose = function()
            {
                setTimeout(function()
                {
                    $.removeDialog('slow');
                }
                , settings.autoClose);
            };

            dialog.fixPosition()
            .animate({height: box[0].offsetHeight}, 'slow', (settings.autoClose > 0 ? autoClose : null));
            
        }, 200);
    };

    $.removeDialog = function(speed)
    {
        var dialog = $('#dialogBox');

        if(dialog.length > 0)
        {
            if(!speed)
            {
                dialog.unfixPosition();
                dialog.remove();
            }
            else
            {
                dialog.animate({height: 0}, speed, function()
                {
                    dialog.unfixPosition();
                    dialog.remove();
                });
            }
        }
    }

    $.dialog.defaults =
    {
        id: 'dialog',
        className: 'dialog',
        opacity: '0.6',
        roundedCorner: 10,
        autoClose: 8 * 1000,
        closeButton: true
    };

})(jQuery);
