/* menuDropdown.js - implements a dropdown menu based on a HTML list
 * Author: Dave Lindquist (http://www.gazingus.org)
 * Modified by: Nicolas Lesbats (nicolas lesbats at laposte net)
 * Version: 0.1b (2004-03-11)
 */

var maxWidth = 50;
/* maximum width of the submenus (in 'em' units) */

var borderBox  = false;
var horizontal = new Array();
var menuTop    = new Array();
var menuHeight = new Array();
var menuLeft   = new Array();
var menuWidth  = new Array();

window.onload = function() { loadMenu(); }

function loadMenu() {
  if (!document.getElementById) return;
  var i = 0, j, root, submenus, node, li, link, division;
  while (true) {
    root = document.getElementById("menuList" + (i + 1));
    if (root == null)
      break;
    submenus = root.getElementsByTagName("ul");
    division = root.parentNode;

    if (document.createElement) {
      /* Win/IE5-6 trick: makes the whole width of the submenus clickable
       */
      for (j = 0; j < submenus.length; j++) {
        node = submenus.item(j);
        if (node.className == "menu" && node.getElementsByTagName("ul").length == 0) {
          li = document.createElement("li");
          node.appendChild(li);
          li.style.position = "absolute";
          li.style.visibility = "hidden";
        }
      }
      /* checks whether the 'width' property applies to the border box or
       * the content box of an element
       */
      if (i == 0) {
        li.style.display = "block";
        li.style.padding = "0";
        li.style.width   = "2px";
        li.style.border  = "1px solid";
        if (li.offsetWidth == 2)
          borderBox = true;
      }
    }

    initializeMenu(root, division, i);

    for (j = 0; j < submenus.length; j++) {
      node = submenus.item(j);
      if (node.className == "menu") {
        link = node.previousSibling;
        while (link != null) {
          if (link.className == "actuator") {
            initializeSubmenu(node, link, root, division);
            node.set();
            break;
          }
          link = link.previousSibling;
        }
      }
    }
    i++;
  }
}

function initializeMenu(root, div, index) {

  horizontal[index] = menuIsHorizontal(root);
  menuTop[index]    = div.offsetTop;
  menuHeight[index] = div.offsetHeight;
  menuLeft[index]   = div.offsetLeft;
  menuWidth[index]  = div.offsetWidth;

  div.horizontal = function() {
    return horizontal[index];
  }

  div.checkMove = function() {
    if (this.hasMoved()) this.resetMenu();
  }

  div.hasMoved = function() {
    if (menuTop[index]    == this.offsetTop    &&
        menuHeight[index] == this.offsetHeight &&
        menuLeft[index]   == this.offsetLeft   &&
        menuWidth[index]  == this.offsetWidth)
      return false;
    return true;
  }

  div.resetMenu = function() {
    horizontal[index] = menuIsHorizontal(root);
    menuTop[index]    = this.offsetTop;
    menuHeight[index] = this.offsetHeight;
    menuLeft[index]   = this.offsetLeft;
    menuWidth[index]  = this.offsetWidth;

    var submenus = root.getElementsByTagName("ul");
    for (var j = 0; j < submenus.length; j++) {
      var node = submenus.item(j);
      if (node.className == "menu") {
        node.style.right = "";
        node.style.left  = "";
        if (!window.opera)
          node.style.width = "";
        node.set();
      }
    }
  }
}

function menuIsHorizontal(root) {
  var first = firstElement(root, "LI");
  if (first != null) {
    var second = first.nextSibling;
    while (second != null) {
      if (second.tagName == "LI") {
        first  = firstElement(first,  "A");
        second = firstElement(second, "A");
        if (first != null && second != null)
          if (first.offsetLeft == second.offsetLeft)
            return false;
        return true;
      }
      second = second.nextSibling;
    }
  }
  return true;
}

function initializeSubmenu(menu, actuator, root, div) {

  var parent = menu.parentNode;

  parent.onmouseover = function() {
    div.checkMove();
    menu.style.visibility = "visible";
  }

  actuator.onfocus = function() {
    div.checkMove();
    menu.style.visibility = "visible";
  }

  parent.onmouseout = function() {
    menu.style.visibility = "";
  }

  var tags = menu.getElementsByTagName("a");
  var link = tags.item(tags.length - 1);
  if (!link.onblur)
    link.onblur = function() {
      var node = link.parentNode.parentNode;
      while (node != menu) {
        node.style.visibility = "";
        node = node.parentNode.parentNode;
      }
      menu.style.visibility = "";
    }

  if (parent.parentNode == root) {
    menu.set = function() {
      setLocation1(this, actuator, root, div);
    }
  } else {
    menu.set = function() {
      setLocation2(this, actuator, div);
    }
  }
}

function setLocation1(menu, actuator, root, div) {
  var first = firstElement(menu, "LI");
  if (first != null)
    if (first.offsetParent == menu)
      setWidth(menu);
  if (div.horizontal()) {
    if (actuator.offsetParent == menu.offsetParent) {
      menu.style.left = actuator.offsetLeft + "px";
      menu.style.top  = actuator.offsetTop  + actuator.offsetHeight + "px";
    } else {
      /* happens in Win/IE5-6 when some ancestors are 'static' and have their
       * 'width' or 'height' different than 'auto' */
      var parent = actuator.offsetParent;
      var top  = 0;
      var left = 0;
      while (parent != menu.offsetParent && parent != null) {
        top  = top  + parent.offsetTop;
        left = left + parent.offsetLeft;
        parent = parent.offsetParent;
      }
      menu.style.left = left + actuator.offsetLeft + "px";
      menu.style.top  = top  + actuator.offsetTop  + actuator.offsetHeight + "px";
    }
  } else {
    menu.style.top = actuator.offsetTop + "px";
    menu.style.left = (div.offsetWidth + actuator.offsetWidth) / 2 + "px";
  }
}

function setLocation2(menu, actuator, div) {
  if (menu.offsetParent != document.body)
    setWidth(menu);
  menu.style.top = actuator.offsetTop + "px";
  menu.style.left = actuator.offsetWidth + "px";
}

function setWidth(menu) {
  menu.style.right = - maxWidth + "em";
  var width  = 0;
  var height = 0;
  var items = menu.getElementsByTagName("a");
  for (var i = 0; i < items.length; i++) {
    var link = items.item(i);
    if (link.parentNode.parentNode == menu) {
      height = height + link.offsetHeight;
      if (link.offsetWidth > width)
        width = link.offsetWidth;
    }
  }
  if (borderBox)
    width = width + (menu.offsetHeight - height);
  menu.style.width = width + "px";
}

function firstElement(node, name) {
  var first = node.firstChild;
  while (first != null) {
    if (first.tagName == name)
      return first;
    first = first.nextSibling;
  }
  return null;
}

function updateClientGrpField() {
	document.forms[0].elements["clientGrp"].value = 
	
    document.forms[0].elements["clientGroups"].options[document.forms[0].elements["clientGroups"].selectedIndex].value;
	document.forms[0].elements["chainNum"].value = "";
}

function updateChainNumField() {
	document.forms[0].elements["chainNum"].value = 
	
        document.forms[0].elements["topChains"].options[document.forms[0].elements["topChains"].selectedIndex].value;
}









function updateCGChainNum(what, count) {
     value = document.forms[0].elements["topChains"].options[document.forms[0].elements["topChains"].selectedIndex].value;
	
    for (var i = 0, oldpos = -1; i<count-1; i++) {
        pos = value.indexOf('&',oldpos+1);
        data = value.substring(oldpos+1,pos);
		
		document.forms[0].elements["clientGrp"].value = value.substring(oldpos+1,pos);
		oldpos = pos;
    }
		
    document.forms[0].elements["chainNum"].value = value.substring(oldpos+1,value.length)
}



    

function updateSubChainNumField(chain) {
	var subChain = chain;	
	opener.document.forms[0].elements["chainNum"].value = subChain;
	self.close();
}

function updateEntNumField(entity) {
	var subEntity = entity;	
	opener.document.forms[0].elements["entityNum"].value = subEntity;
	self.close();
}

function lookupMidListEnt(cg, cn, et){
var cgroup = cg;
var chain = cn;
var entity = et;
path = opener.document.forms[0].elements["path"].value;
var url = path+"/MidList.do?CGRP="+cgroup+"&CHN="+chain+"&ENT="+entity;
document.getElementById('results').style.width = 500;
document.getElementById('results').style.height = 600;
document.getElementById('results').src = url;
}	
function lookupMidList(cg, cn){
var cgroup = cg;
var chain = cn;
path = opener.document.forms[0].elements["path"].value;
var url = path+"/MidList.do?CGRP="+cgroup+"&CHN="+chain;
document.getElementById('results').style.width = 500;
document.getElementById('results').style.height = 600;
document.getElementById('results').src = url;
}

function lookupEntMidList(cg, et){
var cgroup = cg;
var entity = et;
path = opener.document.forms[0].elements["path"].value;
var url = path+"/MidList.do?CGRP="+cgroup+"&ENT="+entity;
document.getElementById('results').style.width = 500;
document.getElementById('results').style.height = 600;
document.getElementById('results').src = url;
}	

function lookupSingleHierarchyEnt() {
cgroup = document.forms[0].elements["clientGrp"].value;
chainnum = document.forms[0].elements["chainNum"].value;
entityNum = document.forms[0].elements["entityNum"].value;
path = document.forms[0].elements["path"].value;
url = path+"/Hier.do?CGRP="+cgroup+"&CHN="+chainnum+"&ENT_CHAIN="+entityNum;
window.open(url,'MidList','width=850,height=650,status,scrollbars,resizeable=1')    
}

function lookupSingleHierarchy() {
cgroup = document.forms[0].elements["clientGrp"].value;
chainnum = document.forms[0].elements["chainNum"].value;
path = document.forms[0].elements["path"].value;
url = path+"/Hier.do?CGRP="+cgroup+"&CHN="+chainnum;
window.open(url,'MidList','width=850,height=650,status,scrollbars,resizeable=1')    
}

function lookupSubChainHierarchy(cg, chn) {
cgroup = cg;
chainnum = chn;
path = opener.document.forms[0].elements["path"].value;
url = path+"/Hier.do?CGRP="+cgroup+"&CHN="+chainnum;
window.open(url,'MidList','width=850,height=650,status,scrollbars,resizeable=1')
      
}
function lookupSubChainHierarchyEnt(cg, chn, et) {
cgroup = cg;
chainnum = chn;
entity = et;
path = opener.document.forms[0].elements["path"].value;
url = path+"/Hier.do?CGRP="+cgroup+"&CHN="+chainnum+"&ENT="+entity;
window.open(url,'MidList','width=850,height=650,status,scrollbars,resizeable=1')
      
}
function lookupEntityHierarchy() {
cgroup = document.forms[0].elements["clientGrp"].value;
topentity = document.forms[0].elements["entityNum"].value;
path = document.forms[0].elements["path"].value;
url = path+"/Hier.do?CGRP="+cgroup+"&ENT="+topentity;
window.open(url,'MidList','width=850,height=650,status,scrollbars,resizeable=1')
    
}

function printFrame(frameName)
{
   // test for nested frame first, and print if present
   if(window.frames[frameName].frames['report'])
   {
      window.frames[frameName].frames['report'].focus();
      window.frames[frameName].frames['report'].print();
      return;
   }
   
   // otherwise, print the iframe itself
   parent[frameName].focus();
   parent[frameName].print();
}




