﻿function DordMenu() {
  this.isIe6 = navigator.appVersion.indexOf("MSIE") > 0 && parseFloat(navigator.appVersion.split("MSIE")[1]) <= 6;
  this.DordMenuItems = new Array();
  this.timer = null;
  this.timerFils = null;
  this.currentPere = null;
};

DordMenu.prototype.ajouter = function(settings) {
  var pere = document.getElementById(DordMenu.getParam(settings, "pere", ""));
  if (typeof (pere) != "object")
    return false;
  var fils = document.getElementById(DordMenu.getParam(settings, "fils", ""));
  if (typeof (fils) != "object")
    return false;
  this.DordMenuItems[pere.id] = new DordMenuItem(pere, fils);
}


DordMenu.prototype.getParam = function(settings, name, default_value, strip_whitespace, split_chr) {
  var value = (typeof (settings[name]) == "undefined") ? default_value : settings[name];

  // Fix bool values
  if (value == "true" || value == "false")
    return (value == "true");

  if (strip_whitespace)
    value = DordMenu.regexpReplace(value, "[ \t\r\n]", "");

  if (typeof (split_chr) != "undefined" && split_chr != null) {
    value = value.split(split_chr);
    var outArray = new Array();

    for (var i = 0; i < value.length; i++) {
      if (value[i] && value[i] != "")
        outArray[outArray.length] = value[i];
    }

    value = outArray;
  }

  return value;
};

DordMenu.prototype.regexpReplace = function(in_str, reg_exp, replace_str, opts) {
  if (typeof (opts) == "undefined")
    opts = 'g';

  var re = new RegExp(reg_exp, opts);
  return in_str.replace(re, replace_str);
};

function DordMenuItem(pere, fils) {
  this.pere = pere;
  this.fils = fils;
  with (this.fils) {
    style.position = "absolute";
    style.visibility = "hidden";
  }
  if (!DordMenu.isIe6) {
    this.pere.onmouseover = function() {
      DordMenu.cacherTimerFils();
      fils.style.visibility = "visible";
      fils.style.left = DordMenu.getLeft(pere) + "px";
      pere.className = "selected";
      DordMenu.currentPere = pere;
      DordMenu.timerStop();
    };
    this.pere.onmouseout = function() { DordMenu.timerStart(fils) };
    this.fils.onmouseover = function() { DordMenu.timerStop() };
    this.fils.onmouseout = function() { DordMenu.timerStart(fils) };
  }
  else {
    this.pere.setAttribute("onmouseover", function() {
      DordMenu.cacherTimerFils();
      fils.style.visibility = "visible";
      fils.style.left = DordMenu.getLeft(pere) + "px";
      DordMenu.timerStop();
    });
    this.pere.setAttribute("onmouseout", function() {
      DordMenu.timerStart(fils);
    });
    this.fils.setAttribute("onmouseover", function() {
      DordMenu.timerStop();
    });
    this.fils.setAttribute("onmouseout", function() {
      DordMenu.timerStart(fils);
    });
  }
};

//Fonction permettant de connaître la position d'un objet
//par rapport au bord gauche de la page.
//Cet objet peut être à l'intérieur d'un autre objet.
DordMenu.prototype.getLeft = function($element) {
  var $left = 0;
  while ($element.tagName != "BODY") {
    $left += $element.offsetLeft;
    $element = $element.offsetParent;
  }
  return $left;
}

DordMenu.prototype.timerStart = function(fils) {
  DordMenu.timerStop();
  DordMenu.timerFils = fils;
  DordMenu.timer = setTimeout("DordMenu.cacherTimerFils()", 1000);
}

DordMenu.prototype.timerStop = function() {
  clearTimeout(DordMenu.timer);
}

DordMenu.prototype.cacherTimerFils = function() {
  if (DordMenu.timerFils != null) {
    DordMenu.timerFils.style.visibility = "hidden";
    if(DordMenu.currentPere)
      DordMenu.currentPere.className = "";
  }
}

// Global instance
DordMenu = new DordMenu();