//	Funzioni	-----------------------------------------------------------------*
    
	function tree_folderUp(treeViewName){
		var treeObj=eval(treeViewName);
		
		if (treeObj.lastRootFolder.parent.parent != null) {
    		
		    //imposto lo stato di attesa
		    var loadingHtml="<img class='" + "loader" + "' src='" + treeObj.imgPath + 'indicator.gif' +  "'" + " /> Loading..."		
		    var outputObj=document.getElementById(treeObj.varName + "_tree_Body");
    		
		    outputObj.innerHTML=loadingHtml;		
		    document.getElementById(treeObj.varName + "_treeView_hierarchicalPath").innerHTML=loadingHtml;		
    		
		    treeObj.rootClick(treeObj.lastRootFolder.parent,treeObj)
        } else {
            alert('Sei arrivato sulla radice dell\'albero');
        }
	}
	function tree_subscribeNode(treeViewName,nodeObj) {
		//prendo la treeView corrente (in un doc posso avere piu' di una treeView!)
		var treeObj=eval(treeViewName);
		var parentNode=(nodeObj.parentNode.parentNode.tagName)?nodeObj.parentNode.parentNode:nodeObj.parentNode.parentNode.parentNode;

		var treeNodeItem=treeObj.findChild(parentNode.id);
		treeNodeItem.subscribed=!treeNodeItem.subscribed;
		var imgObj=nodeObj.getElementsByTagName("img")[0];
		imgObj.src=(treeNodeItem.subscribed)?treeObj.imgPath + 'subscribed.gif':treeObj.imgPath + 'unSubscribed.gif';
		
		if(treeObj.subscribedItems.length>0 && treeObj.subscribedItems[0].id!=treeNodeItem.id)
		{
			var oldSubscribed=treeObj.subscribedItems.shift();
			oldSubscribed.subscribed=!oldSubscribed.subscribed;
			var htmlObj= document.getElementById(treeObj.varName + "_treePath_" + oldSubscribed.internalId);
			var imgObj=htmlObj.getElementsByTagName("img")[0];
			imgObj.src=treeObj.imgPath + 'unSubscribed.gif';
		}
		
		treeObj.subscribedItems=new Array();
		if(treeNodeItem.subscribed){
			treeObj.subscribedItems.push(treeNodeItem);
		}
	}
	
	function tree_parseNode(folderObj,nodeObj) {

		if(nodeObj.nodeType==1&&nodeObj.attributes.getNamedItem("id")) {
		    //alert("cartella contenitore: " + folderObj.id)
			var nodeId, nodeLA="", txtNode="", ttNode="", authNode="";
			nodeId=nodeObj.attributes.getNamedItem("id").value;
			//nodeLA=nodeObj.attributes.getNamedItem("livello").value;
		    //alert("nodeObj: " + nodeObj + '-' + typeof(nodeObj.firstChild))

			try {
			    if(nodeObj.firstChild.firstChild!=null) txtNode=nodeObj.firstChild.firstChild.nodeValue;
	            //alert("txtNode: " + txtNode + '-' + typeof(nodeObj.firstChild))
            } catch(exception) {
               txtNode=exception;
            } 

			try {
    		    if(nodeObj.firstChild.nextSibling.firstChild!=null) authNode=nodeObj.firstChild.nextSibling.firstChild.nodeValue;
    	        //alert("authNode: " + authNode);
            } catch(exception) {
               authNode="";
            } 

			try {
		        if(nodeObj.firstChild.nextSibling.nextSibling.firstChild!=null) nodeLA=nodeObj.firstChild.nextSibling.nextSibling.firstChild.nodeValue;
    	        //alert("nodeLA: " + nodeLA);
            } catch(exception) {
               nodeLA="";
            } 

			try {
		        if(nodeObj.firstChild.nextSibling.nextSibling.nextSibling.firstChild!=null) ttNode=nodeObj.firstChild.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
		        //alert("ttNode: " + ttNode);
            } catch(exception) {
               ttNode="";
            } 

            //alert(txtNode + '\n' + authNode + '\n' + nodeLA + '\n' + ttNode);
        		
			switch (nodeObj.tagName) {
			    case "treePager":
					if (nodeObj.hasChildNodes()) {
						for(var x=0;x<nodeObj.childNodes.length;x++) {
							tree_parseNode(lastFolder,nodeObj.childNodes[x]);
						}
					}
				break;			
			    
				case "treeView" :
					//var newFolder=folderObj.addRootFolder(nodeId,txtNode,authNode,nodeLA,ttNode);
					lastFolder=folderObj.addRootFolder(nodeId,txtNode,authNode,nodeLA,ttNode);
					//alert("New treeView " + lastFolder.id)
					if (nodeObj.hasChildNodes()) {
						for(var x=0;x<nodeObj.childNodes.length;x++) {
							tree_parseNode(lastFolder,nodeObj.childNodes[x]);
						}
					}
				break;			
				case "folder" :
					var newFolder=folderObj.addFolder(nodeId,txtNode,authNode,nodeLA,ttNode);
					//alert("New Folder " + newFolder.id)
					if (nodeObj.hasChildNodes()) {
						for(var x=0;x<nodeObj.childNodes.length;x++) {
							tree_parseNode(newFolder,nodeObj.childNodes[x]);
						}
					}
				break;
	
				case "document":
					var newFolder=folderObj.addDocument(nodeId,txtNode,authNode,nodeLA,ttNode);
					//alert("New document " + newFolder.id)
				break;			
				
				case "rootFolder":
					var newFolder=folderObj.addRootFolder(nodeId,txtNode,authNode,nodeLA,ttNode);
					//alert("New rootFolder " + newFolder.id)
					if (nodeObj.hasChildNodes()) {
						for(var x=0;x<nodeObj.childNodes.length;x++) {
							tree_parseNode(newFolder,nodeObj.childNodes[x]);
						}
					}			
					
				break;
			}
			
			//controllare se l'elemento creato era già selezionato|tagliato|preparato
			
			
			//																		//
			
		}
	}

	function tree_tooltip(varName,Obj){
		//prendo la treeView corrente (in un doc posso avere piu' di una treeView!)
		var treeObj=eval(varName);
		if (Obj!=null) {
		    var destObj=treeObj.findChild(Obj.id);
		    treeObj.tooltip(destObj,treeObj);
		} else {
		    //chidele la chiusura del tooltip
		    treeObj.tooltip(null,null);
		}
	}
	
	function tree_textClick(varName,Obj){
		//prendo la treeView corrente (in un doc posso avere piu' di una treeView!)
		var treeObj=eval(varName);
		var destObj=treeObj.findChild(Obj.id);
		
		treeObj.textClick(destObj,treeObj);
	}
	
	function tree_iconClick(varName,Obj){
		//prendo la treeView corrente (in un doc posso avere piu' di una treeView!)
		var treeObj=eval(varName);
		var nodeObj=treeObj.findChild(Obj.id);
		
		
		/*
		//controllo se servono i dati
		if(nodeObj.childArray.length==0){
			treeObj.dataNeeded(nodeObj);
		}		
					
		//aggiungo la cartella cliccata alla geneaologia
		var newRootFolder=treeObj.lastRootFolder.addRootFolder(nodeObj.id, nodeObj.descrizione, nodeObj.livelloArchivistico)
		
		//prendo il primo progenitore di quest'elemento
		ancId=nodeObj.internalId.split(".")[0];
		var parentNode=treeObj.rootFolder.childArray[ancId];

		alert(parentNode.descrizione)
		alert(parentNode.parent.descrizione)
		
		//elimino tutti i fratelli del parentNode
		parentNode.parent.childArray=new Array()
		//parentNode.parent.childArray=nodeObj.childArray;		

		//nodeObj.childArray=new Array();
		
		parentNode.parent.childArray.push(parentNode);
		//Ricostruisco gli idi interni
		treeObj.rootFolder.rebuildInternalId();		

		treeObj.refresh()
		*/
		
		
		//il clear viene chiamato dall' "utente" nell'evento iconClick
		
		if (nodeObj.type==0) {
		    //imposto lo stato di attesa
		    var loadingHtml="<img class='" + "loader" + "' src='" + treeObj.imgPath + 'indicator.gif' +  "'" + " /> Loading..."		
		    var outputObj=document.getElementById(treeObj.varName + "_tree_Body");
    		
		    outputObj.innerHTML=loadingHtml;		
		    document.getElementById(treeObj.varName + "_treeView_hierarchicalPath").innerHTML=loadingHtml;				
    		
		    treeObj.iconClick(nodeObj,treeObj);
		} else {
		    treeObj.textClick(nodeObj,treeObj);
		}
	}	
	
	function tree_setSize(varName,Obj)
	{	//funzione chiamata dal click sul fontSizer
		var treeObj=document.getElementById(varName + 'Content');
		treeObj.style.fontSize=Obj.style.fontSize;
	}
	
	function tree_setCurrent(varName,Obj)
	{
		
		//prendo la treeView corrente (in un doc posso avere piu' di una treeView!)
		var treeObj=eval(varName);
		var htmlObj=Obj;
		var nodeObj=treeObj.findChild(Obj.parentNode.parentNode.id);
		
		
		if(treeObj.currentItem) {
			
			htmlObj=document.getElementById(treeObj.varName + "_" + treeObj.currentItem.internalId);		
			//alert(htmlObj.getElementsByTagName("a")[1].className)
			htmlObj.className=htmlObj.className.replace(" itemSelected","")
			treeObj.currentItem.selected=false;
		}
		

		treeObj.selectedItem=nodeObj;
		nodeObj.selected=true;
		//setto l'item corrente
		treeObj.currentItem=nodeObj;			
		

		htmlObj=document.getElementById(treeObj.varName + "_" + treeObj.currentItem.internalId);		
		htmlObj.className+= " itemSelected";
				
		//visualizzo il textPath
		//document.getElementById(varName + "_tree_currentPath").innerHTML=treeObj.currentItem.descrizione;
		
		//visualizzo il treePath
		var strPath="";
		
		// treeObj.refresh()
		
		/*
		strPath=treeObj.htmlForPath();
		document.getElementById(varName + "_treeView_hierarchicalPath").innerHTML=strPath;
		*/
	}
	
	function tree_showPath(varName)
	{
		var treeObj=eval(varName);
		var treeHPObj=document.getElementById(varName + "_treeView_hierarchicalPath");
		var btnObj=document.getElementById(varName + "_tree_treeViewButton");
		
		//Apro/chiudo la treeView del path
		if(treeHPObj.style.display=="none")
		{
			treeHPObj.style.display="block";
			btnObj.src=treeObj.imgPath + "showAllOn.gif";
		}else{
			treeHPObj.style.display="none";
			btnObj.src=treeObj.imgPath + "showAllOff.gif";			
		}		
		
	}
	
	function tree_openClose(varName,Obj)
	{	//funzione chiamata dal click sul +/-
		var contentObj=document.getElementById( Obj.id + "Content");
		var treeObj=eval(varName);
		
		if (contentObj.innerHTML.length==0)
		{
			treeObj.emptyFolder=treeObj.findChild(Obj.id);
			//imposto lo stato di attesa
			contentObj.innerHTML="<img src='" + treeObj.imgPath + 'indicator.gif' +  "'" + " /> Loading..."
			
			treeObj.dataNeeded(treeObj.emptyFolder);
			return;
		}
		//Apro/chiudo la cartella
		if(contentObj.style.display=="none")
		{
			tree_openFolder(treeObj,Obj)
		}else{
			tree_closeFolder(treeObj,Obj)		
		}
	}
	
	function tree_openFolder(treeObj,Obj)
	{
		var contentObj=document.getElementById( Obj.id + "Content");
		var plusMinusGif=document.getElementById(Obj.id + "_plusMinus");	
		var folderGif=document.getElementById(Obj.id + "_folderIcon");

		contentObj.style.display="block";
		plusMinusGif.src=treeObj.imgPath + "meno.gif";		
		folderGif.src=treeObj.imgPath + "FolderOpened.gif";		
	}
	
	function tree_closeFolder(treeObj,Obj)
	{
		var contentObj=document.getElementById( Obj.id + "Content");
		var plusMinusGif=document.getElementById(Obj.id + "_plusMinus");		
		var folderGif=document.getElementById(Obj.id + "_folderIcon");		

		contentObj.style.display="none";
		plusMinusGif.src=treeObj.imgPath + "piu.gif";			
		folderGif.src=treeObj.imgPath + "FolderClosed.gif";				
	}	
	
	function tree_setPath(varName,Obj)
	{
		
		//scateno l'evento click
		treeObj=eval(varName);
		
		//imposto lo stato di attesa
		var loadingHtml="<img class='" + "loader" + "' src='" + treeObj.imgPath + 'indicator.gif' +  "'" + " /> Loading..."		
		var outputObj=document.getElementById(treeObj.varName + "_tree_Body");
		
		outputObj.innerHTML=loadingHtml;		
		document.getElementById(treeObj.varName + "_treeView_hierarchicalPath").innerHTML=loadingHtml;		
			

		nodeObj=treeObj.findChild(Obj.id);
		
		//treeObj.clear();
					
		treeObj.rootClick(nodeObj,treeObj);
	}
//	Oggetti  	-----------------------------------------------------------------*	


var treeView_GenericItem=Class.create();
treeView_GenericItem.prototype = {
	initialize: function(id, descrizione, authorization, livelloArchivistico, tooltip) {
	    //classe base
	    this.id=id;
	    this.internalId=0;
	    this.descrizione=descrizione;
	    this.livelloArchivistico=livelloArchivistico;
	    this.authorization=authorization;
	    this.tooltip=tooltip;

	    this.type=-1;
    		
	    this.childArray=new Array();	//contenitore dei figli		
	    this.treeView=null;
    	
	    this.parent=null;
    	
	    this.selected=false;		
	    this.cutted=false;
	    this.isDestination=false;
	},
	
	htmlForPath: function(){ return "";},
	
	rebuildInternalId: function(){
		//scorro tutti i figli e aggiorno l'internalId
		for(var x=0;x<this.childArray.length;x++)
		{
			this.childArray[x].internalId=this.internalId + "." + x;
			
			if(this.childArray[x].childArray.length>0){
				this.childArray[x].rebuildInternalId();
			}
			
		}			
	}		
}

var treeView_Folder=Class.create();
treeView_Folder.prototype = Object.extend(new treeView_GenericItem(), {
	initialize: function(id, descrizione, authorization, livelloArchivistico, tooltip){
	    //specializzazione della casse base
	    //var newObj=new treeView_GenericItem(id, descrizione, authorization, livelloArchivistico, tooltip);
	    //classe base
	    this.id=id;
	    this.internalId=0;
	    this.descrizione=descrizione;
	    this.livelloArchivistico=livelloArchivistico;
	    this.authorization=authorization;
	    this.tooltip=tooltip;

	    this.type=-1;
    		
	    this.childArray=new Array();	//contenitore dei figli		
	    this.treeView=null;
    	
	    this.parent=null;
    	
	    this.selected=false;		
	    this.cutted=false;
	    this.isDestination=false;


	    this.subscribed=false;	
	    this.type=0;				//0=Folder
	},
	
	feed: function(xmlData) {
	        var startIndex=this.childArray.length;
			tree_parseNode(this,xmlData);
			
			if (startIndex==0) {
			    var htmlFolderContent=document.getElementById(this.treeView.varName + "_" + this.internalId + "Content");		
			    htmlFolderContent.innerHTML=this.childHtml(startIndex);
			} else {
			    var htmlFolderContent=$(this.treeView.varName + "_" + this.internalId + "Content");
			    alert(startIndex);
			    htmlFolderContent.insert(this.childHtml(startIndex), { position: "bottom" });
			}
			
			//espando la cartella
			var htmlObj=document.getElementById(this.treeView.varName + "_" + this.internalId);		
			tree_openFolder(this.treeView,htmlObj);
		},
		
	childHtml: function(startIndex) {
	        if (startIndex==null) startIndex=0;
	        
			var strHtml="";
			for(var x=startIndex;x<this.childArray.length;x++)
			{
				strHtml+=this.childArray[x].renderHtml();
			}		
			
			return strHtml;
		},
		
	renderHtml: function() {
			var strHtml="";
			
			if(this.type<2){
				strHtml+='<div class="folderItem" id="' + this.treeView.varName + "_" + this.internalId + '">\n';
				
				var plusMinusImage="piu.gif";
				var folderImage="FolderClosed.gif";
				if (this.childArray.length>0)
				{
					plusMinusImage="meno.gif";
					folderImage="FolderOpened.gif";
				}

				if(this.treeView.selectedItem){
					if(this.id==this.treeView.selectedItem.id){
						this.selected=true;
						this.treeView.currentItem=this;
						this.treeView.selectedItem=this;
					}
				} else {
				    this.selected=false;
				}


				if(this.treeView.cuttedItems){
					for(var x=0;x<this.treeView.cuttedItems.length;x++){
						if(this.id==this.treeView.cuttedItems[x].id){
							this.cutted=true;
						}
					}
				} else {
				    this.cutted=false;
				}

				if(this.treeView.destinationItem){
					//this.isDestination=(this.id==this.treeView.destinationItem.id);
					if(this.id==this.treeView.destinationItem.id){
						this.isDestination=true;
					}
				} else {
				    this.isDestination=false;
				}


				var className=this.treeView.varName; // + " ctxMenu";
				className+=this.selected ? " itemSelected":"";
				className+=this.cutted ? " itemCutted":"";
				className+=this.isDestination ? " itemDestination":"";
				
				strHtml+='	<div class="icons"><a href="javascript:;" onclick="tree_openClose(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode);"><img class="btnPlusMinus" title="Apri/chiudi il ramo" id="' + this.treeView.varName + "_" + this.internalId + '_plusMinus" src="' + this.treeView.imgPath + plusMinusImage + '" /></a><a href="javascript:;" onclick="tree_iconClick(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode)"><img class="ctxMenu" title="Imposta il nodo come genealogia" id="' + this.treeView.varName + "_" + this.internalId + '_folderIcon"  src="' + this.treeView.imgPath + folderImage + '" /></a></div>\n';
				if(this.type==2){
					strHtml+='	<div class="description" ><a class="' + className + '" href="javascript:;" onclick="tree_textClick(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode)" onmouseover="tree_tooltip(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode)" onmouseout="tree_tooltip(' + "'" + this.treeView.varName + "'" + ',null);">' + this.descrizione + '</a></div>\n';
				}else{
					strHtml+='	<div class="description" ><a class="' + className + '" href="javascript:;" onclick="tree_setCurrent(' +  "'" +this.treeView.varName + "'" + ',this); tree_textClick(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode)" onmouseover="tree_tooltip(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode)" onmouseout="tree_tooltip(' + "'" + this.treeView.varName + "'" + ',null);" >' + this.descrizione + '</a></div>\n';
				}
				strHtml+='	<div class="folderContent" id="' + this.treeView.varName + "_" + this.internalId + 'Content">';
				
			}

			//estraggo l'html dei figli
			strHtml+=this.childHtml();
				
			if(this.type<2){
				strHtml+='</div>\n';
				strHtml+='</div>\n';
			}
			return strHtml
		},
		
	htmlForPath: function() {
		//html usato nella treeview di navigazione
		var strHtml="";
		
		if(this.type==2){

			if(this.treeView.subscribedItems){
				for(var x=0;x<this.treeView.subscribedItems.length;x++){
					if(this.id==this.treeView.subscribedItems[x].id){
						this.subscribed=true;
					}
				}
			}
			
			strHtml+='	<div class="folderItem" id="' + this.treeView.varName + "_treePath_" + this.internalId + '">\n';
			var imgName=this.subscribed?'subscribed.gif':'unSubscribed.gif';
			strHtml+='		<div class="description"><a href="javascript:;" onclick="tree_subscribeNode(' + "'" + this.treeView.varName + "'" + ',this)"><img src="' + this.treeView.imgPath + imgName + '" title="imageName" /></a><a href="javascript:;" onclick="tree_setPath(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode)" onmouseover="tree_tooltip(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode)" onmouseout="tree_tooltip(' + "'" + this.treeView.varName + "'" + ',null);"><img class="pathFolder" title="Visualizza i figli di questo nodo" src="' + this.treeView.imgPath + 'FolderOpened.gif" />' + this.descrizione + '</a></div>\n';
			strHtml+='	</div>\n';
		
			strHtml+='	<div class="folderContent">\n';

			for(var x=0;x<this.childArray.length;x++){
				strHtml+=this.childArray[x].htmlForPath();
			}

			strHtml+='	</div>\n';
		}
		return strHtml;
	},

	//Metodo per aggiungere le RootFolders
	addRootFolder: function (id, descrizione, authorization, livelloArchivistico, tooltip) {
			var newFolder=new treeView_RootFolder(id, descrizione, authorization, livelloArchivistico, tooltip);
			newFolder.parent=this;
			// l' internal.Id è una stringa composta dal path degli indici che indicano la posizione dell'elemento,
			// e dei suoi antenati, all'interno dei childArray che li contengono. Es 0.1.1.2 indica il terzo figlio del
			// secondo figlio del secondo figlio del primo elemento della TreeView.
			newFolder.internalId=this.internalId + "." + this.childArray.length;
			newFolder.treeView=this.treeView;			
			
			this.childArray.push(newFolder);			

			this.treeView.lastRootFolder=newFolder;
			
			return newFolder;
		},

	//Metodo per aggiungere cartelle
	addFolder: function (id, descrizione, authorization, livelloArchivistico, tooltip) {
			var newFolder=new treeView_Folder(id, descrizione, authorization, livelloArchivistico, tooltip);
			newFolder.parent=this;
			// l' internal.Id è una stringa composta dal path degli indici che indicano la posizione dell'elemento,
			// e dei suoi antenati, all'interno dei childArray che li contengono. Es 0.1.1.2 indica il terzo figlio del
			// secondo figlio del secondo figlio del primo elemento della TreeView.
			newFolder.internalId=this.internalId + "." + this.childArray.length;
			newFolder.treeView=this.treeView;
			
			this.childArray.push(newFolder);			

			return newFolder;
		},
		
	//Metodo per aggiungere documenti
	addDocument: function (id, descrizione, authorization, livelloArchivistico, tooltip) {
			var newDoc=new treeView_Document(id, descrizione, authorization, livelloArchivistico, tooltip);
			newDoc.parent=this;			
			// l' internal.Id è una stringa composta dal path degli indici che indicano la posizione dell'elemento,
			// e dei suoi antenati, all'interno dei childArray che li contengono. Es 0.1.1.2 indica il terzo figlio del
			// secondo figlio del secondo figlio del primo elemento della TreeView.
			newDoc.internalId=this.internalId + "." + this.childArray.length;
			newDoc.treeView=this.treeView;
			this.childArray.push(newDoc);			
			return newDoc;
		}
});

var treeView_RootFolder=Class.create();
treeView_RootFolder.prototype = Object.extend(new treeView_Folder(), {
	initialize: function(id, descrizione, authorization, livelloArchivistico, tooltip){
	    //questo è il nuovo oggetto
	    //var newRFolder=	create_treeView_Folder(id, descrizione, authorization, livelloArchivistico, tooltip);
	    //classe base
	    this.id=id;
	    this.internalId=0;
	    this.descrizione=descrizione;
	    this.livelloArchivistico=livelloArchivistico;
	    this.authorization=authorization;
	    this.tooltip=tooltip;

	    this.type=-1;
    		
	    this.childArray=new Array();	//contenitore dei figli		
	    this.treeView=null;
    	
	    this.parent=null;
    	
	    this.selected=false;		
	    this.cutted=false;
	    this.isDestination=false;



	    this.type=2;			//2=rootFolder	
	}
});



var treeView_Document=Class.create();
treeView_Document.prototype = Object.extend(new treeView_GenericItem(), {
	initialize: function(id, descrizione, authorization, livelloArchivistico, tooltip){
	    //specializzazione della casse base
	    //var newObj=new treeView_GenericItem(id, descrizione, authorization, livelloArchivistico, tooltip);
	    //classe base
	    this.id=id;
	    this.internalId=0;
	    this.descrizione=descrizione;
	    this.livelloArchivistico=livelloArchivistico;
	    this.authorization=authorization;
	    this.tooltip=tooltip;

	    this.type=-1;
    		
	    this.childArray=new Array();	//contenitore dei figli		
	    this.treeView=null;
    	
	    this.parent=null;
    	
	    this.selected=false;		
	    this.cutted=false;
	    this.isDestination=false;


	    this.type=1;	//1=Document
	},
	
	renderHtml: function() {
			var strHtml="";
			
			if(this.treeView.selectedItem){
				if(this.id==this.treeView.selectedItem.id){
					this.selected=true;
					this.treeView.currentItem=this;
					this.treeView.selectedItem=this;					
				}
			} else {
			    this.selected=false;
			}		
			if(this.treeView.cuttedItems){
				for(var x=0;x<this.treeView.cuttedItems.length;x++){
					if(this.id==this.treeView.cuttedItems[x].id){
						this.cutted=true;
					}
				}
			} else {
			    this.cutted=false;
			}		

			if(this.treeView.destinationItem){
				if(this.id==this.treeView.destinationItem.id){
					this.isDestination=true;
				}
			} else {
			    this.isDestination=false;
			}		
			
			var className= this.treeView.varName; // + " ctxMenu";
			className+=this.selected ? " itemSelected":"";
			className+=this.cutted ? " itemCutted":"";
			className+=this.isDestination ? " itemDestination":"";
			
			strHtml+='<div class="documentItem" id="' + this.treeView.varName + "_" + this.internalId + '">\n';
			strHtml+='	<div class="icons"><a href="javascript:;"  onclick="tree_iconClick(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode)"><img class="icoDocument ctxMenu" title="Visualizza documento" src="' + this.treeView.imgPath + 'documento.gif" /></a></div>\n';
			strHtml+='	<div class="description" ><a class="' + className + '" href="javascript:;" onclick="tree_setCurrent(' +  "'" +this.treeView.varName + "'" + ',this); tree_textClick(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode)" onmouseover="tree_tooltip(' + "'" + this.treeView.varName + "'" + ',this.parentNode.parentNode)" onmouseout="tree_tooltip(' + "'" + this.treeView.varName + "'" + ',null);">' + this.descrizione + '</a></div>\n';
			strHtml+='</div>\n';
			
			return strHtml;
		}
});

var myTreeView=Class.create();
myTreeView.prototype = {
	initialize: function(title,varName) {	
	    //Oggetto da istanziare.
	    //E' il gestore della treeView.
            	
	    //attributi pubblici
	    this.currentItem=null;				//Oggett su cui ho appena cliccato
	    this.selectedItem=null;				//Oggetto corrente (Bold)
	    this.cuttedItems=new Array(0);		//Oggetti da tagliare
	    this.destinationItem=null;			//Oggetto preparato come destinazione

	    this.varName=varName;
	    this.emptyFolder=null				//cartella che richiede i dati!!
	    this.subscribedItems=new Array()	//contenitore degli item sottoscritti
    	    	
	    this.imgPath="";
	    this.outputContainerId="";
	    this.title=title;
	    this.renderLastRoot=true;
	    //attributi privati
	    //this.childArray=new Array(0);	//contenitore dei figli	
    	
	    this.rootFolder=new treeView_Folder("_tree_Root", this.title,"","");
	    this.rootFolder.treeView=this;
	    this.rootFolder.internalId= "0";
    	
	    this.lastRootFolder=null;		//rootFolder correntemente aperta nella genealogia
	    this.limitTree=null;
    },

    //funioni pubbliche ------------------------------------------------------*
	
    clear: function(){
		//svuoto la vecchia treeView
		this.rootFolder.childArray=new Array();		
		this.currentItem=null;		
	},
	
	//evento generato all'apertura di una cartella vuota
	dataNeeded: function() {
			alert("Definire la funziona da richiamare per l'evento TreeView.dataNeeded()");
	},

	tooltip: function() {
			alert("Definire la funziona da richiamare per l'evento TreeView.tooltip()");
	},
		
	textClick: function() {
			alert("Definire la funziona da richiamare per l'evento TreeView.textClick()");
	},
		
	iconClick: function() {
			alert("Definire la funziona da richiamare per l'evento TreeView.iconClick()");
	},

	rootClick: function() {
			alert("Definire la funziona da richiamare per l'evento TreeView.rootClick()");
	},
		
	//funzione che inserisce i dati nella treeView
	feed: function(xmlData) {
			
			//alimentare la rootFolder con l'xml passato
			tree_parseNode(this.rootFolder,xmlData);
			
			this.currentFolder=this.rootFolder;
			//this.currentItem=this.rootFolder;
			this.refresh();
	},
		
	refresh: function() {
	
			var outputObj=document.getElementById(this.outputContainerId);
			outputObj.innerHTML=this.renderHtml();
			
			//visualizzo il treePath
			var strPath=this.htmlForPath();
			document.getElementById(this.varName + "_treeView_hierarchicalPath").innerHTML=strPath;				
			
			if(this.lastRootFolder!=null) {
			    //visualizzo il textPath
			    document.getElementById(this.varName + "_tree_currentPath").innerHTML=this.lastRootFolder.descrizione;
			}
			
			if(!this.renderLastRoot){
				document.getElementById(this.varName + "_treePath_" + this.lastRootFolder.internalId).style.display="none";
				document.getElementById(this.varName + "_tree_currentPath").innerHTML=this.lastRootFolder.parent.descrizione;
			}			
		
	},
	
	//ritorna un oggetto figlio (folder o document) dato il suo Id
	findChild: function(objId) {	
			var idArray=objId.replace(this.varName + "_","").split(".");
			idArray.shift();
			var resultObj=this.rootFolder;
			for (var x=0;x<idArray.length;x++)
			{
				resultObj=resultObj.childArray[idArray[x]];
			}
			
			return resultObj;
		},

	//Metodo per aggiungere RootFolders
	addRootFolder: function(id, descrizione, authorization, livelloArchivistico, tooltip) {
	    alert('addRootFolder');
	    //return this.rootFolder.addRootFolder(id, descrizione, authorization, livelloArchivistico, tooltip);
	},
		
	//Metodo per aggiungere cartelle
	addFolder: function(id, descrizione, authorization, livelloArchivistico, tooltip) {
	    alert('addFolder');
	    //return this.rootFolder.addFolder(id, descrizione, authorization, livelloArchivistico, tooltip);
    },
	
	//Metodo per aggiungere documenti
	addDocument: function(id, descrizione, authorization, livelloArchivistico, tooltip) {
	    alert('addDocument');
		//return this.rootFolder.addDocument(id, descrizione, authorization, livelloArchivistico, tooltip);
	},
		
	htmlForPath: function() {			
		var strHtml="";
		for(var x=0;x<this.rootFolder.childArray.length;x++){
			strHtml+=this.rootFolder.childArray[x].htmlForPath();
		}
		return strHtml;
	},
		
	//Metodo per creare l'html della treeView
	renderHtml: function() {
		var strHtml="";
		
		strHtml+='<div id="' + this.varName + 'Content" class="treeViewContainer">\n';
		//l'header della treeView
		strHtml+='	<div class="treeHeader">\n';
		strHtml+='		<div class="textPath">\n';
		strHtml+='			<div class="buttonContainer" id="tree_tvButton">\n';
		strHtml+='				<a href="javascript:;" onclick="tree_showPath(' + "'" + this.varName + "'" + ')"><img id="' + this.varName + '_tree_treeViewButton" title="Apre o chiude la parte di genealogia" src="' + this.imgPath + 'showAllOn.gif" /></a>\n';
		strHtml+='			</div>\n';
		strHtml+='			<div class="buttonContainer" id="tree_fuButton">\n';
		strHtml+='				<a href="javascript:;" onclick="tree_folderUp(' + "'" + this.varName + "'" + ')"><img id="tree_folderUpButton" title="Vai al padre" src="' + this.imgPath + 'folderUp.gif" /></a>\n';
		strHtml+='			</div>\n';
		/**
		strHtml+='			<fieldset id="' +  this.varName + '_tree_fontSizer" class="fontSizer">\n';
		strHtml+='				<a style="font-size:0.7em" href="javascript:;" onclick="tree_setSize(' + "'" + this.varName + "'" + ',this)" >A</a>\n';
		strHtml+='				<a style="font-size:1em" href="javascript:;" onclick="tree_setSize(' + "'" + this.varName + "'" + ',this)" >A</a>\n';
		strHtml+='				<a style="font-size:1.27em" href="javascript:;" onclick="tree_setSize(' + "'" + this.varName + "'" + ',this)" >A</a>\n';
		strHtml+='				<a style="font-size:1.6em" href="javascript:;" onclick="tree_setSize(' + "'" + this.varName + "'" + ',this)" >A</a>\n';
		strHtml+='			</fieldset>\n';
		*/
		strHtml+='			<p id="' + this.varName + '_tree_currentPath">' + this.title + '</p>\n';
		strHtml+='		</div>\n';
		strHtml+='		<div id="' + this.varName + '_treeView_hierarchicalPath" class="treePath">\n';
		strHtml+='		<div class="folderItem">\n';
		strHtml+='			<div class="description"><a href="javascript:;" ><img src="' + this.imgPath + 'MainFolder2.gif" title="MainFolder2" /><b>' + this.title + '</b></a></div>\n';
		strHtml+='		</div>\n';					
		strHtml+='		</div>\n';
		strHtml+='	</div>\n';
					
		
		//il body della treeView
		strHtml+='	<div id="' + this.varName + '_tree_Body" class="treeBody">\n';
		strHtml+=	this.rootFolder.childHtml();
		strHtml+='	</div>\n';			
		/*
		strHtml+='	<div id="' + this.varName + '_tree_Footer" class="footer">\n';
		strHtml+='	</div>\n';						
		*/
		strHtml+='</div>\n';
	
		return strHtml;
	}
		
}

function beforeCtxDisplay(srcObj){
	//stabilisco quali voci visualizzare sul menu
	var className=srcObj.className;
	var treeObj=eval(className.split(" ")[0]);
	var nodeObj=treeObj.findChild(srcObj.parentNode.parentNode.id.split("_")[1]);
	var buttonArray;
	
	//$('ctx_Title').innerHTML = "Menu " + treeObj.title;
	buttonArray = $('context_menu_container').immediateDescendants();
	
	for (var x=0;x<buttonArray.length;x++){
		switch (buttonArray[x].id){
			case "ctx_btnCut":
				buttonArray[x].style.display=(nodeObj.cutted || treeObj.destinationItem ? "none" : "block");
			    break;
			
			case "ctx_btnDest":
				buttonArray[x].style.display=(treeObj.cuttedItems.length > 0 || treeObj.destinationItem ? "none" : "block");
			    break;
			
			case "ctx_btnDest_subMenu":
				buttonArray[x].style.display=((treeObj.cuttedItems.length > 0 || treeObj.destinationItem) && !(nodeObj.isDestination || nodeObj.cutted) ? "block" : "none");
			    break;
			    
			case "ctx_btnDelete":
				buttonArray[x].style.display=(nodeObj.type==0 ? "none" : "block");
			    break;
			
			case "ctx_btnCancel":
				buttonArray[x].style.display=(treeObj.destinationItem || treeObj.cuttedItems.length > 0 ? "block" : "none");
			    break;
		}
	}
}

function resetSelection(treeObj){
	//rimuovo tutte le selezioni
	for(x=0;x<treeObj.cuttedItems.length;x++){
		treeObj.cuttedItems[x].cutted=false;
		//htmlObj=document.getElementById(treeObj.varName + "_" + treeObj.cuttedItems[x].internalId);
		//htmlObj.className=htmlObj.className.replace(" itemCutted","")
	}
	treeObj.cuttedItems=new Array()
	
	if(treeObj.destinationItem){
		treeObj.destinationItem.isDestination=false;
		treeObj.destinationItem=null;
	}
	//htmlObj=document.getElementById(treeObj.varName + "_" + treeObj.destinationItem.internalId);
	//htmlObj.className=htmlObj.className.replace(" itemDestination","")	
	
	
	//document.getElementById("ctx_btnDest_subMenu").style.display="none";
	//document.getElementById("ctx_btnDest").style.display="block";	

	//refresh dell'albero
	document.getElementById(treeObj.varName + "_tree_Body").innerHTML=treeObj.currentFolder.childHtml();
}