// Переменные, которые нужны для работы дерева
treeTop = 119;

// Некоторые переменные, которые нужны скрипту
nn = (document.layers)? true : false;
ie = (document.all)? true : false;
bkgImg = new Image();
bkgImg.src = "images/back2.gif";
openImg = new Image();
openImg.src = "images/open.gif";
closeImg = new Image();
closeImg.src = "images/closed.gif";

// Далее - функции, которые нужны дереву

// Создаем объект - листо (в смысле ветка ;-)
function Leaf(id,level,parent,isOpen) {
	this.level = level;
	this.parent = parent;
	if (parent != '') leafs[parent].children[leafs[parent].children.length] = id;
	this.isOpen = isOpen;
	this.children = new Array();
	return this;
}

// Задаем самих листьев
leafs = new Array();

// Осветительное оборудование
leafs['leaf1'] = new Leaf('leaf1',0,'',false);

leafs['leaf16'] = new Leaf('leaf16',1,'leaf1',false);
leafs['leaf17'] = new Leaf('leaf17',2,'leaf1',false);
leafs['leaf18'] = new Leaf('leaf18',3,'leaf1',false);
leafs['leaf19'] = new Leaf('leaf19',4,'leaf1',false);
leafs['leaf20'] = new Leaf('leaf20',5,'leaf1',false);
leafs['leaf21'] = new Leaf('leaf21',6,'leaf1',false);


// Аксессуары для Mini-Fill/Mini-Sun Gun
leafs['leaf7'] = new Leaf('leaf7',0,'',false);




//  Источники питания 
leafs['leaf2'] = new Leaf('leaf2',0,'',false);

leafs['leaf8'] = new Leaf('leaf8',1,'leaf2',false);
leafs['leaf9'] = new Leaf('leaf9',1,'leaf2',false);
leafs['leaf22'] = new Leaf('leaf22',1,'leaf2',false);
leafs['leaf23'] = new Leaf('leaf23',1,'leaf2',false);
leafs['leaf24'] = new Leaf('leaf24',1,'leaf2',false);
leafs['leaf25'] = new Leaf('leaf25',1,'leaf2',false);

// Зарядные устройства 
leafs['leaf3'] = new Leaf('leaf3',0,'',false);

leafs['leaf10'] = new Leaf('leaf10',1,'leaf3',false);
leafs['leaf11'] = new Leaf('leaf11',1,'leaf3',false);
leafs['leaf27'] = new Leaf('leaf27',1,'leaf3',false);
leafs['leaf28'] = new Leaf('leaf28',1,'leaf3',false);


leafs['leaf4'] = new Leaf('leaf4',0,'',false);
leafs['leaf12'] = new Leaf('leaf12',0,'',false);
leafs['leaf13'] = new Leaf('leaf13',0,'',false);

// Говорим, что только листья нулевого уровня должны быть видимыми
visible = new Array()
for (i in leafs) if (leafs[i].level == 0) visible[visible.length] = i;

// Вытаскиваем все видимые под-элементы данного элемента (id - string!), результат - Array
function visibleChildren(id) {
	var vChildren = new Array();
	if (leafs[id].children.length > 0) {
		for (i in leafs[id].children) {
			vChildren[vChildren.length] = leafs[id].children[i];
			if (leafs[leafs[id].children[i]].children.length > 0 && leafs[leafs[id].children[i]].isOpen) {
				vChildren = vChildren.concat(visibleChildren(leafs[id].children[i]));
			}
		}
	}
	return vChildren;
}

// Добавляем в Array все элементы другой Araay в указанном месте
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;
}

// Убираем из однай Array все элементы другой Array
function visibleRemove(main, sub) {
	for (i in main) for (j in sub) if (main[i] == sub[j]) delete main[i];
	return main;
}

// Стандартная кроссбраузерная функция, которая выстраивает по вертикали дивчиков, на входе - Array с их именами
function vertPlace(which) {
	var currTop = treeTop;
	if (nn) for (i in which) {
		document.layers[which[i]].top = currTop;
		currTop += document.layers[which[i]].document.height + 1;
	}
	if (ie) for (i in which) {
		document.all[which[i]].style.top = currTop;
		currTop += document.all[which[i]].offsetHeight + 1;
	}
}

// Стандартная кроссбраузерная функция показывающая слой
function showLeer(which) {
	if (nn) document.layers[which].visibility = "show";
	if (ie) document.all[which].style.visibility = "visible";
}

// Стандартная кроссбраузерная функция скрывающая слой
function hideLeer(which) {
	if (nn) document.layers[which].visibility = "hide";
	if (ie) document.all[which].style.visibility = "hidden";
}

// Качаем ветку, или показываем, или скрываем в зависимости от состояния
function moveBough(which) {
	changingElems = visibleChildren(which);
//		alert(which+"Img");
	if (leafs[which].isOpen) {
		visible = visibleRemove(visible,changingElems);
		for (i in changingElems) hideLeer(changingElems[i]);
		leafs[which].isOpen = false;
		if (nn) document.layers[which].document.images[which+"Img"].src = closeImg.src;
			else document.images[which+"Img"].src = closeImg.src;
	} else {
		visible = visibleAdd(visible,which,changingElems);
		for (i in changingElems) showLeer(changingElems[i]);
		leafs[which].isOpen = true;
		if (nn) document.layers[which].document.images[which+"Img"].src = openImg.src;
			else document.images[which+"Img"].src = openImg.src;
	}
	vertPlace(visible);
}

// Запускаем все это!
function init() {
	for (i in visible) showLeer(visible[i]);
	vertPlace(visible);
}


