
function ajaxLoad(path){
	new Ajax.Request( 
		path,
	{
		method: "GET",
		onSuccess: parseAjaxResponse,
		evalScripts: true
	} );
}

/* trim a string like in PHP: 
remove whitespace in front and at the end of the string
*/
function trim(mystring) {
  var torep = /^\s+/;
  var torepl = /\s+$/;
  var newstring = mystring.replace(torep, "").replace(torepl, "");
  return newstring;
}

function parseAjaxResponse(transport){ 
	var response=transport.responseXML;
	var response_elements = response.getElementsByTagName('response-element');
	var rels = $A(response_elements);
	rels.each(function(node) {
		// find the target where to place the response text
		var destnode = node.attributes.getNamedItem("target");
		var dest = "";
		if (destnode) dest = destnode.value;
		else {
			window.alert("target attribute must be specified on response-element");
			return;
		}
		
		// find the way to replace it, replacechildren by default
		var placenode = node.attributes.getNamedItem("place");
		var place = 'replacechildren' // make this the default
		if (placenode) place = placenode.value;

		// you may need to replace an element, remove it first
		var elem = node.attributes.getNamedItem("element-id");
		if (elem) {
			var elemid = elem.value; 
			check_id(elemid);
		}
		parseChildNodes(node, dest, place);
	});
}

function parseChildNodes(node, dest, place){
  		var s = "";
  		var ndata = "";
  		with (node) {
    		for (var i=0; i<childNodes.length; i++) {
      			with (childNodes[i]) {
 					ndata += nodeValue;
      			}
    		}
 		 }
 		ndata = trim(ndata); // remove whitespace 
		switch (place) {
		case "replacechildren" :
			if (ndata != '') {
				// use update instead of innerHTML to allow scripts to be evalueted
				Element.update(dest, ndata);
				Element.show(dest);
			}
			else Element.hide($(dest));	
			break;
		case "top" :
			if (ndata != '') {
				new Insertion.Top(dest, ndata);
				Element.show(dest);
			}
			else Element.hide(dest);	
			break;
		case "before" :
			if (ndata != '') {
				new Insertion.Before(dest, ndata);
				Element.show(dest);
			}
			break;
		case "bottom" :
			if (ndata != '') {
				new Insertion.Bottom(dest, ndata);
				Element.show(dest);
			}
			else Element.hide(dest);	
			break;
		default :
		 window.alert(place + " is not a supported placement value at: " + dest + " ndata: " + ndata);
		}
}

function ajaxNoReturn(path){
	new Ajax.Request( 
		path,
	{
		method: "GET"
	} );
}

function hideAllSubitems() {
//    alert('execute me!');
    var lies = document.getElementsByClassName('subitem', $('navigation'));
//    alert($('navigation').nodeName + ': ' + $('navigation').innerHTML); 

	for (var i = 0; i < lies.length; i++) { 
    	var node = lies[i]; 
//    alert(node.nodeName + ': ' + node.innerHTML);  
    	Element.hide(node); 
	}
}

function showSubitems(node) {
//	hideAllSubitems();
	var par = node.parentNode;
//    alert(node.nodeName + ': >>' + node.innerHTML + '<<');  
    var sh = node.innerHTML;
    var lies = document.getElementsByClassName('subitem', par);

	for (var i = 0; i < lies.length; i++) { 
    	var lnode = lies[i]; 
//		alert('parent node: ' + lnode.nodeName);
		if (sh == '+') {
	    	Element.show(lnode); 
	    }
	    else if (sh == '-') Element.hide(lnode);
	}
	if (sh == '+') node.innerHTML = '-';
    else if (sh == '-') node.innerHTML = '+';
	
}

function showItemsFromTitle(tnode) {
	var pnode = tnode.previousSibling;
//	alert(pnode.nodeName + ': >>' + pnode.innerHTML + '<<');  
	showSubitems(pnode);
}

