var _id = 0, _pid = 0, _lid = 0, _pLayer;
var _mLists = new Array();
document.lists = _mLists;
var isNav4, isIE4;

if (parseInt(navigator.appVersion.charAt(0)) == 4) {
  isNav4 = (navigator.appName == "Netscape") ? true : false;
  isIE4 = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;
}

function List(visible, width, height, bgColor, baseHREF) {
  this.setIndent = setIndent;
  this.addItem = addItem;
  this.addList = addList;
  this.build = build;
  this.rebuild = rebuild;
  this.setFont = _listSetFont;
  this._writeList = _writeList;
  this._showList = _showList;
  this._updateList = _updateList;
  this._updateParent = _updateParent;
  this.onexpand = null; this.postexpand = null;
  this.lists = new Array(); // sublists
  this.items = new Array(); // layers
  this.types = new Array(); // type
  this.strs = new Array();  // content
  this.x = 0;
  this.y = 0;
  this.visible = visible;
  this.id = _id;
  this.i = 18;
  this.space = true;
  this.pid = 0;
  this.fontIntro = false;
  this.fontOutro = false;
  this.width = Math.round(width) || 350;
  this.height = Math.round(height) || 22;
  this.parLayer = false;
  this.built = false;
  this.shown = false;
  this.needsUpdate = false;
  this.needsRewrite = false;
  this.parent = null;
  this.baseHREF = baseHREF || "";
  this.l = 0;
  if(bgColor) this.bgColor = bgColor;
  else this.bgColor = null;
  _mLists[_id++] = this;
}

function _listSetFont(i,j) {
  this.fontIntro = i;
  this.fontOutro = j;
}

function setIndent(indent) { 
    this.i = indent; 
    if(this.i < 0) { 
       this.i = 0; this.space = false; 
                    }
                            }

function setClip(layer, l, r, t, b) {
  if(isNav4) {
    layer.clip.left = l; layer.clip.right = r;
    layer.clip.top = t;  layer.clip.bottom = b;
             } 
  else {
  	r = Math.round(r);
  	l = Math.round(l);
  	b = Math.round(b);
  	t = Math.round(t);
        layer.style.pixelWidth = layer.style.posWidth = r-l;
        layer.style.pixelHeight = layer.style.posHeight = b-t;
        layer.style.clip = "rect("+t+"px "+r+"px "+b+"px "+l+"px)";
        }
}

function _writeList() {
  self.status = "List: Writing list...";
  var layer, str, clip;

  for(var i = 0; i < this.types.length; i++) { 
    layer = this.items[i];

    if(isNav4) layer.visibility = "hidden";
    else layer.style.visibility = "hidden";

    str = '<TABLE NOWRAP BORDER=0 CELLPADDING=0 CELLSPACING=0';

    if(isIE4) str += ' STYLE=\"position:absolute; top:0; left:0;\"';

    str += ' WIDTH=\"'+this.width+'\"><TR HEIGHT=\"'+(this.height-3)+'\">';

    if(this.types[i] == "list") {
      str += '<TD WIDTH=15 NOWRAP VALIGN=MIDDLE><A TARGET=\"_self\" HREF=\"javascript:expand('+this.lists[i].id+');\"><IMG BORDER=0 SRC=\"/java/false.gif\" NAME=\"_img'+this.lists[i].id+'\" ID=\"_img'+this.lists[i].id+'\"></A></TD>';
      _pid++;                    } 
    else if(this.space)
      str += '<TD WIDTH=15 NOWRAP>&nbsp;</TD>';

    if(this.l>0 && this.i>0) 
    str += '<TD WIDTH='+Math.round(this.l*this.i)+' NOWRAP>&nbsp;</TD>';
   
     str += '<TD WIDTH='+Math.round(this.width-15-this.l*this.i)+' VALIGN=MIDDLE ALIGN=LEFT>';
    
     if(this.fontIntro) str += this.fontIntro;
     str += this.strs[i];
     if(this.fontOutro) str += this.fontOutro;
     str += '</TD></TR></TABLE>';
    
     if(isNav4) {
      layer.document.open();
      layer.document.writeln(str);
      layer.document.close(); } 
    else layer.innerHTML = str;

    if(this.types[i] == "list" && this.lists[i].visible)
      this.lists[i]._writeList();
                                                    }

  this.built = true;
  this.needsRewrite = false;
  self.status = '';
}

function _showList() {
  var layer;
  for(var i = 0; i < this.types.length; i++) { 
    layer = this.items[i];
    setClip(layer, 0, this.width, 0, this.height-1);
    var bg = layer.oBgColor || this.bgColor;
   
    if(isIE4 || is_nav5up) {
      if((bg == null) || (bg == "null")) bg = "";
      layer.style.backgroundColor = bg;
                            } 
    else layer.document.bgColor = bg;

    if(this.types[i] == "list" && this.lists[i].visible)
      this.lists[i]._showList();
                                              }
  this.shown = true;
  this.needsUpdate = false;
}

function _updateList(pVis, x, y) {
  var currTop = y, layer, imgnum;
  for(var i = 0; i < this.types.length; i++) { 
    layer = this.items[i];
    if(this.visible && pVis) {
      if(isNav4) {
        layer.visibility = "visible";
        layer.top = currTop;
        layer.left = x;
                 } 
      else if(isIE4) {
        layer.style.visibility = "visible";
        layer.style.pixelTop = Math.round(currTop);
        layer.style.pixelLeft = Math.round(x);
                      } 
      else {
        layer.style.visibility = "visible";
        layer.style.top = Math.round(currTop) + "px";
        layer.style.left = Math.round(x) + "px";
	  }  
      
      currTop += this.height;
                } 
   else {
      if(isNav4) layer.visibility = "hidden";
      else layer.style.visibility = "hidden";
        }
  if(this.types[i] == "list") {
      if(this.lists[i].visible) {
        if(!this.lists[i].built || this.lists[i].needsRewrite) this.lists[i]._writeList();
        if(!this.lists[i].shown || this.lists[i].needsUpdate) this.lists[i]._showList();
        if(isNav4) layer.document.images[0].src = this.baseHREF+"/java/true.gif";
        else eval('document.images._img'+this.lists[i].id+'.src = "'+this.baseHREF+'/java/true.gif"');
	                         } 
       else {
        if(isNav4) layer.document.images[0].src = this.baseHREF+"/java/false.gif";
        else eval('document.images._img'+this.lists[i].id+'.src = "'+this.baseHREF+'/java/false.gif"');
	     }
      if(this.lists[i].built)
        currTop = this.lists[i]._updateList(this.visible && pVis, x, currTop);
                                 }
                               }
  return currTop;
}

function _updateParent(pid, l) {
  var layer;
  if(!l) l = 0;
  this.pid = pid;
  this.l = l;
  for(var i = 0; i < this.types.length; i++)
    if(this.types[i] == "list")
      this.lists[i]._updateParent(pid, l+1);
                                }

function expand(i) {
  _mLists[i].visible = !_mLists[i].visible;
  if(_mLists[i].onexpand != null) _mLists[i].onexpand(_mLists[i].id);
  _mLists[_mLists[i].pid].rebuild();
  if(_mLists[i].postexpand != null) _mLists[i].postexpand(_mLists[i].id);
                   }

function build(x, y) {
  this._updateParent(this.id);
  this._writeList();
  this._showList();
  this._updateList(true, x, y);
  this.x = x; this.y = y;
                      }

function rebuild() {
  this._updateList(true, this.x, this.y); 
                   }

function addItem(str, bgColor, layer) {
  var testLayer = false;

  if(document.all || document.layers) {
    if(!document.all) document.all = document.layers;
    if(!layer) {
      if(isIE4 || !this.parLayer) testLayer = eval('document.all.lItem'+_lid);
      else {
            _pLayer = this.parLayer;
            testLayer = eval('_pLayer.document.layers.lItem'+_lid);
           }	  
      if(testLayer) layer = testLayer;
      else {
           if(isNav4) {
             if(this.parLayer) layer = new Layer(this.width, this.parLayer);
             else layer = new Layer(this.width);
                       } 
           else return;
           }
                      }
                                       }

  else {
    if(!layer) {
      testLayer = eval('document.getElementById("lItem'+_lid+'")');
	  if(testLayer) layer = testLayer;
	  else return;
               }
        }

  if(bgColor) layer.oBgColor = bgColor;
  this.items[this.items.length] = layer;
  this.types[this.types.length] = "item";
  this.strs[this.strs.length] = str;
  _lid++;
                                      }

function addList(list, str, bgColor, layer) {
  var testLayer = false;
  if(document.all || document.layers) {
    if(!document.all) document.all = document.layers;
    if(!layer) {
      if(isIE4 || !this.parLayer) testLayer = eval('document.all.lItem'+_lid);
      else {
            _pLayer = this.parLayer;
            testLayer = eval('_pLayer.document.layers.lItem'+_lid);
           }
      if(testLayer) layer = testLayer;
      else {
        if(isNav4) {
          if(this.parLayer) layer = new Layer(this.width, this.parLayer);
          else layer = new Layer(this.width);
                   } 
        else return;
           }
               }
                                      }	
  else {
    if(!layer) {
      testLayer = eval('document.getElementById("lItem'+_lid+'")');
	  if(testLayer) layer = testLayer;
	  else return;
                }
       }

  if(bgColor) layer.oBgColor = bgColor;
  if(!list.bgColor) list.bgColor = this.bgColor;
  if(list.baseHREF == "") list.baseHREF = this.baseHREF;
  this.lists[this.items.length] = list;
  this.items[this.items.length] = layer;
  this.types[this.types.length] = "list";
  this.strs[this.strs.length] = str;
  list.parent = this;
  _lid++;
                                     }


