﻿(function ($) {
    var loadedDialogs = {};
    var initialized = false;
    var dialogsCount = 0;
    $.fn.dialog = function (options) {
        var object = $(this);
        if (!initialized) {
            $(document).keydown(function (e) {
                if (e.keyCode === 27) {
                    var key = loadedDialogs[dialogsCount];
                    CloseModal(options, $('#' + key));
                }
            });
            initialized = true;
        }
        if (options == undefined)
            options = {};
        if (options.bindTo != undefined) {
            options.bindTo.click(function (e) {
                e.preventDefault();
                ShowModal(object, options);
            });
        }
        if (!($(this).hasClass('dialog_window')))
            $(this).addClass('dialog_window');
        InitializeOptions($(this), options);
        if (options.open)
            ShowModal(object, options);
    };

    $.fn.dialogclose = function () {
        var object = $(this);
        var objectId = object.attr('id');
        var maskId = 'Mask_' + objectId;
        var maskTopId = 'Mask_Top_' + objectId;
        loadedDialogs[dialogsCount] = undefined;
        dialogsCount--;
        $('#' + maskTopId).fadeOut(1);
        $('#' + maskId).fadeOut(1, function () {
            $(this).remove();
            $('#' + maskTopId).remove();
        });
    };

    function InitializeOptions(object, options) {
        if (options.title == undefined)
            options.title = object.attr('title');
        if (options.noTitle == undefined)
            options.noTitle = false;
        if (options.width == undefined)
            options.width = 300;
        if (options.escKey == undefined)
            options.escKey = true;
        if (options.closeButton == undefined)
            options.closeButton = true;
        if (options.open == undefined)
            options.open = false;
    }

    function ShowModal(object, options) {
        var title = '';
        var objectId = object.attr('id');
        var closeId = "CloseDialog_" + objectId;
        var maskId = 'Mask_' + objectId;
        var maskTopId = 'Mask_Top_' + objectId;
        dialogsCount++;
        loadedDialogs[dialogsCount] = objectId;
        if (!options.noTitle) {
            title = '<b>' + options.title + '</b>';
            if (options.closeButton) {
                title = '<a class="closeDialog" href="#" id="' + closeId + '"><b>[X]</b></a>' + title;
            }
            title = '<div id="dialog_header"><p>' + title + '</p></div>';
        }
        var element = '<div id="Dialog" style="width: ' + options.width + 'px; margin: 0 auto;margin-top: 60px; margin-bottom: 40px;" class="ui-corner-bottom">' + title + '<div>' + object.html() + '</div></div>';
        object.before('<div class="mask" id="' + maskId + '"></div>');
        object.before('<div class="mask_top" id="' + maskTopId + '">' + element + '</div>');
        $('#' + maskId).fadeTo(1, 0.3);
        $('#' + maskTopId).fadeIn(1, function () {
            $('#' + maskTopId).focus();
            if (options.afterDisplay != undefined)
                options.afterDisplay();
        });
        $('#' + closeId).click(function (e) {
            e.preventDefault();
            CloseModal(options, object);
        });
        $('#' + maskTopId).click(function (event) {
            var target = $(event.target);
            if (!(target.is('#' + maskTopId)))
                return;
            CloseModal(options, object);
        });
        $('#' + maskId).css({ 'display': 'block', opacity: 0 });
        $('#' + maskTopId).css({ 'display': 'block', opacity: 0 });
    }

    function CloseModal(options, object) {
        var objectId = object.attr('id');
        loadedDialogs[dialogsCount] = undefined;
        dialogsCount--;
        var maskId = 'Mask_' + objectId;
        var maskTopId = 'Mask_Top_' + objectId;
        $('#' + maskTopId).fadeOut(1);
        $('#' + maskId).fadeOut(1, function () {
            $(this).remove();
            $('#' + maskTopId).remove();
            if (options.onClose != undefined)
                options.onClose();
        });
    }
})(jQuery);

