treeview.prototype.load = function(){
	if(this.loaded || this.loading){
		return;
	}
	
	this.loading = true;
	this.setLoading();
	loadXML(this);
}
treeview.prototype.setLoading = function(){
	this.loadNode = new treenode('loading treeview data',this);
}

treeview.prototype.onloaded = function(){
	this.loadNode.remove();
	this.loaded = true;
	this.loading = false;
	
	fnResizeMainFrame_fromMain();
}

treenode.prototype.reload = function(){
	if(this.src){
		this.loaded = false;
		 
		// hard index op 0 zetten want i verandert na elke remove
		for(i=this.oNode.oNodeChilds.childNodes.length;i>0;i--){
			this.oNode.oNodeChilds.childNodes[i-1].obj.remove(true);
		}
		
		this.loading = true;
		this.setLoading();
		loadXML(this);
	}else{
		alert('treenode method reload says: no datasource defined');
	}
}


treenode.prototype.load = function(){
	if(this.loaded || this.loading){
		return;
	}
	
	if(this.src){
		this.loading = true;
		this.setLoading();
		loadXML(this);
	}else{
		alert('treenode method load says: no datasource defined');
	}
}

treenode.prototype.setLoading = function(){
	//this.oNode.oNodeChilds.style.display = 'block';
	this.oNode.oNodeIcon.src = treeConfig.loadIcon;
	
	//this.loadNode = new treenode('loading treenode data',this);
}
treenode.prototype.onloaded = function(){
	// use the disableBehaviour attribute to prevent selecting the first childNode
	//this.loadNode.remove(true);
	this.loaded = true;
	this.loading = false;
	this.expand();
}
	
function loadXML(parentNode){
	var xmlHttp = XmlHttp.create();
	
	// prevent caching by browser, add &nocache if ? exists, else ?nocache
	var xmlUrl = parentNode.src 
	if(parentNode.src.indexOf('?') < 0){
		xmlUrl += '?nocache='+new Date().getTime();
	}else{
		xmlUrl += '&nocache='+new Date().getTime();
	}
	
	// async must be true for mozilla!!!
	xmlHttp.open("GET", xmlUrl, true);

	xmlHttp.onreadystatechange = function () {
		if (xmlHttp.readyState == 4) {
			if(oXmlDoc == null || oXmlDoc.documentElement == null){
				var oXmlDoc = xmlHttp.responseXML
				oXmlDoc.loadXML(xmlHttp.responseText);
			}
	
			onXMLLoaded(xmlHttp.responseXML,parentNode);

		}
	};
	
	window.setTimeout(function () {
		xmlHttp.send(null);
	}, 10);
}

function onXMLLoaded(oXmlDoc,parentNode) {

	if( oXmlDoc == null || oXmlDoc.documentElement == null) {
		alert('onXMLLoaded function returned error: the file '+parentNode.src+' could not be read, parsed.');
	}else{
		var root = oXmlDoc.documentElement;
		var cs = root.childNodes;
		var l = cs.length;
		
		for (var i = 0; i < l; i++) {
			if (cs[i].tagName == "tree") {
				xmlNodeToJsNode(cs[i],parentNode);
			}
		}
		
		parentNode.onloaded();
		
	}
}

function xmlNodeToJsNode(oNode,parentNode) {
	
	var label = oNode.getAttribute("label") || treeConfig.defaultLabel;
	var src = null || oNode.getAttribute("src");
	var href = oNode.getAttribute("href") || treeConfig.defaultAction;
	var target = null || oNode.getAttribute("target");
	var icon = oNode.getAttribute("icon") || treeConfig.defaultIcon;
	var iconOpen = treeConfig.defaultIconOpen || oNode.getAttribute("iconOpen");
	var parent = null;
	var nodeId = oNode.getAttribute("id");
	
	var newNode;
	newNode = new treenode(label,parentNode,src,href,target,icon,iconOpen,nodeId);
			
	var cs = oNode.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		if (cs[i].tagName == "tree") {
			xmlNodeToJsNode(cs[i],newNode);
		}
	}
	
	// zorgt ervoor dat alle attributen van deze node worden toegevoegd aan de parameter nodeAttributes
	newNode.xmlNode = oNode;
}