/* Универсальный компонент для дерева статей - клиентская часть*/
function TTreeNode(type, lev, ns) {
	this.type = type;
	this.lev = lev;
	this.nextsibling = ns;
	this.vis = 1;
	this.exp = 1;
	this.tbl = null;
}
function TTreestate(fldroot_id) {
	this.idcmpname = 'idtreestate'+fldroot_id;
	this.treeelem = $('#'+this.idcmpname);
	this.nodes = Array();
	this.getInfo = function() {$.getJSON(cmpcache+'treestate/'+fldroot_id+'.jd', {}, this.onLoadInfo);}
	var tree = this;
	this.onLoadInfo = function(obj) {
		var q = obj.types.length, i, j;
		var divs = $('div', tree.treeelem);
		var levs = Array();
		for (i = 0; i < q; i++) {
			tree.nodes[i] = new TTreeNode(obj.types[i], obj.levs[i], obj.ns[i]);
			var node = tree.nodes[i];

			var ql = levs.length;
			if (ql == node.lev) levs[ql - 1] = node.nextsibling;
			else if (ql < node.lev) levs[ql] = node.nextsibling;
			else {levs.length = node.lev;levs[node.lev - 1] = node.nextsibling;}

			var str = '<table id="'+i+'"><tr>';
			for (j = 0; j < node.lev - 1; j++) {
				str += '<td><div'+(levs[j]==1?' style="background: url('+srcimgs+'ft1.gif)"':'');
				str += '><img src="'+srcimgs+'ft0.gif"/></div></td>';
			}

			str += '<td><div style="background: url('+srcimgs+'ft'+(node.nextsibling?'7':'2')+'.gif)"><img class="exp_cllps" src="'+srcimgs+(node.type==1?'ft0':'ft_minus')+'.gif"/></div></td>';
			str += '<td><img src="'+srcimgs+(node.type==0?'ft12':'ft11')+'.gif"/></td>';
			str += '<td'+($(divs[i]).attr('title')?' title="'+$(divs[i]).attr('title')+'"':'')+'>';

			str += divs[i].innerHTML;
			str += '</tr></table>';

			node.tbl = $(str);

			node.tbl.attr('cellspacing', '0px');
			var tds = $('td', node.tbl);
			for (j = 0; j < tds.length - 1; j++) $(tds[j]).attr('width', '18px');
			$(tds[tds.length - 1]).addClass('cpt');

			node.tbl.appendTo(tree.treeelem);

			if (node.type == 0) {
				var img = $('td:eq('+(node.lev - 1)+') img', node.tbl);
				img.mouseover(function(){
					var tbl = getParentElem(this, 'TABLE');
					var node = tree.nodes[tbl.id];
					this.src = srcimgs+'ft_'+ (node.exp?'minus':'plus')+'_over.gif';
				});
				img.mouseout(function(){
					var tbl = getParentElem(this, 'TABLE');
					var node = tree.nodes[tbl.id];
					this.src = srcimgs+'ft_'+ (node.exp?'minus':'plus')+'.gif';
				});
				img.click(function(){
					var tbl = getParentElem(this, 'TABLE');
					var node = tree.nodes[tbl.id];
					node.exp = !node.exp;
					for (var j = parseInt(tbl.id) + 1; j < q; j++) {
						var jnode = tree.nodes[j];
						if (jnode.lev <= node.lev) break;
						jnode.vis = node.exp;
						if (jnode.type == 0) {
							jnode.exp = 1;
							$('td:eq('+(jnode.lev - 1)+') img', jnode.tbl)[0].src = srcimgs+'ft_minus.gif';
						}
						if (node.exp) jnode.tbl.show(); else jnode.tbl.hide();
					}
					this.src = srcimgs+'ft_'+ (node.exp?'minus':'plus')+'_over.gif';
				});
			} else {}
		}
		divs.empty();
		//$('table', tree.treeelem).width(320); // tree.treeelem.width()

		// TODO: не скрывать папку, если открытая статья в ней или во вложенных в ней папках
		var stateurl = location.href.split('/');
		stateurl = stateurl[stateurl.length - 1];
		for (var i = 0; i < tree.nodes.length; i++)
			if (tree.nodes[i].lev >= 2) $('.exp_cllps', tree.nodes[i].tbl).click();
		if (stateurl) {
			for (var i = 0; i < tree.nodes.length; i++) {
				var tbl = tree.nodes[i].tbl;
				if (!$('a', tbl).length) continue;
				if ($('a', tbl)[0].href.indexOf(stateurl)!=-1) {
					$('a', tbl).addClass('atscur').css('font-weight', 'bold');
					break;
				}
			}
			var tbl = null;
			for (var i = 0; i < tree.nodes.length; i++) {
				if (!$('a', tree.nodes[i].tbl).length) continue;
				if ($('a', tree.nodes[i].tbl)[0].href.indexOf(stateurl)!=-1) {
					//$('a', tree.nodes[i].lev).addClass('atscur').css('font-weight', 'bold');
					if (tree.nodes[i].lev <= 2) break;
					tbl = tree.nodes[i].tbl;
					$('a', tbl).addClass('atscur').css('font-weight', 'bold');
					break;
				}
			}
			if (tbl) {
				while (tbl = tbl.prev()) {
					if (!tbl) break;
					var node = tree.nodes[tbl[0].id];
					if (!node) break;
					if ((node.type == 0) && (node.lev < 2)) break;
					if (node.type == 0) {
						//alert(node.tbl.html()+' '+node.lev);
						$('img.exp_cllps', tbl).click();
					}
				}
			}
		}
	}
}