/* 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();







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 setWindowHeight() {

	var windowHeight=0;

	if (typeof(window.innerHeight)=='number') {

		windowHeight=window.innerHeight;

	}

	else {

		if (document.documentElement && document.documentElement.clientHeight) {

			windowHeight = document.documentElement.clientHeight;

		}

		else {

				if (document.body && document.body.clientHeight) {

				windowHeight=document.body.clientHeight;

				}

		}

	}

	document.getElementById("bVertical").style.height=document.getElementById("Conteneur").offsetHeight-document.getElementById("bande").offsetHeight+"px";

}



window.onload = function() { loadMenu(); }
