var init = function() {

	enableExplorerListItemHoverState("nav");
	fixIE55TablePercentages();
}




window.onload = init;






/*	###########################################
 		Functions
	########################################### */
	
	
	/*	###########################################
			fixBadAilaMarkup
		###########################################
		
		This function resizes tables with percentage-based width attributes.
		
		Ed. Note: If we could get it to drop <font> tags, too, that would be great.
	*/	
	
	function fixIE55TablePercentages() {
	
		// Detect for IE < 6, fix table widths if necessary, assuming browser is maximized.
		
		var userAgent = navigator.userAgent.toLowerCase();
		
		if(userAgent.indexOf("msie") != -1) {
		
			if(parseFloat(userAgent.substring(userAgent.indexOf('msie ')+5)) < 6) {
		
				var mainContent = document.getElementById("content");
				var allTables = mainContent.getElementsByTagName("TABLE");
				
				// Calculate widths of other columns, include some padding at the end (120px)
				var usedWidth = parseInt(document.getElementById("subprimary").offsetWidth + document.getElementById("subsecondary").offsetWidth) + 120;
			
				// Assume their browser is maximized and calculate maximum content width (approximation)
				var maxAvailableWidth = screen.width - usedWidth;
				
				
				var thisWidth;
				
				for(var i=0;i<allTables.length;i++) {
					
					thisWidth = allTables[i].getAttribute("width");
					
					
					if(thisWidth.indexOf("%") != -1) {
					
						// Multiply percentage value given times maxAvailableWidth and set size in pixels.
						allTables[i].style.width = (maxAvailableWidth * (parseInt(thisWidth.substr(0,thisWidth.indexOf("%"))) / 100)) + "px";
					}		

				}	
			
			}
		}
	
	}
	
	
	
	/*	###########################################
			multi-tier tree functions
		###########################################
		
		These functions handle multi-tiered trees of <ul>s and <li>s.
	*/
	
	
	
	
	
	
	
	
	
	
	





	/*	###########################################
			toggleBookmarks
		###########################################
		
		These functions handle bookmarks.
	*/


	function toggleBookmarks(menuId) {
	
		if(document.getElementById) {
		
			var bookmarksMenu = document.getElementById(menuId);
		
			//window.alert("Bookmarks Menu ID: " + bookmarksMenu.id + "\nVisibility: " + bookmarksMenu.style.visibility);
			
			if(bookmarksMenu.style.visibility != "visible") {
				bookmarksMenu.style.visibility = "visible";
			} else {
				bookmarksMenu.style.visibility = "hidden";
			}
		}
		
		return true;
	}

	function manageBookmarks(url) {
		window.open(url,'ManageBookmarks','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=450,height=450');
	}
	
	
	function bookmarkGroupToggle(linkElement) {
		if(document.getElementById) {
		
			// <li><span><a>...</a></span></li>
			var groupElement = linkElement.parentNode.parentNode;
			
			if(groupElement.className == "expanded") {
				groupElement.className = "collapsed";
			} else if(groupElement.className == "collapsed") {
				groupElement.className = "expanded";
			}
			
			if(groupElement.className != "terminated") {

				var listToExpand = groupElement.firstChild;
			
				while(listToExpand.tagName != "UL") {
					listToExpand = listToExpand.nextSibling;
				}
				
				(listToExpand.style.display != "block") ? listToExpand.style.display = "block" : listToExpand.style.display = "none";
			
			}	
		}

	}
	
	
	function bookmarkManageAction(newBookmarkIdValue,newBookmarkActionValue) {
		if(document.getElementById) {
	
			var formBookmarkId = document.getElementById("form-bookmark-id");
			var formBookmarkAction = document.getElementById("form-bookmark-action");
			var formElement = document.getElementById("Form1");
			
			formBookmarkId.value = newBookmarkIdValue;
			formBookmarkAction.value = newBookmarkActionValue;
			
			formElement.submit();
		}
	}












	/*	###########################################
			enableExplorerListItemHoverState
		###########################################
		
		This function enables the li:hover/li:over state in IE for use in CSS.
	*/
	
	
	function enableExplorerListItemHoverState(navigationId) {
	
		if (document.all && document.getElementById) {
	
			if(document.getElementById(navigationId)==null) {
				return true;
			}
	
			var navigation = document.getElementById(navigationId);
				
			var navULs = navigation.getElementsByTagName("UL");
		
			var navRoot;
			var thisNode;
			
			for(var j=0; j<navULs.length; j++) {
		
				navRoot = navULs[j];	
		
				for (var i=0; i<navRoot.childNodes.length; i++) {
					
					thisNode = navRoot.childNodes[i];
			
					if (thisNode.nodeName=="LI") {
			
						thisNode.onmouseover=function() {
							this.className += " over";
						}
			
						thisNode.onmouseout=function() {
							this.className=this.className.replace(" over", "");
						}
					}
				}
			}
			
		}
		
		return true;
	}
	
	




	/*	###########################################
			Search Summary Toggles
		###########################################
		
		This function shows and hides Search Summaries
	*/
	
		function ToggleSearchSummaries(switcherElement,searchResultsId) {
			
			if(document.getElementById) {
			
				var newInnerHTML;
				var newBlockStyle;
				
				var searchResults = document.getElementById(searchResultsId);
				
				if(switcherElement.innerHTML == "Hide Summaries") {
					
					newInnerHTML = "Show Summaries";
					newBlockStyle = "none";
				
				} else {
				
					newInnerHTML = "Hide Summaries";
					newBlockStyle = "block";
				
				}
				
				
				switcherElement.innerHTML = newInnerHTML;
				
				
				var summaries = searchResults.getElementsByTagName("P");
						
				for(i=0;i<summaries.length;i++) {
			
					if(summaries[i].className.indexOf("summary") != -1) {
						summaries[i].style.display = newBlockStyle;		
					}
				
				}
			}

		}
	
	
	
	
/* ######################################
	Bubble-Up Form Submission
	#####################################
	
	Take a handler and bubble up to its parent form and submit
*/

function bubbleSubmit(element) {

	// Start crawling up the tree one level above the <input> node to look for the <form>
	var parentForm = element.parentNode;
	
	// Crawl up the tree to find the parent <form> element
	while(parentForm.nodeName != "FORM") {
		parentForm = parentForm.parentNode;
	}	

	parentForm.submit();	
	
}
	
	
	


	/*	###########################################
			Pop Up Windows
		###########################################
		
		JavaScript functions for popping open new windows
	*/
	
	
	
	function SendPage(sendPageURL,targetPageTitle,targetPageURL) {
		//emailApp = send page url
		//pagetitle = title of document
		//pageurl = url of page sending to friend
		
		var urlString = sendPageURL +  '?url=' + targetPageURL + '&title=' + targetPageTitle;
		window.open(urlString,'sendWin','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=450,height=500');
	}
	

	function GetHelp(url) {
	
		var urlString = url;
		//	"/content/members/MemberHelp.aspx";
		
		if(typeof(urlString)=="undefined") urlString = "/content/Help.aspx";
		
		//alert(urlString);
		window.open(urlString,'sendWin','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=450,height=450');
	}
	

	
	function PopUpCalendar(calendarAppURL, textfieldId, formName) {
	
		// Grab date value from the form
		var spanContents = document.getElementById(textfieldId);
		var dateValue = spanContents.value;
	
		var genPopUp = window.open(calendarAppURL + "?fieldid=" + textfieldId  + "&formName=" + formName + "&datevalue=" + dateValue,"pop","toolbar=no,location=no,scrollbars=no,directories=no,status=no,menubar=no,resizable=yes,width=300,height=200");

		if (genPopUp.opener == null) {
			genPopUp.opener = window;
		}
		
		genPopUp.opener.name = "opener";
	}




	function fn_Show(elementId) {
		var oElement = document.getElementById( elementId );
		if (oElement != null) {
			oElement.style.display = "block";
		}
		return;
	}
	function fn_Hide(elementId) {
		var oElement = document.getElementById( elementId );
		if (oElement != null) {
			oElement.style.display = "none";
		}
		return;
	}



/* Generic function to validate CodeContainer forms */
	function validateCodeContainerForm(formName)
	{
		var strMsg		= "";
		var oForm		= document.getElementById(formName);
		var arrFields	= document.getElementById("RequiredFields").value.split('|');
		var arrMessages	= document.getElementById("RequiredFieldsMessages").value.split('|');
		
		for (i=0; i < arrFields.length; i++)
		{
			var oElement	= document.getElementById(arrFields[i]); // oForm.elements[arrFields[i]];
			var oMessage	= arrMessages[i];
			var isValid		= false;
			
			if (oElement != null)
			{
				switch (oElement.type)
				{
					case 'select-one' :
						isValid = !(oElement.value == "");
						break
					case 'text' :
						isValid = !(oElement.value == "");
						break
					case 'textarea' :
						isValid = !(oElement.value == "");
						break
					case 'checkbox' :
						isValid = oElement.checked;
						break
					case 'radio' :
						for (r=0; r < document.all[oElement.name].length; r++)
						{
							//alert(oElement.name + " " + document.all[oElement.name][r].checked);
							if (document.all[oElement.name][r].checked) { isValid = true; }
						}
						break
				}
				
				//strMsg += oElement.name + "\t" + oElement.type + "\t";
				if (!isValid)
				{
					if (oMessage != null)
					{
						strMsg += oMessage + ((oMessage.length > 0) ? "" : "");
						strMsg += "\n";
					}
				}
			}
		}
		
		if (strMsg.length > 0)
		{
			alert("The following fields are required:\n\n" + strMsg);
			return false;
		}
		else
		{
			return true;
		}
	}