﻿/* 
Copyright 2008 Safetec Compliance Systems, Inc. 
*/
/// <reference path="~/App_Javascript/jquery.min.js" />

(function($) {

    // Private Variables
    var ie6 = $.browser.msie && parseInt($.browser.version) == 6 && !window['XMLHttpRequest'];
    var ltIE8 = $.browser.msie && parseInt($.browser.version) < 8 && !window['XMLHttpRequest'];
    var ieQuirks = $.browser.msie && !$.boxModel;

    $.elements = { objects: {} };

    var defaults = {
        options: {
            iframeCSSClass: "showdialog-iframe",
            overlayCSSClass: "showdialog-overlay",
            dialogCSSClass: "showdialog-dialog"
        },
        iframeCSS: {
            display: 'none',
            opacity: '0',
            position: 'fixed',
            zIndex: '20000',
            top: '0',
            left: '0'
        },
        overlayCSS: {
            backgroundColor: 'black',
            display: 'none',
            opacity: 50 / 100,
            position: 'fixed',
            zIndex: 20001,
            top: '0',
            left: '0'
        },
        dialogCSS: {
            display: 'none',
            position: 'fixed',
            zIndex: '20002'
        }
    };

    function getWindowSize() {
        var el = $(window);

        // fix a jQuery/Opera bug with determining the window height
        var h = $.browser.opera && $.browser.version > '9.5' && $.fn.jquery <= '1.2.6' ?
			    document.documentElement['clientHeight'] :
			    el.height();

        return [h, el.width()];
    }

    function setPosition(windowSize) {
        var top = 0,
			left = 0,
			hCenter = (windowSize[0] / 2) - (($.elements.dialog2.height() || $.elements.dialog2.height()) / 2),
			vCenter = (windowSize[1] / 2) - (($.elements.dialog2.width() || $.elements.dialog2.width()) / 2);
        top += hCenter;
        left += vCenter;
        if (!ie6) {
            $.elements.dialog2.css({ left: left, top: top });
        } else {
            $.elements.dialog2.css({ left: left });
        }
    }

    function fixIE() {
        if ($.elements.iframe) {
            var style = $.elements.iframe[0].style;
            style.position = 'absolute';
            style.setExpression('height', 'document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + "px"');
            style.setExpression('width', 'jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
        }
        if ($.elements.overlay) {
            var style = $.elements.overlay[0].style;
            style.position = 'absolute';
            style.setExpression('height', 'document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + "px"');
            style.setExpression('width', 'jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
        }
        if ($.elements.dialog2) {
            var style = $.elements.dialog2[0].style;
            style.position = 'absolute';
            style.setExpression('top', '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
        }
    }

    $.fn.dialog2 = function(options) {
        var options = $.extend(defaults.options, options);

        var windowSize = getWindowSize();

        if (ie6 && !$.elements.iframe) {
            $.elements.iframe = $(document.createElement('iframe'));
            $.elements.iframe.attr("src", "App_UnsecuredMethods/ie6iframefix.html");
            $.elements.iframe.addClass(options.iframeCSSClass);
            $.elements.iframe.css(defaults.iframeCSS);
            $.elements.iframe.css('height', windowSize[0]);
            $.elements.iframe.css('width', windowSize[1]);
            $.elements.iframe.appendTo('body');
        }

        if (!$.elements.overlay) {
            $.elements.overlay = $(document.createElement('div'));
            $.elements.overlay.addClass(options.overlayCSSClass);
            $.elements.overlay.css(defaults.overlayCSS);
            $.elements.overlay.css('height', windowSize[0]);
            $.elements.overlay.css('width', windowSize[1]);
            $.elements.overlay.appendTo('body');
            $.elements.overlay.click(function() {
                $.elements.dialog2.fadeIn(85).animate({ top: "-=4px" }, 85).animate({ top: "+=4px" }, 85).animate({ top: "-=4px" }, 85).animate({ top: "+=4px" }, 85).animate({ top: "-=4px" }, 85).animate({ top: "+=4px" }, 80);
            });
        }

        if (!$.elements.dialog2) {
            $.elements.dialog2 = $(document.createElement('div'));
            $.elements.dialog2.addClass(options.dialogCSSClass);
            $.elements.dialog2.css(defaults.dialogCSS);
            $.elements.dialog2.appendTo('body');
        }

        $.elements.dialog2.children().remove();
        $.elements.dialog2.append(this);

        if (ie6 || (ieQuirks && ltIE8)) { fixIE(); }

        return $(this);
    };

    $.fn.dialog2.show = function(obj) {
        var windowSize = getWindowSize();

        if ($.elements.iframe) { $.elements.iframe.show(); }
        $.elements.overlay.fadeIn('fast');
        $.elements.dialog2.show();

        $(window).bind('resize', function() {
            var windowSize = getWindowSize();
            if ($.elements.iframe) {
                $.elements.iframe && $.elements.iframe.css({ height: windowSize[0], width: windowSize[1] });
            }
            $.elements.overlay.css({ height: windowSize[0], width: windowSize[1] });
            setPosition(windowSize);
        });

        setPosition(windowSize);
    };

    $.fn.dialog2.close = function() {
        if ($.elements.iframe) {
            $.elements.iframe.hide();
        }

        if ($.elements.overlay) {
            $.elements.overlay.hide();
        }

        if ($.elements.dialog2) {
            $.elements.dialog2.hide();
        }
    };

    $.fn.dialog2.setOverlayStyle = function(style) {
        $.elements.overlay.css(style);
    };

})(jQuery);