/*
 * Denis Lins dialoG
 * 
 * dlg by Denis Lins <denislins@hotmail.com>
 *
 * A very nice dialog plugin for jQuery
 * 
 * @pluginHistory
 *    I was needing a nice dialog plugin for jQuery, but i didn't found.
 *    So, i built my own :D
 *
 * Copyright (c) 2010 Denis Lins
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 */
 
(function(jQuery)
{
    
    var defaults, $content, $mask, o = null;
    
    jQuery.dlg = function(options)
    {
        if(jQuery.dlg.isActive() === false)
        {
            jQuery.dlg.init();
            o = jQuery.extend(defaults, options);
            $content.css(o.css);
            jQuery.dlg.showDialog();
        }
    }
      
    jQuery.fn.dlg = function(options)
    {
        if(jQuery.dlg.isActive() === false)
        {
            jQuery.dlg.init();
            o = jQuery.extend(defaults, options);
            $content.css(o.css);
            jQuery(this).bind('click', jQuery.dlg.showDialog);
        }
    }
     
    jQuery.dlg.init = function()
    {
        defaults = {
            content: 'Conteúdo',
            buttonText: 'Ok',
            css: {
                width: 400,
                height: 'auto'
            },
            easeIn: 'backout',
            easeOut: 'backin',
            speedIn: 500,
            speedOut: 500,
            onComplete: function(){},
            focusCloseButton: true,
            maskCloseDialog: false
        };
        
        $content = jQuery('#dlgContent').size() > 0 ? jQuery('#dlgContent') : jQuery('<div id="dlgContent"></div>').appendTo('body');
        $mask = jQuery('#dlgMask').size() > 0 ? jQuery('#dlgMask') : jQuery('<div id="dlgMask"></div>').appendTo('body');
    }
    
    jQuery.dlg.isActive = function()
    {
        if(!jQuery('#dlgMask')[0] || !jQuery('#dlgContent')[0])
        {
            return false;
        }
        if(jQuery('#dlgMask:visible').size() <= 0 || jQuery('#dlgContent:visible').size() <= 0)
        {
            return false;
        }
        return true;
    }
    
    jQuery.dlg.showDialog = function(e)
    {
        if(jQuery.dlg.isActive() === true)
        {
            return;
        }
        
        jQuery(document).bind('scroll', jQuery.dlg.repositionContent);
        jQuery(window).bind('scroll', jQuery.dlg.repositionContent);
        
        $content.css({left: jQuery.dlg.getPosLeft(), top: 0}).html(o.content).append('<p id="dlgCloseButton"><a href="nothing">' + o.buttonText + '</a></p>');

        $mask.css({opacity: 0.7, width: jQuery(document).width(), height: jQuery(document).height()}).fadeIn(o.speedIn, function()
        {
            if(o.maskCloseDialog)
            {
                $mask.bind('click', jQuery.dlg.closeDialog);
            }
        });

        $content.css('opacity', 0).show().animate({top: jQuery.dlg.getPosTop(), opacity: 1}, o.speedIn, o.easeIn, function()
        {
            if(jQuery.browser.msie)
            {
                jQuery(this).get(0).style.removeAttribute('filter');
            }
            if(o.focusCloseButton)
            {
                jQuery('#dlgCloseButton a').focus();
            }
        });
        
        jQuery('#dlgCloseButton').live('click', jQuery.dlg.closeDialog);
    }
    
    jQuery.dlg.closeDialog = function(e)
    {
        e.preventDefault();
        
        if(jQuery.dlg.isActive() === false)
        {
            return;
        }

        $mask.fadeOut(o.speedOut);

        jQuery(document).unbind('scroll');
        jQuery(window).unbind('scroll');
        $content.stop().animate({
            left: jQuery.dlg.getPosLeft(),
            top: jQuery.dlg.getPosTop() - jQuery(document).scrollTop() - jQuery(window).height(),
            opacity: 0
        }, o.speedOut, o.easeOut, function()
        {
            $content.hide();
            o.onComplete();
            $mask.unbind();
        });  
    }
    
    jQuery.dlg.repositionContent = function()
    {
        if($content.is(':visible'))
        {
            $content.stop().animate({
                left: jQuery.dlg.getPosLeft(),
                top: jQuery.dlg.getPosTop(),
                opacity: 1
            }, o.contentSpeedIn, o.easeIn);               
        } 
    }

    jQuery.dlg.getPosLeft = function()
    {
        return jQuery(window).width() / 2 - $content.width() / 2 - parseInt($content.css('paddingLeft')) + jQuery(document).scrollLeft();
    }

    jQuery.dlg.getPosTop = function()
    {
        return jQuery(window).height() / 2 - $content.height() / 2 - parseInt($content.css('paddingTop')) + jQuery(document).scrollTop();
    }
    
})(jQuery);


