/*
  TreeView - usable tree from any simple list.
  Author:  Ivan Vanyushkin
  Created: 21.08.2004
*/

/* Settings */
var tvImageHeight = 16, tvImageWidth = 14,
tvLeftMargin = tvImageWidth,
tvBigImageHeight = 11, tvBigImageWidth = 10,
tvBtnBigImageHeight = 16, tvBtnBigImageWidth = 19,
tvImagesRoot = '/img/';
tvImages = [/*'item', 'item.gif',*/ 'plus', 'plus.gif', 'minus', 'minus.gif',
'folder', 'keyword.gif', 'folder_opened', 'keyword.gif',
'btn_folder', 'folder.gif', 'btn_folder_opened', 'folderopen.gif',
'page', 'keyword.gif'];
current_mode = false;
/* External */
function tvCompactMenu(oID, oAutoCol, skipFirstLevel, FullExpanded) {
	if(!document.getElementsByTagName || !document.childNodes || !document.createElement) { return; }
	var baseElement = document.getElementById(oID); if(!baseElement) { return; }
	tvCompactChildren(baseElement, 0, oID, oAutoCol, baseElement.tagName.toUpperCase(), skipFirstLevel, FullExpanded);
	var i1 = '<img src="';
	var i2 = '" width="'+tvBtnBigImageWidth+'" height="'+tvBtnBigImageHeight+'" style="border:none" />';
	if (e = document.getElementById('tvExpCol_' + oID))
		e.innerHTML = '&nbsp;&nbsp;&nbsp; <a href="javascript:tvExpandAll(\''+oID+'\')" title="Развернуть всё">' + i1 + Preloads['btn_folder_opened'].src + i2 + '</a> ' +
		'<a href="javascript:tvCollapseAll(\''+oID+'\')" title="Cвернуть всё">' + i1 + Preloads['btn_folder'].src + i2 + '</a>';
}
/*
function tvCompactMenus(DocRoot, oAutoCol, skipFirstLevel) {
	if(!document.getElementsByTagName || !document.childNodes || !document.createElement) { return; }
	if(!DocRoot) { DocRoot = document.getElementsByTagName('body')[0] }
	for (var i = 0; i < DocRoot.childNodes.length; i++) {
		var el = DocRoot.childNodes[i];
		if (el.nodeName == 'UL' || el.nodeName == 'LI') {
			do { s = '_' + parseInt(Math.random() * 1000); }
			while (document.getElementById(s));
			tvCompactChildren(el, 0, s,
			oAutoCol, el.nodeName.toUpperCase(), skipFirstLevel);
		} else
			tvCompactMenus(el, oAutoCol, skipFirstLevel);
	}
}
*/
function tvExpandAll(oID) {
	var obj = document.getElementById(oID);
	tvExpProc(obj, 0, oID);
	openLists[oID] = null;
}
function tvCollapseAll(oID) {
	var obj = document.getElementById(oID);
	tvColProc(obj, 0, oID);
}
/* Internal */
var openLists = [], tvSelectedLists = [], globalObj, Preloads = new Object();
function tvExpProc(obj, oLev, oBsID) {
	for (var i = 0; i < obj.childNodes.length; i++) {
		var o = obj.childNodes[i];
		var s = o.nodeName;
		if (s == 'UL' || s == 'OL') {
			// No AutoCollapse from now!
			var a = o.parentNode.childNodes[0];
			if (a && a.nodeName == 'A') {
				a.onclick = new Function(
'tvClickSmack(this,' + (oLev-1) + ',\'' + oBsID + '\',0,\'' + escape(s) + '\');return false');
				if (o.style.display != 'block')
					tvShowHide(o, true);
			}
		}
		tvExpProc(o, oLev + 1, oBsID);
} }
function tvColProc(obj, oLev, oBsID) {
	for (var i = 0; i < obj.childNodes.length; i++) {
		var o = obj.childNodes[i];
		var s = o.nodeName;
		if (s == 'UL' || s == 'OL') {
			if (o.style.display == 'block')
				tvClickSmack(o, oLev - 1, oBsID, openLists[oBsID], s);
		}
		if (!openLists[oBsID] || oLev == 0)
			tvColProc(o, oLev + 1, oBsID);
} }
function tvCompactChildren(oOb, oLev, oBsID, oCol, oT, skipFirstLevel, FullExpanded) {
	if(!oLev) { oBsID = escape(oBsID); if(oCol) { openLists[oBsID] = []; } }
	oOb.style.listStyle = 'none';
	oOb.style.marginLeft = '0';
	if (oLev) oOb.style.paddingLeft = tvLeftMargin + 'px';
	var show = false;
	for(var x = 0, y = oOb.childNodes; y[x]; x++) { if(y[x].tagName) {
		//for each immediate LI child
		var theNextUL = null;
		for(var i = 0; i < y[x].childNodes.length; i++) {
			var s = y[x].childNodes[i].nodeName;
			if (s == 'UL' || s == 'OL') {
				oT = s;
				theNextUL = y[x].childNodes[i];
				break;
			}
		}
		if(theNextUL) {
			if (!skipFirstLevel) {
			//collapse the first UL/OL child
			theNextUL.style.display = 'none';
			//create a link for expanding/collapsing
			var newLink = document.createElement('A');
			newLink.setAttribute('href', '#');
			newLink.onclick = new Function('tvClickSmack(this,' + oLev + ',\'' + oBsID + '\',' + oCol + ',\'' + escape(oT) + '\');return false');
			newLink.title = 'Открыть';
			var img =
'<img src="'+Preloads['plus'].src+'" width="'+tvImageWidth+'" height="'+tvImageHeight+'" style="border:none" />' +
'<img src="'+Preloads['folder'].src+'" width="'+tvBigImageWidth+'" height="'+tvBigImageHeight+'" style="border:none;margin-right:2px" />';
			//wrap everything upto the child UL/OL in the link
			var theT = y[x].innerHTML.toUpperCase().indexOf('<'+oT);
			var theA = y[x].innerHTML.toUpperCase().indexOf('<A');
			var theHTML = y[x].innerHTML.substr(0, (theA + 1 && theA < theT) ? theA : theT);
			if (theHTML) {
				//newLink.style.textDecoration = 'none';
				while(!y[x].childNodes[0].tagName || (y[x].childNodes[0].tagName.toUpperCase() != oT && y[x].childNodes[0].tagName.toUpperCase() != 'A' ) ) {
					y[x].removeChild(y[x].childNodes[0]); }
				y[x].insertBefore(newLink,y[x].childNodes[0]);
				y[x].childNodes[0].innerHTML = img + theHTML.replace(/^\s*|\s*$/g,'');
			} else {
				// "current"
				if (current_mode)
				  y[x].childNodes[0].onclick = new Function('tvClickLink(this,"'+oBsID+'")');

				y[x].childNodes[0].ondblclick =
new Function('tvClickSmack(this,' + oLev + ',\'' + oBsID + '\',' + oCol + ',\'' + escape(oT) + '\');return false');
				newLink.innerHTML = img;
				y[x].insertBefore(newLink,y[x].childNodes[0]);
			}

			} else {
				y[x].innerHTML =
'<img src="'+Preloads['folder_opened'].src+'" width="'+tvBigImageWidth+'" height="'+tvBigImageHeight+'" style="border:none;margin-right:2px" />' +
y[x].innerHTML;

				// "current"
				if (current_mode) {
					var a = y[x].getElementsByTagName('A')[0];
					if (a) a.onclick = new Function('tvClickLink(this,"'+oBsID+'")');
				}
				theNextUL = y[x].getElementsByTagName(oT)[0];
			}

			sh = tvCompactChildren(theNextUL, oLev + 1, oBsID, oCol, oT, false, FullExpanded);
			sh = sh || (y[x].className == "current");
			if (sh && !skipFirstLevel) {
				tvShowHide(theNextUL, true, true);
				openLists[oBsID][oLev] = theNextUL;
			}
			show = show || sh;

		} else {
var img = '<img src="'+Preloads['page'].src+'" width="'+tvBigImageWidth+'" height="'+tvBigImageHeight+'" style="border:none;margin-right:'+2+'px" />';
			/*if (Preloads['item'].src)
var s = '<img src="'+Preloads['item'].src+'" width="'+tvImageWidth+'" height="'+tvImageHeight+'" style="border:none" />';
				else*/
var s = skipFirstLevel ? '' : ('<span style="padding-right:'+tvImageWidth+'px"></span>');
			if (y[x].childNodes[0].nodeName == 'A') {
//y[x].childNodes[0].style.textDecoration = 'none';
y[x].childNodes[0].innerHTML = img + /*'<span style="text-decoration:underline">' +*/ y[x].childNodes[0].innerHTML /*+ '</span>'*/;
y[x].innerHTML = s + y[x].innerHTML;

// "current"
if (current_mode)
	y[x].childNodes[1].onclick = new Function('tvClickLink(this,"'+oBsID+'")');

			} else
y[x].innerHTML = s + img + y[x].innerHTML;
		}
		show = show || (y[x].className == "current");
} }
	return (show || FullExpanded);
}

var tvSelectedLists = [];

// "current"
function tvClickLink(obj,oBsID) {
	// No realtime, page will refresh
	return false;

	var obj2 = obj.getElementsByTagName('SPAN')[0];
	if (!obj2) obj2 = obj;
	if (tvSelectedLists[oBsID]) {
		// Moz
		tvSelectedLists[oBsID].style.background = 'transparent';

		if (tvSelectedLists[oBsID].parentElement)
			tvSelectedLists[oBsID].parentElement.className = '';
	}
	// Moz
	obj2.style.background = '#C1EECC';

	if (obj2.parentElement) 
	  obj2.parentElement.className = 'current';

  //border: solid 1px /*#316AC5;*/#31C556;
  //background: /*#C1D2EE;*/#C1EECC;

	tvSelectedLists[oBsID] = obj2;
	return true;
}


function tvSetOpac(o,n){
	o.style.filter = 'alpha(opacity=' + parseInt(100 * n) + ')';
	o.style.opacity = n;
	o.style.MozOpacity = n;
}
function tvAnim(i, maxi, rmax, step) {
	if (i < maxi) {
		i += step;
		if (i > maxi) i = maxi;
	} else {
		i -= step;
		if (i < maxi) i = maxi;
	}
	globalObj.style.height = i+'px';
	var opacity = i / rmax;
	tvSetOpac(globalObj, opacity);
	if (i == maxi) {
		if (maxi == 0) {
			globalObj.style.display = 'none';
			tvSetOpac(globalObj, 1);
		}
		globalObj.style.height = 'auto';
		//globalObj.style.overflow = 'auto';
		globalObj = null;
	} else
		setTimeout("tvAnim("+i+','+maxi+','+rmax+','+step+')', 20);
}
function tvShowHide(obj, show, no_anim) {
	var obj2 = obj.parentNode.getElementsByTagName('IMG')[0];
	obj2.src = (show) ? Preloads['minus'].src : Preloads['plus'].src;
	obj2 = obj.parentNode.getElementsByTagName('IMG')[1];
	obj2.src = (show) ? Preloads['folder_opened'].src : Preloads['folder'].src;
	obj2 = obj.parentNode.getElementsByTagName('A')[0];
	obj2.title = (show) ? 'Закрыть' : 'Открыть';
	if (show && !globalObj && !no_anim) {
		obj.style.overflow = 'hidden';
		obj.style.display = 'block';
		globalObj = obj;
		tvAnim(0, obj.offsetHeight, obj.offsetHeight, Math.max(10, obj.offsetHeight/5));
	} else
	if (!show && !globalObj && !no_anim) {
		obj.style.overflow = 'hidden';
		globalObj = obj;
		tvAnim(obj.offsetHeight, 0, obj.offsetHeight, Math.max(10, obj.offsetHeight/5));
	} else
		obj.style.display = (show) ? 'block' : 'none';
}
function tvClickSmack(oThisOb, oLevel, oBsID, oCol, oT) {
	if( oThisOb.blur ) oThisOb.blur();
	oThisOb = oThisOb.parentNode.getElementsByTagName(unescape(oT))[0];
	if(oCol) {
		for(var x = openLists[oBsID].length - 1; x >= oLevel; x--) { if(openLists[oBsID][x]) {
			tvShowHide(openLists[oBsID][x], false, oThisOb != openLists[oBsID][x]);
			if(oLevel != x) { openLists[oBsID][x] = null; }
		} }
		if(oThisOb == openLists[oBsID][oLevel]) { openLists[oBsID][oLevel] = null; }
		else {
			tvShowHide(oThisOb, true);
			openLists[oBsID][oLevel] = oThisOb;
		}
	} else
		tvShowHide(oThisOb, oThisOb.style.display != 'block');
}
for (var i = 0; i < tvImages.length; i+=2) {
	/*if (!tvImages[i + 1])
		Preloads[tvImages[i]] = new Object;
	else*/ {
		Preloads[tvImages[i]] = new Image;
		Preloads[tvImages[i]].src = tvImagesRoot + tvImages[i + 1];
	}
}
