//
// User configuration
// Customize your menu below.
//
// You may copy and use this script for free, but if you like it
// please go to http://www.wiltech.net/downloads/menuj/create.htm and donate
// just $1.
//
// Thanks!
//
// coderunner (Joseph Sullivan)
//	
var mainMenuColor="#FDF4DB";
var menuItemColor="#FDF4DB";
var highlightColor="#F8D97C";
var borderWidth=0;
var borderHeight=0;
var paddingWidth=3;
var paddingHeight=3;
var itemWidth=168;
var itemHeight=20;
var hAlign="left";
var vAlign="middle";
var anchorClass="flyout";
var itemTagsOpen="";
var itemTagsClose="";
var menuDelay=0.2;





//	
// Do not change anything below this line
// ######################################
//
// Revision 1.5: Added support for getElementById() compliant (modern) browsers.
//		   this fixed compatability issues with Netscape 7.1
//


var lockArray=new Array();
var clrByJump = false;

	// Added 3/27/01 JS
	// For OK Farm site
function getLock(name){
	if(lockArray[name]!=true)
		return false;
	else    return true;
}

function clearLock(name){
	lockArray[name]=false;
}

function setLock(name){
	lockArray[name]=true;
}

function clearLocks() {
	for (a=0; a<lockArray.length;a++)
		lockArray[a]=false;
}

function clearByJump() {
	// Image restore goes here
	clrByJump = true;
}


	// Variable (and "constant") declaration:
	var TYPE_NONE = 0;
	var TYPE_IE4 = 1;
	var TYPE_NS4=2;
	var TYPE_COMPLIANT=4;
	function menu (left,top) { this.childMenuOpen=-1; this.parentMenuIndex=-1; this.hasMouse=false; this.left=left; this.top=top; this.childCount=0; this.children=new Array; this.url="";}
	function menuItem (contents,url,background) { this.transparent=false; this.childMenuIndex=-1; this.background=background; this.image=""; this.html=contents; this.url=url;}
	var menus=new Array();
	var menuCount=0;

	// Browser detection:
	var type= TYPE_NONE;
	if (document.layers) type = TYPE_NS4;
	if (document.all) type=TYPE_IE4;
	if (document.getElementById) type=TYPE_COMPLIANT;

function menuOn (index,x,y) {
	
	setLock(index);	
	if(x != 1 || y != 1)
	{
		menus[index].left = x;
		menus[index].top = y;
	}
	showMenu(index,x,y);
	menus[index].hasMouse=true;

	// If this menu has a parent, turn the parent on, too:
	var parentIndex=menus[index].parentMenuIndex;
	if (parentIndex > -1 ) {
	   menus[parentIndex].childMenuOpen=index;
		showMenu(parentIndex,x,y);
//		menus[parentIndex].hasMouse=true;
	}

}

function menusOn (index,x,y) {
	
	setLock(index);
	if(x != 1 || y != 1)
	{
		menus[index].left = x;
		menus[index].top = y;
	}
	showMenu(index,x,y);
	menus[index].hasMouse=true;

	// If this menu has a parent, turn the parent on, too:
	var parentIndex=menus[index].parentMenuIndex;
	if (parentIndex > -1 ) {
	   menus[parentIndex].childMenuOpen=index;
		showMenu(parentIndex,x,y);
//		menus[parentIndex].hasMouse=true;
	}

}

function menuOn (index) {
	menusOn(index, menus[index].left ,menus[index].top);
}

function menuOff(index,buttonName) {


		menus[index].hasMouse=false;

		// If this menu has a child open with the mouse, don't close: 
		if ((menus[index].childMenuOpen > -1)&&(menus[menus[index].childMenuOpen].hasMouse)) return;
		
		// If this is a child menu, close the parent too if the parent doesn't have the mouse:
		if (menus[index].parentMenuIndex > -1) {
		   if (menus[menus[index].parentMenuIndex].hasMouse==false)
		   this.timer=setTimeout(("hideMenu('"+menus[index].parentMenuIndex+"')"),1000*menuDelay);
		   menus[menus[index].parentMenuIndex].childMenuOpen=-1;  // We closed the child.
		}	
		
		// If this menu has an open child that doesn't have the mouse, close them both:
//		if(menus[index].childMenuOpen > -1){
	//		if((menus[index].hasMouse==false)&&(menus[(menus[index].childMenuOpen)].hasMouse==false))	;					  		
			//	this.timer=setTimeout(("hideMenu('"+menus[index].childMenuOpen+"')"),1000*menuDelay);
		//}	
		
		this.timer=setTimeout(("hideMenu('"+index+"')"),1000*menuDelay);
}


// Shows a menu...
function showMenu(index,x,y) {
   var parentIndex=menus[index].parentMenuIndex;
   var childIndex=menus[index].childMenuOpen;
	
   if (type==TYPE_NS4) {		// For Netscape browsers
      // Hide all menus, except 1) This menu, 2) it's parent, and 3) any open child menu.
      for (var n=0; n<menuCount; n++) if((n!=index)&&(n!=parentIndex)&&(n!=childIndex)) {	document.layers[n].visibility="hidden"; }
      // Show this menu.
      document.layers[index].pagex=x;
      document.layers[index].pagey=y;
      document.layers[index].display="block";
      document.layers[index].visibility="show";
   } else if (type==TYPE_IE4) {	// For IE browsers
	  // Hide all menus, except 1) This menu, 2) it's parent, and 3) any open child menu.
      for (var n=0; n<menuCount; n++) if((n!=index)&&(n!=parentIndex)&&(n!=childIndex)) { document.all("menu"+n+"d").style.visibility="hidden"; }    
	   // Show this menu.
      document.all("menu"+index+"d").style.left=x;
      document.all("menu"+index+"d").style.top=y;
      document.all("menu"+index+"d").style.display="block";
      document.all("menu"+index+"d").style.visibility="visible";
   } else if (type==TYPE_COMPLIANT) {
      // Hide all menus, except 1) This menu, 2) it's parent, and 3) any open child menu.
      for (var n=0; n<menuCount; n++) if((n!=index)&&(n!=parentIndex)&&(n!=childIndex)) { document.getElementById("menu"+n+"d").style.visibility="hidden"; }    
      // Show this menu.
      var s = document.getElementById("menu"+index+"d").style;
      s.left = x + "px";
      s.top = y + "px";
      s.display="block";
      s.visibility="visible";
   }
}


// Hides a menu...
function hideMenu(index) {

	// Just leave alone if this menu still has mouse over it, or has an open child with the mouse.
	if(menus[index].hasMouse) return;	
	if(menus[index].childMenuOpen > -1) {
		if (menus[menus[index].childMenuOpen].hasMouse) return;
	}
	
	// If this window has an open child, shut it down, too:
	if (menus[index].childMenuOpen > -1){
	   hideMenu(menus[index].childMenuOpen);  // Recursive call!
	   menus[index].childMenuOpen =-1;
	}
	
	if (type==TYPE_NS4) {		// For Netscape browsers
		document.layers[index].visibility="hidden";
	} else if (type==TYPE_IE4) {	// For IE browsers
		document.all("menu"+index+"d").style.visibility="hidden";
	} else if (type==TYPE_COMPLIANT) {
		document.getElementById("menu"+index+"d").style.visibility="hidden";
	}

	if ((getLock(index) == true)&&(menus[index].parentMenuIndex==-1)){	// Clear lock for root menus only
		// Image restore goes here
		clearLock(index);
	}


}

function onMouseOverItem (index1, index2) {
		 
	// Highlight the menu:
	if (type==TYPE_NS4) {
		document.layers[index1].layers[index2].bgColor=highlightColor;
	} else if (type==TYPE_IE4) {
		document.all("menu"+index1+index2).style.background=highlightColor;
	} else if (type==TYPE_COMPLIANT){
		document.getElementById("menu"+index1+index2).style.background=highlightColor;
	}

	// Hide any popout (children) menus that may be visible from previously:
	if(menus[index1].childMenuOpen > -1)
			hideMenu(menus[index1].childMenuOpen);
								   
	// If this item has a popout child, show the child:
	if ((menus[index1].children[index2].childMenuIndex) > -1){			   	  	   // Do we have a child menu?
	   menus[index1].childMenuOpen=menus[index1].children[index2].childMenuIndex;  // Remember which child is open
	   showMenu(menus[index1].children[index2].childMenuIndex,menus[index1].left,menus[index1].top);					   // Open the child	  
	   }
}

function onMouseOutItem (index1, index2) {

	if(menus[index1].children[index2].transparent) itemColor="";
	else    itemColor=menuItemColor;												

	if (type==TYPE_NS4) {
		document.layers[index1].layers[index2].bgColor=menuItemColor;
	} else if (type==TYPE_IE4) {
		document.all("menu"+index1+index2).style.background=itemColor;
	} else if (type==TYPE_COMPLIANT) {
		document.getElementById("menu"+index1+index2).style.background=itemColor;
	}
}

// Draws the menus.
function drawMenus () {
    // Loop through the menu items, looking for items that are parents of submenus.
	// For each one we find, set it's child menu's parentMenuIndex.
	for (var n=0; n<menuCount; n++) {
		for (var m=0; m<menus[n].childCount; m++) {
			if (menus[n].children[m].childMenuIndex > -1)
			   menus[menus[n].children[m].childMenuIndex].parentMenuIndex=n;
		}
	}
				
	if (type==TYPE_NS4) {			// Draw Netscape menus.

		for (var curMenu=0; curMenu<menuCount; curMenu++) {
			document.writeln("<layer visibility='hidden' width='"+(itemWidth+(2*borderWidth))+"' height='"+((itemHeight+borderHeight)*(menus[curMenu].childCount)+borderHeight)+"' pagex='"+menus[curMenu].left+"' pagey='"+menus[curMenu].top+"' bgcolor='"+mainMenuColor+"' onmouseover='menuOn("+curMenu+")' onmouseout='menuOff("+curMenu+")'>");
			for (var curItem=0; curItem<menus[curMenu].childCount; curItem++) {
				document.write("<layer width='"+itemWidth+"' height='"+itemHeight+"' top='"+(borderHeight+(curItem*(itemHeight+borderHeight)))+"' left='"+borderWidth+"' bgcolor='"+menuItemColor+"'><center><table cellspacing='0' cellpadding='0' border='0' background='"+menus[curMenu].children[curItem].background+"' width='"+(itemWidth-(2*paddingWidth))+"' height='"+(itemHeight-(2*paddingHeight))+"'><tr><td align='"+hAlign+"' valign='"+vAlign+"'><a class='"+anchorClass+"' href='"+menus[curMenu].children[curItem].url+"'  onmouseover='onMouseOverItem("+curMenu+","+curItem+")' onmouseout='onMouseOutItem("+curMenu+","+curItem+")'>");
				document.write(itemTagsOpen+menus[curMenu].children[curItem].html+itemTagsClose);
				document.writeln("</a></td></tr></table></center></layer>");
			}
			document.writeln("</layer>");
		}

	} else if ((type==TYPE_IE4)||(type==TYPE_COMPLIANT)) {		// Draw IE menus.

		for (var curMenu=0; curMenu<menuCount; curMenu++) {
         out = "<span id='flyout_menu'>";
			out += "<ul id='menu"+curMenu+"d' class='"+anchorClass+"' onmouseover='menuOn("+curMenu+")' onmouseout='menuOff("+curMenu+")'>";
			for (var curItem=0; curItem<menus[curMenu].childCount; curItem++) {
            out += "<li id='menu"+curMenu+""+curItem+"'><a href='"+menus[curMenu].children[curItem].url+"' onmouseover='onMouseOverItem("+curMenu+","+curItem+")' onmouseout='onMouseOutItem("+curMenu+","+curItem+")'>";
			out += itemTagsOpen+menus[curMenu].children[curItem].html+itemTagsClose;
			out += "</a></li>";
			}
			out += "</ul></span>";
         document.writeln(out);
		}
	}

}


// Adds a menu to the list 
function addMenu (left,top) {
		 if(type==TYPE_IE4) 
		 		 menus[menuCount]=new menu(left,top);
		 else
		 		 menus.push(new menu(left,top));

		 menuCount++;
		 
}

// Adds a submenu item to the current menu item 
function addMenuItem (html,url,background) {
		 if (type==TYPE_IE4)
		 	menus[menuCount-1].children[(menus[menuCount-1].childCount)]=new menuItem(html,url,background);
		 else
		 	 menus[menuCount-1].children.push(new menuItem(html,url,background));

		 menus[menuCount-1].childCount++;
}

// Adds an expandable submenu item to the current menu item 
function addExpandableMenuItem (html,url,background,index) {
		 // Add the menu item:
		 addMenuItem (html,url,background);
		 // Set the item's child index:
		 menus[menuCount-1].children[(menus[menuCount-1].childCount-1)].childMenuIndex=index;
}

// Makes the previous entry transparent:
function makeTransparent() {
		 menus[menuCount-1].children[(menus[menuCount-1].childCount)-1].transparent=true;
}

function findPosition( oLink ) {
  if( oLink.offsetParent ) {
    for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) {
      posX += oLink.offsetLeft;
      posY += oLink.offsetTop;
    }
    return [ posX, posY ];
  } else {
    return [ oLink.x, oLink.y ];
  }
}

function getY( obj ) {  return findPosition( obj )[1];  }

function getX( obj ) {  return findPosition( obj )[0];  }

/* Added 10/16/07, Sixten Otto: this returns the coordinate of the right side of the element */
function getXRight( obj ) {
  var xleft = getX( obj );
  var els = obj.style;
  var originalVisibility = els.visibility;
  var originalPosition = els.position;
  var originalDisplay = els.display;
  
  els.visibility = 'hidden';
  els.position = 'absolute';
  els.display = 'block';
  
  xleft += obj.clientWidth;
  
  els.display = originalDisplay;
  els.position = originalPosition;
  els.visibility = originalVisibility;
  
  return xleft;
}

