/*	Detects the browser */
function detectBrowser()
{
	var browser=navigator.appName;
	return browser;
}

/* 
 * ----------------------------------------------------------------------------
 * WebMenu
 * 
 * Version: 1.0
 * Release date: 2005.01.30
 * 
 * Copyright (c) Amir Firdus (Firdus Software), 2005.
 * All rights reserved.
 * 
 * License:
 * This software is free as long as this header is not removed.
 * Firdus Software welcomes improvements, suggestions as well as
 * news about successful application. To contact us, please use either
 * email or message board available at www.firdus.com.
 * ---------------------------------------------------------------------------- 
 */


// *** note ******************************************************************* 

// Public methods, those that are intended to be used on a web page,
// are prefixed with wm.


// *** submenu position *******************************************************

// Two positions are available for now. New positions can be easily added.
var WM_BOTTOM = "bottom";
var WM_RIGHT = "right";

// Margin values in pixels. Allows for submenu position to be fine-tuned.
var MARGIN_BOTTOM = 1;
var MARGIN_RIGHT = 0;


// *** item activation ********************************************************

// One set of global values is enough, 
// no one can navigate more than one menu at the time.

// There can be only one active item at the time on whole page.
var currentItem = null;

// There is only one way to reach a submenu. 
// The trail to that submenu is kept in this array.
// Every time an item is activated trail has to be reset. 
// All submenus after the current level removed and the current one added.
var menuTrail = new Array();

// This is needed when switching from one menu to another with two different
// styles, otherwise last element gets styleOff from the other menu.
var currentStyleOff = null;

// This function activates an item. 
// An item is active when mouse is over that item.
// Parameters:
// - item  . . . . . . . item to be activated
// - level . . . . . . . level of the submenu
// - styleOn . . . . . . style class name when item is active
// - styleOff. . . . . . style class name when item is not active
// - submenuId . . . . . id of the submenu that is to be attached to this item, pass null if no submenu
// - submenuPosition . . position of the submenu, ex: WM_RIGHT or WM_BOTTOM, pass null if no submenu

var isFirstSubMenu = true;

function wmItemOn(item, level, styleOn, styleOff, submenuId, submenuPosition) {

	if(level > 0) isFirstSubMenu = false;
	
	debug("level:" + level + ", styleOn:" + styleOn + ", styleOff:" + styleOff + ", submenu:" + submenuId + "/" + submenuPosition);
	
	stopOffTimer();
		
	// take care of attached submenu
	hide(level);
		
	// turn off previous item 
	if (currentItem != null) {
		if (styleOff != currentStyleOff && currentStyleOff != null) {
			currentItem.className = currentStyleOff;
		} else {
			currentItem.className = styleOff;
		}
	}
	
	// make this item new current item
	currentItem = item;
	item.className = styleOn;
	currentStyleOff = styleOff;

	if (submenuId != null && document.getElementById(submenuId)) 
	{
		var menu = document.getElementById(submenuId);
		
		// item dimensions: item.offsetHeight, item.offsetWidth
		if (submenuPosition == WM_BOTTOM)
		{
			menu.style.top = findOffsetTop(item) + item.offsetHeight + MARGIN_BOTTOM;
			menu.style.left = findOffsetLeft(item);
			menu.style.visibility = "visible";
		}
		
		if (submenuPosition == WM_RIGHT)
		{
			//Detect Browser function is in jscripts.js
			if(detectBrowser() == "Microsoft Internet Explorer")
			{
				menu.style.top = findOffsetTop(item) + "px";
				menu.style.left = findOffsetLeft(item) + item.offsetWidth + MARGIN_RIGHT + "px";
				menu.style.visibility = "visible";
			}
			else
			{
				menu.style.setProperty("top",findOffsetTop(item) + "px","");
				menu.style.setProperty("left", findOffsetLeft(item) + item.offsetWidth + MARGIN_RIGHT + "px","");
				menu.style.setProperty("visibility","visible","");
			}
		}
	
		menuTrail[level] = menu;
	}
	else
	{
		// item has no submenu attached, update the menuTrail 
		hide(level);
	}

}

// Hide all submenus after the level passed in, inclusive.
function hide(level) {

  for (var i = level; i < menuTrail.length; i++) {
	
	if(detectBrowser() == "Microsoft Internet Explorer")
	{
		menuTrail[i].style.visibility = "hidden";
	}
	else
	{
		menuTrail[i].style.setProperty("visibility","hidden","");
	}
  }
}


// *** timer ******************************************************************

// Timer is needed to turn off all items and submenus, 
// once mouse moves away from the menu.

var timerID = null;
var timerOn = false;
var timecount = 250;

function wmStartOffTimer() {

   isFirstSubMenu = true;
   if (timerOn == false) {
    timerID = setTimeout("offAll()", timecount);
    timerOn = true;
  }
}

function stopOffTimer() {
  if (timerOn) {
    clearTimeout(timerID);
    timerID = null;
    timerOn = false;
  }
}

// Hide all submenus and turn current item off.
function offAll() {
  hide(0);

  if (currentStyleOff != null) {
    currentItem.className = currentStyleOff;
  }
 
  debug("All off by timer.");
}


// *** debug ******************************************************************

// Print text to the debug element. If the element that debugId is pointing to 
// is not found on the page, it does nothing.

var debugId = "wmDebug";
var debugCount = 0;
function debug(text) {
  debugCount ++;
  var debug = document.getElementById(debugId);
  if (debug != null) {
     debug.innerHTML = debugCount + ": " + text + "<br><br>" + debug.innerHTML;
  }
}


// *** position ***************************************************************

// Utility code to calculate element position.

// Find total left offset.
function findOffsetLeft(obj){
  var curleft = 0;
  
  if(isFirstSubMenu)
  {
	 
	 if(detectBrowser() == "Microsoft Internet Explorer")
	{
		curleft = 19; 
	}
	else
	{
		curleft = 9; 
	}
  }

  if (obj.offsetParent){
    while (obj.offsetParent){
      curleft += obj.offsetLeft
        obj = obj.offsetParent;
    }
  }else if (obj.x){
    curleft += obj.x;
  }

  //-103 for our purposes
  return curleft;
}

// Find total top offset.
function findOffsetTop(obj){
  
  var curtop = 0;
  
  if(detectBrowser() == "Microsoft Internet Explorer" && isFirstSubMenu)
  {
	  curtop = 16;
  }
  
  if (obj.offsetParent)	{
	while (obj.offsetParent){
	  curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  }else if (obj.y){
    curtop += obj.y;
  }
	return curtop;
}

function showBottom(parentID)
{
	var parent = document.getElementById(parentID);
	
	var divs = new Array();
	
	divs = parent.getElementsByTagName("div");
	
	//Will have all menuItems with their 3 children: left, middle, right.
	//We want to make the size of the parent the real width of middle + left + right 
	for(i=0; i<divs.length; i++)
	{
		var div = divs[i];
		
	
		if(div.className != "underSubMenu") continue;
		
		alert(div.className);
		
		if(detectBrowser() == "Microsoft Internet Explorer")
		{
			div.style.visibility = "visible";
		}
		else
		{
			div.style.setProperty("visibility","visible","");
		}
	}
}