/* (C) Copyright 2004 JSC R.I.C.Com.  All rights reserved. */

var windowStatusMessage="";
function debug(msg) {
	windowStatusMessage=windowStatusMessage+" "+msg;
	window.status=windowStatusMessage;
}


function oNode(id, description, parent) {
	this.id = id;
	this.description = description;
	this.parent = parent;
	this.depth = 0;
	this.children = new Array();
}


function addNode(id, description, parentNodeID) {	
	if (window["n"+parentNodeID]  ||  parentNodeID==null) {						// Если родительский узел(node) существует или пустой
		oParentNode = window["n"+parentNodeID];									// Берем obj родительского узла
		window["n"+id]=new oNode(id, description, oParentNode);					// Создаем obj нового узла

		if (oParentNode != null) {												// Если родительский узел существует
			oParentNode.children.length++;										// Добавляем киндера(child)
			oParentNode.children[oParentNode.children.length-1]=eval("n"+id);
			window["n"+id].depth = oParentNode.depth+1;
		}
	}
}


// Получаем значение для id из select group -> enumerator : Например: значание "2" из "Category2-1"
function selectGroupEnumerator(id) {
	var oStr = new String(id);
	return oStr.substring(8,9);
}


function resetSelects(eSelect) {
	var selectorGroup = selectGroupEnumerator(eSelect.id);
	var depth = eSelect.id.substring(10,11);
	// При отборе фиктивного OPTION и глубины глубже, чем 1, меняем SELECTION текущего родительского значения.
	if (eSelect.value == -1  &&  depth > 1)
		eSelect = document.getElementById("Category"+selectorGroup+"-"+eval(depth-1));

	loadSelectGroup(selectorGroup, eSelect.value, false);
}


function loadOneSelect(eSelect, oParentNode, selectedId) {
	var depth = eSelect.id.substring(10,11);
	eSelect.length = 0;
//alert(selectedId);
	if (selectedId != -1) {
		eSelect.options[0]=new Option(depth==1?"-- тип СМИ --":"-- тип СМИ --", -1, true);
		eSelect.options[1]=new Option("------------------------------------", -1, true);
	} else {
		eSelect.options[0]=new Option(depth==1?"-- наименование СМИ --":"-- наименование СМИ --", -1, true);
		eSelect.options[1]=new Option("------------------------------------", -1, true);
	}
	eSelect.selectedIndex = 0;
	
	// Загружаем опции селектора с детьми родительского узла, прошедших через
	for(var i=0; i<oParentNode.children.length; i++) {
		text = oParentNode.children[i].description;
		if (oParentNode.children[i].children.length)		// Если этот узел имеет детей
			text = text + " ->";							// Добавляем индикатор строки
		eSelect.options[i+1] = new Option(text, oParentNode.children[i].id);	// Добавляем опцию выбранному  объекту
		if (selectedId > -1  &&  selectedId == oParentNode.children[i].id)		// Помечаем опцию как "selected" если она выбрана
			eSelect.selectedIndex = i+1;
	}
}


function loadSelectGroup(selectGroupEnumerator, selectedCategoryId, isInitial) {
	if (selectedCategoryId > -1) {
		var oSelectedCategoryNode = eval("n"+selectedCategoryId);	// Получаем объект выбранного узла
		var oCurrentCategoryNode = oSelectedCategoryNode;			// Инициализируем переменные используемые в цикле
		var categoryId = selectedCategoryId;
		
		var stopDepth = isInitial ? 1 : oSelectedCategoryNode.depth;// Определяем, где прекратить перегружать селекторы

		for (var i=2; i>=stopDepth; i--) {							// Цикл этих селекторов начинается с самого низа <- i количество
			eSelect=document.getElementById("Category"+selectGroupEnumerator+"-"+i);	// Получаем селектор
			
			if (i <= oSelectedCategoryNode.depth) {					// Если показываем
				if (eSelect.length==0)								// Если еще не загружен
					loadOneSelect(eSelect, oCurrentCategoryNode.parent, categoryId);	// Загружаем
				eSelect.style.display = "inline";					// Показываем
				
				oCurrentCategoryNode = oCurrentCategoryNode.parent;	// Смещаем к родителю
				categoryId = oCurrentCategoryNode.id;				// Получаем новый id
			} else {	// Скрываем селектор если он слишком глубоко
				eSelect.length=0;
				eSelect.style.display = "none";
			}
		}
		
		// Если самый последний селектор имеет детей, загружаем селектор для детей
		if(oSelectedCategoryNode.children.length>0  &&  oSelectedCategoryNode.depth<3) {
			eLowerSelect = document.getElementById("Category"+selectGroupEnumerator+"-"+eval(oSelectedCategoryNode.depth+1));
			loadOneSelect(eLowerSelect, oSelectedCategoryNode, -1);
			eLowerSelect.style.display = "inline";
		}
	} else {	// Очищаем состояние всех селекторов
		document.getElementById("Category"+selectGroupEnumerator+"-1").selectedIndex = 0;
		document.getElementById("Category"+selectGroupEnumerator+"-2").selectedIndex = 0;
		document.getElementById("Category"+selectGroupEnumerator+"-2").style.display = "none";
		selectedCategoryId=-1;
	}
	// Устанавливаем скрытую форму var, которая "держит" значения текущего селектора.
	document.getElementById("intCategory"+selectGroupEnumerator).value = selectedCategoryId;
}

function initWithNoSelection(selectGroupEnumerator,nodeId) {
	if (nodeId == -1  ||  !window["n"+nodeId]) {	// Если узел не инициализирован или не существует, очищаем состояние выбранного селектора.
		document.getElementById("Category"+selectGroupEnumerator+"-1").options[0]=new Option("-- Select --", -1, true);
		document.getElementById("Category"+selectGroupEnumerator+"-2").style.display = "none";
	} else {	// Выбираем свойства селекторов
		loadOneSelect(document.getElementById("Category"+selectGroupEnumerator+"-1"), eval("n"+nodeId), -1);
		loadSelectGroup(selectGroupEnumerator,-1,true);
	}
}

