// Diese Datei setzt voraus, dass eine globale Variable sDBPath existiert, in der der Pfad
// der Datenbank gespeichert ist.
// Bsp.: /myPath/myDatabase.nsf/

var net = new Object();
net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4;
// Konstruktur
net.ContentLoader = function(url, onload, onerror, method, params, contentType){
	this.req = null;
	this.onload = onload;
	this.onerror = (onerror) ? onerror : this.defaultError;
	this.loadXMLDoc(url, method, params, contentType);
}

net.ContentLoader.prototype.loadXMLDoc = function( url, method, params, contentType){
	if ( !method ){
		method = "GET";
	}
	//if ( !contentType && method=="POST" ){
	if ( !contentType ){
		contentType = 'application/x-www-form-urlencoded';
	}
	if ( window.XMLHttpRequest ){
		this.req = new XMLHttpRequest();
	}
	else if ( window.ActiveXObject ){
		this.req = new ActiveXObject('Microsoft.XMLHTTP'); 
	}
	
	if ( this.req ){
		try{
			var loader = this;
			this.req.onreadystatechange = function(){
				net.ContentLoader.onReadyState.call(loader);
			}
			this.req.open( method, url, true );
			if ( contentType ){
				this.req.setRequestHeader('Content-Type', contentType);
			}
			this.req.send( params );
		}catch ( err ){
			this.onerror.call( this );
		}
	}
}
	// Callback
net.ContentLoader.onReadyState = function(){
	var req = this.req;
	var ready = req.readyState;
	if ( ready == net.READY_STATE_COMPLETE ){
		var httpStatus = req.status;
		if( httpStatus == 200 || httpStatus == 0 ){
			this.onload.call( this );
		}
		else{
			this.onerror.call( this );
		}
	}
}
net.ContentLoader.prototype.defaultError = function(){
	alert('Error fetching data!'
	+ '\n\nreadyState:' + this.req.readyState
	+ '\nstatus: ' + this.req.status
	+ '\nheaders: ' + this.req.getAllResponseHeaders());
}

var ImixsHelper = new Object();
ImixsHelper.compare = function (a,b ){
	var i = 0;

	if( a.id > b.id )
		i = 1
	if( a.id < b.id )
		i = -1;
	return i;
}


// wird fuer jedes zu ergaenzende Kapitel aufgerufen
function addChildChapters(sNodeUid){
	// sDBPath ist in der HTML Seite als globale Variable definiert
	var sRequestURL = sDBPath + 'fwAjaxData?readForm&nodeid=' + sNodeUid;
	var loader = new net.ContentLoader( sRequestURL, parseXMLData);
	loader.nodeUid = sNodeUid;
	
}

// verarbeitet das Ergebnis eines Requests
function parseXMLData(){
	// alert(this.url + ' ist geladen! Inhalt:\n' + this.req.responseText);
	var arrayChildChapters = new Array();
	var xmlDoc = this.req.responseXML;
	var elDocRoot = xmlDoc.getElementsByTagName('data')[0];

	if( elDocRoot ){
		var elDocNode = elDocRoot.getElementsByTagName('node')[0];
		var elRootChildNodes = elDocRoot.getElementsByTagName('childs')[0];
		var arChildNodes = elRootChildNodes.getElementsByTagName('node');
		
		// Tochterkapitel rausfischen
		for( var i = 0; i < arChildNodes.length; i++ ){
			var elChildNode = arChildNodes[i];
			if( elChildNode.nodeName == 'node'){
				
				var liNode = document.createElement('li');
				var ankerNode = document.createElement('a');
				
				liNode.appendChild(ankerNode);
				
				for( var j = 0; j < elChildNode.childNodes.length; j++ ){
					var n = elChildNode.childNodes[j];
					var nName = n.nodeName;
					var sNodeValue = n.firstChild.nodeValue;
					
					switch (nName) {
						case 'url':
							ankerNode.href = sNodeValue;
							break;
						case 'txtnodeuidinfo':
							liNode.id = 'navLi' + sNodeValue;
							break;
						case 'txtinfotitle':
							var textNode = document.createTextNode( sNodeValue );
							ankerNode.appendChild(textNode);
							break;
						default:
							break;
					}
				}
				arrayChildChapters.push( liNode );
			}
		}
		
		// Links nach der Kapitelnummer sortieren
		arrayChildChapters.sort(ImixsHelper.compare);
		
		// An passender Stelle einfuegen
		var fatherNode = document.getElementById('navUl' + this.nodeUid);
		if( fatherNode != null ){
			
			for( var i = 0; i < arrayChildChapters.length; i++ ) {
				
				// mit bestehenden Navi-Eintraegen vergleichen
				for( var j = 0; j < fatherNode.childNodes.length; j++){
			
					var nNewLi = arrayChildChapters[i];
					var nCurrLi = fatherNode.childNodes[j];
					
					if( typeof nCurrLi.id == 'undefined'){
						continue;
					}
					// alert( "nCurrLi.id : " + nCurrLi.id + "\nnNewLi.id : " + nNewLi.id + "\n\nj = " + j + "\nfatherNode.childNodes.length = " + fatherNode.childNodes.length);
					
					// wenns den Eintrag schon gibt: nichts tun
					if( nNewLi.id == nCurrLi.id ){
						//alert('Gibts schon: ' + nNewLi.id);
						break;
					}
					// wenn id kleiner als aktuelle: davor einfuegen
					else if( nNewLi.id < nCurrLi.id ){
						fatherNode.insertBefore(nNewLi, nCurrLi);
					}
					// wenn aktueller Knoten letzter 
					// (oder naechster Knoten ein Textknoten und letzter): dahinter einfuegen
					else if( (j+1 == fatherNode.childNodes.length) || ( (j+2 == fatherNode.childNodes.length) && (fatherNode.childNodes[j+1].nodeType == 3) ) ){
						fatherNode.appendChild(nNewLi);
					}
				}
			}
		}
	}
}

window.onload = function(){
	while( sNodeUidInfo.lastIndexOf('.') != -1 ){
		addChildChapters( sNodeUidInfo );	// sNodeUidInfo ist in der HTML-Seite als globale Variable definiert
		sNodeUidInfo = sNodeUidInfo.substring(0,sNodeUidInfo.lastIndexOf('.'));
		sNodeUidInfo = sNodeUidInfo.substring(0,sNodeUidInfo.lastIndexOf('.')+1);
	}
	
}

