//****************************************************************
//****************************************************************
// COPYRIGHT 2005, Vertex Software, Inc
//
// AUTHOR: rmatejka
// DATE: 07JUN2005
//****************************************************************
//****************************************************************


//****************************************************************
//****************************************************************
// Adds handler to DocumentReadyStateHandler chain that will
// disable a form after submit is called.
//****************************************************************
//****************************************************************
//var gDotNet__doPostBack;
//var gDotNet__OnSubmit;

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// CodeLibrary_OnSubmit
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
function CodeLibrary_OnSubmit() {
	try {
		var valid = false;
		document.forms[0].style.cursor = "wait";
		// Must be called in separte thread otherwise submit is canceled
		// by status change.
		if (gDotNet__OnSubmit) valid = gDotNet__OnSubmit();
		if (valid) {
			window.setTimeout("document.forms[0].disabled = true;", 100);
		}
		else {
			document.forms[0].style.cursor = "default";
		}
	}
	catch (error) {
		window.status = (error.description);
	}
}


//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// CodeLibrary_EnableForm
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
function CodeLibrary_EnableForm(run) {
	try {
		if (run) {
			document.forms[0].style.cursor = "default";
			document.forms[0].disabled = false;
		}
		else {
			window.setTimeout("CodeLibrary_EnableForm(true)", 100);
		}
	}
	catch (error) {
		window.status = ("CodeLibrary_EnableForm: " + error.description);
	}
}


//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// CodeLibrary_DoPostback
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
function CodeLibrary_DoPostback(eventTarget, eventArgument) {
	try {
		if (!gDotNet__doPostBack) return;
		document.forms[0].style.cursor = "wait";
		gDotNet__doPostBack(eventTarget, eventArgument);
		window.setTimeout("document.forms[0].disabled = true;", 100);
	}
	catch (error) {
		window.status = ("CodeLibrary_DoPostback: " + error.description);
	}
}


//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// OverideOnSubmit
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
function OverideOnSubmit() {
	try {
		gDotNet__OnSubmit = document.forms[0].onsubmit;
		document.forms[0].onsubmit = CodeLibrary_OnSubmit;
		if (typeof __doPostBack == "function") {
			gDotNet__doPostBack = __doPostBack;
			__doPostBack = CodeLibrary_DoPostback;
		}
	}
	catch (error) {
		window.status = ("OverrideOnSubmit: " + error.description);
	}
}



//===========================================================
// DisablePageOnNavigate
// Provides feedback for user by disabling document on nav change
// and setting cursor to wait.
//===========================================================
function DisablePageOnNavigate() {
	try {
		if (document.body.onbeforeunload && document.body.onfocus) return;
		document.body.onbeforeunload = function() {
			document.body.style.cursor = "wait";
			// 10JAN2009 RFM - if run immediately, block clicks on links w/ submits!
			//document.body.disabled = true;		
			DisablePageOnNavigate.timerID = window.setTimeout(function() { document.body.disabled = true }, 100);
			}
		document.body.onfocus = function() {
			if (DisablePageOnNavigate.timerID) {
				window.clearTimeout(DisablePageOnNavigate.timerID);
				DisablePageOnNavigate.timerID = "";
				}
			EnablePage();
			// 27MAR2008 RFM - Added since Firefox on mac does not define document.frames.
			if (!document.frames) return;
			// Need to re-enable any iframes that were disabled
			for (var item = 0; item < document.frames.length; item++) {
				// 11APR2008 RFM - trap access denied errors
				try {
					var frameDocument = document.frames[item].document;
					if (!frameDocument || !frameDocument.body) continue;
					frameDocument.body.style.cursor = document.body.style.cursor;
					frameDocument.body.disabled = false;
					}
				catch (error) {
					// ignore AccessDenied errors due to cross-frame scripting
					}
				}
			}
		AddEnablePageToNonPostbackLinks();
		}
	catch (error) {
		window.status = ("DisablePageOnNavigate: " + error.description);
		}
	}


//===========================================================
// AddEnablePageToNonPostbackLinks
// Adds call to EnablePage to links that are known to not do
// postbacks.
//===========================================================
function AddEnablePageToNonPostbackLinks() {
	try {
		// 09JAN2009 RFM - Support for RegisterNonPostBackLink
		var nonPostbackLinks = (RegisterNonPostBackLinks.links ? RegisterNonPostBackLinks.links.concat("DES_SetFocus") : []).join("|");
		var nonPostbackLinksPattern = new RegExp("javascript:(" + nonPostbackLinks + ")", "g");
		var links = document.getElementsByTagName("a");
		for (var linkIndex = 0; linkIndex < links.length; linkIndex++) {
			var link = links.item(linkIndex);
			if (link.href.match(nonPostbackLinksPattern)) {
				var matched = RegExp.$1;
				if (matched) link.href = link.href.replace(matched, "EnablePage();" + matched);
			}
		}
	}
	catch (error) {
		window.status = ("AddEnablePageToNonPostbackLinks: " + error.description);
	}
}



//===========================================================
// RegisterNonPostBackLinks
// Adds comma-delimited list of links to list fo exceptions that do not cause a postback.
// These links will not cause teh page to be disabled.
//===========================================================
function RegisterNonPostBackLinks(nonPostbackLinkList) {
	try {
		if (!RegisterNonPostBackLinks.links) RegisterNonPostBackLinks.links = [];
		RegisterNonPostBackLinks.links = RegisterNonPostBackLinks.links.concat(nonPostbackLinkList.split(","));
		}
	catch (error) {
		window.status = ("RegisterNonPostBackLinks: " + error.description);
		}
	}

//===========================================================
// EnablePage
// Calle to reverse effects of DisablePageOnNavigate. Required
// if clicked link does NOT navigate away from page.
//===========================================================
function EnablePage() {
	try {
		if (DisablePageOnNavigate.timerID) window.clearTimeout(DisablePageOnNavigate.timerID);
		DisablePageOnNavigate.timerID = "";
		document.body.style.cursor = "default";
		document.body.disabled = false;
	}
	catch (error) {
		window.status = ("EnablePage: " + error.description);
	}
}

if (typeof AddDocumentReadyStateChangedHandler != "function") alert("DocumentReadyStateChangedHandler.js must be included in order to call AddDocumentReadyStateChangedHandler");

// 04APR2008 RFM - Deprecated OverideOnSubmit since doesnt' work with links
//AddDocumentReadyStateChangedHandler( OverideOnSubmit );
AddDocumentReadyStateChangedHandler(DisablePageOnNavigate);


