//Inizializza la classe Tree per sapere se partiamo da una visualizzazione
//ad albero o tabellare e per sapere quale era l'item richiesto
//Info tabellare [true|false] - CapoThreadMID - MID itemSelezionato
function Tree(startFromTabellare, ctMID, selectedItem) 
{
	this.InitFromTabellare = startFromTabellare;
	var _lnk = document.getElementById("lnkSwitch");
	if(_lnk)
	{
		if(this.InitFromTabellare)
			_lnk.innerHTML  = "Visualizza struttura";
		else
			_lnk.innerHTML  = "Visualizza sequenza";
		
		_lnk = document.getElementById("lnkApriRami");
		if(_lnk)
			_lnk.innerHTML  = "Apri rami";
		
		_lnk = document.getElementById("lnkChiudiRami");
		if(_lnk)
			_lnk.innerHTML  = "Chiudi rami";
		
		_lnk = document.getElementById("lnkSwitchBlackList");
		if(_lnk)
			_lnk.innerHTML  = "Nascondi blacklist";
	}
	
	this.ItemsCount = 0;
	this.CTMID = ctMID;
	this.TreeSelectedItem = selectedItem;
	this.ItemsId = new Array();
	this.BlackListId = new Array();
	
	//aggiunge item al flid specifico se non esiste
	//il flid crea un array con item[0] = flid
	this.AddItem = function(mid, flid) 
	{
		//cerchiamo il suo flid
		var _exist = false;
		for(var i=0;i<this.ItemsId.length;i++)
		{
			if(this.ItemsId[i][0] == flid)
			{
				this.ItemsId[i].push(mid);
				_exist = true;
				break;
			}
		}
		
		if(!_exist)
		{
			var _flidArray = new Array();
			
			//se non si tratta di un capothread item[0] è il flid
			if(flid > 0)
				_flidArray.push(flid);
			//si tratta di un capothread item[0] è il mid ossia se stesso
			else
				_flidArray.push(mid);
			this.ItemsId.push(_flidArray);
		}
		
		//tiene il conteggio totale degli elementi contenuti
		this.ItemsCount++;
	};
	
	//cicla cercando il flid richiesto
	//se lo trova torna array con id del ramo
	this.GetRamo = function(flid) 
	{
		var _ramo;
		for(var i=0;i<this.ItemsId.length;i++)
		{
			if(this.ItemsId[i][0] == flid)
			{
				_ramo = this.ItemsId[i];
				break;
			}
		}
		return _ramo;
	};
	
	//torna un array contente gli id dei flid
	this.GetFLIDs = function() 
	{
		var _flids = new Array();
		for(var i=0;i<this.ItemsId.length;i++)
			_flids.push(this.ItemsId[i][0]);
		return _flids;
	};
	
	//aggiunge elemento mid in BlackList
	this.AddItemBlackList = function(mid) 
	{
		this.BlackListId.push(mid);
	};
	
	//cicla sullla blacklist informando se il m_id
	//passato ne fa parte o meno
	this.BlackList = function(m_id) 
	{
		var _result = false;
		for(var i=0;i<this.BlackListId.length;i++)
		{
			if(this.BlackListId[i] == m_id)
			{
				_result = true;
				break;
			}
		}
		return _result;
	};
	
	//torna un array contente gli id dedella blacklist
	this.GetBlackList = function() 
	{
		return this.BlackListId;
	};
	
	//crea l'array di oggetti che costituiscono l'albero
	//obsoleta!!!!
	this.createItems = function(itemsIds) 
	{
		this.ItemsId = new Array();
		this.ItemsId = itemsIds.split(",");
		
		//alert(this.ItemsId.length);
	};
	
	//seleziona / deseleziona gli item sull'evento onclick
	this.selectItem = function(itemId)
	{
		//alert("ola");
		//recuperiamo item da deselezionare
		var _div = document.getElementById("tli" + this.TreeSelectedItem);
		if(_div)
		{
			//alert("div da deselezionare trovato...");
			_div.className='treeLineInfo';
		}
		
		//recuperiamo item da selezionare
		_div = document.getElementById("tli" + itemId);
		if(_div)
		{
			//alert("div da selezionare trovato...");
			_div.className='treeLineInfoSelected';
			//salviamo lo stato
			this.TreeSelectedItem = itemId;
			
			//cerchiamo il suo link per metterlo visited
			var _lnk = document.getElementById("alnk" + itemId);
			if(_lnk)
				_lnk.style.color = "#9D2C22";
		}
	};
	
	this.IsTabellare = function()
	{
		var _isTabellare = false;
		//cerchiamo di capire la visualizzazione corrente
		if(getCookie("TreeView") == "")
			setCookie("TreeView","1");
		else if(getCookie("TreeView") == "0")
			_isTabellare = true;
		return _isTabellare;
	};
	
	//cambia la visualizzazione da albero / a tabellare e viceversa
	this.changeView = function(link)
	{
		if(this.IsTabellare())
		{
			//switch verso la visualizzazione ad albero binario
			//alert("la visualizzazione corrente è tabellare");
			//alert("lavoriamo html");
			for(var i=0;i<this.ItemsId.length;i++)
			{
				for(var j=0;j<this.ItemsId[i].length;j++)
				{
					//visualizzo lineette
					var _o = document.getElementById("l" + this.ItemsId[i][j]);
					if(_o)
						_o.className='inline';
					
					//visualizzo tutto il corpo del messaggio selezionato se non è in blacklist
					var _o = document.getElementById("TIB" + this.ItemsId[i][j]);
					if(_o)
					{
						if(this.TreeSelectedItem == this.ItemsId[i][j] && !this.BlackList(this.ItemsId[i][j]))
							_o.className='inline';
						else
							_o.className='hide';
					}
				}
			}
			
			link.innerHTML  = "Visualizza sequenza";
			setCookie("TreeView","1");
		}
		else
		{
			//switch verso la visualizzazione tabellare
			//alert("la visualizzazione corrente è Albero binario");
			
			for(var i=0;i<this.ItemsId.length;i++)
			{
				for(var j=0;j<this.ItemsId[i].length;j++)
				{
					//nascondo lineette
					var _o = document.getElementById("l" + this.ItemsId[i][j]);
					if(_o)
						_o.className='hide';
					
					//visualizzo tutto il corpo del messaggio selezionato se non è in blacklist
					var _o = document.getElementById("TIB" + this.ItemsId[i][j]);
					if(_o)
					{
						if(this.TreeSelectedItem == this.ItemsId[i][j] && !this.BlackList(this.ItemsId[i][j]))
							_o.className='inline';
						else
							_o.className='hide';
					}
					
					
					//visualizzo tutti i flid container div
					var _o = document.getElementById("rm" + this.ItemsId[i][j]);
					if(_o)
						_o.className='inline';
					
					//resetto a meno tutte le img Open/Close
					var _o = document.getElementById("OC" + this.ItemsId[i][j]);
					if(_o)
					{
						_o.src = getImgDirectory(_o.src) + "m-.gif";
						_o.alt = "Chiudi";
						_o.title = "Chiudi";
					}
				}
			}
				
			link.innerHTML  = "Visualizza struttura";
			setCookie("TreeView","0");
		}
		
		link.style.cursor = "pointer";
		document.body.style.cursor = "default";
		
		ShowHideItemOpzioni(this);
	};
};

/*
Inizio funzioni esterne di supporto
*/
function Change(t,link)
{
	//la classe è stata inizializzata?
	if(typeof t != "object")
		return;
		
	link.innerHTML = "<img src='images/clessidra.gif' align='absmiddle' alt='Attendere prego' border='0'>&nbsp;Elaborazione in corso...";
	link.style.cursor = "wait";
	document.body.style.cursor = "wait";
	
	var callwrapper = new CCallWrapper(t, 1, 'changeView', link);
	CCallWrapper.asyncExecute(callwrapper);
}

//si occupa di nascondere/visualizzare le opzioni a seconda
//della visualizzazione corretnte tabellare o a struttura
function ShowHideItemOpzioni(t)
{
	var _o;
	//se siamo in visualizzazione tabellare
	if(t.IsTabellare())
	{
		//alert('tabellare');
		_o = document.getElementById("itemOpz1");
		if(_o)
			_o.style.display = 'inline';
		
		_o = document.getElementById("itemOpz2");
		if(_o)
			_o.style.display = 'none';
		
		_o = document.getElementById("itemOpz3");
		if(_o)
			_o.style.display = 'none';
			
		_o = document.getElementById("itemOpz4");
		if(_o)
			_o.style.display = 'inline';
	}
	else
	{
		//alert('struttura');
		_o = document.getElementById("itemOpz1");
		if(_o)
			_o.style.display = 'inline';
		
		_o = document.getElementById("itemOpz2");
		if(_o)
			_o.style.display = 'inline';
		
		_o = document.getElementById("itemOpz3");
		if(_o)
			_o.style.display = 'inline';
		
		_o = document.getElementById("itemOpz4");
		if(_o)
			_o.style.display = 'inline';
	}
}

//si occupa di nascondere/visualizzare gli item in blacklist
function ShowHideBlackList(t,link)
{
	if (!document.getElementById)
		return;
	
	//la classe è stata inizializzata?
	if(typeof t != "object")
		return;
		
	var _div;
	var _divBody;
	var _blackList = t.GetBlackList();
	for(var i=0;i<_blackList.length;i++)
	{
		//cerchiamo il div del titolo
		_div = document.getElementById("tli" + _blackList[i]);
		if(_div)
		{
			if(_div.hasChildNodes())
			{
				_divBody = document.getElementById("TIB" + _blackList[i]);
				if(_div.childNodes[0].style.display == 'none')
				{
					_div.childNodes[0].style.display = "block";
					link.innerHTML  = "Nascondi blacklist";
				}
				else
				{
					_div.childNodes[0].style.display = "none";
					link.innerHTML  = "Visualizza blacklist";
					
					if(_divBody)
						if(_divBody.className == "inline")
							_divBody.className = "hide";
				}
			}
		}
	}
}
	
//visualizza sequenza
//recupera il ramo del flid e visualizza in ajax tutti i messaggi contenuti
//richide oggetto tree stanziato
//richide include forum.js per funzione getImgName
function OCFlid(t,flid,link)
{
	if (!document.getElementById)
		return;
	
	//la classe è stata inizializzata?
	if(typeof t != "object")
		return;
		
	var _ramo = t.GetRamo(flid);
	if((typeof _ramo == "object") && (_ramo.constructor == Array))
	{
		var _closeSequenza = false;
		var _img = null;
		for(i=0;i<link.childNodes.length;i++)
		{
			if(link.childNodes[i].nodeName == "IMG")
			{
				_img = link.childNodes[i];
				var _imgName = getImgName(_img.src);
				//alert(_imgName);
				if(_imgName.indexOf("_on") > 0)
					_closeSequenza = true;
				break;
			}
		}
	
		//alert("Ok ramo trovato");
		for(var i=0;i<_ramo.length;i++)
		{
			var _div;
			
			//cerchiamo il div se:
			//1) si desidera chiudere i messaggi del ramo
			//oppure
			//2) si desidera aprire i messaggi del ramo e il messaggio corrente non è in blacklist
			if((_closeSequenza == true) || ((_closeSequenza == false) && (t.BlackList(_ramo[i]) == false)))
				_div = document.getElementById("TIB" + _ramo[i]);
				
			if(_div)
			{
				//si vogliono aprire tutti i messaggi del ramo
				if(_closeSequenza == false)
				{
					if(_div.className == 'hide')
					{
						doAjax("c.aspx?i=" + t.CTMID + "&m=" + _ramo[i],"TIB" + _ramo[i]);
						t.selectItem(_ramo[i]);
						
						//stiamo lavorando il flid
						if(i==0)
						{
							//visualizzoil flid container div
							var _o = document.getElementById("rm" + _ramo[i]);
							if(_o)
								_o.className='inline';
									
							//resetto a meno le img Open/Close
							var _o = document.getElementById("OC" + _ramo[i]);
							if(_o)
							{
								_o.src = getImgDirectory(_o.src) + "m-.gif";
								_o.alt = "Chiudi";
								_o.title = "Chiudi";
							}
						}
					}
				}
				//si vogliono chiudere tutti i messaggi del ramo
				else
				{
					if(_div.className != 'hide')
						_div.className = 'hide';
				}
			}
		}
		
		//switch img
		//abbiamo aperto tutta la sequenza
		if(_img)
		{
			if(!_closeSequenza)
			{
				_img.src = "images/sequenza_on.gif";
				_img.alt = "Chiudi tutti i messaggi";
				link.title = "Chiudi tutti i messaggi";
			}
			//abbiamo chiuso tutta la sequenza
			else
			{
				_img.src = "images/sequenza.gif";
				_img.alt = "Apri tutti i messaggi";
				link.title = "Apri tutti i messaggi";
			}
		}
	}
	else
	{
		alert("La sequenza richiesta non è stata trovata!");
	}
}

//apre/chiude tutti i rami
//recupera prima gli id dei flid 
//poi cerca le immagini plus/minus ed esegue l'azione
function OCTuttiRami(t, chiudirami)
{
	if (!document.getElementById)
		return;
	
	//la classe è stata inizializzata?
	if(typeof t != "object")
		return;
	
	//se sono in visualizzazione struttura....
	if(!t.IsTabellare())
	{
		//recuperiamo tutti flids
		var _flids = t.GetFLIDs();
		//recuperiamo gli obj immagini +/-
		for(var i=0;i<_flids.length;i++)
		{
			var _img = document.getElementById("OC" + _flids[i]);
			if(_img)
			{
				//OCRamo(_img, _flids[i])
				var _div = document.getElementById("rm" + _flids[i]);
				if(_div)
				{
					//desidero chiudere il ramo
					if(chiudirami)
					{
						//se il ramo è aperto...
						if(_div.className == "inline")
						{
							_img.src = getImgDirectory(_img.src) + "p-.gif";
							_img.alt = "Apri";
							_img.title = "Apri";
							
							//vediamo se aveva il corpo del flid aperto lo chiudiamo
							var _o = document.getElementById("TIB" +  _flids[i]);
							if(_o)
							{
								//alert(_o.className);
								if(_o.className == "inline")
									_o.className = "hide";
							}
							
							//metto il div contenitore in hide
							showHide(_div);
						}
					}
					//desidero aprire il ramo
					else
					{
						//se il ramo è chiuso...
						if(_div.className == "hide")
						{
							_img.src = getImgDirectory(_img.src) + "m-.gif";
							_img.alt = "Chiudi";
							_img.title = "Chiudi";
							
							//metto il div contenitore in inline/visible
							showHide(_div);
						}
					}
				}
			}
		}
	}
}

//apre/chiude il ramo
function OCRamo(img, m_id)
{
	//alert("OCRamo");
	//cerco il div ramo container su cui operare
	var _div = document.getElementById("rm" + m_id);
	if(_div)
	{
		//alert("classname = " + _div.className);
		if(_div.className == "inline")
		{
			img.src = getImgDirectory(img.src) + "p-.gif";
			img.alt = "Apri";
			img.title = "Apri";
			
			//vediamo se aveva il corpo del flid aperto lo chiudiamo
			var _o = document.getElementById("TIB" + m_id);
			if(_o)
			{
				//alert(_o.className);
				if(_o.className == "inline")
					_o.className = "hide";
			}
		}
		else
		{
			img.src = getImgDirectory(img.src) + "m-.gif";
			img.alt = "Chiudi";
			img.title = "Chiudi";
		}
		
		//alert(img.src);
	}
	else
	{
		alert("rm" + m_id + " non trovaro!!");
	}
	
	//switch class div
	showHide(_div);
}

function getImgDirectory(source) 
{
    return source.substring(0, source.lastIndexOf('/') + 1);
}