/***********************/
var app = window;
var menu = null;
var menuid ="";
var menuToShow = [];
var x, y;

 function offsetOfIn( elem, owner) {
  x = 0;  y = 0;
  while (elem != owner) {
    x += elem.offsetLeft;
    y += elem.offsetTop ;
    elem = elem.offsetParent;
  }
}

function Move ( elem,base, prefs) {
  var ox = prefs.x, oy = prefs.y;
  if (base) {
    offsetOfIn(base, document.body);
    if (ox > 200) ox += base.offsetWidth - 400;
    if (oy > 200) oy += base.offsetHeight - 400;
    ox+= x;
    oy += y;
  }
  var maxx = prefs.maxx;
  if (!maxx)
      maxx = document.all ? document.body.clientWidth : window.innerWidth;
  if (elem.offsetWidth + ox > maxx )
    ox = maxx - elem.offsetWidth;
  elem.style.left = ox ;
  elem.style.top = oy ;
}
function MoveSubmenu( elem,base,prefs) {
  offsetOfIn(base, document.body);
  var ox, oy = prefs.y + y;

  if (window.moveBack) {
    ox =  x - prefs.x - elem.offsetWidth;
    if (ox < 0) {
      ox = prefs.x + x + base.offsetWidth;
      window.moveBack = 0;
    }
  }
  else {
    ox = prefs.x + x + base.offsetWidth;
    var max = prefs.maxx;
    if (!max)
      max = document.all ? document.body.clientWidth : window.innerWidth;
    if (ox + elem.offsetWidth > max) {
      ox = x - prefs.x - elem.offsetWidth;
      window.moveBack = 1;
    }
  }
  elem.style.left = ox ;
  elem.style.top = oy ;
}

function Cancel(ev) {
  if (!ev) ev = window.event;
  ev.cancelBubble=true;
}
function GetOrCreate(name, params) {
	var elem =  document.getElementById(name);

  if (!elem) {
    elem = document.createElement("DIV");
    elem.id = name;
    elem.onclick = Cancel;
    elem.style.position = "absolute";
    elem.style.visibility = "hidden";
    elem.style.left = "-5000";
    elem.style.top = "-100";
    elem.style.zIndex = 2;
    document.body.appendChild(elem);
    var func = app[name];
    var htmCode= (func.type) ? app[func.type](name, func, params) : func(params);
    elem.innerHTML = htmCode;
  }
  return elem;
}
function MenuHide(lev) {
  if (!lev) lev = 0;
  while ( menu && menu.level >= lev) {
    if (menu.prefs.onHide)
      menu.prefs.onHide(document.getElementById(menu.name + menu.prefs.base) );
    menu.elem.style.visibility="hidden";
    menu = menu.previous;
  }
  if (lev == 0) window.moveBack = 0;
}
function MenuTimeout(ev) {
  if (ev) ev.cancelBubble=true;
  MenuResetId();
  if (!menu) return;
  menuToShow = null;
  window.setTimeout( "if (menuid =='" + menuid + "') MenuHide();", 1000);
}
function MenuResetId(e) {
  menuid = "" + Math.random();
  if (menuToShow) menuToShow[0] = menuid;
}
function MenuShow( name, type, lev, ev ) {
    if (ev) ev.cancelBubble=true;

    if (menu && menu.name == name  ) { // check if this menu is shown already
      MenuResetId();
      return;
    }
    MenuHide(lev);

    var prefs = menuprefs[type];
    var elem = GetOrCreate(name);
    var base = document.getElementById(name +prefs.base);
    if (prefs.onShow) prefs.onShow(base);
    prefs.move(elem,base,prefs);
	  elem.style.visibility='visible';
		menu = { name: name, type: type, elem: elem, prefs: prefs, previous: menu, level: lev ? lev : 1 };
    MenuResetId();
}
function MenuActive(name, type, ev) {
  if (ev) ev.cancelBubble=true;
  if (menu && menu.type == type) { MenuShow(name, type); return; }
  var showId = Math.random();
  menuToShow = [ showId, name, type];
  var prefs = menuprefs[type];
  var delay=200;
  if(prefs.delay) delay=prefs.delay;
  window.setTimeout( "MenuShowCheck(" + showId + ");", delay);
  // if (name == 'mlist') eee = 1;
}
function MenuShowCheck(showId) {
  // if(menuToShow != null && menuToShow[1] == 'mlist') alert(menuToShow + "  " + showId);
  if (menuToShow != null && menuToShow[0] == showId) {

    MenuShow(menuToShow[1], menuToShow[2]);
  }
}
function ItemOver(elem) {
  elem.className = "over";
}
function ItemOut(elem) {
  elem.className = "item";
}
/* --- Customizable ----  */

var menuprefs= [ {},
  { base: "pos", x: 0, y: 23, delay: 200, maxx: 950,
      onShow: ItemOver, onHide: ItemOut, move: Move },
  { base: "pos", x: 4, y: 0, delay: 200, maxx: 950,
      onShow: ItemOver, onHide: ItemOut, move: MoveSubmenu }
];
