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)
{
	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 = width || 350;
	this.height = height || 22;
	this.parLayer = false;
	this.built = false;
	this.shown = false;
	this.needsUpdate = false;
	this.needsRewrite = false;
	this.parent = null;
	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
	{
    	layer.style.pixelWidth = r-l;
    	layer.style.pixelHeight = b-t;
    	layer.style.clip = "rect("+t+","+r+","+b+","+l+")";
	}
}
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 = "";
    	if(isNav4) layer.document.open();
		//Try adding an empty row to provide extra space
		if(this.strs[i].indexOf("*blank*") == 0)
		{
			str += "<table height='4' bgcolor='#99ccff' width="+this.width+" nowrap border='0' cellpadding='0' cellspacing='0'><tr>";
			str += "<td><img src='spacer.gif' height='1' width='1'></td></tr></table>";
			this.strs[i] = this.strs[i].slice(7);
		}
		
    	str += "<TABLE WIDTH="+this.width+" NOWRAP BORDER=0 CELLPADDING=0 CELLSPACING=0><TR>";
		//Create indent -- set indent color to background color to match navbar
		if(this.l>0 && this.i>0) str += "<TD WIDTH="+this.l*this.i+" HEIGHT="+(this.height)+" bgcolor='#99ccff' NOWRAP>&nbsp;</TD>";
    	if(this.types[i] == "list")
		{
      		//If string for list item contains a name, use name to link to an anchor point on the
			//welcome string
			var strString = this.strs[i];
			if(strString.indexOf("name") != -1)
			{
				var strName = strString.substring(strString.indexOf("name"));
				var strAnchor = "#" + strName.substring(strName.indexOf("'") + 1, strName.lastIndexOf("'"));
			}
			else
			{
				strAnchor = "";
			}
			
			//Sets the img link for expanding lists
			str += "<TD class='expander' WIDTH=15 NOWRAP VALIGN=MIDDLE><A onclick=\"parent.content.location.replace('welcome.asp" + strAnchor + "');\" HREF=\"javascript:expand("+this.lists[i].id+");\"><IMG BORDER=0 SRC=\"false.gif\" NAME=\"_img"+this.lists[i].id+"\"></A></TD>";
			_pid++;
		}
		else if(this.space)
		{
			str += "<TD WIDTH=15 NOWRAP>&nbsp;</TD>";
		}
//		str += "<TD class='test' HEIGHT="+(this.height-3)+" WIDTH="+(this.width-15-this.l*this.i)+" VALIGN=MIDDLE ALIGN=LEFT>";
		str += "<TD class='test' HEIGHT="+(this.height)+" WIDTH="+(this.width-15-this.l*this.i)+" VALIGN=MIDDLE ALIGN=LEFT>";
		if(this.fontIntro) str += this.fontIntro;
		
		//If a list, write a link on the text to expand list
		if(this.types[i] == "list")
		{
			str += "<A class='list' onclick=\"parent.content.location.replace('welcome.asp" + strAnchor + "');\" HREF=\"javascript:expand("+this.lists[i].id+");\">"+this.strs[i]+"</A>";
		}
		else
		{
			str += this.strs[i];
		}
		if(this.fontOutro) str += this.fontOutro;
		
		str += "</TD></TR></TABLE>";
		if(isNav4)
		{
			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);
		if(isIE4)
		{
			if(layer.oBgColor) layer.style.backgroundColor = layer.oBgColor;
			else layer.style.backgroundColor = this.bgColor;
		}
		else
		{
			if(layer.oBgColor) layer.document.bgColor = layer.oBgColor;
			else layer.document.bgColor = this.bgColor;
		}
		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;
	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
			{
				layer.style.visibility = "visible";
				layer.style.pixelTop = currTop;
				layer.style.pixelLeft = x;
			}
			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 = "true.gif";
				else eval('document.images._img'+this.lists[i].id+'.src = "true.gif"');
			}
			else
			{
				if(isNav4) layer.document.images[0].src = "false.gif";
				else eval('document.images._img'+this.lists[i].id+'.src = "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.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;
    }
  }
  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.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;
    }
  }
  if(bgColor) layer.oBgColor = bgColor;
  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++;
}
