	//-----------------------------------------------------------------------------------------------------------------------------------------
	// PROVIDE JAVASCRIPT PAGE NAVIGATION IN THE SITE
	//
	//	NOTES:
	//		1. The subdirectory name of the target page must have the same name as the target page name itself (minus the HTML file type ext).
	//		2.  There is a literal constant 'DIConstants.baseHref' that must be set.  It is set in the DIConstants.js module.
	//-----------------------------------------------------------------------------------------------------------------------------------------
	function doPageNav(navParamItem) {
		try {
			if (isDNE(navParamItem)) { throw -1; }
			var navId = navParamItem.id;
			if (isDNE(navId)) { throw -2; }
					
			var baseHrefLen = DIConstants.baseHref.length;
			var curHREF = document.URL;
			var lastIdx = (curHREF.lastIndexOf(DIConstants.baseHref))+baseHrefLen;
			var swapHREF = curHREF.substring(0,lastIdx);	
					
			var NavTarget = swapHREF + navId + "/" + navId + ".html";
			window.location.href = NavTarget;
		} catch(errNbr) {
		 	switch(errNbr) {
		 		case -1: alert("(-1): doPageNav():\n The navParamItem arg DNE.  Can not construct Struts target for button click."); break;
		 		case -2: alert("(-2): doPageNav():\n The navParamItem arg does NOT have an id property."); break;
				default: alert("(DfltErr): doPageNav(): \n" + errNbr); break;
		 	}
	    }
	}
	 
	 
	//-----------------------------------------------------------------------------------------------------------------------------------------
	// PROVIDE JAVASCRIPT PAGE NAVIGATION BACK TO HOME UNDER VARIETY OF CONTEXTS
	//	Finding "HOME" can be a different logic path depending on user and context.  Therefore, this separate function handles that.
	//
	//	NOTES:
	//		1. 	There is a literal constant 'DIConstants.baseHref' that must be set.  It is set in the DIConstants.js module.
	//-----------------------------------------------------------------------------------------------------------------------------------------
	function findHome() {
		try {
			if (isDNE(DIConstants)) { throw -1; }
			var baseHrefLen = DIConstants.baseHref.length;
			var curHREF =  document.URL;
			var lastIdx = (curHREF.lastIndexOf(DIConstants.baseHref))+baseHrefLen;
			var swapHREF = curHREF.substring(0,lastIdx);	
					
			var NavTarget = swapHREF + "index.html";
			window.location.href = NavTarget;
		} catch(errNbr) {
		 	switch(errNbr) {
		 		case -1: alert("(-1): findHome():\n DIConstants has not been set.  Ensure that code instantiates FIRST."); break;
				default: alert("(DfltErr): findHome(): \n" + errNbr); break;
		 	}
	    }
	} 
	
	
	 
	 
	//---------------------------------------------------------------------------------------------------------------------------------
	// CREATE STANDARD LEFT NAV MENU FOR CASTLE ZEEK SITE
	//   This function generates the dd list of 'leftNavItem' items.  It expects there to be a DIV element called 'leftnav' within
	//   which this construction can be populated using innerHTML assignment.
	//   NOTES:
	//		1. 	Be mindful of the execution order.  These menu items must be constructed and present in the DOM before subsequent actions
	//		   	can begin to assign event handlers to them.  See the execution order of the initPageJS() function of the index.html page
	//		   	for a working example.
	//		2. 	If you change the id of a menu item, be SURE that is actually the same name (case sensitive!) of the HTML subdirectory
	//			containing the target .html file --- AND --- that the .html file is ALSO named exactly the same.
	//---------------------------------------------------------------------------------------------------------------------------------
	 function genLeftNav() {
	 	try {
	 		var leftNavRef = $('leftnav');
	 		if (isDNE(leftNavRef)) { throw -1; }
	 		
	 		var leftNavMarkup  = "<dl>";
	 		
	 		if (curPageName!==null && "home"==curPageName) {
	 		    //Do nothing.  This is the HOME page and does not need nav pointing to home
	 		} else {
	 		    leftNavMarkup += "<dd class='leftNavItem' id='home'>Home</dd>";
	 		}
	 		   
	 		leftNavMarkup += "<dd class='leftNavItem' id='services'>Services</dd>";
	 		leftNavMarkup += "<dd class='leftNavItem' id='pricing'>Pricing</dd>";
 	 		leftNavMarkup += "<dd class='leftNavItem' id='faq'>FAQ</dd>";
 	 		leftNavMarkup += "<dd class='leftNavItem' id='tos'>Terms Of Service</dd>";
		  	leftNavMarkup += "</dl>";
		  		
		  	leftNavRef.innerHTML = leftNavMarkup;	
	 	} catch(errNbr) {
		 	switch(errNbr) {
		 		case -1: alert("(-1): genLeftNav():\n The $('leftnav') Prototype method did NOT find its target DIV."); break;
				default: alert("(DfltErr): genLeftNav(): \n" + errNbr); break;
		 	}
	    }
	 }
	 
	 
	//---------------------------------------------------------------------------------------------------------------------------------
	// CREATE STANDARD MINI NAV MENU FOR CASTLE ZEEK SITE
	//   This function generates the set of top/header area utility navigation items like "faq", "home", "login" etc.
	//   
	//   NOTES:
	//		1. This is broken-out functionality than normal left navigation since it involves server interaction in many cases.
	//---------------------------------------------------------------------------------------------------------------------------------
	 function genMiniNav() {
	 	try {
	 		var miniNavRef = $('mininav');
	 		if (isDNE(miniNavRef)) { throw -1; }
	 		
	 		var miniNavMarkup  = "<span class='miniNavItem' onclick='findHome()' id='home'>HOME</span>";
	 		miniNavMarkup += "<span class='miniNavItem' onclick='doPageNav(this)' id='faq'>FAQ</span>";
 	 		miniNavMarkup += "<span class='miniNavItem' onclick='doPageNav(this)' id='tos'>TOS</span>"; 	 			
 	 			
		  		
		  	miniNavRef.innerHTML = miniNavMarkup;	
	 	} catch(errNbr) {
		 	switch(errNbr) {
		 		case -1: alert("(-1): genMiniNav():\n The $('mininav') Prototype method did NOT find its target DIV."); break;
				default: alert("(DfltErr): genMiniNav(): \n" + errNbr); break;
		 	}
	    }
	 }
	 
	 
	 //---------------------------------------------------------------------------------------------------------------------------------
	 // ASSIGN EVENT HANDLERS FOR THE STANDARD LEFT NAVIGATION MENU ITEMS
	 // 	Note that there is a an execution order dependency on the genLeftNav() to fire before this.  This is because the left nav
	 //		menu items must first be created into the DOM before this function can assign event handlers.
	 //---------------------------------------------------------------------------------------------------------------------------------
	 function assignLeftNavEvents() {
	 	try {
	 		var leftNavItemArray = $$('dd.leftNavItem');
	 		if (isDNE(leftNavItemArray)) { throw -1; }
	 		
	 		for (var n=0;n<leftNavItemArray.length;n++) {
	 			var curLeftNavItem = leftNavItemArray[n];
	 			var curLeftNavItemId = curLeftNavItem.id;
	 			curLeftNavItem.onmouseover = function() { setLeftNavColors(this.id,'in'); };
	 			curLeftNavItem.onmouseout = function() { setLeftNavColors(this.id,'out'); };
	 			if (curLeftNavItemId=="home") {
	 				curLeftNavItem.onclick = function() { findHome(); };
	 			} else {
	 				curLeftNavItem.onclick = function() { doPageNav(this); };
	 			}
	 		}
	 	
	 	} catch(errNbr) {
		 	switch(errNbr) {
		 		case -1: alert("(-1): assignLeftNavEvents():\n The $$('dd.leftNavItem') Prototype method did NOT find its target elements."); break;
				default: alert("(DfltErr): assignLeftNavEvents(): \n" + errNbr); break;
		 	}
	    }
	 }
	 
	 
	 //---------------------------------------------------------------------------------------------------------------------------------
	 // ASSIGN EVENT HANDLERS FOR THE TOP/MINI NAVIGATION MENU ITEMS
	 // 	Note that there is a an execution order dependency on the genMiniNav() to fire before this.  This is because the top/mini nav
	 //		menu items must first be created into the DOM before this function can assign event handlers.
	 //---------------------------------------------------------------------------------------------------------------------------------
	 function assignMiniNavEvents() {
	 	try {
	 		var miniNavItemArray = $$('span.miniNavItem');
	 		if (isDNE(miniNavItemArray)) { throw -1; }
	 		
	 		for (var n=0;n<miniNavItemArray.length;n++) {
	 			var curMiniNavItem = miniNavItemArray[n];
	 			var curMiniNavItemId = curMiniNavItem.id;
	 			curMiniNavItem.onmouseover = function() { setMiniNavColors(this.id,'in'); };
	 			curMiniNavItem.onmouseout = function() { setMiniNavColors(this.id,'out'); };
	 		}
	 	
	 	} catch(errNbr) {
		 	switch(errNbr) {
		 		case -1: alert("(-1): assignMiniNavEvents():\n The $$('span.miniNavItem') Prototype method did NOT find its target elements."); break;
				default: alert("(DfltErr): assignMiniNavEvents(): \n" + errNbr); break;
		 	}
	    }
	 }
	 
	 
	 
	 
	 
	 //---------------------------------------------------------------------------------------------------------------------------------
	 // RESET THE MAIN NAVIGATION BUTTONS TO THEIR MOUSE-IN/OUT COLORS
	 //		NOTES:
	 //			1. The font and background colors for the menu items are kept in the global variables section at the top of this script.
	 //---------------------------------------------------------------------------------------------------------------------------------
	 function setLeftNavColors(menuItemId,mode) {
	 	try {
	 		if (isDNE(menuItemId)) { throw -1; }
	 		if (isDNE(mode)) { throw -2; }
	 		if (mode!="in" && mode!="out") { throw -3; }
	 		
			var menuItemRef = $(menuItemId);
			if (isDNE(menuItemRef)) { throw -4; }
			
			var newFontColor = null;
			var newBackgroundColor = null;
			
			if (mode=="in") {
				newFontColor = DIConstants.lNavItemFontColorHover;
				newBackgroundColor = DIConstants.lNavItemBGColorHover;
			} else {
				newFontColor = DIConstants.lNavItemFontColor;
				newBackgroundColor = DIConstants.lNavItemBGColor;
			}
			
			menuItemRef.style.backgroundColor = newBackgroundColor;
			menuItemRef.style.color = newFontColor;   
		} catch(errNbr) {
		 	switch(errNbr) {
		 		case -1: alert("(-1): setLeftNavColors(): \n The input arg 'menuItemId' DNE in function call."); break;
		 		case -2: alert("(-2): setLeftNavColors(): \n The input arg 'mode' DNE in function call."); break;
		 		case -3: alert("(-3): setLeftNavColors(): \n The input arg 'mode' must be either 'in' or 'out'.  It was: " + mode); break;
		 		case -4: alert("(-4): setLeftNavColors():\n The $('menuItemId') Prototype method did NOT find its target menu item reference."); break;
				default: alert("(DfltErr): setLeftNavColors(): \n" + errNbr); break;
		 	}
	    }
	 }		   
		
		
	//---------------------------------------------------------------------------------------------------------------------------------
	// RESET THE TOP/MINI NAVIGATION BUTTONS TO THEIR MOUSE-IN/OUT COLORS
	//		NOTES:
	//			1. Font and background colors for menu items are kept in the global variables in the DIConstants namespace object.
	//---------------------------------------------------------------------------------------------------------------------------------
	function setMiniNavColors(menuItemId,mode) {
	 	try {
	 		if (isDNE(menuItemId)) { throw -1; }
	 		if (isDNE(mode)) { throw -2; }
	 		if (mode!="in" && mode!="out") { throw -3; }
	 		
			var menuItemRef = $(menuItemId);
			if (isDNE(menuItemRef)) { throw -4; }
			
			var newFontColor = null;
			var newBackgroundColor = null;
			
			if (mode=="in") {
				newFontColor = DIConstants.miniNavItemFontColorHover;
				newBackgroundColor = DIConstants.miniNavItemBGColorHover;
			} else {
				newFontColor = DIConstants.miniNavItemFontColor;
				newBackgroundColor = DIConstants.miniNavItemBGColor;
			}
			
			menuItemRef.style.backgroundColor = newBackgroundColor;
			menuItemRef.style.color = newFontColor;   
		} catch(errNbr) {
		 	switch(errNbr) {
		 		case -1: alert("(-1): setMiniNavColors(): \n The input arg 'menuItemId' DNE in function call."); break;
		 		case -2: alert("(-2): setMiniNavColors(): \n The input arg 'mode' DNE in function call."); break;
		 		case -3: alert("(-3): setMiniNavColors(): \n The input arg 'mode' must be either 'in' or 'out'.  It was: " + mode); break;
		 		case -4: alert("(-4): setMiniNavColors():\n The $('menuItemId') Prototype method did NOT find its target menu item reference."); break;
				default: alert("(DfltErr): setMiniNavColors(): \n" + errNbr); break;
		 	}
	    }
	 }		
				   
	 
	
	//---------------------------------------------------------------------------------------------------------------------------------
	// GENERATE THE RECURRENT LISTING OF GEOGRAPHIC COVERAGE AREAS SERVICED
	//		NOTES:
	//			1. The DIConstants defines two variables: The CSV of cities and the "dot" graphic separator.
	//---------------------------------------------------------------------------------------------------------------------------------
	function genCoverageArea(srcPg) {
		try {
			if (isDNE(DIConstants.coverageAreaSeparator)) { throw -1; }
	 		if (isDNE(DIConstants.coverageAreas)) { throw -2; }
	 		
	 		var coverAreaTargetRef = $("coveragearea");
	 		if (isDNE(coverAreaTargetRef)) { throw -3; }
	 		
	 		var dotSeparatorTag = null;
	 		if ("home"==srcPg) {
	 			dotSeparatorTag = " <img src=\"_i/"+DIConstants.coverageAreaSeparator+"\" class=\"dot1\"> ";
	 		} else {
	 			dotSeparatorTag = " <img src=\"../_i/"+DIConstants.coverageAreaSeparator+"\" class=\"dot1\"> ";
	 		}
	 		
	 		var coverAreaSPLIT = DIConstants.coverageAreas.split(",");
	 		var coverAreaCNT = coverAreaSPLIT.length;
	 		var coverAreaBuild = "";
	 		
	 		if (coverAreaCNT===1) {
	 			coverAreaBuild = DIConstants.coverageAreas;
	 		} else {
	 			for (var n=0; n<coverAreaCNT; n++) {
	 				if (n>0) { coverAreaBuild += dotSeparatorTag; }
	 				coverAreaBuild += coverAreaSPLIT[n];
	 			}
	 		}
	 		
	 		coverAreaTargetRef.innerHTML = coverAreaBuild;
	 		
		} catch(errNbr) {
		 	switch(errNbr) {
		 		case -1: alert("(-1): genCoverageArea(): \n The 'coverageAreaSeparator' constant DNE in DIConstants.js."); break;
		 		case -2: alert("(-2): genCoverageArea(): \n The 'coverageAreas' constant DNE in DIConstants.js."); break;
		 		case -3: alert("(-3): genCoverageArea(): \n The 'coveragearea' tag DNE in Page."); break;
		 		default: alert("(DfltErr): genCoverageArea(): \n" + errNbr); break;
		 	}
	    }
	}