<!--
function MM_findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_showHideLayers() {
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}

function mouseOver(e) {
    if (e && e.className.search('-over') == -1) {
		e.oldClassName=e.className;
		e.className+='-over';
	}
}

function mouseOut(e) {
    if (e && e.oldClassName) e.className=e.oldClassName;
}

function mouseClick(e) {
    if (e && e.firstChild && e.firstChild.tagName=='A') {
		document.location = e.firstChild.getAttribute('href');
	}
}

function msgProcessing(target) {
	var i,j;
	
	if (target && top.frames[target]) {
		top.frames[target].msgProcessing(null);
	} else {
		window.scroll(0,0);
		for (i=0; i<document.forms.length; i++) {
			with (document.forms[i]) 
			for (j=0; j<elements.length; j++)
				if (elements[j].style) elements[j].style.visibility = "hidden";
		}
		MM_showHideLayers('hideAll','','show');
	}
}

function matchName(name1, name2) {
	return name1.substr(0,name1.lastIndexOf('[')) == name2.substr(0,name2.lastIndexOf('['));
}

function listCheckAll(obj){
var state, frm;
	state = obj.checked;
	for (frm=0; frm<document.forms.length; frm++) {
		with (document.forms[frm]) {
			for (i=0; i<elements.length; i++) {
				/*
				if (elements[i].type=='checkbox' && matchName(elements[i].name, obj.name))
					elements[i].checked = state;
				*/
				if (elements[i].type=='checkbox' && getPrefix(obj.name) == getPrefix(elements[i].name) && getRecPath(obj.name) == getFieldName(elements[i].name)) {
					elements[i].checked = state;
				}
			}
		}
	}
}

function listRadio(obj){
	var hidden;
	obj.value = 1;
	hidden = obj.name.substr(5,obj.name.length);
	with (obj.form) {
		elements[hidden].value = '1';
		for (i=0; i<elements.length; i++) {
			if (matchName(elements[i].name, obj.name) && elements[i].name != obj.name) {
				elements[i].checked = false;
				elements[i].value = 0;
			}
			if (matchName(elements[i].name, hidden) && elements[i].name != hidden) {
				elements[i].value = '0';
			}
		}
	}
}

function formCheckBox(obj){
	var hidden;
	with (obj.form) {
		hidden = obj.name.substr(5,obj.name.length);
		elements[hidden].value = obj.checked ? '1' : '0';
		if (obj.onchange) obj.onchange();
	}
}

function setAndSubmit(formName, fldName, value) {
	document.forms[formName].elements[fldName].value = value;
	if (document.forms[formName].onsubmit &&  
		!document.forms[formName].onsubmit()) return;
  	msgProcessing(null);
	document.forms[formName].submit();
}

function getPrefix(name){
var i;
	i = name.split(']');
	return i[0]+']'+i[1]+']';
}

function getFieldName(name){
var i, j, fieldName;
	i = name.split(']');
	j = (i[1] == '[insert') ? 1 : 0;
	return i[3+j].substring(1);
}

function getRecPath(name){
var i, j;
	i = name.split(']');
	j = (i[1] == '[insert') ? 1 : 0;
	return i[2+j].substring(1);
}

function getDBPrefix(name){
var i;
	i = name.split(']');
	return i[0]+']';
}

function getSibling(name, siblingName){
var i;
	i = name.split(']');
	
	if (i[1] == '[insert') i[4]='['+siblingName
	else i[3] = '['+siblingName;
	
	return i.join(']');
}

function getField(name, db, rs, rsPath, fieldName, p){
var i, j;
	i = name.split(']');
	i[0] = (db ? i[0].split('[')[0]+'['+db : i[0]);
	j = (i[1] == '[insert') ? 1 : 0;
	if (i[1+j] || rs) i[1+j] = (rs ? '['+rs : i[1+j]);
	if (i[2+j] || rsPath) i[2+j] = (rsPath ? '['+rsPath : i[2+j]);
	if (i[3+j] || fieldName) i[3+j] = (fieldName ? '['+fieldName : i[3+j]);
	if (i[4+j] || p) i[4+j] = (p ? '['+p : i[4+j]);
	return i.join(']');
}

function getDBFormSibling(obj, dbFormName, siblingName) {
var names, i, sibling, current, objName,
	rs,	val, label, match, type, format, optionsRS, optionsVal,	optionsLabel;
	
	if (obj.form.elements[dbFormName].value) {
		names = obj.form.elements[dbFormName].value.split(',');
	} else names = obj.form.elements[dbFormName][0].value.split(',');
	
	rs = names[0]; val = names[1]; label = names[2]; match = names[3]; type = names[4];
	format = names[5]; optionsRS = names[6]; optionsVal = names[7]; optionsLabel= names[8];
	
	objName = (obj.type == 'checkbox') ? obj.name.substr(5) : obj.name;
	match = getField(objName, false, rs, false, match, false);

	with (obj.form) {
		i=0;
		match = match.substr(0,match.lastIndexOf('['));
		while (elements[(current = match+'['+i+']')]) {
			if (elements[current].value == siblingName) {
				var sblName		= getSibling(current, val);
				var sblType		= getSibling(current, type);
				var sblFormat	= getSibling(current, format);
				var sblLabel	= getSibling(current, label);
				
				sibling = new Array();
				sibling['form']		= obj.form;
				sibling['name']		= sblName;
				sibling['value']	= elements[sblName].value;
				sibling['type']		= elements[sblType]   ? elements[sblType].value   : elements[sblName].dataType;
				sibling['format']	= elements[sblFormat] ? elements[sblFormat].value : elements[sblName].dataFormat;
				sibling['label']	= elements[sblLabel]  ? elements[sblLabel].value  : elements[sblName].label;
				return sibling;
			}
			i++;
		}
	}
	return false;
}

function getSiblingNumValue(obj, script, name) {
var x, num;
    x = getDBFormSibling(obj, script, name);
    if (x) {
         num = isNumber(x.format, x.value);
         return (num) ? num[1] : null;
    } else alert(name + ' not found.');
}

function setSiblingNumValue(obj, script, name, value) {
var x, num;
    x = getDBFormSibling(obj, script, name);
    if (x) {
         num = isNumber(x.format, value);
         if (num) obj.form.elements[x.name].value = num[0];
         else obj.form.elements[x.name].value = '0'
    } else alert(name + ' not found.');
}


function listGoto(firstRow) {
	setAndSubmit('XMLDB_FILTER_AND_ORDER','XMLDB_LIST_FIRSTROW',firstRow);
}

function listOrderBy(prefix, name) {
	var order =document.forms['XMLDB_FILTER_AND_ORDER'].elements[prefix+'[XMLDB_ORDER]['+name+'][order]'];
	order.value= (order.value=='asc' ? 'desc' : 'asc');
	setAndSubmit('XMLDB_FILTER_AND_ORDER',prefix+'[XMLDB_ORDER]['+name+'][priority]',-1);
}

function listOrder() {
	flowControl.popup('goto.php?page=order&listPage='+urlParameters['page'],'order', 'width=470,height=170');
}

function listFilter(obj) {
	setAndSubmit('XMLDB_FILTER_AND_ORDER','XMLDB_LIST_FIRSTROW',1);
}

function listClearFilterAndOrder(obj) {
var i;
	with (obj.form) {
		for (i=0; i<elements.length; i++) if (elements[i].type != 'button') elements[i].value = "";
	}
	setAndSubmit('XMLDB_FILTER_AND_ORDER','XMLDB_LIST_FIRSTROW',1);
}

function listAction(obj, type) {
	switch (type) {
		case 'back':
			flowControl.go(setURLVariable(document.location,'action',type));
		break;

		case 'insert':
			if (obj.form.name=='XMLDB_FORM') {
				setAndSubmit(obj.form.name, getField(obj.name, '', '', 'XMLDB_LIST_ACTION', getRecPath(obj.name), ''), type);
			} else flowControl.go(setURLVariable(obj.form.elements['XMLDB_FORM'].value,'action',type));
		break;
		
		case 'delete' :
			if (!confirm(error_msg['are-you-sure'])) break;
		default :
			setAndSubmit(obj.form.name, getField(obj.name, '', '', 'XMLDB_LIST_ACTION', getRecPath(obj.name), ''), type);
	}
}

function tabAction(obj, rs, type) {
	setAndSubmit(obj.form.name, getField(obj.name, '', rs, 'XMLDB_LIST_ACTION', getRecPath(obj.name), ''), type);
}

function formFormatField(objName, label, type, format, shortFormat, required, autofill) {
var errMsg = '', num, date, time;
var obj = document.forms['XMLDB_FORM'].elements[objName];
	if (type) obj.dataType = type;
	if (format) obj.dataFormat = format;
	if (shortFormat) obj.dataFormatShort = shortFormat;
	if (required) obj.dataRequired = required;
	if (label) obj.label = label;
	if (autofill) obj.autofill = autofill;

	if (obj.value=='') {
		if (obj.dataRequired) return obj.label+' '+error_msg['can-not-be-empty']+'!\n';
		else return '';
	}
	
	if (obj.type == 'hidden') return '';

	switch (obj.dataType) {
		case 'number':
			if (num = isNumber(obj.dataFormat, obj.value)) obj.value = num[0];
			else errMsg = '\n'+obj.label+': "'+obj.value+'" '+error_msg['is-not-valid-number']+' '+obj.dataFormat+'.\n';
		break;

		case 'date':
			if (date = isDate(obj.dataFormat, obj.value)) {
				obj.value = date[0];
			} else if (date = isDate(obj.dataFormatShort, obj.value)) {
				date = formatDate(obj.dataFormat, date[1], date[2], date[3], date[4], date[5]);
				obj.value = date[0];
			} else	errMsg = '\n'+obj.label+': "'+obj.value+'" '+error_msg['is-not-valid-date']+' '+obj.dataFormat+'\n';
		break;

		case 'time':
			if (time = isTime(obj.value)) obj.value = time;
			else errMsg = '\n'+obj.label+': "'+obj.value+'" '+error_msg['is-not-valid-time']+' HH:MM\n';
		break;

		case 'e-mail':
			if (!isEmail(obj.value)) errMsg = '\n'+obj.label+': "'+obj.value+'" '+error_msg['is-not-valid-email']+'.\n';
		break;

		case 'ip':
			if (!isIP(obj.value)) errMsg = '\n'+obj.label+': "'+obj.value+'" '+error_msg['is-not-valid-ip']+'.\n';
		break;

		case 'url':
			if (!isURL(obj.value)) errMsg = '\n'+obj.label+': "'+obj.value+'" '+error_msg['is-not-valid-url']+'.\n';
		break;

		case 'password':
			retype = document.forms['XMLDB_FORM'].elements["XMLDB_RETYPE_PASSWORD"+objName];
			retype.label = obj.label;
			retype.dataRequired = obj.dataRequired;
			if (obj.value != retype.value) {
				errMsg = error_msg['retype-password']+'.\n';
				obj.value = retype.value = "";
			}
		break;

		case 'string':
			obj.value = isString(obj.value);
		break;
		
//		default : alert('Unrecognized DATA-TYPE.\nContact your system administrator!!!');
	}
	if (obj.autofill) obj.value = obj.defaultValue;
	return  errMsg;
}

function formValidateField(objName, label, type, format, shortFormat, required, autofill) {
var obj = document.forms['XMLDB_FORM'].elements[objName];
	if (msg = formFormatField(obj.name, label, type, format, shortFormat, required, autofill)) {
		if (obj.dataType != 'hidden') {
			alert(msg);
//			obj.focus();
		}
	}
}

function formConfirm(obj, type) {
	if (type == 'delete') return confirm(error_msg['are-you-sure']);
	else return true;
}

function formValidate(obj){
var i, errMsg='', x= '';
	for (i=0; i<obj.elements.length; i++) {
		if (obj.elements[i].name == '') continue;
		if (obj.elements[i].dataType != 'hidden') errMsg += formFormatField(obj.elements[i].name);
	}
	if (errMsg) alert(errMsg)
	else msgProcessing(null);
	return errMsg == '';
}

function formAction(type) {
	if (type == 'back') {
		flowControl.go(setURLVariable(document.forms['XMLDB_FORM'].action,'action',type));
		return false;
	}
	formValidate(document.forms['XMLDB_FORM']);
}

function formRefresh(obj, rs) {
	if (formValidate(obj.form))
		setAndSubmit(obj.form.name, getDBPrefix(obj.name) + '[XMLDB_REFRESH]', rs);
}

function formActivateTab(input, value) {
	setAndSubmit('XMLDB_FORM', input, value);
}

function show_tab(id) {
	var obj = document.getElementById(id);
	if (!obj) return;
	obj.style.visibility = "visible";
	obj.style.display = "block";
}

function hide_tab(id) {
	var obj = document.getElementById(id);
	if (!obj) return;
	obj.style.visibility = "hidden";
	obj.style.display = "none";
}

function setClass(id, new_class) {
	var obj = document.getElementById(id);
	if (!obj) return;
	obj.className = new_class;
}

function xmldb_form_show_tab(prefix, name, recpath, id) {
	var activeTab = document.forms['XMLDB_FORM'].elements[prefix+'[XMLDB_ACTIVE_TAB]'+'['+name+']'+'['+recpath+']'];
	var currentTab = activeTab.value;
	activeTab.value = id;

	hide_tab('XMLDB_TAB_'+name+'_['+recpath+']_'+currentTab);
	setClass('XMLDB_TAB_LABEL_'+name+'_['+recpath+']_'+currentTab, 'tabLabel');
	
	show_tab('XMLDB_TAB_'+name+'_['+recpath+']_'+id);
	setClass('XMLDB_TAB_LABEL_'+name+'_['+recpath+']_'+id, 'tabLabelActive');
	
	var rs = recpath.substr(0, recpath.indexOf('/'));
	var rsp = recpath.substr(recpath.indexOf('/'));
	var selection = document.forms['XMLDB_FORM'].elements[prefix+'['+rs+'][XMLDB_LIST_SELECTION]['+rsp+'][]'];
	if (selection) selection.value = id - 1;
}

function formOpenListSelect(input_name, match_name, prefix, pos, href, features) {
	with (document.forms['XMLDB_FORM']) {
		href = setURLVariable(href, 'XMLDB_MATCH_PREFIX', prefix);
		href = setURLVariable(href, 'XMLDB_MATCH_POS', pos);
		href = setURLVariable(href, 'XMLDB_INPUT_NAME', input_name);
		href = setURLVariable(href, 'XMLDB_MATCH_NAME', match_name);
		flowControl.popup(href, 'Select'+flowControl.ID, features+',resizable=yes,status=no,toolbar=no,location=no,menubar=no,scrollbars=yes');
	}
}

function formShowListSelect(input_name, prefix, match_name, pos, href, features) {
	with (document.forms['XMLDB_FORM']) {
		href = setURLVariable(href, 'XMLDB_MATCH_PREFIX', prefix);
		href = setURLVariable(href, 'XMLDB_MATCH_POS', pos);
		href = setURLVariable(href, 'XMLDB_INPUT_NAME', input_name);
		href = setURLVariable(href, 'XMLDB_MATCH_NAME', match_name);
		href = setURLVariable(href, 'FCID', flowControl.ID);

		var div = document.getElementById(input_name+'-list');
		if (div) {
			div.innerHTML='<iframe src="'+href+'" frameborder="no" border="0" style="'+features+'"></iframe>';
			with (div.style) {
				if (display == 'none') {
					display = 'block';
					visibility = 'visible';
				} else {
					display = 'none';
					visibility = 'hidden';
				}
			}
		}
	}
}

function listSelectInit(prefix) {
var	matchPrefix = unescape(urlParameters[('XMLDB_MATCH_PREFIX')]);
var	matchName = unescape(urlParameters[('XMLDB_MATCH_NAME')]);
var	matchPos = unescape(urlParameters[('XMLDB_MATCH_POS')]);
var inputName = unescape(urlParameters[('XMLDB_INPUT_NAME')]);

var i,j,s;
	if (typeof(opener)=='undefined' || parent) opener=parent;
	with (document.forms['XMLDB_FILTER_AND_ORDER']) {
		s=false;
		for (j=0; j<elements.length; j++) {
			if (elements[j].name.substring(0, prefix.length) == prefix && (i=elements[j].name.indexOf('[XMLDB_FILTER]')) >= 0 && elements[j].value=='') {
				fldName = matchPrefix+elements[j].name.substring(i+'[XMLDB_FILTER]'.length)+matchPos;
				if (opener.document.forms['XMLDB_FORM'].elements[fldName]) {
					elements[j].value = opener.document.forms['XMLDB_FORM'].elements[fldName].value;
					s = true;
				}
			}
		}
		// if (s) submit();
	}
}

function listSelect(prefix, pos, setnull) {
var	matchPrefix = unescape(urlParameters[('XMLDB_MATCH_PREFIX')]);
var	matchName = unescape(urlParameters[('XMLDB_MATCH_NAME')]);
var	matchPos = unescape(urlParameters[('XMLDB_MATCH_POS')]);
var inputName = unescape(urlParameters[('XMLDB_INPUT_NAME')]);

	pos = '['+pos+']';
	if (typeof(opener)=='undefined' || parent) opener=parent;
	with (document.forms['XMLDB_ROWSELECTION']) {
		for (j=0; j<elements.length; j++) {
			if (pos == elements[j].name.substr(elements[j].name.length - pos.length) ) {
				name = elements[j].name.substring(prefix.length, elements[j].name.length-pos.length);
				fldName = matchPrefix+name+matchPos;

				if (fldName == matchPrefix+matchName+matchPos) fldName = inputName;
				
				if (opener.document.forms['XMLDB_FORM'].elements[fldName]) {
					opener.document.forms['XMLDB_FORM'].elements[fldName].value = setnull ? '' : elements[j].value;
					opener.document.forms['XMLDB_FORM'].elements[fldName].defaultValue = setnull ? '' : elements[j].value;
					if (opener.document.forms['XMLDB_FORM'].elements[fldName].onchange)
						eval("opener.document.forms['XMLDB_FORM'].elements['"+fldName+"'].onchange();");
				}
			}
		}
	}
	if (parent) {
		with (parent.document.getElementById(inputName+'-list').style) {
			display = 'none';
			visibility = 'hidden';
		}
	} else window.close();
}

function listSelectClear(obj, action) {
	prefix = getPrefix(obj.name);
	listSelect(prefix+'[/0]', 0, true);
}

function bitmaskInit(name) {
var value, form, i;
	form = document.forms['XMLDB_FORM'];
	mask = parseInt(form.elements[name].value, 16);
	bitmask = pad(mask.toString(2),8);
	for (i=0; i<bitmask.length; i++) {
		lbl = "XMLDB_LABEL" + (8-i).toString() + name;
		if (bitmask.charAt(i)=='1' && form.elements[lbl]) form.elements[lbl].checked=true;
	}
}

function bitmaskCalculate(name) {
var value, form;
	form = document.forms['XMLDB_FORM'];
	value = 0;
	for (i=1; i<9; i++) {
		lbl = "XMLDB_LABEL" + i.toString() + name;
		if (form.elements[lbl]) value += Number(form.elements[lbl].checked)*form.elements[lbl].value;
	}
	form.elements[name].value = value.toString(16);
}


/*********************************************************************************************************************/
/**************************************************************************************************** Hierarchy tree */
// =========================================================
// listItem object represents every element in Hierarchy tree
//
// fields:
// name - Name of element that is displayed in list
// value - value of element
// inheritors - array of elemnt's inheritors if any


// =========================================================
// listHierarchy object represents levels of Hierarchy tree
// it stores every level list in array levelLists

// first argument must be an Array of list items for initialization
// all rest is names of levelLists


function listItem(name, value, selected, inheritors) {
  this.name = name;
  this.value = value;
  this.selected = selected;
  this.inheritors = inheritors;
}

function listHierarchy() {
  var args=listHierarchy.arguments;

  this.allLevels 			= new Array();
  this.maxLevel 			= 1;

  this.init                 = listHierarchy_init;
  this.listLoad             = listHierarchy_listLoad;
  this.listLoadLevel        = listHierarchy_listLoadLevel;
  this.listSelectionChanged = listHierarchy_listSelectionChanged;
  this.initArray			= listHierarchy_initArray;
  this.AddInheritors		= listHierarchy_AddInheritors;
  this.ProcLevel			= listHierarchy_ProcLevel;

  this.elements = args[0];
  if (this.elements.length) {
  	if (!this.elements[0].name)
  		this.initArray(this.elements);
	}
  this.levelLists = Array(args.length-1);
  for (i=1; i< args.length; i++) {
  	var currentList = MM_findObj(args[i]);
	
	if (typeof(currentList.options)=='undefined' && typeof(currentList.length)!='undefined') {
		this.levelLists[i-1] = currentList;
	} else {
		this.levelLists[i-1] = new Array(currentList);
	}
  }
  this.init();
}

function listHierarchy_init(){
	listHierarchy_initialized = false;
	this.listLoad(0, this.elements);
	listHierarchy_initialized = true;
}

function listHierarchy_listLoad(level, elementsData) { // dataObject must be an Array of listItems
var list, i;
	if (list=this.levelLists[level]) {
		for (i=0; i<list.length; i++) {
			this.listLoadLevel(list[i], elementsData);
		}
		
		for (i=0; i<list.length; i++) {
			if (listHierarchy_initialized && list.onchange) list[i].onchange();
			else this.listSelectionChanged(list[i]);
		}
	}
}

function listHierarchy_listLoadLevel(list, elementsData) { // dataObject must be an Array of listItems
	var i=0, oldValue;
	
	if (list.type == 'select-one') {
		
		if (list.selectedIndex >= 0 && list.selectedIndex < list.options.length) {
			// save old selection
			oldValue=list.options[list.selectedIndex].value;
		}
		
		for (i = list.length; i > 0; i-- )
			list.options[i]=null;
		
	    if (elementsData && elementsData.length) {
			for (i=0; i<elementsData.length; i++ ) {
				list.options[i] = new Option(elementsData[i].name, elementsData[i].value, 0, elementsData[i].selected);
				elementsData[i].selected = false;
		    }
		}
		
		if (list.selectedIndex >= 0 && list.selectedIndex < list.options.length) {
			// restore old selection
			for (i=0; i<list.options.length; i++) {
				if (list.options[i].value == oldValue) {
					list.options[i].selected = true;
					list.selectedIndex = i;
				}
			}
		}
		
	} else {
		list.selectedIndex = 0;
		for (i=0; i<elementsData.length; i++ ) {
		    if (elementsData[i].selected) {
				elementsData[i].selected = false;
				list.selectedIndex = i;
			}
	    }
	}
}

function listHierarchy_listSelectionChanged(list, level, elementsData) {
	var i,j;
	if (level >= this.levelLists.length) return;
	
	if (typeof(level)=='undefined') {
		level=0;
		elementsData = this.elements;
	}
	
	for (j=0; j<this.levelLists[level].length; j++) {
		if (list == this.levelLists[level][j]) {
	  		i = list.selectedIndex;
	  		if (elementsData && elementsData.length) {
			   	this.listLoad(level+1, elementsData[i].inheritors);
			} else this.listLoad(level+1, new Array());
			
			break;
		} else {
			i = this.levelLists[level][j].selectedIndex;
			if (elementsData.length && typeof(i) != 'undefined' && i>=0) {
				this.listSelectionChanged(list, level+1, elementsData[i].inheritors);
			}
		}
	}
	
}

function listHierarchy_AddInheritors(source, destination, start) {
	var k, j;
	if (!destination) {
		destination = new Array();
		destination[0] = new listItem('                        ','', 0);
	}
	for (k=start; k<source.length; k++) {
		flag = false;
		for (j=0; j<destination.length; j++)
			if (source[k].value == destination[j].value) {
				flag = true;
				break;
			}
		if (!flag)
			destination.push(source[k]);
	}
	return destination;
}

function listHierarchy_ProcLevel(level, element) {
	var i;
	var children = element.inheritors;
	for (i=1; i<children.length; i++) {
		this.allLevels[level].push(children[i]);
		if (children[i].inheritors) {
			if (this.maxLevel<(level+1)) {
				this.allLevels[level+1] = new Array();
				this.maxLevel++;
			}
			this.ProcLevel(level+1, children[i]);
			children[0].inheritors = this.AddInheritors(children[i].inheritors, children[0].inheritors, 1);
		}
	}
}


function listHierarchy_initArray(data) {
	var i, j, s;
	this.allLevels[1] = new Array();
	for (i=1; i<data.length; i++) {
		this.ProcLevel(1, data[i]);
	}

	common = data[0];
	for (j=1; j<= this.maxLevel; j++) {
		common.inheritors = this.AddInheritors(this.allLevels[j], common.inheritors, 0);
		common = common.inheritors[0];
	}
}

//-->
