//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// Menu generation script

//History

// 	11/11/2002 	Gary Payne

//		Created

// 	29/11/2002 	Gary Payne

//		Corrected the cross browser support for NN6

//	04/12/2002	Gary Payne

//		Modified for use on Computerland Site

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//State Variables:	

	var eOpenMenu = null;

	var elOpen    = null;

	var elPreviousId = null;



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//Browser Detect:	

	var isNS4 = (document.layers) ? true : false;

	var isIE4 = (document.all && !document.getElementById) ? true : false;

	var isIE5 = (document.all && document.getElementById) ? true : false;

	var isNS6 = (!document.all && document.getElementById) ? true : false;



	if(isNS6){

		document.captureEvents(Event.MOUSEOVER)

		document.onmouseover = mouseover;

		document.captureEvents(Event.MOUSEOUT)

		document.onmouseout = mouseout;

	}

	else {

		document.onmouseover = mouseover;

		document.onmouseout = mouseout;

	}



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//Constants:



    var MAIN_MENU_PREFIX = "MainMenu";

    var SUB_MENU_PREFIX = "SubMenu";

	



    var SUB_MENU_ITEM = "SubMenuItem";

    var SUB_MENU_GROUP1 = "SubMenuGroup1";

	var SUB_MENU_GROUP2 = "SubMenuGroup2";

    var MENU_PARENT_GROUP  = "MenuParentGroup";



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//Functions

	function OpenMenu(eSrc,eMenu)

	{	

		//Determine the left offset

		var intImgWidth;

		var strImgWidth = new String(eSrc.offsetWidth);

		if (isNaN(strImgWidth))

			intImgWidth = Number('84')

		else

			intImgWidth = Number(strImgWidth)



		var intImgHeight;

		if (isNS6)

			intImgHeight = Number('0')

		else

			intImgHeight = Number('0')

	

		if (isIE5 || isNS6) {

			eMenu.style.left = parseInt(getAbsX(eSrc)) + intImgWidth + 'px';

			eMenu.style.top  = parseInt(getAbsY(eSrc)) + intImgHeight + 'px';

			eMenu.style.visibility = "visible";

		}

        elOpen    = eSrc.sourceIndex+1;

		eOpenMenu = eMenu;		

	}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



	function CloseMenu(eSrc, eMenu)

	{

		eMenu.style.visibility = "hidden";

		eOpenMenu = null;

	}

		

	function getParentTag(eSrc, strTagName) {

		var eNode = eSrc.parentNode;

		if (eNode.tagName == strTagName)

			return eNode

		else {

			return getParentTag(eNode, strTagName)

		}

	}

	

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	

	function mouseover(e)

	{

		if(isNS6) {

			var eSrcOrigin = e.target;

			var eSrc = eSrcOrigin.parentNode;

		}

		else {

			var eSrc = window.event.srcElement;

			var eSrcOrigin = eSrc;

		}

		//alert(eSrc.tagName + ' (' + eSrc.className + ') and parent is ' + eSrc.parentNode.tagName);

		if (eSrc && (eSrc.className == MENU_PARENT_GROUP))

		{

		//alert('Mouse over the ' + eSrc.tagName + ' with classname ' + eSrc.className + ' and ID ' + eSrc.id);



			//The mouseover event fires twice in Nav - must be after the new image appears

			if (elPreviousId == eSrc.id)

				return;



			toggleIcon(eSrc);



			elPreviousId = eSrc.id;

							

			var subMenuName = eSrc.id.replace(MAIN_MENU_PREFIX,SUB_MENU_PREFIX);

			var eMenu = document.getElementById(subMenuName);



			if (eOpenMenu && eOpenMenu != eMenu) {

				CloseMenu(eSrc, eOpenMenu);	

			}

			if (eMenu) {

				OpenMenu(eSrc,eMenu);	

			}

						

			return;

		}



		//Close the menu if the cursor is over any element

		// apart from a child element of the current menu

		if (eOpenMenu && (eSrcOrigin.className != SUB_MENU_ITEM))

		{	

			if (isNS6) {

				if (eSrcOrigin.tagName && (eSrcOrigin.className != SUB_MENU_GROUP1)) {

					CloseMenu(eSrcOrigin, eOpenMenu);		

				}

			}

			else {

				if (!eOpenMenu.contains(eSrcOrigin)) {

					CloseMenu(eSrcOrigin, eOpenMenu);		

				}

			}

			elPreviousId = null;

		}

		

	}



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	

	function mouseout(e)

	{

		if(isNS6)

			var eSrc = e.target;

		else

			var eSrc = window.event.srcElement;



		if (eSrc && (eSrc.className == MENU_PARENT_GROUP))

			toggleIcon(eSrc);

		

		if (eSrc.className && (eSrc.className != SUB_MENU_ITEM) && (eSrc.className != SUB_MENU_GROUP1))

		{

			var eMenu = document.getElementById(eSrc.id.replace(MAIN_MENU_PREFIX,SUB_MENU_PREFIX));

			if (eOpenMenu && eOpenMenu != eMenu) {

				CloseMenu(eSrc, eOpenMenu);	

			}

		}

			

		elPreviousId = null;

			

	}	



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//Toggle the menu parent icon

function toggleIcon(eSrc) {



	if(isNS6) {

		if (elPreviousId == eSrc.id)

			return;

	}



	var elIcon = eSrc;

	var strImgSrc = new String(elIcon.src);

	var strNewImgSrc;

	

	if (strImgSrc.search(/-mo.gif/gi) == -1) 

		strNewImgSrc = strImgSrc.replace(/.gif/gi, "-mo.gif");

	else

		strNewImgSrc = strImgSrc.replace(/-mo.gif/gi, ".gif");

	eSrc.src = strNewImgSrc;	

}



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// get the true offset of anything on NS4, IE4/5 & NS6, even if it's in a table!

function getAbsX(elt) { 

	return (elt.x) ? elt.x : getAbsPos(elt,"Left"); 

}



function getAbsY(elt) { 

	return (elt.y) ? elt.y : getAbsPos(elt,"Top"); 

}



function getAbsPos(elt,which) {

	iPos = 0;

	while (elt != null) {

		iPos += elt["offset" + which];

		elt = elt.offsetParent;

	}

	return iPos;

}



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//Swap Image



function MM_swapImgRestore() { //v3.0

  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;

}



function MM_preloadImages() { //v3.0

  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();

    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)

    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}

}



function MM_findObj(n, d) { //v4.0

  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {

    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}

  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];

  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);

  if(!x && document.getElementById) x=document.getElementById(n); return x;

}



function MM_swapImage() { //v3.0

  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)

   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}

}



function OpenFlashPage() {

	var eMenu = document.getElementById('flashSelect');

	window.location.href = eMenu.value;

}
