function putElem(elemId,displayValue) {
	if (displayValue) document.getElementById(elemId).style.display = (ie)? "block" : displayValue;
		else document.getElementById(elemId).style.display = "block";
}

function removeElem(elemId) {
	document.getElementById(elemId).style.display = "none";
}

function visibleAdd(main, where, sub) {
	var resArr = new Array();
	for (i in main) {
		resArr[resArr.length] = main[i];
		if (main[i] == where) for (j in sub) resArr[resArr.length] = sub[j];
	}
	return resArr;
}

function visibleRemove(main, sub) {
	for (i in main) for (j in sub) if (main[i] == sub[j]) delete main[i];
	return main;
}

function isItemVisible(itemId) {
	for (var v in visible) {
		if (visible[v] == itemId) return true;
	}
	return false;
}

function visibleChildren(id) {
	var vChildren = new Array();
	if (treeItems[id].children.length > 0) {
		var j = 0;
		for (j in treeItems[id].children) {
			vChildren[vChildren.length] = treeItems[id].children[j];
			if (treeItems[treeItems[id].children[j]].children.length > 0 && treeItems[treeItems[id].children[j]].isOpen) {
				vChildren = vChildren.concat(visibleChildren(treeItems[id].children[j]));
			}
		}
	}
	return vChildren;
}

function changeTree(which) {
//alert("ok");
	var changingElems = visibleChildren(which);
	if (treeItems[which].isOpen) {
		visible = visibleRemove(visible,changingElems);
		for (i in changingElems) removeElem(changingElems[i]);
		treeItems[which].isOpen = false;
	} else {
		visible = visibleAdd(visible,which,changingElems);
		for (i in changingElems) putElem(changingElems[i],"table-row");
		treeItems[which].isOpen = true;
	}
saveMenuState();
}

/*  */

function treeItem(id,parent,isOpen, text,link) {
	this.id = id;
	this.parent = parent;
	this.children = new Array();
	if (parent != '') {
		treeItems[parent].children[treeItems[parent].children.length] = id;
		this.level = treeItems[parent].level + 1;
	} else this.level = 0;
	this.isOpen = isOpen;
	this.text = text;
	this.link = link;
	return this;
}

function mOverTreeText(e) {
	if (ie) event.toElement.className = 'treeTextHover';
		else if (dom) e.currentTarget.className = 'treeTextHover';
}

function mOutTreeText(e) {
	if (ie) event.fromElement.className = 'treeText';
		else if (dom) e.currentTarget.className = 'treeText';
}

function mOverCell(e) {
	if (ie) var imgClicked = event.srcElement;
		else if (dom) var imgClicked = e.currentTarget;

 var l=document.all.length;
 var id=null;

 for (i=0;i<l;i++){
  l_id=document.all[i].name;
  if (l_id == imgClicked.name){id=i;}
 }
// document.all[id].className ='CellHover';
//alert(treeItems[imgClicked.id.substr(5)].level);
                if(treeItems[imgClicked.id.substr(5)].level==0){document.all[id].className = 'FirstCellHover';}else
                if(treeItems[imgClicked.id.substr(5)].level==1){document.all[id].className = 'SecondCellHover';}else
                if(treeItems[imgClicked.id.substr(5)].level==2){document.all[id].className = 'CellHover';}

}

function mOutCell(e) {
	if (ie) var imgClicked = event.srcElement;
		else if (dom) var imgClicked = e.currentTarget;

var l=document.all.length;
var id=null;

 for (i=0;i<l;i++){
  l_id=document.all[i].name;
  if (l_id == imgClicked.name){id=i;}
 }
                if(treeItems[imgClicked.id.substr(5)].level==0){document.all[id].className = 'Cell';}
                if(treeItems[imgClicked.id.substr(5)].level==1){document.all[id].className = 'Cell1';}
                if(treeItems[imgClicked.id.substr(5)].level==2){document.all[id].className = 'Cell2';}
}

function changeTreeState(e) {
	if (ie) var imgClicked = event.srcElement;
		else if (dom) var imgClicked = e.currentTarget;

 for (var i in treeItems) 
 {
  if (treeItems[i].children.length > 0)
   if (treeItems[i].isOpen)
   {
    if(imgClicked.id.substr(5) != i)
    {
     changeTree(i);
    }
   }
 }
  document.images[imgClicked.id].src =  (treeItems[imgClicked.id.substr(5)].isOpen)? colImg.src : expImg.src;
	if (imgClicked) changeTree(imgClicked.id.substr(5));
}

function changeLocation(e) {
	if (ie) var imgClicked = event.srcElement;
		else if (dom) var imgClicked = e.currentTarget;
	if (imgClicked) changeTree(imgClicked.id.substr(5));

 document.location =  treeItems[imgClicked.id.substr(5)].link;
}


function buildTree(tableBody) { if (ie || (dom && !ie)) {
	parentTableBody = document.getElementById(tableBody);
	for (var i in treeItems) {
		// Создаем внешную трышку для пункта меню
		var newItem = document.createElement('tr');

		newItem.id = treeItems[i].id;
		
		// Создаем в трышке ячейку с правильными отступами.
		var theCell = document.createElement('td');
		theCell.setAttribute('nowrap','nowrap');
		theCell.setAttribute('valign','middle');
                if(treeItems[i].level==0){theCell.className = 'Cell';}
                if(treeItems[i].level==1){theCell.className = 'Cell1';}
                if(treeItems[i].level==2){theCell.className = 'Cell2';}
		theCell.setAttribute('id','leaf_'+treeItems[i].id);
		theCell.setAttribute('name',treeItems[i].id);

		// Сделаем табличку быстренько...
		

		// Делаем ячейку для отступа
		
		// Делаем ячейку для картинки

		// A потом засовываем картинку
//-------------------------------------------------
		var switchImg = document.createElement('img');
		
		// Выясняем какую именно картинку нужно вставить
		if (treeItems[i].children.length > 0)
			if (treeItems[i].isOpen) var leafPic = '/_img/bg_menu_left.gif';
				else var leafPic = '/_img/bg_menu_left.gif';
			else var leafPic = '/_img/bg_menu_left.gif';
		if(treeItems[i].level==1){var leafPic = '/_img/leaf.gif';
		 switchImg.setAttribute('src',leafPic);
		 switchImg.setAttribute('width',42);
		 switchImg.setAttribute('height',22);}
		else{
		 switchImg.setAttribute('src',leafPic);
		 switchImg.setAttribute('width',42);
		 switchImg.setAttribute('height',25);}
		switchImg.setAttribute('border',0);
		switchImg.setAttribute('hspace',0);
		switchImg.setAttribute('align','middle');
		switchImg.setAttribute('id','leaf_'+treeItems[i].id);
		switchImg.setAttribute('name','leaf_'+treeItems[i].id);
//---------------------------------------
		
		if (treeItems[i].children.length > 0)
		{
			if (ie) theCell.onclick = changeTreeState;
				else if (dom) theCell.addEventListener("click", changeTreeState, true);
		}
		else
	        { 
                        if (ie) theCell.onclick = changeLocation;
				else if (dom) theCell.addEventListener("click", changeLocation, true);
		}

		if (ie) {
			theCell.onmouseover = mOverCell;
			theCell.onmouseout = mOutCell;
		} else if (dom) {
			theCell.addEventListener("mouseover", mOverCell, true);
			theCell.addEventListener("mouseout", mOutCell, true);
		}


		// Добавляем картинку к тъдышке и потом строке таблички
//------------------

		theCell.appendChild(switchImg);
//------------------


		// Делаем ячейку для текста
		
		var textItself = document.createTextNode(treeItems[i].text);
		    //textItself.className = 'treeText';
	  	    //textItself.setAttribute('nowrap','nowrap');
		    //textItself.setAttribute('valign','middle');
		theCell.appendChild(textItself);

		newItem.appendChild(theCell);
		
		if (!isItemVisible(treeItems[i].id)) newItem.style.display = 'none';
		
		parentTableBody.appendChild(newItem);
	}
}
}

