/* ---------------------------------------------------------------------
	popupwindow.js

	From 	"Simulating Modal Dialog Windows" by Danny Goodman
	see: 	http://developer.netscape.com/viewsource/

	Adapted for Real Living use by Margo Noreen, 1.2003
	Also see companion script: "poppedwindow.js"
--------------------------------------------------------------------- */

var Nav4 = ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4));
var dialogWin = new Object();

function openDialog(url, width, height, returnFunc, args, customAttr)
{
	var attr;

	if (!dialogWin.win || (dialogWin.win && dialogWin.win.closed))
	{
		dialogWin.returnFunc = returnFunc;
		dialogWin.returnedValue = "";
		dialogWin.args = args;
		dialogWin.url = url;
		dialogWin.width = width;
		dialogWin.height = height;

		//keep name unique so Navigator doesn't overwrite an existing dialog.
		dialogWin.name = (new Date()).getSeconds().toString();
		if (Nav4)
		{
			//center on main window
			dialogWin.left = window.screenX + ((window.outerWidth - dialogWin.width) / 2);
			dialogWin.top = window.screenY + ((window.outerHeight - dialogWin.height) / 2);
		}
		else 
		{
			//center on screen
			dialogWin.left = (screen.width - dialogWin.width) / 2;
			dialogWin.top = (screen.height - dialogWin.height) / 2;
		}

		attr = 	'screenX=' + dialogWin.left + ',screenY=' + dialogWin.top;
		attr += ',width=' + dialogWin.width + ',height=' + dialogWin.height;

		if (customAttr)
		{
			if (customAttr.length > 0) attr += ',' + customAttr;
		}
			
		//generate the dialog
		dialogWin.win = window.open(dialogWin.url, dialogWin.name, attr)

	}

	//set focus to dialog window (new or existing)
	checkModal();
}


// 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 disableForms() {
	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;
		}
	}
}

// Restore IE form elements and links to normal behavior.
function enableForms() {
	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 blockEvents() {
	if (Nav4) {
		window.captureEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS);
		window.onclick = deadend;
	} else {
		disableForms();
	}
	window.onfocus = checkModal;
}
// As dialog closes, restore the main window's original
// event mechanisms.
function unblockEvents() {
	if (Nav4) {
		window.releaseEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS);
		window.onclick = null;
		window.onfocus = null;
	} else {
		enableForms();
	}
}

// Invoked by onFocus event handler of EVERY frame,
// return focus to dialog window if it's open.
function checkModal() {
	if (dialogWin.win && !dialogWin.win.closed) {
		dialogWin.win.focus();	
	}
}
