/**
 * Modal dialogs default options.
 *
 * @author Nikita Vershinin <me@endeveit.net>
 */
(function($) {
    $.Modals = {
        options : {
            autoResize: true,
            overlayId    : 'modal-overlay',
            containerId  : 'modal-container',
            closeHTML    : null,
            opacity      : 65,
            overlayClose : true
        },

        $errorsContainer : $(document.createElement('ul'))
            .addClass('form-errors')
            .hide(),

        /**
         * Updates height of provided object.
         */
        updateHeight : function(object) {
            var $container = $('#modal-container');
            $container.css(
                'height',
                $(object).height() + $('.modal-title', $container).height() + 15//padding
            );
        },

        /**
         * Fire up when modal dialog opened.
         */
        onOpenCb : function(d) {
            var $modalData = $('.modal-data', d.data);

            // Clean inputs
            $('input[type=text], textarea', $modalData).each(function() {
                $(this).val('');
            });

            // Errors container for forms in modals
            if ($modalData.size() > 0) {
                $.Modals.$errorsContainer
                    .prependTo($modalData)
                    .hide();
            }

            $.Modals.updateHeight(d.container[0]);

            d.overlay.show();
            d.container.show();

            $('.modal-content', d.container).show();
        },

        handleAjaxErrors : function($modalContent, data) {
            if (typeof(data.errors) != 'undefined') {
                $('li', $.Modals.$errorsContainer).remove();
                $.Modals.$errorsContainer
                    .append('<li>' + data.errors.join('</li><li>') + '</li>')
                    .show();
            } else {
                var $modalData = $('.modal-data', $modalContent);
                $modalData.find('*').remove();
                $modalData.append('<p>' + data.success.join('<br />') + '</p>');
            }

            this.updateHeight($modalContent);
        }
    };

    $.Modals.options.onOpen = $.Modals.onOpenCb;
})(jQuery);
