	///////////////////////////////////////////////////////////////////
	////                                                           ////
	////    FUNCTIONS RELATED TO NAVMENU CREATION AND BEHAVIOUR    ////
	////                                                           ////
	///////////////////////////////////////////////////////////////////


			// creates nav list structure from multi-dimensional array
				function createMajorNav(menuParent, menuSrc, menuId, menuClass, passTo, liveUpdate) {
				// set up some vars
					var navParent = menuParent;
					var navData   = menuSrc;

				var addTrack = function(menuId, link) { 
					switch(menuId) {
						case 'topNav':      var lpos = 'topnav_text'; break;
						case 'midNav-menu': var lpos = 'topnav';      break;
						case 'botNav':      var lpos = 'footer_text'; break;
					}
					var lnkCode = '&lid=' + hbxStrip(link.innerHTML.split(' ').join('+')) + '&lpos=' + hbxStrip(lpos);
					link.setAttribute('name', lnkCode)
				}
				// create menu root dom
					var navBucket            = document.createElement('ul');
						navBucket.id         = menuId    || '';
						navBucket.className  = menuClass || '';
				// loop through level 1
					for (var level1 in navData) {
						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;
							addTrack(menuId, navItemA);
						if (liveUpdate) {
							navItemA.onclick   = function() {
								resetMenu(this)
							}
						}
					// 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 in subLevel) {
								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;
									addTrack(menuId, subItemA);
								var linkSpan           = document.createElement('img');
									linkSpan.src = 'http://www.sixflags.com/national/global/assets/images/nav/topNav_sub_r.gif';
								if (liveUpdate) {
									subItemA.onclick   = function() {
										resetMenu(this);
									}
								}
								subBucket.appendChild(subItem);
								subItem.appendChild(subItemA);
								subItemA.appendChild(linkSpan);
							}
							if (subBucket) {
								navItem.appendChild(navItemA);
								navItem.appendChild(subBucket);
								subBucket.style.visibility = (topLevel[2] && topLevel[2] != true) ? 'visible' : 'hidden';
							}
						}
						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]) - 130;
										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.background       = 'url(http://www.sixflags.com/national/global/assets/images/nav/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);
									// and as if that were't bad enough ...
									if (levelTwo[nodeTwo].className == 'current') {
										levelTwo[nodeTwo].firstChild.childNodes[2].style.display    = 'block';
										levelTwo[nodeTwo].firstChild.childNodes[2].style.visibility = 'visible';
									}
								}
							}
						}
					}
				// 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 MENU 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;
				}


				function resetMenu(thisObj) {
					var thisName = thisObj.innerHTML.split('<')[0];
					var thisHref = thisObj.getAttribute('href');
				// modify menu styling data from event
					for (var loop1 in midNav) {
						var midSubNav = midNav[loop1];
						if (midSubNav[midSubNav.length-1] === true) {
							midSubNav.pop();
						}
						if (midSubNav[0] == thisName && midSubNav[1] == thisHref) { midSubNav.push(true); }
						if (midSubNav[2] && typeof(midSubNav[2]) != 'boolean') {
							midSubNav = midSubNav[2];
							for (var loop2 in midSubNav) {
								var subElement = midSubNav[loop2]
								if (subElement[subElement.length-1] === true) {
									subElement.pop();
								}
								if (subElement[0] == thisName && subElement[1] == thisHref) { subElement.push(true); }
							}
						}
					}
					var rebuild = function() {
					// find nav parent element
						var oldMenu    = document.getElementById('midNav-menu');
						var menuParent = document.getElementById('midNav-bucket')
					// remove old nav vrom dom
						menuParent.removeChild(oldMenu)
					// rebuild menu from modified array styling data
						createMajorNav(document.getElementById('midNav-bucket'), midNav, 'midNav-menu',    false, setBehaviour, true);
					}
					setTimeout(rebuild, 250)
				}





