// Versione 2.0
//Dichiarazioni costanti
var APERTO = 1;	//Nodo aperto e chiuso
var CHIUSO = 0;

//Variabili per le opzioni
//Immagine
var SOLO_TESTO=0;
var SOLO_IMG=1;
var TESTO_E_IMG=2;

var currentFather=null;
var tree=new Array();
var leftShift=0;

function numberToSize(number){
	switch (Number(number)){
		case 6: return "xx-large";
		case 5: return "x-large";
		case 4: return "large";
		case 3: return "medium";
		case 2: return "small";
		case 1: return "x-small";
		case 0: return "xx-small";
	}
}

String.prototype.trim=function(){
	var str=this; var temp;
	while((temp=str.substr(0,1))==" ")
		str=temp;
	while((temp=str.substr(0,str.length-1))==" ")
		str=temp;
	return str;
}

function Nodo(Nome) {

	this.Nome=Nome;
	this.Padre=currentFather;
	this.Stato=APERTO;
	this.URL="";
	this.URLImmagine="";
	this.Opzioni=SOLO_TESTO;
	this.OpzioniIMG="";
	this.hasChilds=false;
	this.child=new Array();
	this.innerHTML="";
	this.ref=null;
	this.index=0;
	this.left=0;
	this.innerHTML="";
}

function TreeAdd(Nome, URL, Opzioni, innerHTML) {
	var newNode=new Nodo(Nome); var temp2;
	if (Opzioni==null)Opzioni=new String(); else Opzioni=new String(Opzioni);
	var options=Opzioni.split(";"); var temp; var temp2;
	for (var i=0;i<options.length;i++){
		if((temp=options[i].trim())=="SOLO_TESTO")
			newNode.Opzioni=SOLO_TESTO;
		else if (temp=="SOLO_IMG")
			newNode.Opzioni=SOLO_IMG;
		else if (temp=="TESTO_E_IMG")
			newNode.Opzioni=TESTO_E_IMG;
		else if ((temp2=temp.split("=")).length==2 && temp2[0].trim()=="URLImmagine")
			newNode.URLImmagine=temp2[1].trim();
		else if (temp2.length==2)
			newNode.OpzioniIMG+=temp + ";";
	}
	newNode.URL=URL;
	newNode.innerHTML=innerHTML;
	newNode.index=tree.length;
	newNode.left=28 * leftShift + "pt";

	tree.push(newNode);

	if (currentFather!=null){
		currentFather.hasChilds=true;
		currentFather.child.push(tree[tree.length-1]);
		currentFather.Opzioni=TESTO_E_IMG;
	}

}

function EntraNelNodo(){
	currentFather=tree[tree.length-1];
	leftShift++;
}

function EsciDalNodo(){
	currentFather=currentFather.Padre;
	leftShift--;
}

function Inizializza(ColorElements,FontSize) {
	var elem; var temp; var opts;
	var root=new Array();
	var rootEl;

	if (tree[tree.length-1].Padre==null) tree[tree.length-1].Opzioni=TESTO_E_IMG;

	for(var i=0;i<tree.length;i++){
		if (tree[i].hasChilds || tree[i].Padre==null){
			elem=document.createElement("A");
			elem.href="javascript:switchIt(" + i + ")";
			elem.style.position="relative";
			elem.style.left=tree[i].left;
			elem.style.textDecoration="none";
			if (FontSize!=null) elem.style.fontSize=numberToSize(FontSize);
			if (tree[i].Opzioni==SOLO_IMG || tree[i].Opzioni==TESTO_E_IMG){
				temp=document.createElement("img");
				temp.src=tree[i].URL;
				temp.style.borderStyle="none";
				if ((opts=tree[i].OpzioniIMG.split(";")).length>0){
					for(var j=0;j<opts.length;j++)
						if (opts[j]!="") temp.style[opts[j].split("=")[0].trim()]=opts[j].split("=")[1].trim();
				}
				elem.appendChild(temp);
			}

			if (tree[i].Opzioni==TESTO_E_IMG)
				tree[i].Nome=" " + tree[i].Nome;

			if (tree[i].Opzioni==SOLO_TESTO || tree[i].Opzioni==TESTO_E_IMG)
				elem.appendChild(document.createTextNode(tree[i].Nome));
		
		} else {
			elem=document.createElement("A");
			elem.href=tree[i].URL;
			elem.style.position="relative";
			elem.style.left=tree[i].left;
			elem.style.textDecoration="none";
			if (ColorElements!=null) elem.style.color=ColorElements;
			if (tree[i].Opzioni==SOLO_IMG || tree[i].Opzioni==TESTO_E_IMG){
				temp=document.createElement("img");
				temp.src=tree[i].URLImmagine;
				temp.style.borderStyle="none";
				if ((opts=tree[i].OpzioniIMG.split(";")).length>0){
					for(var j=0;j<opts.length;j++)
						if (opts[j]!="") temp.style[opts[j].split("=")[0].trim()]=opts[j].split("=")[1].trim();
				}
				elem.appendChild(temp);
			}

			if (tree[i].Opzioni==SOLO_TESTO)
				tree[i].Nome="- " + tree[i].Nome;

			if (tree[i].Opzioni==SOLO_TESTO || tree[i].Opzioni==TESTO_E_IMG)
				elem.appendChild(document.createTextNode(tree[i].Nome));
		}

		rootEl=document.createElement("span")
		rootEl.id="__tree_span_" + i + "__";
		rootEl.appendChild(elem);
		if (tree[i].innerHTML!=null){
			elem=document.createElement("span");
			elem.innerHTML=tree[i].innerHTML;
			elem.style.position="relative";
			elem.style.left=tree[i].left;
			rootEl.appendChild(elem);
		}

		rootEl.appendChild(document.createElement("BR"));

		root.push(rootEl);
		tree[i].innerHTML=rootEl.innerHTML;
		if (tree[i].hasChilds||tree[i].Padre==null){
			var span=document.createElement("span");
			span.id="__tree_global_span_" + i + "__";
			root.push(span);
		}
		
	}

	var whereAppend;
	whereAppend=document;
	while(whereAppend.lastChild!=null && whereAppend.lastChild.tagName!="SCRIPT")
		whereAppend=whereAppend.lastChild;

	whereAppend.appendChild(document.createElement("P"));
	var temp; var treeGlobals=0;
	for (var i=0; i<root.length;i++){
		if(root[i].Padre!=null && (temp=document.getElementById("__tree_global_span_" + root[i].Padre.index + "__"))!=null)
			temp.appendChild(root[i]);
		else
			whereAppend.appendChild(root[i]);
		if(root[i].id.substr(0,19)=="__tree_global_span_")
			treeGlobals++;
		else
			tree[i-treeGlobals].ref=document.getElementById("__tree_span_" + (i - treeGlobals) +"__");
	}
	
}

function switchIt(n){

	var stato;
	if (tree[n].Stato==CHIUSO)
		stato=tree[n].Stato=APERTO;
	else
		stato=tree[n].Stato=CHIUSO;

	// Fase di update dei nodi

	if (tree[n].hasChilds)
		setAllNodeChilds(tree[n],stato);
}

function setAllNodeChilds(node,status){
	for(var i=0;i<node.child.length;i++){
		if (node.child[i].hasChilds)
			setAllNodeChilds(node.child[i],status);
		else {
			if (status==APERTO){
				document.getElementById("__tree_global_span_" + node.index + "__").appendChild(node.child[i].ref);
			} else {
				node.child[i].ref.parentNode.removeChild(node.child[i].ref);
			}
		}
	}
}
