﻿if(typeof web == 'undefined')
    var web = {}

web.modal = {
    show: function(elementID, callback) {
        var Modal = document.getElementById(elementID);
        if (Modal) {
            this.reposition(elementID, true);

            jQuery(window).resize(function() {
                web.modal.reposition(elementID);
            });

            jQuery(Modal).find(".Modal_Close:first").click(function() {
                web.modal.hide(elementID);
                return false;
            });

            jQuery(Modal).find(".Modal_Collapse:first").click(function() {
                web.modal.collapse(elementID);
                return false;
            });

            jQuery(Modal).find(".Modal_Expand:first").click(function() {
                web.modal.expand(elementID);
                return false;
            });

            jQuery(Modal).find(".Modal_Body:first").hide();

            web.modal.showOverlay(function() {
                jQuery(Modal).show();
                setTimeout(function() {
                    web.modal.expand(elementID, function() {
                        web.modal.resizeOverlay();

                        if (typeof (callback) == "function")
                            callback();

                        web.modal.reposition(elementID, true);
                    });
                }, 200);
            });

        }
    },

    hide: function(elementID, callback) {
        var Modal = document.getElementById(elementID);
        web.modal.collapse(elementID, function() {
            jQuery(Modal).hide();
            jQuery(".Modal_Body", Modal).show();
            if (jQuery(".Modal:visible").length == 0) {
                web.modal.hideOverlay();
            }
            if (typeof (callback) == "function")
                callback();
        });
    },

    collapse: function(elementID, callback) {
        var Modal = document.getElementById(elementID);
        jQuery(".Modal_Body", Modal).slideUp(180, function() {
            if (jQuery.isFunction(callback))
                callback();
        });
        jQuery(".Modal_Collapse", Modal).hide();
        jQuery(".Modal_Expand", Modal).show();
    },

    expand: function(elementID, callback) {
        var Modal = document.getElementById(elementID);
        jQuery(".Modal_Body", Modal).slideDown(180, function() {
            if (jQuery.isFunction(callback))
                callback();
        });
        jQuery(".Modal_Collapse", Modal).show();
        jQuery(".Modal_Expand", Modal).hide();

    },

    reposition: function(elementID, init) {
        var Modal = document.getElementById(elementID);
        var v;

        if (jQuery(Modal).parents(".Modal:first").length > 0) {
            var parentModal = jQuery(Modal).parents(".Modal");
            var parentModalO = jQuery(parentModal).offset();
            var v2 = this.viewport();
            v = {
                x: 0,
                y: parentModalO.top - (jQuery(Modal).height() / 2),
                cx: jQuery(parentModal).width(),
                cy: jQuery(parentModal).height()
            }
        } else {
            v = this.viewport();
        }

        var yPos;

        if (init)
            yPos = v.cy / 2 - jQuery(Modal).height() / 2 + v.y;

        var xPos = v.cx / 2 - jQuery(Modal).width() / 2 + v.x;

        jQuery(Modal).css({ top: yPos,
            left: xPos
        });
    },

    showOverlay: function(callback) {
        if (jQuery("#ModalOverlay").length == 0) {
            var Overlay = document.createElement("div");
            jQuery(Overlay).attr("id", "ModalOverlay").css("opacity", 0).appendTo(document.body);
            jQuery(window).resize(web.modal.resizeOverlay);

            jQuery(Overlay).fadeTo('fast', 0.5, function() {
                if (jQuery.isFunction(callback))
                    callback();
                web.modal.resizeOverlay();
            });
        } else {
            if (jQuery.isFunction(callback))
                callback();
            web.modal.resizeOverlay();
        }
    },

    hideOverlay: function(callback) {
        var Overlay = jQuery("#ModalOverlay");
        jQuery(window).unbind("resize", web.modal.resizeOverlay);
        if (Overlay.length > 0) {
            jQuery(Overlay).fadeTo('fast', 0, function() {
                jQuery(this).remove();

                if (jQuery.isFunction(callback))
                    callback();
            });
        }
    },

    resizeOverlay: function() {
        var Overlay = jQuery("#ModalOverlay");

        if (Overlay.length > 0) {
            var v = web.modal.viewport();
            jQuery(Overlay).css({ top: 0, left: 0, height: v.dy, width: "100%" });

        }
    },

    viewport: function() {
        return {
            x: $(window).scrollLeft(),
            y: $(window).scrollTop(),
            cx: $(window).width(),
            cy: $(window).height(),
            dy: $(document).height(),
            dby: $(document.body).height()
        };
    },

    changeTitle: function(elementID, newTitle) {
        var Modal = document.getElementById(elementID);
        if(Modal)
            jQuery(".Modal_Header_Text", Modal).text(newTitle);
    }
}