// Переменные, которые нужны для работы дерева
treeTop = 155;

// Некоторые переменные, которые нужны скрипту
nn = (document.layers)? true : false;
ie = (document.all)? true : false;
bkgImg = new Image();
bkgImg.src = "images/back2.gif";
openImg = new Image();
openImg.src = "/WebSite_Media/fl-orange2_act.gif";
closeImg = new Image();
closeImg.src = "/WebSite_Media/fl-orange2.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['leaf42'] = new Leaf('leaf42',0,'',false);
leafs['leaf12'] = new Leaf('leaf12',0,'',false);
leafs['leaf13'] = new Leaf('leaf13',0,'',false);
leafs['leaf43'] = new Leaf('leaf43',0,'',false);


// Архив новостей
leafs['leaf1'] = new Leaf('leaf1',0,'',false);

leafs['leaf16'] = new Leaf('leaf16',1,'leaf1',false);
leafs['leaf17'] = new Leaf('leaf17',1,'leaf1',false);
leafs['leaf40'] = new Leaf('leaf40',1,'leaf1',false);
leafs['leaf18'] = new Leaf('leaf18',1,'leaf1',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['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['leaf41'] = new Leaf('leaf41',1,'leaf3',false);
leafs['leaf28'] = new Leaf('leaf28',1,'leaf3',false);
leafs['leaf29'] = new Leaf('leaf29',1,'leaf3',false);


//  Партнеры 
leafs['leaf4'] = new Leaf('leaf4',0,'',false);

leafs['leaf30'] = new Leaf('leaf30',1,'leaf4',false);
leafs['leaf31'] = new Leaf('leaf31',1,'leaf4',false);
leafs['leaf32'] = new Leaf('leaf32',1,'leaf4',false);

// Сервисы
leafs['leaf14'] = new Leaf('leaf14',0,'',false);

leafs['leaf34'] = new Leaf('leaf34',1,'leaf14',false);
leafs['leaf35'] = new Leaf('leaf35',1,'leaf14',false);
leafs['leaf36'] = new Leaf('leaf36',1,'leaf14',false);
leafs['leaf37'] = new Leaf('leaf37',1,'leaf14',false);
leafs['leaf38'] = new Leaf('leaf38',1,'leaf14',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);
}


