


	///////////////////////////////////////////////////////////////////
	////                                                           ////
	////    FUNCTIONS RELATED TO NAVMENU CREATION AND BEHAVIOUR    ////
	////                                                           ////
	///////////////////////////////////////////////////////////////////


			// creates nav list structure from multi-dimensional array
				function createMajorNav(menuParent, menuSrc, menuId, menuClass, passTo) {
				// set up some vars
					var navParent = menuParent;
					var navData   = menuSrc;
				// create menu root dom
					var navBucket            = document.createElement('ul');
						navBucket.id         = menuId    || '';
						navBucket.className  = menuClass || '';
				// loop through level 1
					for (var level1=0; level1 < navData.length; level1++) {
						var topLevel = navData[level1];
						var topName  = topLevel[0];
						var topLink  = topLevel[1];
					// create first level item DOM
						var navItem            = document.createElement('li');
							navItem.className  = (topLevel.length > 2) ? 'subMenu' : '';
							navItem.isCurrent  = (topLevel[topLevel.length-1] === true) ? 'true' : 'false';
						var navItemA           = document.createElement('a');
							navItemA.href      = topLink;
							navItemA.innerHTML = topName;
					// create submenu dom if exists
						if (topLevel.length > 2) {
							var subBucket = document.createElement('ul');
							var subLevel  = topLevel[2];
						// loop through level 2
							for (var level2=0; level2 < subLevel.length; level2++) {
								var subName = subLevel[level2][0];
								var subLink = subLevel[level2][1];
							// create sublevel item element
								var subItem            = document.createElement('li');
								    subItem.isCurrent  = (subLevel[level2][topLevel.length-1] === true) ? 'true' : 'false';
								var subItemA           = document.createElement('a');
									subItemA.href      = subLink;
									subItemA.innerHTML = subName;
								var linkSpan           = document.createElement('img');
									linkSpan.src = '/images/sixflags-discoverykingdom/topNav_sub_r.gif';  
								subBucket.appendChild(subItem);
								subItem.appendChild(subItemA);
								subItemA.appendChild(linkSpan);
							}
							if (subBucket) { navItem.appendChild(navItemA);  }
							if (subBucket) { navItem.appendChild(subBucket); }  
						}
						navBucket.appendChild(navItem);
						if (navItem.className == '') { navItem.appendChild(navItemA); }
					}
				// write the completed structure into the dom
					navBucket = navParent.appendChild(navBucket);   
				// pass structure to behaviour handling function ?
					if (passTo) { passTo(navBucket); }
				}


			// adds behaviour to navigational structures
				function setBehaviour(thisMenu) {
					var navBucket = document.getElementById('midNav-bucket');
				// cover up unsightly overflow
					var coverUp   = document.createElement('div');
						coverUp.className = 'coverUp';
						coverUp.innerHTML = '&nbsp;';
						coverUp   = navBucket.appendChild(coverUp);
				// some basic setup
					var levelOne = thisMenu.childNodes;
					for (var nodeOne = 0; nodeOne < levelOne.length; nodeOne++) {
						var lvOneItem = levelOne[nodeOne];
						// first level handlers
							lvOneItem.onmouseover = function() {
								clearTimeout(menuTimer);
								for (var loop = 0; loop < levelOne.length; loop++) {
									levelOne[loop].className = (levelOne[loop] != this)? '' : 'current';
								// center subnav ...
									if (levelOne[loop].className == 'current' && levelOne[loop].childNodes.length) {
										var lv1offset = (getObjOffset(levelOne[loop], document.getElementsByTagName('div')[0])[0]) - 135;  
							
										var thisSubNav = levelOne[loop].getElementsByTagName('ul')[0];
										if (thisSubNav && thisSubNav.hasChildNodes()) {
											thisSublist = thisSubNav.getElementsByTagName('li');
											for (var loop2 = 0; loop2 < thisSublist.length; loop2++) {
												var lv2Offset = (lv2Offset) ? thisSublist[loop2].offsetWidth + lv2Offset : thisSublist[loop2].offsetWidth;
											    
											}
											if (typeof(lv2Offset) != 'undefined') {
												thisSubNav.style.paddingLeft = (lv1offset - (lv2Offset/2)) + 'px'
											}
										}
									}
								}
							}
							lvOneItem.onmouseout  = function() { 
								var thisObj = this;
								var clearClass = function () {
									thisObj.className = '';
									for (var loop = 0; loop < levelOne.length; loop++) {
										levelOne[loop].className = (levelOne[loop].isCurrent == 'true') ? 'current' : '';
									}
								}
								menuTimer = setTimeout(clearClass, 25);
							}
						if (lvOneItem.childNodes[1]) {
						// set parentNode flags for second level items
							var levelTwo = lvOneItem.childNodes[1].childNodes;
							for (var nodeTwo = 0; nodeTwo < levelTwo.length; nodeTwo++) {
								var lvTwoItem = levelTwo[nodeTwo];
							// class for current item
								if (lvTwoItem.isCurrent == 'true') {
									lvTwoItem.className = 'current';
									lvTwoItem.parentNode.parentNode.isCurrent = 'true';
								}
							// a horrificly ugly hack for a hrrificly ugly hack of a browser ... 
								if (nodeTwo == 0 && client.engine =='msie' && parseInt(client.engRev) == 6) { 								
								// create horrific hack
									var hackish = document.createElement('div');
									   // style horrific hack
										hackish.innerHTML        = '';
										hackish.style.position   = 'absolute';
										hackish.style.top        = '5px';
										hackish.style.left       = '0px';
										hackish.style.height     = '19px';
										hackish.style.backgroundImage = 'url(/images/sixflags-discoverykingdom/topNav_sub_l.gif)';
										hackish.style.backgroundRepeat = 'no-repeat';
										hackish.style.lineHeight = '19px'
										hackish.style.textIndent = '9px'
										hackish.innerHTML = levelTwo[nodeTwo].firstChild.innerHTML.split('<')[0];
									//insert horrific hack into the dom
										levelTwo[nodeTwo].firstChild.appendChild(hackish);
								}
							}
						}
					}
				// initialize default states
					for (var loop = 0; loop < levelOne.length; loop++) {
						levelOne[loop].className = (levelOne[loop].isCurrent == 'true') ? 'current' : ''; 
						if (levelOne[loop].className == 'current') { 
							levelOne[loop].onmouseover();
						}
					}
				}


			// for standards-challenged browsers ...
				function iePseudoClassSupport(thisMenu) { 
					var levelOne = thisMenu.childNodes;   
					for (var nodeOne = 0; nodeOne < levelOne.length; nodeOne++) { var lvOneItem = levelOne[nodeOne]; if (nodeOne == 0 && client.engine == 'msie') { lvOneItem.style.borderLeft = 'none'; } }
				}


				var menuTimer = false; /// will be used to set a timer


	///////////////////////////////////////////////////////////////////
	////                                                           ////
	////    MISCELLANDOUS SUPPORT FUNCTIONS ...                    ////
	////                                                           ////
	///////////////////////////////////////////////////////////////////


			// real offset in pixels from one object to another (parent) of it.
				function getObjOffset(thisObj, stopAt) {
					stopAt = (stopAt) ? stopAt : getByTag('body')[0];
					var parentNode  = thisObj;
					var offsets = [0,0];
					while (parentNode != stopAt) {
							offsets[0] += parentNode.offsetLeft;
							offsets[1] += parentNode.offsetTop;
							parentNode  = parentNode.parentNode;
					}
					return offsets;
				}

