function webClient() {

  var i;

  this.IE    = false;
  this.NS    = false;
  this.OP    = false; 
  this.release = null;
  
  if ((i = navigator.userAgent.indexOf("Opera")) >= 0) {
    this.OP = true;
    this.version = parseFloat(navigator.userAgent.substr(i + 5));
    return;
  }

  
  if ((i = navigator.userAgent.indexOf("MSIE")) >= 0) {
    this.IE = true;
    this.release = parseFloat(navigator.userAgent.substr(i + 4));
    return;
  }

  if ((i = navigator.userAgent.indexOf("Netscape6/")) >= 0) {
    this.NS = true;
    this.release = parseFloat(navigator.userAgent.substr(i + 10));
    return;
  }

  if ((i = navigator.userAgent.indexOf("Netscape7/")) >= 0) {
    this.NS = true;
    this.release = parseFloat(navigator.userAgent.substr(i + 10));
    return;
  }

  if ((i = navigator.userAgent.indexOf("Gecko")) >= 0) {
    this.NS = true;
    this.release = 6.1;
    return;
  }
}


var webClient = new webClient();

var activeButton = null;
var activeSubButton = null;
var menuCloseTimerID = null;

 if (webClient.IE)
	 document.onmousedown = pageMouseDown;
  else
     document.addEventListener("mousedown", pageMouseDown, true);

function pageMouseDown(event) {

  var el;
  
  //if (activeButton == null)
  //  return;

  if (webClient.IE)
    el = window.event.srcElement;
  else
    el = (event.target.tagName ? event.target : event.target.parentNode);

  if (el == activeButton || el == activeSubButton)
    return;

  if (el.className != "menuButton"  && el.className != "menuItem" &&
      el.className != "menuItemSep" && el.className != "menu") {
	    if (activeButton) closeMenu(activeButton);
    	if (activeSubButton) closeSubMenu(activeSubButton);
	}
}

function menuTouch(event, menuName, parentName) {
  var button;
  
  //Reset menu close timer
  if (menuCloseTimerID)
	window.clearTimeout(menuCloseTimerID);
  menuCloseTimerID = null;
  
  //Get the button
  if (webClient.IE)
    button = window.event.srcElement;
  else
    button = (event.target.tagName ? event.target : event.target.parentNode);

  //Get the menu
  if (!button.menu && menuName)
    button.menu = document.getElementById(menuName);

  //Get the parent of the button
  if (!button.parent && parentName)
    button.parent = document.getElementById(parentName);
    
  //Close the current menu
  if (activeButton && activeButton != button)
    closeMenu(activeButton);
  if (activeSubButton && activeSubButton != button)
    closeSubMenu(activeSubButton);
    
  //Open the new menu
  if (!button.isactive)
  	if (menuName) {
	    openMenu(button);
	//} else {
	//	activeButton=button;
	//	button.isactive=true;
	//	button.className = "menuButtonActive";
	}
  return false;
}

function subMenuTouch(event, menuName) {
  var button;

  //Reset menu close timer
  if (menuCloseTimerID)
	window.clearTimeout(menuCloseTimerID);
  menuCloseTimerID = null;

  //Get the button  
  if (webClient.IE)
    button = window.event.srcElement;
  else
    button = (event.target.tagName ? event.target : event.target.parentNode);

  //Get the menu
  if (!button.menu && menuName)
    button.menu = document.getElementById(menuName);

  //Close the current menu
  if (activeSubButton && activeSubButton != button && button.offsetParent == activeSubButton.offsetParent)
    closeSubMenu(activeSubButton);

  //Show the new menu
  if (!button.isactive && menuName)
    openSubMenu(button);

  return false;
}

function openMenu(button) {
  var w, dw, x, y, dy, dx;
  
  button.className = "menuButtonActive";
  dy = 0;
  dx = 0;
//  alert(stop);
  if (webClient.IE && !button.menu.firstChild.style.width) {
    w = button.menu.firstChild.offsetWidth;
    button.menu.firstChild.style.width = w + "px";
    dw = button.menu.firstChild.offsetWidth - w;
    w -= dw;
    button.menu.firstChild.style.width = w + "px";
  }

  if (webClient.IE && button.parent && button.tagName == 'AREA') {
	dx = getPageOffsetLeft(button.parent); // button.menu.clientWidth;
	dy = getPageOffsetTop(button.parent) - 4;
  }
  if (webClient.NS && button.parent && button.tagName == 'AREA') {
	dx = parseInt(button.coords.split(',')[0]);
	dy = -1;
  }
  x = getPageOffsetLeft(button)-1+dx;
  if (button.parent) { //Check to see if the menu is outside the main part of the page
	var rightLinePos = getPageOffsetLeft(button.parent) + button.parent.clientWidth;
	if (rightLinePos < (x+button.menu.clientWidth)) {
		x = rightLinePos - button.menu.clientWidth - 10;
	}
  }
//  y = getPageOffsetTop(button) - button.menu.clientHeight + dy;
//  y = getPageOffsetTop(button) + button.clientHeight + dy;
  y = getPageOffsetTop(button) + button.offsetHeight + dy;

//Original start
//  x = getPageOffsetLeft(button)-1;  //original
//  y = getPageOffsetTop(button) + button.offsetHeight;//original
//Original end

  button.menu.style.left = x + "px";
  button.menu.style.top  = y + "px";
  button.menu.style.visibility = "visible";

  button.isactive = true;
  activeButton = button;
}

function openSubMenu(button) {

  var w, dw, x, y;

  button.className = "menuItemActive";  
  
  if (webClient.IE && !button.menu.firstChild.style.width) {
    w = button.menu.firstChild.offsetWidth;
    button.menu.firstChild.style.width = w + "px";
    dw = button.menu.firstChild.offsetWidth - w;
    w -= dw;
    button.menu.firstChild.style.width = w + "px";
  }

  x = getPageOffsetLeft(button)+ button.offsetWidth;
  y = getPageOffsetTop(button);

  x++;
  y++;
  
  if ((y + button.menu.offsetHeight)>document.body.offsetHeight)
	y = document.body.offsetHeight - button.menu.offsetHeight - 4;
  if ((x + button.menu.offsetWidth)>document.body.offsetWidth)
	x = x - button.offsetWidth - button.menu.offsetWidth;
  if ((activeButton)&&(activeButton.parent)) { //Check to see if the menu is outside the main part of the page
	var rightLinePos = getPageOffsetLeft(activeButton.parent) + activeButton.parent.clientWidth;
	if (rightLinePos < (x+button.menu.clientWidth)) {
		x = x - button.offsetWidth - button.menu.offsetWidth;
	}
  }
	
//  alert(w + ',' + dw);
  
  button.menu.style.left = x + "px";
  button.menu.style.top  = y + "px";
  button.menu.style.visibility = "visible";

  button.isactive = true;
  activeSubButton = button;
}

function closeMenu(button) {
  if (button) {
	  button.className = "menuButton";
	  if (button.menu) button.menu.style.visibility = "hidden";
	  button.isactive = false;
	  if (button == activeButton)
		closeSubMenu(activeSubButton);
  }
  activeButton = null;
}

function closeSubMenu(button) {
  if (button) {
	  button.className = "menuItem";
	  if (button.menu) button.menu.style.visibility = "hidden";
	  button.isactive = false;
  }
  activeSubButton = null;
}

function closeMenuDelayed() {
  menuCloseTimerID = window.setTimeout("closeMenuDelayedReal()",500);
}

function closeMenuDelayedReal() {
  closeMenu(activeButton);
}


function getPageOffsetLeft(el) {
  return el.offsetLeft + (el.offsetParent ? getPageOffsetLeft(el.offsetParent) : 0);
}

function getPageOffsetTop(el) {
  return el.offsetTop + (el.offsetParent ? getPageOffsetTop(el.offsetParent) : 0);
}