﻿/*
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);

function framedialog(url, title, frameHeight, frameWidth) { 
    frameHeight = frameHeight || 540;
    frameWidth = frameWidth || 540;

    var frame_id = "frame_" + (1 + Math.floor((Math.random() * 32767)));

    var myDialog = $("<div />").dialog({
        modal: true,
        resizable: false,
        dialogClass: 'tree-view-dialog',
        bgiframe: true,
        draggable: false,
        height: frameHeight,
        width: frameWidth,
        title: title,
        open: function (event, ui) {
            var $dialog = $(this);
            var $frame = $('<iframe id="' + frame_id + '" name="' + frame_id + '" src="' + url + '" frameborder="0"></iframe>');
            $frame.load(function () {
                $form = $frame.contents().find("form");
                $result_code = $('.result-code', $form);

                /* Check response */
                if ($result_code.text() == 'Success') {
                    $dialog.trigger('success');
                    $dialog.dialog('close');
                    $frame.remove();
                    return;
                };

                if (!ie6) {

                    /* Configure Buttons */
                    $.fn.reverse = [].reverse;
                    $buttons = $('.dialog-button', $form).reverse();

                    var formButtons = new Object;
                    $buttons.each(function () {
                        var $button = $(this);
                        $button.hide();
                        formButtons[$button.val()] = function () {
                            $button.click();
                            if ($button.hasClass('close')) {
                                $dialog.dialog('close');
                            }
                        }
                    });

                    var options = {
                        buttons: formButtons
                    };

                    $dialog.dialog('option', options);
                } else {
                    $('.dialog-button.close', $form).click(function () { $dialog.dialog('close'); });
                }

                $("input:text:first", $form).focus();

                $dialog.find(".ajax-loader").remove();
            });

            $dialog.ajaxLoading("");
            $dialog.append($frame);
        },
        close: function (event, ui) { /* Default close behavior  */
            RestoreOriginalForm();
        }
    });

	var ie6 = ($.browser.msie && $.browser.version.substr(0,1)==6);

	if (ie6) {
		//myDialog.dialog("option", "buttons", { "Cancel": function() { $(this).dialog("close"); } });
	}
	
	return myDialog;
}
