/************************************************************************
*	
*	JavaScript: 	Common.js
*
************************************************************************
*	
*	DESCRIPTION: 	Common functions that can be used on any page
*
*************************************************************************/

	// Globals ********************************

	var activeMenu 	= "";
	var cursorX 	= "";
	var cursorY 	= "";
	var IE 			= document.all ? true : false;
	var currentTab  = "";

	var navigationMenu = getElement("dropDownMenu"); // Navigation Menu Element

/*  On Load Actions * *************************************************************
 *
 *	TAKES:		NOTHING
 * 	RETURNS:	NOTHING
 *	NOTES:		Fires after the page is fully loaded, with the acception of any
 *				asynchronous elements (ex: Flash, Ajax).
 *
 ****************************************************************************************/
 
	window.onload = function()
  	{
  		document.onmouseup = hideMenu;
		//document.onmousemove = updateCursorPosition;
		
		setNavigationTabs();
		setStandardBtns();
		setFlashBottom();
	}

/*  Get Mouse X * *************************************************************
 *
 *	TAKES:		Mouse Event
 * 	RETURNS:	The X position of the mouse on the screen, from the left side.
 *	NOTES:		Handles support of the IE DOM, and W3C DOM
 *
 ****************************************************************************************/
 
	function getMouseX(evt)
	{
		if (!IE)
		{
			return evt.pageX
		}
		else
		{
		   return event.clientX
		}
		
	}

/*  Get Mouse Y * *************************************************************
 *
 *	TAKES:		Mouse Event
 * 	RETURNS:	The Y position of the mouse on the screen, from the left side.
 *	NOTES:		Handles support of the IE DOM, and W3C DOM
 *
 ****************************************************************************************/
 
	function getMouseY(evt)
	{
		if (!IE)
		{
			return evt.pageY
		}
		else
		{
		   return event.clientY
		}
	}

/*  Update Cursor Position* *************************************************************
 *
 *	TAKES:		Mouse Event
 * 	RETURNS:	NOTHING
 *	NOTES:		This function is usually attached to a global "onmousemove" mouse event,
 *				in order to keep the cursor position updated.
 *
 ****************************************************************************************/
 
	function updateCursorPosition(e)
	{
		cursorX = getMouseX(e);
		cursorY = getMouseY(e);
	}

/*  Get Element * *************************************************************
 *
 *	TAKES:		Element Id
 * 	RETURNS:	Object that bears the element id provided.
 *	NOTES:		
 *
 ****************************************************************************************/
 
	function getElement(elementId)
	{
		 return document.getElementById(elementId);
	}

/*  Get Element Position X * *******************************************************
 *
 *	TAKES:		Element Object
 * 	RETURNS:	The X position of the element object
 *
 *************************************************************************/
	
	function getElementX(contentElement)
	{
		var iReturnValue = 0;
		while(contentElement != null)
		{
			iReturnValue += contentElement.offsetLeft;
			contentElement = contentElement.offsetParent;
		}
		
		return iReturnValue;
	}
	

/*  Get Element Position Y * *******************************************************
 *
 *	TAKES:		Element Object
 * 	RETURNS:	The Y position of the element object
 *
 *************************************************************************/
	
	function getElementY(contentElement)
	{
		var iReturnValue = 0;
		while(contentElement != null)
		{
			iReturnValue += contentElement.offsetTop;
			contentElement = contentElement.offsetParent;
		}
		
		return iReturnValue;

	}
	
	
/*  Get Width ********************************************************
 *
 *	TAKES:		Element Object
 * 	RETURNS:	The Width of the element object.
 *
 *************************************************************************/	

	function getWidth(element)
	{
		return element.offsetWidth;
	}
	
	
/*  Get Height * *******************************************************
 *
 *	TAKES:		Element Object
 * 	RETURNS:	The Height of the element object.
 *
 *************************************************************************/
 
	function getHeight(element)
	{
		return element.offsetHeight;
	}
	
/*  Get Window Width * *************************************************************
 *
 *	TAKES:		NOTHING
 * 	RETURNS:	The width in pixels of the current window.
 *	NOTES:		
 *
 ****************************************************************************************/
 
	function getWindowWidth()
	{
		return document.all?document.body.clientWidth:window.innerWidth; 	
	}

/*  Get Window Height * *************************************************************
 *
 *	TAKES:		NOTHING
 * 	RETURNS:	The height in pixels of the current window.
 *	NOTES:		
 *
 ****************************************************************************************/
 
	function getWindowHeight()
	{
		return document.all?document.body.clientHeight:window.innerHeight; 	
	}

/*  Set Drop Down Menu Position * *************************************************************
 *
 *	TAKES:		Tab Element
 * 	RETURNS:	NOTHING
 *	NOTES:		Sets relative to the Navigation Tab Element.
 *
 ****************************************************************************************/
 
	function setDropDowmMenuPosition(tabElement)
	{
		if (IE)
		{
			navigationMenu.style.left = getElementX(tabElement) + 3;
			navigationMenu.style.top = getElementY(tabElement) + getHeight(tabElement) - 5;
		}
		else
		{
			// Firefox, Netscape
			navigationMenu.style.left = (getElementX(tabElement) + 3) + "px";
			navigationMenu.style.top = (getElementY(tabElement) + getHeight(tabElement) - 5) + "px";
		}
		
	}

/*  Set Drop Down Menu Content * *************************************************************
 *
 *	TAKES:		Link Name Collections Array, Link Url Collection Array
 * 	RETURNS:	NOTHING
 *	NOTES:		Builds the menu based on the arrays provided.
 *
 ****************************************************************************************/
 
	function setDropDownMenuContent(linkNameCollection, linkUrlCollection)
	{
		if ((linkNameCollection.length > 0) & (linkUrlCollection.length > 0))
		{
			var blankTarget = "";
			var menuContainer = "";
			
			menuContainer = menuContainer + "<table width=\"220\" cellpadding=\"0\" cellspacing=\"0\">";
			menuContainer = menuContainer + "<tr><td onMouseOver=\"toggleTabElementActions(currentTab, true);\">";
			menuContainer = menuContainer + "<table width=\"220\" cellpadding=\"0\" cellspacing=\"0\">";
			menuContainer = menuContainer + "<col width=\"5\">";
			menuContainer = menuContainer + "<col width=\"210\">";
			menuContainer = menuContainer + "<col width=\"5\">";
			menuContainer = menuContainer + "<tr>";
			menuContainer = menuContainer + "	<td class=\"navMenuShadowLeft\" width=\"5\">&nbsp;</td>";
			menuContainer = menuContainer + "	<td class=\"linkMenuContent\" onMouseOver=\"showMenu();\">";
			
			for(var ctr=0; ctr<linkNameCollection.length; ctr++)
			{
				if ((linkUrlCollection[ctr].match("http://")  == null) & (linkUrlCollection[ctr].match("https://")  == null))
				{
					blankTarget = "";
				}
				else
				{
					blankTarget = "target=\"_blank\"";
				}
				
				menuContainer = menuContainer + "<div class=\"linkMenuItem\" onMouseOver=\"showMenu();\"><a href=\"" + linkUrlCollection[ctr] + "\" class=\"menuLinkText\" " + blankTarget + ">" + linkNameCollection[ctr] + "</a></div>";
			
			}
			menuContainer = menuContainer + "	</td>";
			menuContainer = menuContainer + "	<td class=\"navMenuShadowRight\" width=\"5\">&nbsp;</td>";
			menuContainer = menuContainer + "</tr>";
			menuContainer = menuContainer + "<tr><td></td><td class=\"navMenuShadowBottom\" height=\"6\"></td>";
			menuContainer = menuContainer + "</table>";
			menuContainer = menuContainer + "</td></tr></table>";
			
			navigationMenu.innerHTML = menuContainer;
		}
	}

/*  Show Menu * *************************************************************
 *
 *	TAKES:		NOTHING
 * 	RETURNS:	NOTHING
 *	NOTES:		Displays the menu
 *
 ****************************************************************************************/
	
	function hideMenu()
	{
		navigationMenu.style.display = "none";
	}

/*  Hide Menu * *************************************************************
 *
 *	TAKES:		NOTHING
 * 	RETURNS:	NOTHING
 *	NOTES:		Hides the menu
 *
 ****************************************************************************************/
	
	function showMenu()
	{
		navigationMenu.style.display = "block";
	}

/*  Clear Menu * *************************************************************
 *
 *	TAKES:		NOTHING
 * 	RETURNS:	NOTHING
 *	NOTES:		Clesrs the menu
 *
 ****************************************************************************************/
 
	function clearMenu()
	{
		navigationMenu.innerHTML = "";
	}

/*  Get Tag Group * *******************************************************
 *
 *	TAKES:		Element tag, regular expression that describes the id pattern
 *				of the  group of tag elements you're looking for.
 * 	RETURNS:	Element Array of matched element tag ids with the provided regular
 *				expression.
 *	NOTE:		Uses concat to load the element array
 *
 *************************************************************************/
	
	function getTagGroup(elementTag, regExp)
	{
		var tagArray = document.getElementsByTagName(elementTag);
		var elementArray = new Array();
		
		for(ctr=0; ctr < tagArray.length; ctr++)
		{
			if ((tagArray[ctr].id).search(regExp) != -1)
			{
				if (elementArray.length > 0)
				{
					elementArray = elementArray.concat(new Array(tagArray[ctr]));
				}
				else
				{
					elementArray = new Array(tagArray[ctr]);
				}
			}
		}
		
		return elementArray;
	}
	
/*  Set Navigation Tabs * *************************************************************
 *
 *	TAKES:		NOTHING
 * 	RETURNS:	NOTHING
 *	NOTES:		Takes the elements within the "navMenuTab[int]" div tags and builds the
 *				navigation tabs.
 *
 ****************************************************************************************/

	function setNavigationTabs()
	{
		var tabElements 	= getTagGroup("div", "navMenuTab");
		var tabElement 		= "";
		
		var tagElements		= "";
		var tagElement		= "";
		var tabTitle		= "";
		var tabChild		= "";
		var onClickEnabled	= false;
		
		if (tabElements.length > 0)
		{
			for(var ctr=0; ctr<tabElements.length; ctr++)
			{
				tabElement = tabElements[ctr];
				
				if (tabElement)
				{	
					// Get the Contents of the DIV Container ******************
					tagElements = tabElement.getElementsByTagName("input");
					
					if (tagElements.length > 0)
					{
						for(var tagCtr=0; tagCtr<tagElements.length; tagCtr++)
						{
							tagElement = tagElements[tagCtr];
							
							if (tagElement)
							{
								// Set the Tab Title ***********************
								if (tagElement.id == "tabTitle")
								{
									tabChild = getNavigationTabElement(tagElement.value);		
									tabElement.appendChild(tabChild);
									
								}
								
								// Set the Tab Url **************************
								if (tagElement.id == "tabUrl")
								{
									onClickEnabled = true;
								}
							}
							
						}
					}
					
					// Set the Click Actions *********************************
					if (!onClickEnabled)
					{
						tabElement.onclick = function()
						{
							// Keeps the menu visible
							showMenu();
						}
					}
					else
					{
						// For Tabs that are clickable, get the link Url value *********
						tabElement.onclick = function()
						{
							var linkElements = this.getElementsByTagName("input");
							var linkElement = "";
							
							for(var linkCtr=0; linkCtr<linkElements.length; linkCtr++)
							{
								linkElement = linkElements[linkCtr];
								
								if (linkElement.id == "tabUrl")
								{
									document.location.href = linkElement.value;
									
								}
							}
						}
	
					}
					
					// Set the Tab Actions ***********************************
					tabElement.onmouseover = function()
					{
						// Get tabMain Element ******************************
						currentTab = getElement(this.id);
						toggleTabElementActions(currentTab, true);
						
						clearMenu();
						getTabMenu(this);
					}
					
					tabElement.onmouseout = function()
					{
						navigationMouseOutActions();
					}
					
					
				}// End If
				
			} // End For: ctr
			
		} 
	}

/*  Get Navigation Tab Element * *************************************************************
 *
 *	TAKES:		Tab Title
 * 	RETURNS:	Tab Table Element
 *	NOTES:		
 *
 ****************************************************************************************/
 
	function getNavigationTabElement(tabTitle)
	{
		var tabTable 		= document.createElement("table");
		tabTable.cellPadding = 0;
		tabTable.cellSpacing = 0;
		
		var tableBody 		= document.createElement("tbody");
		
		// Top Row ************************************
		var tableRowTop		= document.createElement("tr");
		
			// Row Columns ************************************
			var rowTopCol1 	= document.createElement("td");
			var rowTopCol2 	= document.createElement("td");
			var rowTopCol3 	= document.createElement("td");
			
			rowTopCol1.className = "navTabTopLeft";
			rowTopCol2.className = "navTabTop";
			rowTopCol3.className = "navTabTopRight";
			
			// Append to the row *******************
			tableRowTop.appendChild(rowTopCol1);
			tableRowTop.appendChild(rowTopCol2);
			tableRowTop.appendChild(rowTopCol3);
		
		// Main Row ************************************
		var tableRowMain	= document.createElement("tr");
		
			// Row Columns ************************************
			var rowMainCol1 = document.createElement("td");
			var rowMainCol2 = document.createElement("td");
			var rowMainCol3 = document.createElement("td");
			
			rowMainCol1.className 	= "navTabLeft";
			rowMainCol1.id			= "tabLeft";
			
			rowMainCol3.className 	= "navTabRight";
			rowMainCol3.id			= "tabRight";
			
			// Set the Tab Title ****************
			rowMainCol2.className 	= "navTabMain";
			rowMainCol2.id			= "tabMain";
			rowMainCol2.innerHTML 	= tabTitle;
			
			// Append to the row *******************
			tableRowMain.appendChild(rowMainCol1);
			tableRowMain.appendChild(rowMainCol2);
			tableRowMain.appendChild(rowMainCol3);
		
		
		tableBody.appendChild(tableRowTop);
		tableBody.appendChild(tableRowMain);
		
		tabTable.appendChild(tableBody);
		
		return tabTable;
	}

/*  Get Tab Main Element * *************************************************************
 *
 *	TAKES:		Tab Element, Is Mouse Over (true | false)
 * 	RETURNS:	NOTHING
 *	NOTES:		Sets the styles and actions for the navigation tab.
 *
 ****************************************************************************************/
 
	function toggleTabElementActions(tabElement, isMouseOver)
	{
		var tabColElements = tabElement.getElementsByTagName("td");
		var tabColElement  = "";
		
		if (tabColElements.length > 0)
		{
			for(var ctr=0; ctr<tabColElements.length; ctr++)
			{
				tabColElement = tabColElements[ctr];
				
				if (tabColElement != undefined)
				{
					if (tabColElement.id == "tabMain")
					{
						if (isMouseOver)
						{
							tabColElement.className = "navTabMainHover";
						}
						else
						{
							tabColElement.className = "navTabMain";
						}
					}
					
				}
			}
		}
	}
	
	function navigationMouseOutActions()
	{
		if (navigationMenu.innerHTML == "")
		{
			// Tab, no menu
			toggleTabElementActions(currentTab, false);	
		}
		else
		{
			// Tab and menu
			toggleTabElementActions(currentTab, false);	
			hideMenu();
		}
	}

/*  Get Tab Menu * *************************************************************
 *
 *	TAKES:		Tab Element
 * 	RETURNS:	NOTHING
 *	NOTES:		Builds the tab menu and sets it to the Drop Down Element
 *
 ****************************************************************************************/
 
	function getTabMenu(tabElement)
	{
		var menuItems 	= tabElement.getElementsByTagName("div");
		var menuItem  	= "";
		var menuDetails = "";
		var menuDetail 	= "";
		
		var menuItemText 	= new Array();
		var menuItemUrl 	= new Array();
		
		if (menuItems.length > 0)
		{
			for(var ctr=0; ctr<menuItems.length; ctr++)
			{
				menuItem = menuItems[ctr];
				
				if (menuItem)
				{
					menuItemDetails = menuItem.getElementsByTagName("input");
					
					if (menuItemDetails.length > 0)
					{
						for(var detailCtr=0; detailCtr<menuItemDetails.length; detailCtr++)
						{
							menuDetail = menuItemDetails[detailCtr];
							
							if (menuDetail)
							{
								switch(menuDetail.id)
								{
									case "menuText":
									
										menuItemText.push(menuDetail.value);
										break;
									
									case "menuUrl":
										
										menuItemUrl.push(menuDetail.value);
										break;
									
									default:
										
										break;
								}
							}
						}
					}
				}
				
			} // End For
			
		} // End Menu Items
		
		setDropDownMenuContent(menuItemText, menuItemUrl);
		setDropDowmMenuPosition(tabElement);
		showMenu();	
	}
	
/*  Set Standard Buttons* *************************************************************
 *
 *	TAKES:		NOTHING
 * 	RETURNS:	NOHTING
 *	NOTES:		Sets the common actions for all standard buttons
 *
 ****************************************************************************************/
 
	function setStandardBtns()
	{
		var btnElements = getTagGroup("div", "standardBtn");
		var btnElement 	= "";
		
		if (btnElements.length > 0)
		{
			for(var ctr=0; ctr<btnElements.length; ctr++)
			{
				btnElement = btnElements[ctr];
				
				if (btnElement != undefined)
				{
					// Build Table Around Buton ************
					var wrapperTable 	= document.createElement("table");
					var tableBody 		= document.createElement("tbody");
					var tableRow 		= document.createElement("tr");
					var tableCol 		= document.createElement("td");
					
					tableRow.vAlign 	= "center";
					
					var btnContainer	= document.createElement("div");
					btnContainer.innerHTML = btnElement.innerHTML;
					
					// Clear out old content
					btnElement.innerHTML = "";
					
					// Set Default Style ********************
					btnContainer.className = "standardBtn";
					
					btnContainer.onmouseover = function()
					{
						this.className = "standardBtnHover";	
					}
					
					btnContainer.onmouseout = function()
					{
						this.className = "standardBtn";	
					}
					
					tableCol.appendChild(btnContainer);
					tableRow.appendChild(tableCol);
					tableBody.appendChild(tableRow);
					wrapperTable.appendChild(tableBody);
					
					btnElement.appendChild(wrapperTable);
				}
			}
		}
	}
	
/*  Set Flash Bottom * *************************************************************
 *
 *	TAKES:		NOTHING
 * 	RETURNS:	NOHTING
 *	NOTES:		
 *
 ****************************************************************************************/
 
	function setFlashBottom()
	{
		var flashBottomElement 		= getElement("flashBottom");
		var flashMainElement		= getElement("flashMain");
		var mainContainerElement 	= getElement("mainContainer"); 
		var headerHeight			= 118;
		
		if ((flashBottomElement != undefined) & (flashMainElement != undefined))
		{
			if (IE)
			{
				flashBottomElement.style.height = getHeight(mainContainerElement)- getHeight(flashMainElement) - headerHeight;	
			}
			else
			{
				// FireFox, Safari
				flashBottomElement.style.height = (getHeight(mainContainerElement)- getHeight(flashMainElement) - headerHeight) + "px";	
				
			}
		}
	}
	
	
	
	
	
	
	
	
	
	

