/*
 * ProFrom - ProfesszionÃ¡lis FelhasznÃ¡lÃ³i FelÃ¼letek $Id: xmltree.js,v 1.4 2005/10/10 14:33:19 gyuris Exp $
 * FunkcionÃ¡lis bÅ‘vÃ­tÃ©sek:
 * - lehessen egy XML kommunikÃ¡ciÃ³ban tÃ¶bb fa kommunikÃ¡ciÃ³jÃ¡t intÃ©zni.
 * - beÃ¡llÃ­tÃ¡s: frissÃ­tÃ©si paramÃ©terek beÃ¡llÃ­tÃ¡sa
 * JavÃ­tÃ¡sok:
 * + XML kommunikÃ¡ciÃ³ Ã©s frissÃ­tÃ©s ÃºjraÃ­rÃ¡sa
 * + rendezÃ©si funkciÃ³k tovÃ¡bbÃ­rÃ¡sa
 */
var xmlTree = {
	version : '1.10',
	item : {},
	nodeNames : {
		nl : 'ul',
		li : 'li',
		bullett : 'strong',
		label : 'span'
	},
	classNames : {
		node : 'node',
		letter : 'letter',
		active : 'actives',
		disabled : 'disabled',
		open : 'node-open',
		signedletter : 'active',
		signedpath : 'activess'
	},
	init : function( sTreeId, elRoot ) {
		this.item[sTreeId] = {
			id : sTreeId,
			root : elRoot,
			config : {
				showRoot : false,
				startMode : 'full', // 'full', 'signed', 'first', 'closed'
				multiSelect : true,
				onlyLetterSelectable : false,
				selection : true,
				toggleBinding : null,
				selectBinding : null,
				unmarkCondition : false
			}
		};
		elRoot.ownerTree = this.item[sTreeId];
		elRoot.activeItems = [];
		elRoot.disabledItems = [];
	},
	setConfig : function( sTreeId, sConfigId, bConfigValue ) {
		this.item[sTreeId].config[sConfigId] = bConfigValue;
	},
	
	fullToggle : function(elRoot) {
		var i, elLabel, els = elRoot.getElementsByTagName( xmlTree.nodeNames.nl );
		for ( i = 1; i < els.length; i++ ) {
			displayChanger( els[i] );
			/*if ( getFirstElement( elRoot ) != els[i] ) {
				elLabel = getFirstElement( els[i].parentNode );
				displayChanger( elLabel );
				removeClass( elLabel, xmlTree.classNames.node );
				addClass( elLabel, xmlTree.classNames.open );
			};*/
		}
	},
	/**
	 * full - A teljes fÃ¡t inicializÃ¡lja majd kinyitja
	 * signed - Csak a megjelÃ¶lt elemekhez vezetÅ‘ utat nyitja ki (Ã©s kÃ¶zben inicializÃ¡lja);
	 * closed - Csak a gyÃ¶kÃ©r elem lÃ¡thatÃ³
	 * first - Csak az elsÅ‘ szint lesz lenyitva
	 */
	start : function( elRoot ) {
		switch ( elRoot.ownerTree.config.startMode ) {
			case 'full' :
				var i, elLabel, els = elRoot.getElementsByTagName( xmlTree.nodeNames.nl );
				// root mutatÃ¡sa?
				if ( elRoot.ownerTree.config.showRoot ) {
					xmlTree.showRoot( elRoot );
				};
				// teljes fa inicializÃ¡lÃ¡sa
				xmlTree.initLayoutRoot( elRoot );
				// teljes fa lebontÃ¡sa
				for ( i = 0; i < els.length; i++ ) {
					displayChanger( els[i], true );
					if ( getFirstElement( elRoot ) != els[i] ) {
						elLabel = getFirstElement( els[i].parentNode );
						removeClass( elLabel, xmlTree.classNames.node );
					    addClass( elLabel, xmlTree.classNames.open );
					};
				}
				break;
			case 'signed' :
				var els = elRoot.getElementsByTagName( xmlTree.nodeNames.label ), nSigned = 0, i, elsLi, elsLi2;
				// kÃ¶telezÅ‘ a initLayoutSingle miatt a root mutatÃ¡sa
				/*	elRoot.ownerTree.config.showRoot = true;
				xmlTree.showRoot( elRoot );
				// inicializÃ¡lÃ¡s (ha Ã©ppen egyetlen sincs most kijelÃ¶lve)
				xmlTree.initLayoutSingle( elRoot.getElementsByTagName( xmlTree.nodeNames.li )[0], elRoot );*/
				xmlTree.initLayoutRoot( elRoot );
				// megjelÃ¶ltek lebontÃ¡sa
				for ( i = 0; i < els.length; i++ ) {
					if ( hasClass( els[i], xmlTree.classNames.signedletter ) ) {
						xmlTree.fullExpand( els[i], elRoot );
						nSigned++;
					};
				};
				// akkor is kinyitja Ã¶ket, ha a li kapja meg a class-ba a signedletter azonositot
				if ( nSigned == 0 ) {
					elsLi2 = elRoot.getElementsByTagName( xmlTree.nodeNames.li );
					for ( i = 0; i < elsLi2.length; i++ ) {
						if ( hasClass( elsLi2[i], xmlTree.classNames.signedletter ) ) {
							xmlTree.fullExpand( els[i], elRoot );
							addClass(els[i],xmlTree.classNames.signedletter);
							nSigned++;
					};
				};
				};
				/*if ( nSigned == 0 ) {
					elsLi = elRoot.getElementsByTagName( xmlTree.nodeNames.nl )[1].childNodes;
					for ( i = 0; i < elsLi.length; i++ ) {
						if ( elsLi[i].nodeType == Node.ELEMENT_NODE ) 
							xmlTree.initLayoutSingle( elsLi[i], elRoot );
					};
					if ( elRoot.ownerTree.config.showRoot ) {
						xmlTree.fullExpand( elRoot.getElementsByTagName( xmlTree.nodeNames.label )[1], elRoot );
					};
				};*/
				break;
			case 'closed' :
				// magÃ¡bÃ³l a funkciÃ³bÃ³l kÃ¶vetkezik
				elRoot.ownerTree.config.showRoot = true;
				xmlTree.showRoot( elRoot );
				// csak a gyÃ¶kÃ©r inicializÃ¡lÃ¡sa
				xmlTree.initLayoutSingle( elRoot.getElementsByTagName( xmlTree.nodeNames.li )[0], elRoot );
				break;
			case 'first' :
				var i, elsLi;
				if ( elRoot.ownerTree.config.showRoot ) xmlTree.showRoot( elRoot );
				elsLi = elRoot.getElementsByTagName( xmlTree.nodeNames.nl )[0].childNodes;
				for ( i = 0; i < elsLi.length; i++ ) {
					if ( elsLi[i].nodeType == Node.ELEMENT_NODE ) xmlTree.initLayoutSingle( elsLi[i], elRoot );
				};
				if ( elRoot.ownerTree.config.showRoot ) {
					xmlTree.fullExpand( elRoot.getElementsByTagName( xmlTree.nodeNames.label )[1], elRoot );
				};
				break;
			default:
				if ( typeof elRoot.ownerTree.config.startMode == 'function' ) {
					elRoot.ownerTree.config.startMode( elRoot );
				};
		}
	},
	/**
	 * RekurzÃ­van lenyit egy elemet Ã©s annak minden szÃ¼lÅ‘jÃ©t egÃ©szen a gyÃ¶kÃ©rig (Ã©s kÃ¶zben inicializÃ¡lja azokat)
	 */
	fullExpand : function( elLabel, elRoot ) {
		var elParentNl, i;
		elParentNl = elLabel.parentNode.parentNode;
		if ( getComputedStylePropertyValue( elParentNl, 'display', '' ) == 'none' ) {
			for ( i = 0; i < elParentNl.childNodes.length; i++ ) {
				if ( elParentNl.childNodes[i].nodeType == Node.ELEMENT_NODE && elParentNl.childNodes[i].xmlTreeInited != true ) {
					xmlTree.initLayoutSingle( elParentNl.childNodes[i], elRoot );
				};
			};
			if ( elLabel.elRoot != elParentNl.parentNode ) { // amÃ­g el nem jutunk a root-ig
				if ( elParentNl.parentNode.xmlTreeInited != true ) {
					xmlTree.initLayoutSingle( elParentNl.parentNode, elRoot );
				};
				addClass( getFirstElement( elParentNl.parentNode ), xmlTree.classNames.open );
				addClass( getFirstElement( elParentNl.parentNode ), xmlTree.classNames.open );
				displayChanger( elParentNl, true );
				xmlTree.fullExpand( getFirstElement( elParentNl.parentNode ), elRoot );
			};
		};
	},
	/**
	 * Egy gyÃ¶kÃ©r elemet illeszt be (abban az esteben hasznos, ha ezt a kapott szerkezet nem tartalmazza eredetileg)
	 */
	showRoot : function( elRoot ) {
		var elLabel, elNl, elLi;
		elLabel = document.createElement( xmlTree.nodeNames.label );
		elLabel.appendChild( document.createTextNode( elRoot.getAttribute('title') ) );
		elRoot.removeAttribute('title');
		elLi = document.createElement( xmlTree.nodeNames.li );
		elLi.appendChild( elLabel );
		if ( elRoot.hasChildNodes() )
			elLi.appendChild( getFirstElement( elRoot ) ); // NL
		elNl = document.createElement( xmlTree.nodeNames.nl );
		elNl.appendChild( elLi );
		elRoot.appendChild( elNl );
	},
	/**
	 * A teljes fa inicializÃ¡ciÃ³ja (egyszer hivandÃ³ meg)
	 * a fa minden <label> elemÃ©t inicializÃ¡lja
	 */
	initLayoutRoot : function( elRoot ) {
		var i, els, elLabel, elBullett;
		els = elRoot.getElementsByTagName( xmlTree.nodeNames.li );
		for ( i = 0; i < els.length; i++ ) {
			makeUnselectable( els[i] );
		};
		els = elRoot.getElementsByTagName( xmlTree.nodeNames.label );
		for ( i = 0; i < els.length; i++ ) {
			elLabel = els[i];
			elLabel.elRoot = elRoot;
			makeUnselectable( elLabel );
			addEvent( elLabel, 'click', xmlTree.select );
			elBullett = document.createElement( xmlTree.nodeNames.bullett );
			makeUnselectable( elBullett );
			addClass( elBullett, ( getNextElement(elLabel) == null ) ? xmlTree.classNames.letter : xmlTree.classNames.node );
			addEvent( elBullett, 'click', xmlTree.toggle );
			elLabel.parentNode.insertBefore( elBullett, elLabel );
			elLabel.parentNode.xmlTreeInited = true;
		}
		makeUnselectable( elRoot );
	},
	/**
	 * Az egyes fa elemek inicializÃ¡ciÃ³ja: <label>
	 */
	initLayoutSingle : function ( elLi, elRoot ) {
		var elLabel, elBullett;
		elLabel = getFirstElement( elLi );
		elLabel.elRoot = elRoot;
		makeUnselectable( elLabel );
		addEvent( elLabel, 'click', xmlTree.select );
		elBullett = document.createElement( xmlTree.nodeNames.bullett );
		makeUnselectable( elBullett );
		addClass( elBullett, ( getNextElement(elLabel) == null ) ? xmlTree.classNames.letter : xmlTree.classNames.node );
		addEvent( elBullett, 'click', xmlTree.toggle );
		elLabel.parentNode.insertBefore( elBullett, elLabel );
		elLabel.parentNode.xmlTreeInited = true;
	},
	/**
	 * Az egyes fa elemek inicializÃ¡ciÃ³ja, csak XML frissÃ­tÃ©sek hÃ­vjÃ¡k meg: 
	 * Ãºj elem hozzÃ¡adÃ¡sa (elParentLi=null), vagy rÃ©gi elem tÃ¶rlÃ©se(elLi=null)
	 * XXX (NEM TÃ?MOGATOTT)
	 */
	updateLayoutSingle : function ( elLi, elParentLi, root ) {
		var elLabel, elParentNl, elParentLabel;
		if ( elLi != null ) { // hozzÃ¡adÃ¡s
			elLabel = getFirstElement( elLi );
			elLabel.elRoot = root;
			addEvent( elLabel, 'click', xmlTree.toggle )
			makeUnselectable( elLabel );
			addClass( elLabel, ( ( getLastElement(elLabel.parentNode).nodeName.toLowerCase() != xmlTree.nodeNames.nl ) ? xmlTree.classNames.letter : xmlTree.classNames.node ) );
			if ( elLi.parentNode != root ) {
				elParentNl = getLastElement( elLi.parentNode.parentNode );
				elParentLabel = getFirstElement( elLi.parentNode.parentNode );
				displayChanger( elParentNl, true );
				removeClass( elParentLabel, xmlTree.classNames.letter );
				addClass( elParentLabel, xmlTree.classNames.open );
			};
			elLabel.parentNode.xmlTreeInited = true;
		}
		else { // tÃ¶rlÃ©s
			elParentNl = getLastElement( elParentLi );
			elParentLabel = getFirstElement( elParentLi );
			if ( elParentNl.nodeName.toLowerCase() != xmlTree.nodeNames.nl ) {
				removeClass( elParentLabel, xmlTree.classNames.open );
				removeClass( elParentLabel, xmlTree.classNames.node );
				addClass( elParentLabel, xmlTree.classNames.letter );
			};
		};
	},
	/**
	 * Lenyit/becsuk egy elemet
	 */
	toggle : function( e, elBullett ) {
		var elNl, i, elLabel;
		if ( !elBullett ) {
			elBullett = this;
			if ( is.ie ) {
				window.event.cancelBubble = true;
				e = window.event;
			}
			else {
				e.stopPropagation();
			};
		};
		elNl = getLastElement( elBullett.parentNode );
		if ( elNl.nodeName.toLowerCase() == xmlTree.nodeNames.nl ) {
			if ( elNl.getElementsByTagName( xmlTree.nodeNames.li ).length > 0 ) {
				for ( i = 0; i < elNl.childNodes.length; i++ ) {
					if ( elNl.childNodes[i].nodeType == Node.ELEMENT_NODE && elNl.childNodes[i].xmlTreeInited != true ) {
						xmlTree.initLayoutSingle( elNl.childNodes[i], getNextElement(elBullett).elRoot );
					};
				};
				removeClass( elBullett, xmlTree.classNames.node );
				removeClass( elBullett, xmlTree.classNames.open );
				displayChanger( elNl );
				addClass( elBullett, ( getComputedStylePropertyValue( elNl, 'display', '' ) == 'block' ) ? xmlTree.classNames.open : xmlTree.classNames.node );
			};
		};
		elLabel = getNextElement(elBullett);
		if ( typeof elLabel.elRoot.ownerTree.config.toggleBinding == 'function' ) {
			elLabel.elRoot.ownerTree.config.toggleBinding( e, elLabel );
		};
		return false;
	},
	/**
	 * KijelÃ¶lÃ©s - kÃ©t Ã¼zemmÃ³dban - egyedi vagy csoportos kijelÃ¶lÃ©s (multiSelect engedÃ©lyezÃ©s)
	 * - nincs shift vagy ctrl lenyomva: normÃ¡l mÃ³d
	 * - shift-tel (multiSelect): egy szakaszt jelÃ¶l ki, az elÅ‘zÅ‘ kijelÃ¶lÃ©st megszÅ±nteti (az egy szintÃ©n lÃ©vÅ‘ket)
	 * - ctrl-lal (multiSelect): egyenkÃ©nt ad hozzÃ¡ vagy vesz el elemeket
	 * Figyelembe veszi az onlyLetterSelectable beÃ¡llÃ­tÃ¡st.
	 * HivhatÃ³ kivÃ¼lrÅ‘l is: bOuter = true
	 */
	select : function( e, elLabel, bOuter ) {
		var i, j, x, y, bFound = false;
		function addActiveItem( elItem ) {
			// kell ide ez a feltÃ©tel?
			if ( elLabel.elRoot.ownerTree.config.onlyLetterSelectable && elItem.parentNode.getElementsByTagName( xmlTree.nodeNames.nl ).length != 0 ) return false;
			addClass( elItem, xmlTree.classNames.active );
			elLabel.elRoot.activeItems.push( elItem );
		};
		if ( !elLabel ) {
			elLabel = this;
			if ( is.ie ) {
				window.event.cancelBubble = true;
				e = window.event;
				if ( elLabel.parentNode.xmlTreeInited != true ) { // XXX rekurzÃ­v jobb lenne;
					elLabel = elLabel.parentNode;
				};
			}
			else {
				e.stopPropagation();
			};
		};
		if ( bOuter ) {
			xmlTree.fullExpand( elLabel, elLabel.elRoot );
		};
		if ( elLabel.elRoot.ownerTree.config.selection ) {
			if ( !e.ctrlKey && !e.shiftKey || 
			     elLabel.elRoot.ownerTree.config.multiSelect == false ) {
				for ( i = 0; i < elLabel.elRoot.activeItems.length; i++ ) removeClass( elLabel.elRoot.activeItems[i], xmlTree.classNames.active );
				elLabel.elRoot.activeItems = [];
				addActiveItem( elLabel );
			}
			else if ( elLabel.elRoot.ownerTree.config.multiSelect ) {
				if ( e.ctrlKey && e.shiftKey ) {}
				else if ( e.ctrlKey ) {
					for ( i = 0; i < elLabel.elRoot.activeItems.length; i++ ) {
						if ( elLabel.elRoot.activeItems[i] == elLabel ) {
							bFound = true;
							break;
						}
					};
					if ( bFound ) {
						removeClass( elLabel, xmlTree.classNames.active );
						elLabel.elRoot.activeItems.splice( i, 1 );
					}
					else {
						addActiveItem( elLabel );
					};
				}
				else if ( e.shiftKey ) {
					if ( typeof elLabel.elRoot.lastClick != 'undefined' ) {
						for ( i = 0; i < elLabel.elRoot.activeItems.length; i++ ) removeClass( elLabel.elRoot.activeItems[i], xmlTree.classNames.active );
						elLabel.elRoot.activeItems = [];
						if ( elLabel.elRoot.lastClick.parentNode.parentNode == elLabel.parentNode.parentNode ) {
							x = getChildIndex( elLabel.elRoot.lastClick.parentNode );
							y = getChildIndex( elLabel.parentNode );
							j = Math.min( x, y );
							do {
								if ( elLabel.parentNode.parentNode.childNodes[j].nodeType == Node.ELEMENT_NODE ) { 
									addActiveItem( getNextElement( getFirstElement( elLabel.parentNode.parentNode.childNodes[j] ) ) );
								};
								j++;
							} while ( j != Math.max( x, y ) + 1 );
						};
					};
				};
			};
		};
		elLabel.elRoot.lastClick = elLabel;
		if ( typeof elLabel.elRoot.ownerTree.config.selectBinding == 'function' ) {
			elLabel.elRoot.ownerTree.config.selectBinding( e, elLabel );
		};
	},
	markPath : function ( elLabel ) {
		var elParentLabel = getNextElement( getFirstElement( elLabel.parentNode.parentNode.parentNode ) );
		addClass( elParentLabel, xmlTree.classNames.signedpath );
		if ( elLabel.elRoot != elLabel.parentNode.parentNode.parentNode ) {
			xmlTree.markPath( elParentLabel );
		};
	},
	unmarkPath : function( elLabel ) {
		var elParentLabel = getNextElement( getFirstElement( elLabel.parentNode.parentNode.parentNode ) );
		if ( elLabel.elRoot.ownerTree.config.unmarkCondition( elLabel ) ) {
			removeClass( elParentLabel, xmlTree.classNames.signedpath );
		};
		if ( elLabel.elRoot != elLabel.parentNode.parentNode.parentNode ) {
			xmlTree.unmarkPath( elParentLabel );
		};
	},
	removeActiveItems : function( elItem ) {
		var i, root;
		root = elItem.elRoot;
		for ( i = 0; i < root.activeItems.length; i++ ) {
			removeClass( root.activeItems[i], xmlTree.classNames.active );
		};
		root.activeItems = [];
	},
	disableItem : function( elItem ) {
		var root;
		root = elItem.elRoot;
		addClass( elItem, xmlTree.classNames.disabled );
		root.disabledItems.push( elItem );
		
	},
	enableItem : function( elItem ) {
		var root, i;
		root = elItem.elRoot;
		for ( i = 0; i < root.disabledItems.length; i++ ) {
			removeClass( root.disabledItems[i], xmlTree.classNames.disabled );
		}
		root.disabledItems = [];
	},
	getXML : function ( url, root, sLastTime ) {
	// NEM TÃ?MOGATOTT! az 1.9 verziÃ³ban
	// az fa lekerese es osszeallitasa, es frissitese (inicializaciok hivasa)
		function tranformNodeToHTML( nodeTree, root, bRefresh ) {
			var elSection, i, attrNodeId, targetNode, previousNode;
			function createItem( nodeItem ) {
				var el, elLabel, i;
				el = document.createElement( xmlTree.nodeNames.li );
				elLabel = document.createElement( xmlTree.nodeNames.label );
				elLabel.setAttribute( 'id', nodeItem.getAttribute('nodeId') )
				elLabel.appendChild( document.createTextNode( nodeItem.getAttribute('title') ) )
				for ( i = 0; i < nodeItem.attributes.length; i++ ) {
					el.setAttribute( nodeItem.attributes[i].nodeName, nodeItem.attributes[i].nodeValue );
					//elLabel.setAttribute( nodeItem.attributes[i].nodeName, nodeItem.attributes[i].nodeValue );
				}
				el.appendChild( elLabel );
				return el;
			}
			function addItem( elSection, targetNode ) { // elsÅ‘ alkalommmal new
				var nodeItem, i, elNl;
				removeEmptyTextNode( elSection );
				if (   elSection.hasChildNodes() )
					targetNode.appendChild( document.createElement( xmlTree.nodeNames.nl ) )
				for ( i = 0; i < elSection.childNodes.length; i++ ) {
					nodeItem = elSection.childNodes[i];
					//if ( nodeItem.nodeType != Node.ELEMENT_NODE ) continue;
					targetNode.lastChild.appendChild( createItem( nodeItem ) );
					if ( nodeItem.hasChildNodes() ) {
						addItem( nodeItem, targetNode.lastChild.lastChild );
					}
				}
			}
			function refreshItem( elSection, targetNode, root ) { // remove, update, new
				var nodeItem, i, j, el, elLabel, elParent, bFind = false;
				removeEmptyTextNode( elSection );
				for ( i = 0; i < elSection.childNodes.length; i++ ) {
					nodeItem = elSection.childNodes[i];
					//if ( nodeItem.nodeType != Node.ELEMENT_NODE ) continue;
					if ( nodeItem.getAttribute( 'status' ) == '2' ) { // remove
						if ( elLabel = document.getElementById( nodeItem.getAttribute('nodeId') ) ) {
							for ( j = 0; j < elLabel.elRoot.activeItems.length; j++ ) { // a eltavolitandÃ³ elem benne volt a kivÃ¡lasztott elemek kÃ¶zÃ¶tt
								if ( elLabel.elRoot.activeItems[j] == elLabel ) {
									bFind = true;
									break;
								}
							}
							if ( bFind )
								elLabel.elRoot.activeItems.splice( i, 1 );
							// XXX targetNode.lastChild							
							elLabel.parentNode.lastChild.removeChild( elLabel.parentNode );
							// ha ez volt az utolÃ³ elem, akkor ki kell tÃ¶rÃ¶lni az UL-t is
							xmlTree.updateLayoutSingle( null, targetNode, root );
						}
						else {
							//alert('A tÃ¶rlÃ©sre megadott elem [' + nodeItem.getAttribute('nodeId') + '] nem lÃ©tezik!');
						}
					}
					else if ( document.getElementById( nodeItem.getAttribute( 'nodeId' ) ) ) { // update
						elLabel = document.getElementById( nodeItem.getAttribute( 'nodeId' ) );
						for ( j = 0; j < nodeItem.attributes.length; j++ )
							elLabel.setAttribute( nodeItem.attributes[j].nodeName, nodeItem.attributes[j].nodeValue );
						elLabel.replaceChild( document.createTextNode( nodeItem.getAttribute('title') ), elLabel.firstChild )
					}
					else { // new
						el = createItem( nodeItem );
						if ( targetNode.firstChild == targetNode.lastChild )
							targetNode.appendChild( document.createElement( xmlTree.nodeNames.nl ) );
						targetNode.lastChild.appendChild( el );
						xmlTree.updateLayoutSingle( el, null, root );
					}
				}
			}
			// sectionok levÃ¡logatÃ¡sa, itemek hozzÃ¡adÃ¡saÃ¡nak indÃ­tÃ¡sa
			if ( !nodeTree.hasChildNodes() )
				return;
			for ( i = 0; i < nodeTree.childNodes.length; i++ ) {
				elSection =  nodeTree.childNodes[i];
				if ( elSection.nodeType != Node.ELEMENT_NODE ) continue;
				targetNode = ( elSection.getAttribute('nodeId') == 'root' ) ? root : document.getElementById( elSection.getAttribute('nodeId') ).parentNode;
				// frissitÃ©skor minden section feldolgozunk, minden sectionban minden elemre kÃ¼lÃ¶n initLayoutSingle
				// elsÅ‘ alkalommal nem section-Ã¶kkÃ©nt inicializalunk, hanem egyben
				if ( bRefresh ) 
					refreshItem( elSection, targetNode, root )
				else
					addItem( elSection, targetNode );
			}
			if ( !bRefresh ) { 
				xmlTree.start( root );
			};
		}
		// tÃ¶bb fa lekÃ©rdezÃ©se egy kommunikÃ¡ciÃ³ban - a fÃ¡k szÃ©tvÃ¡logatÃ¡sa
		function separateXML( xmlDoc, elRoot, bRefresh ) {
			var elsTree, i;
			elsTree = selectXMLNodesByXPath( xmlDoc, xmlDoc, '//tree' );
			if ( elsTree == null )
				return alert('HIBA! Nincs feldolgozhatÃ³ elem!');
			for ( i = 0; i < elsTree.length; i++ ) {
				if ( isSpecified( elsTree[i], 'treeId' ) )
					elRoot = xmlTree.item[elsTree[i].getAttribute('treeId')].root;
				tranformNodeToHTML( elsTree[i], elRoot, bRefresh );
			};
			if ( !bRefresh ) { // gyorsabb futÃ¡s miatt ide Ã¡thelyezve
				for ( i = 0; i < elsTree.length; i++ ) {
					if ( isSpecified( elsTree[i], 'treeId' ) ) {
						elRoot = xmlTree.item[elsTree[i].getAttribute('treeId')].root;
					};
					xmlTree.initLayoutRoot( elRoot );
				}; 
			};
		};
		var xmlHttpRequest, xmlDoc, elLasttime;
		xmlHttpRequest = XmlHttp.create();
		if ( !sLastTime ) { // elsÅ‘ lekÃ©rÃ©s
			xmlHttpRequest.open( 'GET', url, false );
			xmlHttpRequest.send( null );
			if ( !XmlHttp.existError( xmlHttpRequest ) ) {
				separateXML( xmlHttpRequest.responseXML, root );
			}
		}
		else { // frissÃ­tÃ©sek
			var xmlDoc  = XmlDocument.create();
			xmlDoc.loadXML('<root/>');
			var elLasttime = xmlDoc.createElement('lasttime');
			elLasttime.setAttribute( 'value', sLastTime );
			xmlDoc.documentElement.appendChild( elLasttime );
			XmlHttp.loadBinding( xmlHttpRequest, function() {
				if ( !XmlHttp.existError( xmlHttpRequest ) )
					separateXML( xmlHttpRequest.responseXML, root, true );
				} )
			xmlHttpRequest.open( 'POST', url, false );
			xmlHttpRequest.send( xmlDoc );
		};
	}
};
