// vim: set ts=4 sw=4 foldmethod=marker:

function NodeTree(plus, minus, line, end_line, t_line, empty_line) {

	this.last = Array();
	this.need_close = Array();
	this.close_from = Array();
	 
	this.plus = plus;
	this.minus = minus;
	this.line = line;
	this.end_line = end_line;
	this.t_line = t_line;
	this.empty_line = empty_line;

	this.init = function(fld)
	{
		this.folders = fld
		for(i = 1; i< this.folders.length; i++){
			j = i-1;
			
			itemi = this.folders[i];
			itemj = this.folders[j];
			
			divi = document.getElementById(itemi['id']);
			divj = document.getElementById(itemj['id']);
			
			this.last[itemi['level']] = itemi['id'];
			this.last[itemj['level']] = itemj['id'];
			
			ch_i = divi.getElementsByTagName('img');
			ch_j = divj.getElementsByTagName('img');
			
			cnt_i = ch_i.length;
			cnt_j = ch_j.length;
			
			if(itemi['level'] == itemj['level']){
					ch_j[cnt_j-1].src = this.t_line;
			}
			
			if(itemi['level'] < itemj['level']){
					ch_j[cnt_j-1].src = this.end_line;
			}
			
			delta = itemj['level'] - itemi['level'];
			if(i+1 == this.folders.length){
					delta = itemi['level'];
					itemj = itemi;
			}
			
			if(delta > 1){
				for(k = 1; k< delta; k++){
					x_level = itemj['level']-k;
					x_last = this.last[x_level];
					this.need_close[x_last] = x_level;
					if(itemi['id'] != itemj['id']) this.close_from[x_last] = itemi['level'];
					else this.close_from[x_last] = 0;
				}
			}
			
		}
		ch_i[cnt_i-1].src = this.end_line;
		level2close = 0;
		for(i = 1; i< this.folders.length; i++){
			cur_id = this.folders[i]['id'];
			div = document.getElementById(cur_id);
			ch = div.getElementsByTagName('img');
			ch[0].src = this.empty_line;
			if(level2close >= this.folders[i]['level']){
				level2close = 0;
			}
			if(lev = this.need_close[cur_id]){
				level2close = lev;
				from = parseInt(this.close_from[cur_id]) + 1;
			}
			if(level2close > 0){
				for(k=from; k<=level2close; k++){
					index = ch[k].src.indexOf(this.line);
					if(index > 0){
						ch[k].src = this.empty_line;
					}
				}
			}
		}
	};

	this.ShowHideMap = function(id)
	{
		// designed by Belukov Alexey for DataInLife
		// возможно стоит разбить на несколько функций...	
		div = document.getElementById(id);
		if(hr = document.getElementById(id+'_button')){
		}else{
			return;
		}
		//	alert(hr.innerHTML+' = '+this.plus);
		chlds = hr.getElementsByTagName('img');
		index = (chlds[0].src.indexOf(this.plus));
		
		if(index > 0){
			lev = document.getElementById(id+'_level');
			this.level = lev.value;
			this.level = parseInt(this.level) + 1;
			for(i=0; i< this.folders.length; i++){
			 	if(this.folders[i]['parent'] == id){
				  newdiv = document.getElementById(this.folders[i]['id']);
					newdiv.style.visibility = 'visible';
					newdiv.style.position = '';
					newdiv.id = this.folders[i]['id'];
					div.appendChild(newdiv);
					
				}
			}

			end_div = document.getElementById(this.folders[i-1]['id']);
			ch = end_div.getElementsByTagName('img');
			index = ch[0].src.indexOf(this.line);
			if(index > 0) ch[0].src = this.end_line;
			
			chlds[0].src = this.minus;
		}else{
			chields = div.getElementsByTagName('div');
			for(i = 0; i< chields.length; i++){
			  olddiv = document.getElementById(chields[i].id);
				
				if(oldhref = document.getElementById(chields[i].id+'_button')){
				  oldch = oldhref.getElementsByTagName('img');
					oldindex = oldch[0].src.indexOf(this.minus);
					if(oldindex > 0) oldch[0].src = this.plus;	
				}
				
				olddiv.style.position = 'absolute';
				olddiv.style.visibility = 'hidden';
			}
			
			chlds[0].src = this.plus;
		}
 };

}

