//Rev 2.42 new version

function ExpList2(mo) {
//attributes
  this.w= mo['w']; this.h0= mo['h0']; // default values
  this.top= mo['top'];   this.left= mo['left'];
  this.howMany= mo['howMany'];
  this.oLbl= ''; oLbl= mo['mn'];
  if(typeof(oLbl)!= "undefined" && oLbl!="") this.oLbl= oLbl;
  this.withCtl= mo['withCtl'] ? mo['withCtl']: 0;
  this.whichOn= mo['whichOn'] ? mo['whichOn']: null;
  this.mOffX = mo['mOffX']? mo['mOffX']: 0;
  this.dOffX = mo['dOffX']? mo['dOffX']: 0;
  this.startY = mo['top']? mo['top']: 0;
  this.startX = mo['left']? mo['left']: 0;
  // defaults
  this.totH= 0;  this.status= 1;  this.mOffY= 0;
  this.menus= null
  this.firstTime= 1;
  this.test= 0
  this.lastMenuOn= null
// derived:
  this.mName = this.oLbl+"Menu"; this.dName = this.oLbl+"Text"; 
//methods
  this.cMenu = ExpList2.cMenu  
  this.init2= ExpList2.init2;
  this.start = ExpList2.start
  this.displayList = ExpList2.displayList
  this.shrinkAll= ExpList2.shrinkAll;
  this.inst_idx= ExpList2Data.instances.length;
  ExpList2Data.instances[this.inst_idx]= this
}

ExpList2.init= function(idx) {
 if(null==idx || idx<0) return;
 menu = ExpList2Data.instances[idx];f
 tp= typeof(menu);
 if(typeof(menu)=='undefined' || typeof(menu)!= 'object') return;
 // linkage is fine
 if(!window.loaded) { setTimeout('ExpList2.init('+idx+')',500); return; }
 // doc is ready 
 menu.init2();
 menu.start();
 bInit= true;
}

ExpList2.init2 = function() {
  var menus= new Array(this.howMany)
  var curY= this.startY;
  var dLayer= null
  mainL= getLayer('main'+this.oLbl);
  moveLayerTo(mainL, this.startX,this.startY);
  var tc;
  for(var i=0; i< menus.length; i++) { 
    var n= this.mName+i
    var n1= this.dName+i
    menus[i]= new ExpList2.cMenu(this,n,n1);
    //var v= getVisibility(menus[i].layer) 
    var lyr= menus[i].layer
    if(NN6) tc= 'pointer'; else if(isFOX) tc='pointer'; else tc='hand';
    lyr.style.cursor= tc; 
    //if(i!= 0) 
    moveLayerTo(lyr, this.startX,curY);    h= getHeight(lyr);
    curY+= getHeight(lyr);
  }

 //part 3
 for(var i=0; i< menus.length; i++) { 
  lyr=  menus[i].layer
  moveLayerBy(lyr,this.mOffX,0)
  lyr = menus[i].textLayer
  setTop(lyr, this.startX+ this.dOffX); 
 }

 if(this.whichOn!=null && this.whichOn>=0 && this.whichOn< this.howMany) {
  menus[this.whichOn].on= true;//arbitrary one is opened?
  this.lastMenuOn= menus[this.whichOn];
 }

 this.menus = menus
}

ExpList2.start = function() {
  this.displayList()
}

ExpList2.cMenu = function(menus,name,dname) { // this is one menu, menus is the entire object
  this.menu = menus
  var lyr= getLayer(name); // 'Menu' layer
  lyr.style.cursor='hand'; //chg
  this.name= name; this.w= menus.w; this.left= menus.left; 
  this.h0= Math.max(menus.h0,getHeight(lyr));//modify to use h0
  this.curY= 0;  this.st= 0; this.dir= 0; var b1= 0;
  this.curH= 0; //is visible height
  this.layer= lyr   
  hideLayer(lyr);

  setWidth(this.layer,this.w); this.layer.peer= this //menuitem controlling the menu layer 
  this.textLayer= getLayer(dname)
  if(name=='Menu0' && menus.withCtl>0) { this.layer.onmousedown= ExpList2.mdown2; b1=true; }
  if(this.textLayer!=null&&typeof(this.textLayer)!='undefined') {  
   if(NN4) lyr.captureEvents(Event.MOUSEDOWN);
   if(!b1&&trim(this.textLayer.innerText).length>0) { this.layer.onmousedown= ExpList2.cMenu.mdown;}
   setWidth(this.textLayer,this.w);  
   setLeft(this.textLayer,this.left);  
 }
 this.on= false; //originally all are turned off
}

ExpList2.displayList = function() {
  var curY= this.startY;
  for(var i=0; i< this.menus.length; i++) { 
    var m= this.menus[i]
    if(i!= 0) setTop(m.layer, curY);
    curY+= getHeight(m.layer);
    showLayer(m.layer);
    if(m.textLayer==null) continue; 
    if(m.on) { 
      setTop(m.textLayer, curY);
      showLayer(m.textLayer);
      tx= m.textLayer.innerHTML; h1= getHeight(m.textLayer);
      if(tx.length>0) incr= h1; else incr= 0;
      curY+= incr;
    }
    else hideLayer(m.textLayer);
  }
}

ExpList2.cMenu.mdown= function (e) {
  var menu = this.peer.menu;
  if(this.peer== menu.lastMenuOn) return true
  if(menu.lastMenuOn!= null) menu.lastMenuOn.on= false;//close the one prev opened
  var v= this.peer.name
  this.peer.on= true;
  menu.lastMenuOn= this.peer
  menu.displayList()
  return true
}

ExpList2.cMenu.mdown2= function (e) {//only for control layer 'all.expand/shrink'
  //'this' is Layer
  var menu = this.peer.menu;
  switch(status) {
    case 0: break
    case 1:   for(var i=0; i< menus.length; i++) { menus[i].dir= 1;  }
      //alert("expand")
      test= 1;
      expand(); break;
    case 2:   for(var i=0; i< menus.length; i++) { menus[i].dir= -1;  }
     ExpList2.shrink(menu.inst_idx); break;
  }  
  return false
}

ExpList2.shrinkAll= function () {
  var menus = this.menus;
  for(i=0;i<menus.length;i++) menus[i].on= false;
  this.displayList()
  //alert("you hit :"+v) 
  this.lastMenuOn= null
  return true
}


function expand() {
  if(menus== null) { init(); }
  var totStat= 0;
  totH= 0;
  var curY= 0, curX;
  if(test== 1) { test= 0;}
  for(var i=0; i< menus.length; i++) {
    var m= menus[i];    
    var layer= getLayer(m.name)
    curY= startY+totH;
    setTop(layer,curY);
    if(m.dir== 1) {
     if( m.curH < m.h0) { m.curH+= 5; }
     else m.dir= 0;
    }   
    totH+= m.curH;  
    totStat+= Math.abs(m.dir);
    if(firstTime) showLayer(layer)
  }
  firstTime= 0;
  if(totStat>0) timer= setTimeout('expand()',300);
  else { clearTimeout(timer);   if(isMinNN4) window.releaseEvents(Event.MOUSEDOWN)  
    status= 2;
  }
}

ExpList2.shrink= function (idx) {
  //alert("shrink")
 if(null==idx || idx<0) return;  
  inst= ExpList2Data.instances[idx];
  menus= inst.menus;
  if(null==menus) return
  var totStat= 0;
  totH= 0;
  var curY= 0, curX;
  for(var i=0; i< menus.length; i++) {
    var m= menus[i];    
    var layer= getLayer(m.name)
    curY= inst.startY+totH;
    setTop(layer,curY);
    if(m.dir== -1) {
      if(m.curH >0) { 
        m.curH-= 5; 
        if(m.curH< 0) m.curH= 0;
        //var t= getPobj(m.name,'height')[props['height']]
      }
      if(m.curH== 0) { m.dir= 0; if(i> 0) hideLayer(m.layer) }
    }   
    totH+= m.curH;  
    totStat+= Math.abs(m.dir);
  }
  //firstTime= 0;
  if(totStat> 0) this.timer= setInterval("ExpList2.shrink(idx)",300);
  else { clearTimeout(timer);   if(isMinNN4) window.releaseEvents(Event.MOUSEDOWN)  
    status= 1; firstTime= 1;
  }
}
//-------------------------->
function ExpList2H(mo) {
//attributes
  this.w= mo['w']; this.h0= mo['h0']; // default values
  this.top= mo['top'];   this.left= mo['left'];
  this.howMany= mo['howMany'];
  this.oLbl= ''; oLbl= mo['mn'];
  if(typeof(oLbl)!= "undefined" && oLbl!="") this.oLbl= oLbl;
  this.withCtl= mo['withCtl'] ? mo['withCtl']: 0;
  this.whichOn= mo['whichOn'] ? mo['whichOn']: null;
  this.mOffX = mo['mOffX']? mo['mOffX']: 0;
  this.dOffX = mo['dOffX']? mo['dOffX']: 0;
  // defaults
  this.startY = mo['top']? mo['top']: 0;
  this.startX = mo['left']? mo['left']: 0;
  this.totW= 0;  this.status= 1;  this.mOffY = 0; this.dOffY= 7;
  this.menus= null
  this.firstTime= 1;
  this.test= 0
  this.lastMenuOn= null
// derived:
  this.mName = this.oLbl+"Menu"; this.dName = this.oLbl+"Text"; 
//methods
  this.cMenu = ExpList2H.cMenu  
  this.init2= ExpList2H.init2;
  this.start = ExpList2H.start
  this.displayList = ExpList2H.displayList
  this.shrinkAll= ExpList2H.shrinkAll;
  this.inst_idx= ExpList2Data.instances.length;
  ExpList2Data.instances[this.inst_idx]= this
}

ExpList2H.init= function(idx) {
 if(null==idx || idx<0) return;
 menu = ExpList2Data.instances[idx];
 tp= typeof(menu);
 if(typeof(menu)=='undefined' || typeof(menu)!= 'object') return;
 // linkage is fine
 if(!window.loaded) { setTimeout('ExpList2H.init('+idx+')',500); return; }
 // doc is ready 
 menu.init2();
 menu.start();
 bInit= true;
}

ExpList2H.init2 = function() {
  var menus= new Array(this.howMany)
  //mainL= getLayer('main'+this.oLbl);
  //moveLayerTo(mainL, this.startX,this.startY);
  var curX= this.startX; var curY= this.startY;
  var dLayer= null
  for(var i=0; i< menus.length; i++) { 
    var n= this.mName+i
    var n1= this.dName+i
    menus[i]= new ExpList2H.cMenu(this,n,n1);
    var v= getVisibility(menus[i].layer) 
    var lyr=  menus[i].layer
    lc= NN6?'pointer':'hand';
    lyr.style.cursor= lc; 
    //if(i!= 0) 
    moveLayerTo(lyr, curX+ this.mOffX, this.startY);
    h1=  getHeight(lyr);   curY= this.startY+h1;
    tlyr = menus[i].textLayer;
    setLeft(tlyr, curX+ this.dOffX); setTop(tlyr, curY+ this.dOffY);
    curX+= getWidth(lyr); //or common width
  }

  if(this.whichOn!=null && this.whichOn>=0 && this.whichOn< this.howMany) {
    menus[this.whichOn].on= true;//arbitrary one is opened?
    this.lastMenuOn= menus[this.whichOn];
  }

  this.menus = menus
}

ExpList2H.start = function() {
  this.displayList()
}

ExpList2H.cMenu = function(menus,name,dname) { // this is one menu, menus is the entire object
  this.menu = menus
  var lyr= getLayer(name); // 'Menu' layer
  lyr.style.cursor='hand'; //chg
  this.name= name; this.w= menus.w; this.left= menus.left; 
  this.h0= Math.max(menus.h0,getHeight(lyr));//modify to use h0
  this.curY= 0;  this.st= 0; this.dir= 0; 
  this.curH= 0; //is visible height
  this.layer= lyr   
  if(NN4) lyr.captureEvents(Event.MOUSEDOWN);
  setWidth(this.layer,this.w);  
  if(name=='Menu0' && menus.withCtl>0) this.layer.onmousedown= ExpList2H.mdown2
  else this.layer.onmousedown= ExpList2H.cMenu.mdown
  this.layer.peer= this //menuitem controlling the menu layer 
  this.textLayer= getLayer(dname)
  setWidth(this.textLayer,this.w); //?? 
  setLeft(this.textLayer,this.left);  
  this.on= false; //originally all are turned off
}

ExpList2H.displayList = function() {
  var curY= this.startY;
  for(var i=0; i< this.menus.length; i++) { 
   var m= this.menus[i]
   h1= getHeight(m.layer);
   showLayer(m.layer);
   if(m.on) { 
    setTop(m.textLayer, curY+h1);
    showLayer(m.textLayer);
   }
   else hideLayer(m.textLayer);
  }
}

ExpList2H.cMenu.mdown= function (e) {
  var menu = this.peer.menu;
  // if(this.peer== menu.lastMenuOn) return true
  var v= this.peer.name
  if(!this.peer.on) {
   if(menu.lastMenuOn!= null) menu.lastMenuOn.on= false;//close the one prev opened
   this.peer.on= true;   menu.lastMenuOn= this.peer
  } else {
   this.peer.on= false;   menu.lastMenuOn= null
  }
  menu.displayList()
  //alert("you hit :"+v) 
  return true
}

ExpList2H.cMenu.mdown2= function (e) {//only for control layer 'all.expand/shrink'
  //'this' is Layer
  var menu = this.peer.menu;
  switch(status) {
    case 0: break
    case 1:   for(var i=0; i< menus.length; i++) { menus[i].dir= 1;  }
      //alert("expand")
      test= 1;
      expand(); break;
    case 2:   for(var i=0; i< menus.length; i++) { menus[i].dir= -1;  }
     ExpList2H.shrink(menu.inst_idx); break;
  }  
  return false
}

ExpList2H.shrinkAll= function () {
  var menus = this.menus;
  for(i=0;i<menus.length;i++) menus[i].on= false;
  this.displayList()
  //alert("you hit :"+v) 
  this.lastMenuOn= null
  return true
}


function expand() {
  if(menus== null) { init(); }
  var totStat= 0;
  totH= 0;
  var curY= 0, curX;
  if(test== 1) { test= 0;}
  for(var i=0; i< menus.length; i++) {
    var m= menus[i];    
    var layer= getLayer(m.name)
    curY= startY+totH;
    setTop(layer,curY);
    if(m.dir== 1) {
     if( m.curH < m.h0) { m.curH+= 5; }
     else m.dir= 0;
    }   
    totH+= m.curH;  
    totStat+= Math.abs(m.dir);
    if(firstTime) showLayer(layer)
  }
  firstTime= 0;
  if(totStat>0) timer= setTimeout('expand()',300);
  else { clearTimeout(timer);   if(isMinNN4) window.releaseEvents(Event.MOUSEDOWN)  
    status= 2;
  }
}

ExpList2H.shrink= function (idx) {
  //alert("shrink")
 if(null==idx || idx<0) return;  
  inst= ExpList2Data.instances[idx];
  menus= inst.menus;
  if(null==menus) return
  var totStat= 0;
  totH= 0;
  var curY= 0, curX;
  for(var i=0; i< menus.length; i++) {
    var m= menus[i];    
    var layer= getLayer(m.name)
    curY= inst.startY+totH;
    setTop(layer,curY);
    if(m.dir== -1) {
      if(m.curH >0) { 
        m.curH-= 5; 
        if(m.curH< 0) m.curH= 0;
        //var t= getPobj(m.name,'height')[props['height']]
      }
      if(m.curH== 0) { m.dir= 0; if(i> 0) hideLayer(m.layer) }
    }   
    totH+= m.curH;  
    totStat+= Math.abs(m.dir);
  }
  //firstTime= 0;
  if(totStat> 0) this.timer= setInterval("ExpList2H.shrink(idx)",300);
  else { clearTimeout(timer);   if(isMinNN4) window.releaseEvents(Event.MOUSEDOWN)  
    status= 1; firstTime= 1;
  }
}
//-------------------------->