/*
 | create your own build method to fit your menu design
 |
 | send questions to jchu@yahoo-inc.com
 */
 
/*
 | constructor
 | param: id - an identifier, w - width of the menu
 */ 
function ylib_List(id, w) {
 this.name=id;
 this.id = id+'_List';
 eval(this.id+"=this");
 
 this.menu = null;
 this.items = new Array();
 this.h = 0;
 this.w = w;
 this.isOpen = 0;
 this.multiSelect = 0;
 this.isChild = 0;
 this.selectedIdx = null;
 this.pmenuIdx = null;
 this.pmenuItemIdx = null;
 this.lnk = '';
 this.css = '';
 this.div = '';
 this.color = new Object();

 this.add      = ylib_listAdd;
 this.init     = ylib_listInit;
 this.over     = ylib_listOver;
 this.out      = ylib_listOut;
 this.down     = ylib_listDown; 
 this.select   = ylib_listSelect;
 this.deselect = ylib_listDeselect;
 this.turnOn   = ylib_listTurnOn;
 this.turnOff  = ylib_listTurnOff ;
 this.sLink    = ylib_listSetLink;
 this.onSelect = new Function();
 this.build    = new Function();
}

/*
 | items (array) [text, value]
 | p - parent menu index, index instead of object b/c of performance concern
 | idx - parent menu item index
 */
function ylib_listAdd(items,p,idx) {
 if (items==null) return;
 if (p!=null) {
   this.pmenuIdx = p;
   this.pmenuItemIdx = idx;
   this.isChild=1;
 }
 var l = items.length;
 for (var i=0; i<l; i++) {
   this.items[i] = new Array();
   this.items[i].selected = 0;
   this.items[i].hasChild = 0;
   this.items[i].childIdx = -1;
   this.items[i].text = items[i][0];
   this.items[i].value = items[i][1];
   this.items[i].lnk = '<a href="'+items[i][1]+'"  onfocus="'+this.id+'.over('+i+')" onblur="'+this.id+'.out('+i+')">'+items[i][0]+'</a>';
   this.items[i].y = this.h;
   this.h += this.itemH;
 } 
}

function ylib_listInit() {
  // activate each item
  var oItem=null;
  this.handle = ylib_getObj(this.id+this.handle);
  for (var i=0; i<this.items.length; i++) {
    oItem = ylib_getObj(this.id+i);
    // set mouseevents
    ylib_addEvt(oItem, "mouseover", new Function(this.id+".over("+i+")"),false);
    ylib_addEvt(oItem, "mouseout", new Function(this.id+".out("+i+")"),false);
    if (oBw.ns) oItem.captureEvents(Event.MOUSEDOWN) // needed for ns4
      ylib_addEvt(oItem, "mousedown", new Function(this.id+".down("+i+")"),false);
  }
}

function ylib_listOver(idx) {
  if (this.menu&&this.menu.hideTimerID!=null) { clearTimeout(this.menu.hideTimerID); this.menu.hideTimerID=null; }
  if (!this.items[idx].selected) { this.turnOn(ylib_getObj(this.id+idx));	}

  if (this.isOpen && idx!=this.selectedIdx) {
    if (this.menu!=null) this.menu.hide(this); // close menus when rolling over other items in the parent menu
    this.deselect(this.selectedIdx);
    if (this.items[idx].hasChild) this.select(idx);
  }
}

function ylib_listOut(idx) {
 if (!this.items[idx].selected) { this.turnOff(ylib_getObj(this.id+idx)) }
 if (this.isChild) this.menu.hideMenu();
}

function ylib_listDown(idx) { 
 window.location.href = this.items[idx].value;
 return false;
}

function ylib_listSelect(idx) {
  var oItem = this.items[idx]
  if (oItem==null) return;
  oItem.selected = 1;
  this.selectedIdx = idx;
  this.onSelect(ylib_getObj(this.id+idx));
}

function ylib_listDeselect(idx) {
  oItem = this.items[idx];
  if (oItem==null) return;
  oItem.selected = 0;
  this.turnOff(ylib_getObj(this.id+idx));
  this.selectedIdx = null
}

function ylib_listTurnOn(o) {
 ylib_setStyle(o,"backgroundColor",this.color.onBg);
 this.sLink(o,true);
}

function ylib_listTurnOff(o) {
 ylib_setStyle(o,"backgroundColor",this.color.offBg);
 this.sLink(o,false);
}

function ylib_listSetLink(o,isOver) {
 if(oBw.win && (oBw.ie||oBw.dom)) {
  lnk=o.getElementsByTagName("a");
  lnk[0].style.textDecorationUnderline=isOver;
  this.lnk= (isOver)? lnk[0].href:"";
 }
}

