﻿var modalDialogDivID = 'divModalDialog';
var modalDialogIFrameID = 'frmModalDialog';
var modalDialogWidth = '';
var modalDialogHeight = '';
var modalDialogLocationLeft = '';
var modalDialogLocationTop = '';
var modalDialogCallingIframeID = ''; //used so that modalDialogClosed function within iframe can be referenced
var blnRefreshModalParentOnClose; //can be used in onModalDialogClosed func for determining if parent page should be refreshed
var modalDialogQueryString = '';
var modalDialogResult = ''; //can be used to store dialog result if necessary

function displayModalDialog(title, queryString, resizable, dialogWidth, dialogHeight, dialogLocationLeft, dialogLocationTop, divID) {
    //init params
    if (dialogWidth != undefined) modalDialogWidth = dialogWidth;
    if (dialogHeight != undefined) modalDialogHeight = dialogHeight;
    if (dialogLocationLeft != undefined)  modalDialogLocationLeft = dialogLocationLeft;
    if (dialogLocationTop != undefined) modalDialogLocationTop = dialogLocationTop;
    modalDialogQueryString = queryString;
    
    if (!document.getElementById(modalDialogDivID)) {
        //create div
        var div = document.createElement('div');
        div.setAttribute('id', modalDialogDivID);
        div.title = title;
        div.style.textAlign = 'center';
        div.style.overflow = 'hidden';

        if (modalDialogQueryString != '') {
            //create iframe
            var iframe = document.createElement('iframe');
            iframe.setAttribute('id', modalDialogIFrameID);
            iframe.frameBorder = '0';
            iframe.scrolling = 'yes';
            iframe.style.height = '100%';
            iframe.style.width = '100%';
            div.appendChild(iframe);
        }
        else if (divID != '') {
            //append div to modal dialog div
            div.appendChild(document.getElementById(divID));
        }

        document.body.appendChild(div);
    }

    $ldc(function() { $ldc('#' + modalDialogDivID).dialog({ open: function() { $ldc(this).parent().appendTo('body'); }, autoOpen: false, closeOnEscape: true, draggable: true, resizable: resizable, modal: true, width: modalDialogWidth, height: 'auto', position: 'center' }); ; });

    if (modalDialogQueryString != '') {
        setIframeSizeAndPosition();

        var randomnbr = Math.floor(Math.random() * 110); //To prevent caching

        document.getElementById(modalDialogIFrameID).setAttribute('src', modalDialogQueryString + '&r=' + randomnbr);

        $ldc('#' + modalDialogDivID).parent().css('visibility', 'hidden');
    }
    else {
        $ldc('#' + modalDialogDivID).parent().css('visibility', 'hidden');
        setDivSizeAndPosition();
    }

    //display dialog
    $ldc('#' + modalDialogDivID).dialog('open');
    $ldc('#' + modalDialogDivID).dialog('option', 'title', title);

    //set dialog closed function
    $ldc('#' + modalDialogDivID).parent().find('.ui-dialog-titlebar-close').click(function() {
        onDialogClosing();
    });
}

function setIframeSizeAndPosition() {
    $ldc(function() {
        $ldc('#' + modalDialogIFrameID).load(function() {
            //set width
            if (modalDialogWidth != '') {
                $ldc('#' + modalDialogDivID).width(modalDialogWidth + 10);
                $ldc('#' + modalDialogDivID).parent().width(modalDialogWidth + 20);
            }
            else {
                $ldc('#' + modalDialogIFrameID).width($ldc('#' + modalDialogIFrameID).contents().find('body').width() + 10);
                $ldc('#' + modalDialogDivID).parent().width($ldc('#' + modalDialogIFrameID).contents().find('body').width() + 20);
            }

            //set height
            if (modalDialogHeight != '')
                $ldc('#' + modalDialogDivID).height(modalDialogHeight + 10);
            else
                $ldc('#' + modalDialogIFrameID).height($ldc('#' + modalDialogIFrameID).contents().find('body').height() + 10);

            //align dialog window
            var wnd = $ldc(window), doc = $ldc(document), pTop = doc.scrollTop(), pLeft = doc.scrollLeft(), minTop = pTop;

            if (modalDialogLocationLeft == '')
                pLeft += (wnd.width() - $ldc('#' + modalDialogDivID).parent().outerWidth()) / 2
            else
                pLeft = modalDialogLocationLeft;

            if (modalDialogLocationTop == '') {
                pTop += (wnd.height() - $ldc('#' + modalDialogDivID).parent().outerHeight()) / 2;
                pTop = Math.max(pTop, minTop);
            }
            else
                pTop = modalDialogLocationTop;

            $ldc('#' + modalDialogDivID).parent().css({ top: pTop, left: pLeft });

            $ldc('#' + modalDialogDivID).parent().css('visibility', 'visible');
        });
    });
}

function closeModalDialog() {
    onDialogClosing();
    $ldc('#' + modalDialogDivID).dialog('close');
}

function setDivSizeAndPosition() {
    $ldc(function() {
        $ldc('#' + modalDialogDivID).focus(function() {
            //set width
            if (modalDialogWidth != '') {
                $ldc('#' + modalDialogDivID).width(modalDialogWidth + 10);
                $ldc('#' + modalDialogDivID).parent().width(modalDialogWidth + 20);
            }
            else {
                $ldc('#' + modalDialogIFrameID).width($ldc('#' + modalDialogIFrameID).contents().find('body').width() + 10);
                $ldc('#' + modalDialogDivID).parent().width($ldc('#' + modalDialogIFrameID).contents().find('body').width() + 20);
            }

            //set height
            if (modalDialogHeight != '')
                $ldc('#' + modalDialogDivID).height(modalDialogHeight + 10);
            else
                $ldc('#' + modalDialogIFrameID).height($ldc('#' + modalDialogIFrameID).contents().find('body').height() + 10);

            //align dialog window
            var wnd = $ldc(window), doc = $ldc(document), pTop = doc.scrollTop(), pLeft = doc.scrollLeft(), minTop = pTop;

            if (modalDialogLocationLeft == '')
                pLeft += (wnd.width() - $ldc('#' + modalDialogDivID).parent().outerWidth()) / 2
            else
                pLeft = modalDialogLocationLeft;

            if (modalDialogLocationTop == '') {
                pTop += (wnd.height() - $ldc('#' + modalDialogDivID).parent().outerHeight()) / 2;
                pTop = Math.max(pTop, minTop);
            }
            else
                pTop = modalDialogLocationTop;

            $ldc('#' + modalDialogDivID).parent().css({ top: pTop, left: pLeft });

            $ldc('#' + modalDialogDivID).parent().css('visibility', 'visible');
        });
    });
}

function onDialogClosing() {
    if (modalDialogQueryString != '')
        document.getElementById(modalDialogIFrameID).setAttribute('src', '');
    if (typeof onModalDialogClosed == 'function')
        onModalDialogClosed();
    else if (modalDialogCallingIframeID != '') { //check if function exists within calling iframe
        var iframe = document.getElementById(modalDialogCallingIframeID);
        if (iframe && (typeof iframe.contentWindow.onModalDialogClosed == 'function'))
            iframe.contentWindow.onModalDialogClosed();
    }
}
