// File             : mydlg.js
// Programmer       : John Wong
// Copyright (c) Q-Surf Computing Solutions, 2003. All rights reserved.
// http://www.q-surf.com

// One object tracks the current modal dialog opened from this window.
var dialogWin = new Object()
var Nav4 = ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) >= 4))

function MyDlgHandleOK(obj)
{
    if (top.opener && !top.opener.closed && top.opener.dialogWin)
    {
        top.opener.dialogWin.returnedValue = obj
        if (top.opener.dialogWin.returnFunc)
        {
            top.opener.dialogWin.returnFunc()
        }
    } 
    else 
    {
        window.alert("You have closed the main window.\n\nNo action will be taken on the choices in this dialog box.")
    }
    top.window.close()
    return false
}

// Handle click of Cancel button
function MyDlgHandleCancel() 
{
    top.window.close()
    return false
}

function MyDlgGetObj()
{
    return top.opener.dialogWin
}

// Generate a modal dialog.
// Parameters:
//    url -- URL of the page/frameset to be loaded into dialog
//    width -- pixel width of the dialog window
//    height -- pixel height of the dialog window
//    returnFunc -- reference to the function (on this page)
//                  that is to act on the data returned from the dialog
//    args -- [optional] any data you need to pass to the dialog
function MyDlgOpen(url, width, height, bResize, strScrolling) {
    if (!dialogWin.win || (dialogWin.win && dialogWin.win.closed)) {
        // Initialize properties of the modal dialog object.
        //dialogWin.returnFunc = returnFunc
        //dialogWin.returnedValue = null
        //dialogWin.args = args
        //dialogWin.callerdata = callerdata
        dialogWin.url = url
        dialogWin.width = width
        dialogWin.height = height
        dialogWin.scrolling = strScrolling ? strScrolling : "no"
        // Keep name unique so Navigator doesn't overwrite an existing dialog.
        dialogWin.name = (new Date()).getSeconds().toString()
        var strResize
        if (bResize)
            strResize = "yes"
        else
            strResize = "on"
        // Assemble window attributes and try to center the dialog.
        var attr
        if (Nav4) {
            // Center on the main window.
            dialogWin.left = window.screenX + 
               ((window.outerWidth - dialogWin.width) / 2)
            dialogWin.top = window.screenY + 
               ((window.outerHeight - dialogWin.height) / 2)
            attr = "screenX=" + dialogWin.left + 
               ",screenY=" + dialogWin.top + ",resizable="+strResize+",width=" + 
               dialogWin.width + ",height=" + dialogWin.height+',scrollbars='+strScrolling
        } else {
            // The best we can do is center in screen.
            dialogWin.left = (screen.width - dialogWin.width) / 2
            dialogWin.top = (screen.height - dialogWin.height) / 2
            attr = "left=" + dialogWin.left + ",top=" + 
               dialogWin.top + ",resizable="+strResize+",width=" + dialogWin.width + 
               ",height=" + dialogWin.height+',scrollbars='+strScrolling
        }
        
        // Generate the dialog and make sure it has focus.
        dialogWin.win=window.open(url, dialogWin.name, attr)
        dialogWin.win.focus()
    } else {
        dialogWin.win.focus()
    }
}

// Event handler to inhibit Navigator form element 
// and IE link activity when dialog window is active.
function deadend() {
    if (dialogWin.win && !dialogWin.win.closed) {
        dialogWin.win.focus()
        return false
    }
}

// Since links in IE4 cannot be disabled, preserve 
// IE link onclick event handlers while they're "disabled."
// Restore when re-enabling the main window.
var IELinkClicks

// Disable form elements and links in all frames for IE.
function MyDlgDisableForms() {
    IELinkClicks = new Array()
    for (var h = 0; h < frames.length; h++) {
        for (var i = 0; i < frames[h].document.forms.length; i++) {
            for (var j = 0; j < frames[h].document.forms[i].elements.length; j++) {
                frames[h].document.forms[i].elements[j].disabled = true
            }
        }
        IELinkClicks[h] = new Array()
        for (i = 0; i < frames[h].document.links.length; i++) {
            IELinkClicks[h][i] = frames[h].document.links[i].onclick
            frames[h].document.links[i].onclick = deadend
        }
        frames[h].window.onfocus = MyDlgCheckModal
        frames[h].document.onclick = MyDlgCheckModal
    }
}

// Restore IE form elements and links to normal behavior.
function MyDlgEnableForms() {
    for (var h = 0; h < frames.length; h++) {
        for (var i = 0; i < frames[h].document.forms.length; i++) {
            for (var j = 0; j < frames[h].document.forms[i].elements.length; j++) {
                frames[h].document.forms[i].elements[j].disabled = false
            }
        }
        for (i = 0; i < frames[h].document.links.length; i++) {
            frames[h].document.links[i].onclick = IELinkClicks[h][i]
        }
    }
}

// Grab all Navigator events that might get through to form
// elements while dialog is open. For IE, disable form elements.
function MyDlgBlockEvents() {
    if (Nav4) {
        window.captureEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS)
        window.onclick = deadend
    } else {
        MyDlgDisableForms()
    }
    window.onfocus = MyDlgCheckModal
}
// As dialog closes, restore the main window's original
// event mechanisms.
function MyDlgUnblockEvents() {
    if (Nav4) {
        window.releaseEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS)
        window.onclick = null
        window.onfocus = null
    } else {
        MyDlgEnableForms()
    }
}

// Invoked by onFocus event handler of EVERY frame,
// return focus to dialog window if it's open.
function MyDlgCheckModal() {
    setTimeout("MyDlgFinishChecking()", 50)
    return true
}

function MyDlgFinishChecking() {
    if (dialogWin.win && !dialogWin.win.closed) {
        dialogWin.win.focus() 
    }
}


