/*
 *
 * The absolute ultimate DHTML drop-down code
 *
 * (c) Jan Raino Eerik Diener-Rodriguez
 *
 * Version: 2004-04-21
 *
 */

var menu_opened = new Array();
var menu_timeouts = new Object();
var menu_delayclose = 1500;
var menu_hideiframes = true;

function show_all () {
  var iframes = document.body.getElementsByTagName("IFRAME");
  for (var i = 0; i < iframes.length; i++)
    iframes[i].style.visibility = "visible";
}

function hide_all () {
  var iframes = document.body.getElementsByTagName("IFRAME");
  for (var i = 0; i < iframes.length; i++)
    iframes[i].style.visibility = "hidden";
}

// returns the absolute position of a given element
function abs_position(element) {
  var offset = new Object;
  offset.left = 0;
  offset.top  = 0;
  while (element != null) {
    offset.left += element.offsetLeft;
	offset.top  += element.offsetTop;
	element = element.offsetParent;
  }
  return offset;
}

//code for drops
function menu_show (menu_name, parent_menu_name){
  var parent = getElem('id', parent_menu_name != null ? parent_menu_name : 'parent_' + menu_name, 0)
  if(!parent)
    return;

  // let's see if we have to close something
  for(var i in menu_timeouts) {
    if(menu_timeouts[i] != null) {
      window.clearTimeout(menu_timeouts[i]);
	  menu_timeouts[i] = null;
	  menu_hide_do(i);
    }
  }

  var parent_offset = abs_position(parent);
  var self = getElem('id', menu_name, 0);
  if(!self)
    return;
  var self_style =  getStyle ('id', menu_name, 0);
  self_style.top  = parent_offset.top;
  // alert( parent.offsetWidth);
  self_style.left = parent_offset.left + parent.offsetWidth;
  setVisibility('id', menu_name, 0, 'visible');
  menu_opened.push(menu_name);
  if(menu_hideiframes && menu_opened.length == 1)
    hide_all();
}


function menu_hide(menu_name) {
  if(menu_delayclose != null && menu_delayclose > 0) {
    if (!menu_mouseover(menu_name) && menu_timeouts[menu_name] == null)
	  menu_timeouts[menu_name] = window.setTimeout("menu_hide_do('" + menu_name + "')", menu_delayclose);
  }
  else
    menu_hide_do (menu_name);
} 

function menu_hide_do (menu_name) {
  if(menu_timeouts[menu_name] != null) {
    window.clearTimeout(menu_timeouts[menu_name]);
	menu_timeouts[menu_name] = null;
  }
  if (!menu_mouseover(menu_name)) {
	var last_index = menu_opened.length - 1;
	if(last_index >= 0) {
	  // close if not in tree or last
	  var close = true;
	  for(var i = last_index; i >= 0; i--) {
		  if(menu_opened[i] == menu_name) {
			  if(i == last_index) {
				  menu_opened.pop();
				  if(menu_hideiframes && menu_opened.length == 0)
			        show_all();

			  }
			  else
				  close = false;
			  break;
		  }
	  }
	  if(close) {
		setVisibility('id', menu_name, 0, 'hidden');
		if(menu_opened.length > 0)
			menu_hide_do(menu_opened[menu_opened.length - 1]);
	  }
	}
  }
}


//deal with cursor over layer

// if (ie){document.onmousemove = getmousepos}
if (!MS){
  document.captureEvents(Event.MOUSEMOVE);
}
document.onmousemove = setmousepos;


var mouse_x = 0; mouse_y = 0;
var first = true;

function setmousepos (e) {
  if(e) {
    mouse_x = e.pageX;
	mouse_y = e.pageY;
  }
}

function getmousepos(){
  var pos = new Object;
  pos.x = mouse_x;
  pos.y = mouse_y;

  if(MS && window.event != null) {
	  pos.x=window.event.clientX + document.body.scrollLeft;
	  pos.y=window.event.clientY + document.body.scrollTop;
  }
  return pos;
}

function menu_mouseover(menu_name) {
  // get the outer boundery of the element
  var self = getElem('id', menu_name, 0);
  if(!self)
    return;
  var x_min = self.offsetLeft - 1;
  var y_min = self.offsetTop;
  var x_max = x_min + self.offsetWidth;
  var y_max = y_min + self.offsetHeight;

  // get the current mouse postion
  var pos = getmousepos();

  // if outside boundery return false else true
  var outside = (pos.x < x_min) || (pos.x > x_max) || (pos.y < y_min) || (pos.y > y_max);
  return !outside;
}
