// ------------------------ ADL MENU SCRIPT -----------------------

/*
- all <li>must have a <a>
- class of the main <ul> must be set to something like adl_menuclass
- li height must be set in pixels in the css
- these variables should be set before including this file :

var adl_menudiv = ['deepmenu','singlelevel','horizmenu'];
var adl_overopacitymax=[0.9,0.3,0.5];
var adl_menuwidth=[{0:156,1:156,2:250},{0:250},{0:30,1:60,2:150}];
var adl_menuhoriz=[false,false,true];
var adl_menusubsep=[20,2,0];
var adl_menusep=[20,0,15];

*/

//ADL
var adl_menusubs=[];
var globalidx=0;
var adl_menuclosemenutimer;

//ADl
function adl_menuclose(level)
{
  //$('comment1').firstChild.data+="Closeall";
  var idx;
  for (idx=0;idx<adl_menusubs.length;idx++)
  {
    curli=adl_menusubs[idx];
    //$('comment1').firstChild.data+="Close"+curli.subindex+" (e="+exceptli+") ";
    if (curli.level>=level)
    {
      var opacsub=curli.sub.getStyle('opacity');
      curli.subtw.start('opacity',opacsub,0);
    }
  }
}

//ADL
function adl_menumouseenter(curli)
{
  var opac;
  //$('comment1').firstChild.data+="enter "+curli.globalidx+" ";
  $clear(adl_menuclosemenutimer);
  adl_menuclose(curli.level);
  curli.tw.start('opacity',0,adl_overopacitymax[curli.menuindex]);
  if (curli.sub!=undefined)
  {
    opac=curli.sub.getStyle('opacity');
    curli.subtw.start('opacity',opac,1);
  }
  if (curli.currentul.parentli!=undefined)
  {
    // close parent over
    opac=curli.currentul.parentli.over.getStyle('opacity');
    curli.currentul.parentli.tw.start('opacity',opac,0);
    // rerun parent subtween start
    opac=curli.currentul.getStyle('opacity');
    curli.currentul.parentli.subtw.start('opacity',opac,1);
  }
}

//ADL
function adl_menumouseleave(curli)
{
  //$('comment1').firstChild.data+="leave "+curli.globalidx+" ";
  var opac=curli.over.getStyle('opacity');
  curli.tw.start('opacity',opac,0);
  adl_menuclosemenutimer=adl_menuclose.delay(1500,this,-1);
}

//ADL
function adl_menuprepare(menuindex,ulelem,divposition,userclass,level)
{
  var currenty=0,currentx=0;
  ulelem.setStyles(
  {
    'z-index':0,
    overflow:'visible',
    position:'relative',
    margin:'0px',
    padding:'0px'
  });
  if (level>0)
    ulelem.setStyles({visibility:'hidden',opacity:0});
  var menulis=ulelem.getChildren('li');
  //$('comment1').firstChild.data+="found "+menulis.length+" ";
  var liidx;
  for (liidx=0;liidx<menulis.length;liidx++)
  {
    //if (menulis[liidx].firstChild.data!=undefined)
      //$('comment1').firstChild.data+=menulis[liidx].firstChild.data+", ";
    //else
      //$('comment1').firstChild.data+=menulis[liidx].getElement('a').firstChild.data+", ";
    // set events
    menulis[liidx].addEvent('mouseenter', 
      function(e)
      {
        e = new Event(e);
        adl_menumouseenter(this);
        e.stop();
      });
    menulis[liidx].addEvent('mouseleave', 
      function(e)
      {
        e = new Event(e);
        adl_menumouseleave(this);
        e.stop();
      });
    // set positions and style
    var liheight=menulis[liidx].getStyle('height');
    var menuliheight=parseInt(liheight.substring(0,liheight.length-2));//remove px
    //var liwidth=menulis[liidx].getStyle('width');
    //var menuliwidth=parseInt(liwidth.substring(0,liwidth.length-2));//remove px
    var menuliwidth=adl_menuwidth[menuindex][level];
    var menuleft=0,menutop=0;
    if (adl_menuhoriz[menuindex] && level==0)
    {
      menuleft=currentx;
      menutop=menuliheight;
    }
    else
    {
      menuleft=0;
      menutop=currenty;
    }
    menulis[liidx].setStyles(
    {
      'list-style-type':'none',
      position:'absolute',
      left:menuleft+"px",
      top:menutop+"px",
      width:menuliwidth+"px",
      height:menuliheight+"px",
      overflow:'visible'
    });
    // set over
    menulis[liidx].over=new Element('div').inject(menulis[liidx]);
    //menulis[liidx].over.id='ANID';
    //$('comment1').firstChild.data+="w="+menulis[liidx].getStyle("width")+" ";
    //$('comment1').firstChild.data+="w="+menulis[liidx].getStyle("width")+" ";
    menulis[liidx].over.setStyles(
    {
      position:'absolute',
      left:"0px",
      top:"0px",
      width:"100%",
      height:"100%",
      visibility:'hidden',
      opacity:0,
      'z-index':1
    });
    menulis[liidx].over.addClass(userclass+"_over");
    // text
    menulis[liidx].getElement('a').setStyles(
    {
      position:'absolute',
      'z-index':2
    });
    // tween
    var tw=new Fx.Tween();
    tw.initialize(menulis[liidx].over);
    tw.setOptions({duration:500,link:'cancel'});
    menulis[liidx].tw=tw;
    // find submenu
    var sub=menulis[liidx].getElement('ul');
    if (sub!=undefined)
    {
      sub.parentli=menulis[liidx];
      if (adl_menuhoriz[menuindex] && level==0)
      {
        sub.finalleft=0;
        sub.finaltop=menuliheight+adl_menusubsep[menuindex];
      }
      else
      {
        sub.finalleft=menuliwidth+adl_menusubsep[menuindex];
        sub.finaltop=0;
      }
      sub.setStyles({left:sub.finalleft,top:sub.finaltop});
      adl_menuprepare(menuindex,sub,divposition,userclass,level+1);
      /*
      // on IE7 morphing does not work with 2 properties, and on safari submenu doesn not appear each time
      var mo=new Fx.Morph();
      mo.initialize(sub);
      mo.setOptions({duration:800,link:'cancel',transition:'quint:out'});
      menulis[liidx].mo=mo;
      */
      var subtw=new Fx.Tween();
      subtw.initialize(sub);
      subtw.setOptions({duration:500,link:'cancel'}); // on IE7 this does not tween if applied to a ul instead of div, but the ul appears at the end !!
      menulis[liidx].subtw=subtw;
      menulis[liidx].sub=sub;
      menulis[liidx].subindex=adl_menusubs.length;
      adl_menusubs[adl_menusubs.length]=menulis[liidx];
    }
    else
      menulis[liidx].subindex=-1;
    // set variables
    menulis[liidx].globalidx=globalidx;
    menulis[liidx].currentul=ulelem;
    menulis[liidx].menuindex=menuindex;
    menulis[liidx].level=level;
    globalidx++;
    if (adl_menuhoriz[menuindex] && level==0)
    {
      currentx+=menuliwidth+adl_menusep[menuindex];
    }
    else
    {
      currenty+=menuliheight+adl_menusep[menuindex];
    }
  }// for li
}

//ADL
window.addEvent('domready', 
  function()
  {
    var idx;
    for (idx=0;idx<adl_menudiv.length;idx++)
    {
      // find topleft
      var top=$(adl_menudiv[idx]).getStyle('top');
      divtop=parseInt(top.substring(0,top.length-2));//remove px
      var left=$(adl_menudiv[idx]).getStyle('left');
      divleft=parseInt(left.substring(0,left.length-2));//remove px
      var divposition={left:divleft,top:divtop};
      // reduce size to let the user click on objects that are under
      $(adl_menudiv[idx]).setStyles({width:'0px',height:'0px'});
      // prepare menu
      var mainul=$(adl_menudiv[idx]).getChildren('ul');
      mainul[0].finalleft=0;
      mainul[0].parentli=undefined;
      mainul[0].setStyles({left:mainul[0].finalleft,top:mainul[0].finaltop});
      adl_menuprepare(idx,mainul[0],divposition,$(adl_menudiv[idx]).getProperty('class'),0);
    }// for menus
  }
);

