/*
 * this file is (c) 2000 Spin GmbH Chur CH
 *
 * SpinMenu V2.2
 * cross-browser javascript menu engine
 *
 * 29.11.2000 - implementation start (sjo)
 * 04.12.2000 - V1.0 (sjo)
 * 13. 2.2001 - V2.0 (sjo)
 * 15. 2.2001 - V2.1 (sjo)
 * 16. 5.2001 - V2.2 (sjo)
 * 27. 6.2001 - V2.3 (sjo)
 * 19. 7.2001 - V2.4 (sjo)
 * 27. 7.2001 - V2.5 (sjo)
 */

var itemId = 0;
var imageId = 0;
var allItems = Array();
var needImageCount = 0;

var isNav4, isIE4, isDOM;

isDOM = true;
isIE4 = false;
isNav = false;
if (navigator.appName == "Microsoft Internet Explorer") {
	if (parseInt(navigator.appVersion) == 4)  {
		isIE4 = true;
		isDOM = false;
	}
}
if (navigator.appName == "Netscape") {
	if (parseInt(navigator.appVersion) < 5)  {
		isNav4 = true;
		isDOM = false;
	}
}

function dummy() {
}

function toggle(id) {
	var support = new Support();
	var item = support.getItem(id);
	item.toggle();
	item.menu.update(true);
}

function highlight(id) {
	var support = new Support();
	var item = support.getItem(id);
	item.menu.processDelayed(id);
	item.setHighlight(true);
	item.menu.update(false);
}

function normal(id) {
	var support = new Support();
	var item = support.getItem(id);
	item.clearHighlight();
	window.setTimeout("clear("+id+")",100);
}

function clear(id) {
	var support = new Support();
	var item = support.getItem(id);
	item.menu.processDelayed(-1);
	item.menu.update(false);
}

function link2(id) {
	var support = new Support();
	var item = support.getItem(id);
	item.activate();
	if (item.menu.activeItemMode) {
		item.menu.update(false);
	}
}

function Support() {
	this.getItem = Support_getItem;
	this.replaceImage = Support_replaceImage;
	this.setTarget = Support_setTarget;
}

function Support_getItem(id) {
	var item = 0;
	for (var i=0; i<allItems.length ; i++) {
		if (allItems[i].id == id) {
			item = allItems[i];
			break;
		}
	}
	if (item == 0) {
		alert("toggle: item not found");
		return 0;
	}
	return item;
}

function Support_replaceImage(imagesObj, name, src) {
	if (isNav4) {
		for (var i=0; i<imagesObj.length; i++) {
			if (imagesObj[i].name == name) {
				if (imagesObj[i].src != src) {
					imagesObj[i].src = src;
				}
			}
		}
	} else {
		if (imagesObj[name].src != src) {
			imagesObj[name].src = src;
		}
	}
}

function Support_setTarget(frame, address) {
	if (address.substring(0,10) == "javascript") {
		eval(address);
	} else {
		eval("parent."+frame+".location.href = '"+address+"'");
	}
}

function Menu(numLevels, x, y, tagIdNav4, tagIdOther) {
	this.tagId;
	this.currVpos;
	this.hpos = x;
	this.vpos = y;
	this.autoClose = false;
	this.activeItem = 0;

	this.rootItem = 0;
	this.tagIdNav4 = tagIdNav4;
	this.tagIdOther = tagIdOther;
	this.numLevels = numLevels;
	this.layout = Array();
	this.linkTarget = 0;
	this.delayedCount = 0;
	this.delayed = Array();
	this.activeItemMode = false;

	this.addItem = Menu_addItem;
	this.build = Menu_build;
	this.setLayout = Menu_setLayout;
	this.setAutoClose = Menu_setAutoClose;
	this.setLinkTarget = Menu_setLinkTarget;
	this.activateItems = Menu_activateItems;

	this.construct = Menu_construct;
	this.update = Menu_update;
	this.closeAll = Menu_closeAll;
	this.getLayout = Menu_getLayout;
	this.addDelayed = Menu_addDelayed;
	this.processDelayed = Menu_processDelayed;
	this.getLinkTarget = Menu_getLinkTarget;

  	this.construct();
}

function Menu_construct() {

	if (isNav4) {
		this.tagId = this.tagIdNav4;
	}
	if (isIE4 || isDOM) {
		this.tagId = this.tagIdOther;
	}

	for (var i=0 ; i<this.numLevels ; i++) {
		this.layout[i] = new Layout(200,20,"CENTER","#FFFFFF");
	}

	this.rootItem = new MenuItem("root");
	this.rootItem.setParent(0);
	this.rootItem.open();
}

function Menu_addItem(item) {
	item.setParent(this.rootItem);
	this.rootItem.addItem(item);
}

function Menu_build() {
	this.rootItem.setMenu(this);
	this.rootItem.refreshAll();
	this.currVpos = this.vpos;
	var str = "";
	str += this.rootItem.build(true);
	str += "<div height=64></div>";
	var layer,frame;
	if (isNav4) {
		layer = document.layers[this.tagId];
		layer.document.open();
		layer.document.writeln(str);
		layer.document.close();
	}
	if (isIE4) {
		layer = eval("document.all."+this.tagId);
		layer.innerHTML = str;
	}
	if (isDOM) {
		layer = document.getElementById(this.tagId);
		var rng = document.createRange();
		rng.setStartBefore(layer);
		var htmlFrag = rng.createContextualFragment(str);
		while (layer.hasChildNodes()) {
			layer.removeChild(layer.lastChild);
		}
		layer.appendChild(htmlFrag);
	}
	this.update(true);
}

function Menu_setLayout(layout, level) {
	if (this.numLevels < level) {
		alert("menu.setLayout: invalid menu level");
		return;
	}
	this.layout[level-1] = layout;
}

function Menu_setAutoClose(autoClose) {
	this.autoClose = autoClose;
}

function Menu_setLinkTarget(linkTarget) {
	this.linkTarget = linkTarget;
}

function Menu_getLinkTarget() {
	return this.linkTarget;
}

function Menu_activateItems(mode) {
	this.activeItemMode = mode;
}

function Menu_update(deep) {
	this.currVpos = this.vpos;
	this.rootItem.update(true,true,deep);
}

function Menu_closeAll() {
	this.rootItem.close();
	this.rootItem.open();
}

function Menu_getLayout(level) {
	if (this.numLevels < level) {
		alert("menu.getLayout: invalid menu level");
		return;
	}
	return this.layout[level-1];
}

function Menu_addDelayed(item) {
	this.delayed[this.delayedCount++] = item;
}

function Menu_processDelayed(id) {
	for (var i=0; i<this.delayed.length; i++) {
		if (this.delayed[i].id == id) {
			continue;
		}
		this.delayed[i].setHighlight(false);
	}
	this.delayed = new Array();
	this.delayedCount = 0;
}

function Target(frame,address) {
	this.frame = frame;
	this.address = address;
}

function MenuItem(name) {

	this.id = itemId++;
	this.name = name;
	this.menu = 0;
	this.parent = 0;

	this.opened = false;
	this.highlighted = false;
	this.itemCount = 0;
	this.items = Array();
	this.imgNormal = 0;
	this.imgHigh = 0;
	this.imgOpenNormal = 0;
	this.imgOpenHigh = 0;
	this.imgCurrTop = 0;
	this.defaultTarget = 0;
	this.targetCount = 0;
	this.targets = Array();
	this.updateItemImages = true;
	this.updateLayoutImages = true;
	this.firstDrawn = false;
	this.currInside = false;
	this.currTop = false;
	this.preselected = false;

	this.addItem = MenuItem_addItem;
	this.setImage = MenuItem_setImage;
	this.setImageHigh = MenuItem_setImageHigh;
	this.setImageOpen = MenuItem_setImageOpen;
	this.setImageOpenHigh = MenuItem_setImageOpenHigh;
	this.setImageCurrTop = MenuItem_setImageCurrTop;
	this.setTarget = MenuItem_setTarget;
	this.addTarget = MenuItem_addTarget;
	this.preOpen = MenuItem_preOpen;
	this.preSelect = MenuItem_preSelect;

	this.construct = MenuItem_construct;
	this.setMenu = MenuItem_setMenu;
	this.setParent = MenuItem_setParent;
	this.getLayout = MenuItem_getLayout;
	this.clearHighlight = MenuItem_clearHighlight;
	this.setHighlight = MenuItem_setHighlight;
	this.setCurrentTop = MenuItem_setCurrentTop;
	this.setCurrent = MenuItem_setCurrent;
	this.open = MenuItem_open;
	this.close = MenuItem_close;
	this.toggle = MenuItem_toggle;
	this.activate = MenuItem_activate;
	this.deactivate = MenuItem_deactivate;
	this.refreshAll = MenuItem_refreshAll;
	this.build = MenuItem_build;
	this.update = MenuItem_update;
	this.construct();
}

function MenuItem_construct() {
	allItems[this.id] = this;
}

function MenuItem_setMenu(menu) {
	this.menu = menu;
	for (var i=0; i<this.items.length; i++) {
		this.items[i].setMenu(menu);
	}
}

function MenuItem_addItem(item) {
	item.setParent(this);
	item.setMenu(this.menu);
	this.items[this.itemCount++] = item;
}

function MenuItem_setImage(img) {
	this.imgNormal = img;
}

function MenuItem_setImageHigh(img) {
	this.imgHigh = img;
}

function MenuItem_setImageOpen(img) {
	this.imgOpenNormal = img;
}

function MenuItem_setImageOpenHigh(img) {
	this.imgOpenHigh = img;
}

function MenuItem_setImageCurrTop(img) {
	this.imgCurrTop = img;
}

function MenuItem_setTarget(target) {
	this.defaultTarget = target;
}

function MenuItem_addTarget(frame,address) {
	this.targets[this.targetCount++] = new Target(frame,address);
}

function MenuItem_setParent(parent) {
	this.parent = parent;
}

function MenuItem_getLayout() {
	var level = 0;
	var item = this;
	while (item.parent) {
		level++;
		item = item.parent;
	}
	return this.menu.getLayout(level);
}

function MenuItem_clearHighlight() {
	this.menu.addDelayed(this);
}

function MenuItem_setHighlight(state) {
	if (this.parent.parent != 0) {
		this.parent.setCurrentTop(state,this.id);
	}
	this.highlighted = state;
	this.updateItemImages = true;
	this.updateLayoutImages = true;
}

function MenuItem_setCurrentTop(state,current) {
	this.updateItemImages = true;
	this.updateLayoutImages = true;
	this.currInside = false;
	this.currTop = state;
	var found = false;
	for (var i=0 ; i<this.items.length ; i++) {
		var result = this.items[i].setCurrent(state,!found,current);
		if (result) {
			found = true;
		}
	}
}

function MenuItem_setCurrent(state,inside,current) {
	this.updateItemImages = true;
	this.updateLayoutImages = true;
	this.currInside = false;
	this.currTop = false;
	if (inside) {
		this.currInside = state;
	}
	for (var i=0 ; i<this.items.length ; i++) {
		if (this.id == current) {
			state = false;
		}
		this.items[i].setCurrent(state,inside,current);
	}
	if (this.id == current) {
		return true;
	}
	return false;
}

function MenuItem_open() {
	this.opened = true;
	this.updateLayoutImages = true;
}

function MenuItem_close() {
	this.opened = false;
	for (var i=0 ; i<this.items.length ; i++) {
		this.items[i].close();
	}
	this.updateLayoutImages = true;
	this.updateItemImages = true;
}

function MenuItem_toggle() {
	var state = this.opened;
	if (this.menu.autoClose) {
		this.menu.closeAll();
		var item = this;
		while (item.parent) {
			item = item.parent;
			item.open();
		}
	}
	if (state) {
		this.close();
	} else {
		this.open();
	}
}

function MenuItem_preOpen() {
	if (this.menu.autoClose) {
		this.menu.closeAll();
	}
	var item = this;
	item.open();
	while (item.parent) {
		item = item.parent;
		item.open();
	}
}

function MenuItem_preSelect() {
	this.preselected = true;
}

function MenuItem_activate() {
	var support = new Support();
	var frame = 0;
	var address = 0;
	if (this.targetCount == 0) {
		if (this.defaultTarget == 0) {
			return;
		}
		frame = this.menu.getLinkTarget();
		address = this.defaultTarget;
		support.setTarget(frame,address);
	} else {
		for (var i=0; i<this.targets.length; i++) {
			frame = this.targets[i].frame;
			address = this.targets[i].address;
			support.setTarget(frame,address);
		}
	}
	if (this.menu.activeItemMode) {
		if (this.menu.activeItem != 0) {
			this.menu.activeItem.deactivate();
		}
		this.menu.activeItem = this;
		this.updateLayoutImages = true;
		this.updateItemImages = true;
	}
}

function MenuItem_deactivate() {
	this.updateLayoutImages = true;
	this.updateItemImages = true;
	this.menu.activeItem = null;
}

function MenuItem_refreshAll() {
	this.updateItemImages = true;
	this.updateLayoutImages = true;
	this.firstDrawn = false;
	this.menu = menu;
	for (var i=0; i<this.items.length; i++) {
		this.items[i].refreshAll();
	}
}

function MenuItem_build(last) {
	if (this.menu.activeItemMode && this.preselected) {
		this.menu.activeItem = this;
	}
	var layout = this.getLayout();
	var str = "";
	if (this.parent) {
		this.menu.currVpos += layout.preOffs;
		var recursiveLast = last && !this.opened;
		var isMenu = this.items.length == 0 ? false : true;
		if (isNav4) {
			str += "<layer id=id"+this.id+" top="+this.menu.currVpos+" visibility=hidden>";

		}
		if (isIE4 || isDOM) {
			str += "<div id=id"+this.id+" style='visibility:hidden; position:absolute;'>";
		}
		str += "<table nowrap border=0 cellpadding=0 cellspacing=0 width="+layout.width;
		if (layout.bgcolor != 0) {
			str += " bgcolor="+layout.bgcolor+" ";
		}
		str += "><tr>";

		var hasHigh = false;
		if (this.imgNormal && this.imgHigh) {
			hasHigh = true;
		}
                if (this.imgNormal) {
                        itemStr = "<img border=0 name=\"img"+this.id+"\" src=\""+this.imgNormal+"\">";
                } else {
                        itemStr = this.name;
                }
		str += layout.paint(itemStr,recursiveLast,isMenu,hasHigh,this.id);
		str += "</tr></table>";
		if (isNav4) {
			str += "</layer>";
		}
		if (isIE4 || isDOM) {
			str += "</div>";
		}
		this.menu.currVpos += layout.height+layout.postOffs;
	}
	for (var i=0 ; i<this.items.length ; i++) {
		var isLast = false;
		if (i == (this.items.length-1)) {
			isLast = true;
		}
		str += this.items[i].build(isLast);
	}
	return str;
}

function MenuItem_update(visible,last,deep) {
	var layout = this.getLayout();
	if (this.parent) {
		var isHighlight = this.highlighted;
		if (this.menu.activeItemMode && (this.menu.activeItem.id == this.id)) {
			isHighlight = true;
		}

		var recursiveLast = last && !this.opened;
		var layer,images;
		var img = isHighlight ? this.imgHigh : this.imgNormal;
		if (this.opened) {
			img = isHighlight ? this.imgOpenHigh : this.imgOpenNormal;
		}
		if (this.currTop && (this.imgCurrTop != 0)) {
			img = this.imgCurrTop;
		}
		var id = this.menu.tagId;
		var isMenu = this.items.length == 0 ? false : true;

		if (isNav4) {
			var layerRoot = document.layers[id];
			layerRoot.clip.width = this.menu.hpos+layout.width;
			layer = layerRoot.document.layers["id"+this.id];
			if (visible) {
				this.menu.currVpos += layout.preOffs;
				images = layer.document.images;
				if (this.updateItemImages && img) {
					support = new Support();
					support.replaceImage(images,"img"+this.id,img);
					this.updateItemImages = false;
				}
				if (this.updateLayoutImages) {
					layout.update(images,isHighlight,this.opened,recursiveLast,isMenu,this.currTop,this.currInside,this.id);
					this.updateLayoutImages = false;
				}
				if (!this.firstDrawn) {
					layer.left = this.menu.hpos;
					layer.top = 0;
					layer.clip.left = 0;
					layer.clip.top = 0;
					layer.clip.width = layout.width;
					layer.clip.height = layout.height;
					this.firstDrawn = true;
				}
				layer.top = this.menu.currVpos;
				layer.visibility = "visible";
				this.menu.currVpos += layout.height+layout.postOffs;
			} else {
				layer.visibility = "hidden";
			}
		}
		if (isIE4 || isDOM) {
			var layerRoot;
			if (isIE4) {
				layer = document.all["id"+this.id];
			} else {
				layer = document.getElementById("id"+this.id);
			}
			if (visible) {
				this.menu.currVpos += layout.preOffs;
				images = document.images;
				if (this.updateItemImages && img) {
					support = new Support();
					support.replaceImage(images,"img"+this.id,img);
					this.updateItemImages = false;
				}
				if (this.updateLayoutImages) {
					layout.update(images,isHighlight,this.opened,recursiveLast,isMenu,this.currTop,this.currInside,this.id);
					this.updateLayoutImages = false;
				}
				if (!this.firstDrawn) {
					layer.style.left = this.menu.hpos;
					layer.style.top = 0;
					layer.style.width = layout.width;
					layer.style.height = layout.height;
					this.firstDrawn = true;
				}
				if (isDOM) {
					layer.style.top = this.menu.currVpos;
				} else {
					layer.style.pixelTop = this.menu.currVpos;
				}
				layer.style.visibility = "visible";
				this.menu.currVpos += layout.height+layout.postOffs;
			} else {
				layer.style.visibility = "hidden";
			}
		}
	}
	if (deep || this.opened) {
		for (var i=0 ; i<this.items.length ; i++) {
			var isLast = false;
			if (i == (this.items.length-1)) {
				isLast = true;
			}
			this.items[i].update(this.opened,isLast,deep);
		}
	}
}

function Layout(width, height, valign, bgcolor) {

	this.width = width;
	this.height = height;
	this.valign = valign;
	this.bgcolor = bgcolor;
	this.preOffs = 0;
	this.postOffs = 0;

	this.cellCount = 0;
	this.cells = Array();
	this.hasFont = false;
	this.fontColor;
	this.fontFace;
	this.fontSize;
	this.bold = false;
	this.italic = false;
	this.extWidth = 8;
	this.extCell = 0;

	this.addCell = Layout_addCell;
	this.setFont = Layout_setFont;
	this.setBold = Layout_setBold;
	this.setItalic = Layout_setItalic;
	this.setOffset = Layout_setOffset;

	this.construct = Layout_construct;
	this.hasHighlighting = Layout_hasHighlighting;
	this.paint = Layout_paint;
	this.update = Layout_update;

	this.construct();
}

function Layout_construct() {
	this.cells[0] = new Cell(this.width,this.valign,"normal","item",true);
	this.cells[0].setLayout(this);
	this.extCell = new Cell(this.extWidth,this.valign,"normal","normal",false);
	this.extCell.setLayout(this);
	this.width += this.extWidth;
}

function Layout_hasHighlighting() {
	var result = false;
	var cnt = this.cellCount;
	if (cnt == 0) {
		cnt = 1;
	}
	for (var i=0; i<cnt; i++) {
		var cell = this.cells[i];
		if (cell.hasHighlighting()) {
			result = true;
		}
	}
	return result;
}

function Layout_addCell(cell) {
	this.cells[this.cellCount++] = cell;
	cell.setLayout(this);
}

function Layout_setFont(color, face, size) {
	this.fontColor = color;
	this.fontFace = face;
	this.fontSize = size;
	this.hasFont = true;
}

function Layout_setBold() {
	this.bold = true;
}

function Layout_setItalic() {
	this.italic = true;
}

function Layout_setOffset(preOffs, postOffs) {
	this.preOffs = preOffs;
	this.postOffs = postOffs;
}

function Layout_paint(item, last, isMenu, hasHigh, id) {
	var str = "";
	var itemStr = "";
	var cnt = this.cellCount;
	if (cnt == 0) {
		cnt = 1;
	}
	if (this.hasFont) {
		itemStr += "<font color=\""+this.fontColor+"\" face=\""+this.fontFace+"\" size="+this.fontSize+">";
	}
	if (this.bold) {
		itemStr += "<b>";
	}
	if (this.italic) {
		itemStr += "<i>";
	}
	itemStr += item;
	if (this.italic) {
		itemStr += "</i>";
	}
	if (this.bold) {
		itemStr += "</b>";
	}
	if (this.hasFont) {
		itemStr += "</font>";
	}
	for (var i=0; i<cnt; i++) {
		cell = this.cells[i];
		str += cell.paint(itemStr, this.height, last, isMenu, hasHigh, id);
	}
	str += this.extCell.paint("",this.height,false,false,false,id,0,0);
	return str;
}

function Layout_update(imagesObj, highlighted, opened, last, isMenu, currTop, currInside, id) {
	var cnt = this.cellCount;
	if (cnt == 0) {
		cnt = 1;
	}
	for (var i=0; i<cnt; i++) {
		var cell = this.cells[i];
		cell.update(imagesObj, highlighted, opened, last, isMenu, currTop, currInside, id);
	}
}

function Cell(width, valign, type, source, isLink) {

	this.layout = 0;

	this.width = width;
	this.valign = valign;
	this.bgcolor = 0;
	this.type = type;
	this.source = source;
	this.isLink = isLink;

	this.images;
	this.standardImage = 0;
	this.hasImage = false;
	this.hasHighImage = false;
	this.hasNormalImage = false;
	this.hasLastImage = false;
	this.hasMenuImage = false;
	this.hasItemImage = false;
	this.imageId = imageId++;

	this.setBgColor = Cell_setBgColor;
	this.setImage = Cell_setImage;

	this.construct = Cell_construct;
	this.hasHighlighting = Cell_hasHighlighting;
	this.setLayout = Cell_setLayout;
	this.paint = Cell_paint;
	this.update = Cell_update;

	this.construct();
}

function Cell_construct() {

	this.images = Array(2);
	for (var i=0; i<2; i++) {
		this.images[i] = Array(2);
		for (var j=0; j<2; j++) {
			this.images[i][j] = Array(2);
			for (var k=0; k<2; k++) {
				this.images[i][j][k] = Array(2);
				for (var l=0; l<2; l++) {
					this.images[i][j][k][l] = Array(3);
					for (var m=0; m<3 ; m++) {
						this.images[i][j][k][l][m] = 0;
					}
				}
			}
		}
	}
}

function Cell_hasHighlighting() {
	return this.hasHighImage;
}

function Cell_setLayout(layout) {
	this.layout = layout;
}

function Cell_setBgColor(bgcolor) {
	this.bgcolor = bgcolor
}

function Cell_setImage(img, type, state, position, menu, current) {
	var selType = 1;
	var selState = 0;
	var selPos = 0;
	var selMenu = 0;
	var selCurrent = 0;
	if ((this.standardImage == 0) && ((type == "normal") || (type == "all"))) {
		this.standardImage = img;
	}
	if (type == "normal") {
		selType = 1;
		this.hasImage = true;
	}
	if (type == "highlighted") {
		selType = 0;
		this.hasHighImage = true;
	}
	if (state == "all") {
		selState = -1;
	} else {
		if (state == "open") {
			selState = 0;
		}
		if (state == "closed") {
			selState = 1;
		}
	}
	if (position == "all") {
		this.hasNormalImage = true;
		this.hasLastImage = true;
		selPos = -1;
	} else {
		if (position == "normal") {
			this.hasNormalImage = true;
			selPos = 0;
		}
		if (position == "last") {
			this.hasLastImage = true;
			selPos = 1;
		}
	}
	if (menu == "all") {
		this.hasMenuImage = true;
		this.hasItemImage = true;
		selMenu = -1;
	} else {
		if (menu == "menu") {
			this.hasMenuImage = true;
			selMenu = 0;
		}
		if (menu == "item") {
			this.hasItemImage = true;
			selMenu = 1;
		}
	}
	if (current == "all") {
		selCurrent = -1;
	} else {
		this.hasHighImage = true;
		if (current == "top") {
			selCurrent = 1;
		}
		if (current == "in") {
			selCurrent = 2;
		}
	}
	for (var i=0; i<2; i++) {
		for (var j=0; j<2; j++) {
			for (var k=0; k<2; k++) {
				for (var l=0; l<2; l++) {
					for (var m=0; m<3; m++) {
						if ((i == selType) && ((j == selState) || (selState == -1)) && ((k == selPos) || (selPos == -1)) && ((l == selMenu) || (selMenu == -1)) && ((m == selCurrent) || (selCurrent == -1))) {
							this.images[i][j][k][l][m] = img;
						}
					}
				}
			}
		}
	}
}

function Cell_paint(html, height, last, isMenu, hasHigh, id) {
	var str = "";
	str += "<td align=left";
	if (this.width > 0) {
		str += " width="+this.width;
	}
	str += " height="+height+" valign="+this.valign;
	if (this.bgcolor) {
		str += " bgcolor="+this.bgcolor;
	}
	str += ">";
	var layoutHasHigh = this.layout.hasHighlighting();
	var needLink = false;
	if (this.isLink || hasHigh || layoutHasHigh || ((this.type == "switch") && isMenu)) {
		needLink = true;
	}
	if (needLink) {
		str += "<a href=\"javascript://\" onClick=\"";
		str += "toggle('"+id+"');";
		if (isIE4) {
			str += "this.blur();";
		}
		if (this.isLink) {
			str += "link2('"+id+"');";
		}
		str += "\" ";
		if (hasHigh || layoutHasHigh) {
			str += "onMouseover=\"highlight('"+id+"')\" ";
			str += "onMouseout=\"normal('"+id+"')\" ";
		}
		str += ">";
		//alert(str);
	}
	if (this.source == "item") {
		str += html;
	} else {
		var needImage = false;
		if (this.hasImage) {
			needImage = true;
		}
		if ((last && !this.hasLastImage) || (!last && !this.hasNormalImage)) {
			needImage = false;
		}
		if ((isMenu && !this.hasMenuImage) || (!isMenu && !this.hasItemImage)) {
			needImage = false;
		}
		if (needImage) {
			str += "<img border=0 name=\"pic"+id+"_"+this.imageId+"\" src=\""+this.standardImage+"\">";
		} else {
			str += "&nbsp;";
		}
	}
	if (needLink) {
		str += "</a>";
	}
	str += "</td>";
	return str;
}

function Cell_update(imagesObj, highlighted, opened, last, isMenu, currTop, currInside, id) {
	var typeIndex = highlighted ? 0 : 1;
	if (!this.hasHighImage) {
		typeIndex = 1;
	}
	var openIndex = opened ? 0 : 1;
	var lastIndex = last ? 1 : 0;
	var menuIndex = isMenu ? 0 : 1;
	var currIndex = 0;
	if (currTop) {
		currIndex = 1;
	}
	if (currInside) {
		currIndex = 2;
	}
	var img = this.images[typeIndex][openIndex][lastIndex][menuIndex][currIndex];
	if (img) {
		support = new Support();
		support.replaceImage(imagesObj,"pic"+id+"_"+this.imageId,img);
	}
}
