/* 
een bepaald path in de tree openen ook al zijn alle nodes nog niet geladen
@param tree
@param pathList een string met nodeIds die gescheiden zijn door kommas, opgelet: geen whitespace gebruiken in de string 
*/
function openTreePathAndSelectLastNode(tree, pathList) {
	tree.openItemsDynamic(pathList,true);
	tree.focusItem(tree.getSelectedItemId());
}

/*  
een node selecteren 
@param tree
@param nodeId id van de te selecteren node
*/
function selectNode(tree, nodeId) {
	/* params:
	nodeId id van de node
	mode: true/false, trigger functie aanroepen
	preserve: true/false, een eerdere selectie bewaren */
	tree.selectItem(nodeId, true, false);
	tree.focusItem(nodeId);
}

	
/*
node text wijzigen
@param tree
@param nodeId te wijzigen node
@param newLabel nieuwe tekst
@param newTooltop nieuwe tooltip tekst
 */
function setNodeText(tree, nodeId, newLabel, newTooltip) {
	tree.setItemText(nodeId, newLabel, newTooltip);
}

/* 
node refresh 
@param tree
@param nodeId
*/
function refreshNode(tree, nodeId) {
	tree.smartRefreshItem(nodeId);
}	

/*
voert een tree refresh uit met een callback functie
@param tree
@param refreshFunction een functie die een zekere refresh van de tree zal uitvoeren
@param callbackFunction een functie die wordt opgeroepen nadat het resultaat van refreshFunction werd ontvangen 
*/
function treeRefreshWithCallback(tree, refreshFunction, callbackFunction) {
	var origFunction = tree.onXLE;
	tree.setOnLoadingEnd(function() {
		tree.setOnLoadingEnd(origFunction);
		eval(callbackFunction());
	});
	eval(refreshFunction());	
}

/*
past de userdata van een node aan
@param tree
@param nodeId
@param name de omschrijving van de userdata
@param value de nieuwe waarde voor de userdata
@param subItems true/false, om al dan niet ook de userdata van de subItems aan te passen  
*/
function setTreeNodeUserData(tree, nodeId, name, value, subItems) {
  tree.setUserData(nodeId, name, value);
	  
	if (subItems) {
	  var z=tree.getAllSubItems(nodeId).split(tree.dlmtr);
	    
	  for(var i=0;i<z.length;i++) {
	    tree.setUserData(z[i], name, value);
	  }
	}  
}

/*
verbergt het contextmenu van de tree
*/
function hideContextMenu(contextMenu) {
  contextMenu.menu.hideBar();
}

/* 
node delete 
@param tree
@param nodeId
@param selectParent
*/
function deleteItem(tree, nodeId, selectParent) {
	tree.deleteItem(nodeId, selectParent);
}	 

/*
Tree error handler die detecteert of de error veroorzaakt werd door een timeout. 
In dat geval is wordt de user geredirect naar een andere pagina 
@param data de error data met o.a. het XmlHttpRequest object
@param recognizeTimeoutPattern het patroon dat gebruikt wordt om te herkennen of het gaat om een session timeout
@param redirectPage de url van de pagina die na een session timeout moet getoond worden 
*/
function treeSessionTimeoutErrorHandler(data, recognizeTimeoutPattern, redirectPage) {
	var xmlHttpRequest = data[0];
	if (xmlHttpRequest.responseText.indexOf(recognizeTimeoutPattern) != -1) {
		window.top.location.href=redirectPage;
	}
}

function treeSetCheck(tree,idList,state) {
	var ids=idList.split(tree.dlmtr);
	    
	for(var i=0;i<ids.length;i++) {
	  tree.setCheck(ids[i],state);
	}
}