// collassa tutti i nodi di tipo "name" (UL,LI,DIV...) a partire da un certo "parent"
// "recursive" dice se andare o meno in profondita
	function collapseAll(parent,name,recursive,level) {
		var tmplevel=level;
		if (tmplevel==null) 
		{
			tmplevel=1;
		}
		if (parent.childNodes.length) {
			for (var i = 0; i < parent.childNodes.length; i++) {
      	      	if (parent.childNodes[i].nodeName == name) {
      	      		if (tmplevel>1) {
						parent.childNodes[i].style.display='none';
      	      		}
					if (recursive==true) {
						collapseAll(parent.childNodes[i],name,recursive,tmplevel+1)
					}
				} else {
					if (recursive==true) {
						collapseAll(parent.childNodes[i],name,recursive,tmplevel)
					}
				}
			}
		}
	}
// mostra tutti i nodi padri di tipo "name" (UL,LI,DIV...)a partire da "element" 
// fino a che l'elemento non è "rootid". Inoltre mostra i figli di primo livello 
// di ogni elemento mostrato
	function expandParentRecursive(element,name,rootid,notexpandotherchild) {
		if (element==null) {
			return;
		}
		if (element.nodeName==name) {
			element.style.display='';
			if (notexpandotherchild==null || notexpandotherchild==false) {
				expandChild(element,name);
			}
		}
		if (element.id && element.id==rootid) {
			return;
		} else {
			if (element.parentNode && element.parentNode!=null) {
				expandParentRecursive(element.parentNode,name,rootid,notexpandotherchild);
			}	
		}
	}
// mostra tutti i figli di primo livello con "name" (UL,LI,DIV...)a partire da "element" 
	function expandChild(element,name) {
		if (element==null) {
			return;
		}
		if (element.childNodes.length) {
			for (var i = 0; i < element.childNodes.length; i++) {
				if (element.childNodes[i].nodeName==name) {
					element.childNodes[i].style.display='';
				} else {
					expandChild(element.childNodes[i],name);
				}
			}
		}
	}

