function tree_svin(proxy,key)
{
	var f=TWidget.getElement(proxy.id+":"+key+':a');
	if(!f) return;
	var x=f.className.substr(f.className.length-5,5)=='_last'?'_last':'';
	f.className=proxy.css_prefix+'tree_f_svin'+x;
}

function tree_rozvin(proxy,key)
{
	var f=TWidget.getElement(proxy.id+":"+key+':a');
	if(!f) return;
	var x=f.className.substr(f.className.length-5,5)=='_last'?'_last':'';
	f.className=proxy.css_prefix+'tree_f_rozvin'+x;
}

function tree_changeToList(proxy, key)
{
	var f=TWidget.getElement(proxy.id+":"+key+':a');
	if(!f) return;
	var x=f.className.substr(f.className.length-5,5)=='_last'?'_last':'';
	f.className=proxy.css_prefix+'tree_f_list'+x;
	var y=TWidget.getElement(proxy.id+":"+key+":items");
	y.parentNode.removeChild(y);
}

function tree_isListElement(element)
{
	return element.dbclick;
}

function tree_isList(id, key)
{
	var i=TWidget.getElement(id+":"+key + ":icon");
	if(i)
		return tree_isListElement(i);
	else
		return null;
}

function tree_changeToRozvity(proxy, key)
{
		tree_rozvin(proxy,key);
		var id=proxy.id;
		var y=TWidget.getElement(id+':'+key+":items");
		if(!y)
			{
			var after=TWidget.getElement(id+':'+key+':icon');
			if(!after)	
				return false;
			after=after.parentNode;
			y=TWidget.document.createElement('div');	
			y.id=id+':'+key + ':items';
			after.parentNode.insertBefore(y,after.nextSibling);
			}
		y.style.display='';
		return y;
}

function tree_getParentNode(id,key)
{
	var el=TWidget.getElement(id+':'+key + ':a');
	if(!el)
		return false;
	return el.parentNode.parentNode;
}


function tree_getParent(id,key)
{
	var a=tree_getParentNode(id,key);
	if(!a)
		return false;
	var index=a.id.lastIndexOf(':');
	if(index<0)
		return false;
	return a.id.substring(id.length+1,index);	
}


function tree_nacti(id,key,pathToExpand,element)
{
		   var x=element || TWidget.getElement(id+':'+key+ ':items');
		   var css_prefix=TWidget.proxies.get(id).css_prefix;
		   if(!x) 
				return;
 	  	   var doc=TWidget.document;
		   x.innerHTML='';
		   var prefix=tree_createPrefix(id,key,x);
		   var e=doc.createElement('div');
		   e.className=css_prefix+'tree_f_list_last';
		   x.appendChild(e);
		   e=doc.createElement('div');
		   e.appendChild(doc.createTextNode('Načítám...'));
		   e.className=css_prefix+'tree_nacitam';
		   x.appendChild(e);
		   var action = new TAction(id,'expand');
		   action.addParam('key',key);
		   if(pathToExpand!=undefined && pathToExpand)
		   		action.addParam('expand',pathToExpand);
		   action.addParam('prefix',prefix);
		   action.submit();
}

function tree_expand(id,key,path,always)
{
		var x=TWidget.getElement(id+':'+key+ ':items');
		if(!x) 
			return false;
		if(always || x.innerHTML == '')  	
			tree_nacti(id,key,path);
		x.style.display='';
		tree_rozvin(TWidget.proxies.get(id),key);
		return false;
}

function tree_collapse(id,key)
{
		var x=TWidget.getElement(id + ':' + key+ ':items');
		if(!x) 
			return;
		x.style.display='none';
		tree_svin(TWidget.proxies.get(id),key);
}


function tree_rozvinCestuK(id,key)
{
	for(key=tree_getParent(id,key);key;key=tree_getParent(id,key))
		{
		var x=TWidget.getElement(id+':'+key+ ':items');
		if(!x) 
			return false;
		if(x.style.display=='none')
			tree_expand(id,key);
		};
	return true;	
}



function tree_folderClick(id,key)
{
	var x=TWidget.getElement(id+':'+key+ ':items');
	if(!x) 
		return false;
	if(x.style.display=='none')
		tree_expand(id,key);
	else
		tree_collapse(id,key);	
	return false;
}


function tree_setSelected(id,key)		
{
	var proxy=TWidget.proxies.get(id); 
	if(proxy.store.key)
		widget_unsetSelectedClass(proxy.id+':'+proxy.store.key+':icon');
	if(key)
		widget_setSelectedClass(proxy.id+':'+key+':icon');
	widget_setSelectedProxy(proxy,key);
}

function tree_select(id,key)
{
	var tree=TWidget.proxies.get(id);
	if(tree.store.key==key && !tree.selectIfSame)
		return false;
	if(tree.store.key)
		widget_unsetSelectedClass(id+':'+tree.store.key+':icon');
	if(!key || widget_setSelectedClass(id+':'+key+':icon'))
		{
		tree_rozvinCestuK(id,key);
		widget_scrollInViewHorById(id+':'+key+':icon','strom');
		return widget_select(id,key);
		}
    var action = new TAction(id,'selectQuery');
	action.addParam('key',key);
	widget_select(id,key);
	action.submit();
	return false;
}

function tree_selectQuery(id,key,path)
{
	if(TWidget.getElement(id+":"+key+':icon'))
		return tree_select(id,key);
	var ple=path.split(":");
	var newpath='';
	for(var x in ple)
		{
		if(TWidget.getElement(id+":"+ple[x]+':icon'))
			return tree_expand(id,ple[x],newpath.substring(1));
		else
			newpath=newpath + ":" + ple[x];
		}	
	return false;	
}

function tree_select_child(id,key)	//oznaci jako select z aktivniho klice, nemusi byt rozvity
{
	var ak=TWidget.proxies.get(id).store.key;
	var x=TWidget.getElement(id+':'+ak + ':items');
	if(!x) 
		return false;
	if(x.style.display=='none')
		{
		TWidget.getElement(id+':'+ak+':icon').ondblclick();
		widget_select(id,key);
		return false	
		}
	return tree_select(id,key);
}

function tree_getSelectedText(id)
{
	var key=TWidget.proxies.get(id).store.key;
	var ja=TWidget.getElement(id+":"+key+":icon");
	if(ja)
		return ja.innerHTML;
	else
		return "";
}

function tree_reloadItem(id,key)
{
	var x=TWidget.getElement(id+':'+key+':icon');
	if(!x)
		return false;
	if(x.ondblclick)
		{
		TWidget.__tree_reload=true;
		x.ondblclick();
		TWidget.__tree_reload=undefined;
		}
	return true;
}

function tree_createPrefix(id,key,toElement)
{
	var tree=TWidget.proxies.get(id);
	var element=TWidget.getElement(id+':'+key+':a');
	return tree_createPrefix2(tree,element,toElement);
}

function tree_createPrefix2(tree,element,toElement)
{
	var prefix=tree_getNumPrefix(tree, element);
	tree_createPrefixToElement(tree,prefix,toElement);
	return prefix;
}

function tree_createPrefixToElement(tree,prefix,element)
{
	for(var r=0;r<prefix.length;r++)	
		{
		var e=TWidget.document.createElement('span');
		if(prefix.charAt(r)=='0')
			e.className=tree.css_prefix+'tree_vetev_ne';
		else
			e.className=tree.css_prefix+'tree_vetev_je';
		element.appendChild(e);
		}
	return prefix;
}


function tree_getNumPrefix(proxy, element)
{
	var prefix='';
	if(element.className.substr(element.className.length-5,5)=='_last')
		prefix='0';
	else
		prefix='1';
		
	var len=proxy.css_prefix.length;
	for(var e=element.previousSibling;e;e=e.previousSibling)
		{
		if(e.className && e.className.substr(len,10)=='tree_vetev')
			{
			if(e.className.substr(len+10,3)=='_je')
				prefix='1'+prefix;
			else 
				prefix='0'+prefix;
			}
		}
	return prefix;
}


function tree_setPosledni(proxy, item,posledni,prefixlength)
	{
		if(!item)
			return;
		var cname=proxy.css_prefix+'tree_item';
		for(item=item.firstChild;item && (!item.className || item.className.substr(proxy.css_prefix.length,7)!='tree_f_');
			item=item.nextSibling);
		if(!item)
			return;
		var f_node=item;
		var l=item.className.substr(item.className.length-5,5)=='_last';
		if(!posledni && l)
			item.className=item.className.substr(0,item.className.length-5);
		else if (posledni && !l)
			item.className=item.className + '_last';
		if(item.onclick)
			{
			for(item=item.nextSibling;item  && (!item.tagName || (item.tagName!='a' && item.tagName!='A'));item=item.nextSibling);
			if(prefixlength==undefined)
				prefixlength=tree_getNumPrefix(proxy,f_node).length;
			else
				prefixlength++;
			
			if(item && (item=TWidget.getElement(item.id.substr(0,item.id.length-5))))
				{
				var e=item.getElementsByTagName('div');
				var vetevname=proxy.css_prefix+'tree_vetev';
				var tovetevname=vetevname+(posledni?'_ne':'_je');
				for(var i=0;i<e.length;i++)
					{
					if(!e[i].className || e[i].className!=cname) continue;
					var c=e[i].firstChild;
					var r=prefixlength;
					for(;c;c=c.nextSibling)
						if(c.className.substr(0,vetevname.length)==vetevname && --r==0)
							break;
					if(c)
						c.className=tovetevname;
					}
				}
			}
	}

function tree_getItemElementBack(tree,element)	
{
	var className=tree.css_prefix+'tree_item';
	var len=className.length;
	for(;element && (!element.className || element.className.substr(element.className.length-len,len) !=className);element=element.previousSibling);
	return element;
}

function tree_lastChildElement(tree,element)	
{
	return tree_getItemElementBack(tree,element.lastChild);
}

function tree_previousSiblingElement(tree,element)	
{
	return tree_getItemElementBack(tree,element.previousSibling);
}
	
function tree_getItemElement(tree,element)	
{
	var className=tree.css_prefix+'tree_item';
	var len=className.length;
	for(;element && (!element.className || element.className.substr(element.className.length-len,len) !=className);element=element.nextSibling);
	return element;
}

function tree_firstChildElement(tree,element)	
{
	return tree_getItemElement(tree,element.firstChild);
}

function tree_nextSiblingElement(tree,element)	
{
	return tree_getItemElement(tree,element.nextSibling);
}
	
function tree_getItemsElement(tree,parent)
{
	var pel;
	if(parent)
           {		
	       pel=TWidget.getElement(tree.id+':'+parent + ':items');
		   if(!pel)
		  	     return tree_changeToRozvity(tree, parent);	
	       else if(pel.innerHTML=='')
				{
				tree_expand(tree.id,parent,null,true);
				return false;
				}
  	       }
	else
	       pel=TWidget.getElement(tree.id);
	return pel;
}
	
function tree_addItemIfNotExists(id,parent,key,text,folder,insertBeforeElement,className,closed)	
{
	if(TWidget.getElement(id+':'+key))
		return false;
	return tree_addItem(id,parent,key,text,folder,insertBeforeElement,className,closed);
}
	
function tree_addItem(id,parent,key,text,folder,insertBeforeElement,className,closed)
{
	var doc=TWidget.document;
	var tree=TWidget.proxies.get(id);
	if(!tree)
	 	return false; 
	var pel=tree_getItemsElement(tree,parent);
	if(!pel)
		return false;
	var element=doc.createElement('div');
	element.className=tree.css_prefix+'tree_item';
	element.id=id+":"+key;
	var rodic_a=TWidget.getElement(id+':'+parent+":a");
	
	var prefix;
	if(parent)
	 prefix=tree_createPrefix2(tree,rodic_a,element);
	else
	 prefix='';//tree_createPrefixToElement(tree,'1',element)

	var e=doc.createElement('a');
	e.name=e.id=id+":"+key+":a";
	var folderAdd=insertBeforeElement?'':'_last';
	if(folder)
		{
		e.onclick=new TWidget.okno.Function("TWidget.okno.tree_folderClick('"+id+"','"+key+"');");
		e.className=tree.css_prefix+'tree_f_svin'+folderAdd;
		}
	else
		e.className=tree.css_prefix+'tree_f_list'+folderAdd;
	element.appendChild(e);
	
	var e=doc.createElement('a');
	e.name=e.id=id+":"+key+":icon";
	e.className=className?className:(folder?'tree_icon_dir':'tree_icon_file');
	if(tree.store.key==key)
		e.className+='_selected';
	e.onclick=new TWidget.okno.Function("TWidget.okno.tree_select('"+id+"','"+key+"');");
	if(folder)
		e.ondblclick=new TWidget.okno.Function("TWidget.okno.tree_expand('"+id+"','"+key+"');");
	e.innerHTML=text;
	element.appendChild(e);

	if(folder)
		{
		e=doc.createElement('div');
		e.name=e.id=id+":"+key + ':items';
		e.className='tree_items';
		style='display: none';
		}
	else
		e=null;
	tree_addCreatedChild(tree,pel,insertBeforeElement,element,e,prefix.length);
	tree_rozvinCestuK(id,key);
	return true;
}

function tree_addCreatedChild(tree,pel,insertBeforeElement,element,e,prefixlength)
	{
	if(insertBeforeElement)
		{
		pel.insertBefore(element,insertBeforeElement);		
		if(e)
			pel.insertBefore(e,insertBeforeElement);		
		}
	else
		{
		tree_setPosledni(tree,tree_lastChildElement(tree,pel),false,prefixlength);
		pel.appendChild(element);
		if(e)
			pel.appendChild(e);
		}
	}

function tree_removeItemNodes(tree,key,item,items)
{
	var parent=item.parentNode;
	if(!tree_nextSiblingElement(tree,item))
		{
		var preitem=tree_previousSiblingElement(tree,item);
		if(preitem)
			tree_setPosledni(tree,preitem,true);
		else
			{
			var p=tree_getParent(tree.id, key);
			if(p)
				tree_changeToList(tree,p);
			}
		}
	
	if(items)
		parent.removeChild(items);
	parent.removeChild(item);
	return true;
}
	

function tree_removeItem(id,key)
{
	var tree=TWidget.proxies.get(id);
	var item=TWidget.getElement(id+':'+key);
	if(!item || !tree)
		return false;
	var items=TWidget.getElement(id+':'+key + ':items');
	return tree_removeItemNodes(tree,key,item,items);	
}

function tree_changeText(id,key,text)
{
	var e=TWidget.getElement(id+':'+key+':icon');
	if(e)
		e.innerHTML=text;
}

function tree_changeItem(id,parentKey,key,text)
{
	oldParentKey=tree_getParent(id,key);
	if(oldParentKey!=parentKey)
			{
			var ic=TWidget.getElement(id+':'+key + ':icon');
			if(!ic)
				return null;
			var isList=tree_isListElement(ic);
			var className=ic.className;
			if(className.substr(className.length-9,9)=='_selected')
				className = className.substr(0,className.length-9);
			tree_removeItem(id,key);
			tree_addItem(id,parentKey,key,text,!isList,null,className);
			return true;
			}
	tree_changeText(id,key,text);
	return false;
}


