/**
 * Dialog
 */
Class({
    module: 'Graphite.Dialog',
    members: {
        options: {
            dialog: null,
            form: null,
            css: {
                top:            '50%',
                left:           '50%',
                cursor:         'normal'
            },
            reposition: true,
            resetFormOnOpen: true,
            clickOverlayToClose: true,
            onclose: null
        },
        _init: function()
        {
            if (this.options.form === null)
            {
                if (this.options.dialog.find('form').length)
                {
                    this.options.form = this.options.dialog.find('form').eq(0);
                }
            }

            var self = this;

            /**
             * Close/canel dialog links
             */
            this.options.dialog.find('a.cancel-dialog').unbind('click').click(function(e)
            {
                e.preventDefault();
                self.close();
            });

            /**
             * Submit dialog links/buttons
             */
            this.options.dialog.find('a.submit-dialog').unbind('click').click(function(e)
            {
                e.preventDefault();
                if (self.options.form !== null)
                {
                    self.options.form.trigger('submit');
                }
            });
        },
        open: function()
        {
            /**
             * Reset form, if any
             */
            if ((this.options.form !== null) && (this.options.resetFormOnOpen === true))
            {
                this.options.form.resetForm().find('select').trigger('change');
            }

            /**
             * Open dialog
             */
            $.blockUI({
                message: this.options.dialog,
                css: this.options.css,
                overlayCSS: { opacity: '0.7' },
                baseZ: 9999 // make sure dialog is always on top
            });

            this.options.dialog.find('.buttons').unblock();

            /**
             * Re-center dialog
             */
            if (this.options.reposition === true)
            {
                this.options.dialog.center({ position: 'fixed' });
            }

            /**
             * Clicking on overloay loses dialog?
             */
            if (this.options.clickOverlayToClose === true)
            {
                $('.blockOverlay').unbind('click').click(
                    $.bind(this.close, this)
                );
            }
        },
        close: function()
        {
            if ($.isFunction(this.options.onclose))
            {
                this.options.onclose();
            }

            $.unblockUI();
        }
    }
}, /* Constructor */ function(options)
{
    $.extend(this.options, options || {});
    this._init();
});

Graphite.Dialog.setup = function()
{
};
