/* All the menu IDs, so one menu by ID*/
var menuids=new Array("verticalmenu"); //Enter id(s) of UL menus, separated by commas
var submenuoffset=-2; //Offset of submenus from main menu. Default is -2 pixels.
var ON = true;
var OFF = !ON;
var this_menu = null;
var li_tags = null;
var ul_tags = null;
var cur_li = null;
var prev_li = null;
var cur_ul = null;
var prev_ul = null;
var active_ul = null;
var menu_active = false;
var _debug = false;

function createcssmenu(){
  for (var i = 0; i < menuids.length; i++) {
    this_menu = document.getElementById(menuids[i]);
    li_tags = document.getElementById(menuids[i]).getElementsByTagName("li");
    ul_tags = document.getElementById(menuids[i]).getElementsByTagName("ul");
    
    init_menu(ul_tags);
  }
}

function init_menu(_ul_tags) {
  for (var j = 0; j < _ul_tags.length; j++) {
    cur_ul = _ul_tags[j];
    init_menu_part(_ul_tags[j].parentNode);
    /*init_li_listeners(_ul_tags[j].parentNode);
    var li_child_tags = _ul_tags[j].getElementsByTagName("li");
    for (var k = 0; k < li_child_tags.length; k++) {
      init_li_listeners(li_child_tags[k]);
    }*/
    
    _ul_tags[j].p;
  }
}

function init_menu_part(parent_li_tag) {
  init_li_listeners(parent_li_tag);
  turn_li_tag(OFF, parent_li_tag);
  init_submenu_part(parent_li_tag);
}
function init_submenu_part(parent_li_tag) {
  var li_child_tags = parent_li_tag.getElementsByTagName("li");
  for (var k = 0; k < li_child_tags.length; k++) {
    init_li_listeners(li_child_tags[k]);
    turn_li_tag(OFF, li_child_tags[k]);
  }
}

function init_li_listeners(li_tag) {
  li_tag.onmouseover = submenu_mouseover;
  li_tag.onmouseout = submenu_mouseout;
  li_tag.onclick = submenu_click;
}

function remove_li_listeners(li_tag) {
  li_tag.onmouseover = null;
  li_tag.onmouseout = null;
  li_tag.onclick = null;
}

function reset_menu() {
  hide_all_submenus();
  init_menu(ul_tags);
  cur_li = null;
  prev_li = null;
  cur_ul = null;
  prev_ul = null;
  active_ul = null;
  menu_active = false;
}

/*function menu_mouseout() {
  //if (_debug)
    alert("menu_mouseout, this_menu.id: " + this_menu.id);
  if (active_ul != null) {
    if (_debug)
      alert("menu_mouseout, active_ul.id: " + active_ul.id);
    show_submenu(active_ul);
  }
}*/
function submenu_mouseover() {
  var parent_li;
  //var this_ul;
  if (this.getElementsByTagName("ul") != null && this.getElementsByTagName("ul").length > 0) {
    parent_li = this.getElementsByTagName("ul")[0].parentNode;
    cur_li = parent_li;
  }
  var this_ul = this.getElementsByTagName("ul")[0];
  var span_tags = this.getElementsByTagName("span");
  span_tags[0].style.display = "none";
  span_tags[1].style.display = "block";
  /*var child_li = this_ul.getElementsByTagName("li")[0];
  alert("child_li.id: " + child_li.id);*/
  hide_submenu(prev_ul);
  hide_submenu(active_ul);
  show_submenu(this_ul);
  menu_active = false;
}

function submenu_mouseout() {
  //      alert("submenu_mouseout, this.style.height: " + this.height);
  var span_tags = this.getElementsByTagName("span");
  span_tags[0].style.display = "block";
  span_tags[1].style.display = "none";
  if(this.getElementsByTagName("ul").length > 0) {
    this.getElementsByTagName("ul")[0].style.display = "none";
  }
  if (active_ul != null) {
    show_submenu(active_ul);
  }
}
function parentmenu_click() {
  if (_debug) {
    alert("PMC prev_li.id: " + prev_li.id + "\tcur_li.id: " + cur_li.id);
  }
  turn_li_tag(OFF, prev_li);
  /*prev_li.onmouseout = submenu_mouseout;
  prev_li.onclick = submenu_click;*/
}
function submenu_click() {
  this.onclick = null;
  this.onmouseout = null;
  if(isSubMenu(this)) {
    var _parent = getParentLi(this);
    _parent.onclick = parentmenu_click;
    _parent.onmouseout = null;
  }
  turn_li_tag(ON, this);
  /*if (active_ul !=null)
    prev_li = active_ul.parentNode;*/
  active_ul = getParentLi(this).getElementsByTagName("ul")[0];
//   cur_li = active_ul.parentNode;
  cur_li = this;
  
  if(prev_li != null) {
    
    if (_debug) {
      alert("prev_li.id: " + prev_li.id + "\tcur_li.id: " + cur_li.id);
      alert("On reactive le mouseout sur prev_li.id: " + prev_li.id);
    }
    
    if(are_same_family(prev_li, cur_li)) {
      if(isSubMenu(prev_li)) {
        turn_li_tag(OFF, prev_li);
        prev_li.onmouseout = submenu_mouseout;
        prev_li.onclick = submenu_click;
      } /*else {
        getParentLi(cur_li).onclick = submenu_click;
      }*/
        //turn_li_tag(ON, cur_li);
    } else {
      init_menu_part(getParentLi(prev_li));
      /*if (isSubMenu(cur_li)) {
        //turn_li_tag(ON, getParentLi(cur_li));
      }*/
      //turn_li_tag(ON, cur_li);
    }
      
    //}
  } //else {
  prev_li = cur_li;
  //}
  if (_debug)
    alert("et on enleve celui de cur_li.id: " + cur_li.id);
  //cur_li.onmouseout = null;
  menu_active = true;
  //prev_li = this;
}

function are_same_family(li_no1, li_no2) {
  var parent_li_1 = getParentLi(li_no1);
  var parent_li_2 = getParentLi(li_no2);
  if (_debug)
    alert("parent_li_1.id: " + parent_li_1.id + "\tparent_li_2.id: " + parent_li_2.id + " = " + (parent_li_1.id == parent_li_2.id));
  if (parent_li_1.id == parent_li_2.id)
    return true;
  else
    return false;
  
  
}

function getParentLi(li_tag ) {
  if (isMenu(li_tag))
    return li_tag;
  else
    return li_tag.parentNode.parentNode;
}

/* on_off is boolean ON and OFF golbal var, ONLY use when clicked, NOT mouseover */
function turn_li_tag(on_off, li_tag) {
  var span_tags = li_tag.getElementsByTagName("span");
  if (on_off == ON) {
    span_tags[0].style.display = "none";
    span_tags[1].style.display = "block";
    //li_tag.onmouseover = null;
    //remove_li_listeners(li_tag);
  } else {
    span_tags[0].style.display = "block";
    span_tags[1].style.display = "none";
    //init_li_listeners(li_tag);
  }
}

function show_submenu(this_ul) {
  //this_ul.style.left = this.offsetWidth + submenuoffset+"px";
  if(this_ul != null) {
    //alert("show_submenu, this_ul.parentNode.offsetWidth: " + getParentLi(this_ul).offsetWidth);
    //this_ul.style.left = this_ul.parentNode.offsetWidth + submenuoffset+"px";
    this_ul.style.left = getParentLi(this_ul).offsetWidth + submenuoffset + "px";
    //alert("getParentLi(this_ul).offsetWidth: " + getParentLi(this_ul).offsetWidth + "\tthis_ul.style.left : " + this_ul.style.left);
    this_ul.style.display = "block";
    prev_ul = cur_ul;
    cur_ul = this_ul;
  }
}
function hide_submenu(this_ul) {
  if(this_ul != null) {
    this_ul.style.display = "none";
  }
}
function hide_all_submenus() {
  if(ul_tags != null) {
    for(var i = 0; i < ul_tags.length; i++) {
      hide_submenu(ul_tags[i]);
    }
  }
}

function isMenu(li_tag) {
  if(li_tag.getElementsByTagName("ul").length > 0)
    return true;
  else
    return false;
}
function isSubMenu(li_tag) {
  return !isMenu(li_tag);
}

if (window.addEventListener)
  window.addEventListener("load", createcssmenu, false);
else if (window.attachEvent)
  window.attachEvent("onload", createcssmenu);


