/** Variabili per la gestione di precedente e successivo */
var currComm = 'na'; //commento attualmente selezionato
var prevComm = 'na'; //commento precedentemente selezionato
var numComm = perPage; //numero di item della lista ritornati dalla servlet
var arrayIdEff = new Array (); //array di id effettivi degli item della lista
var arrayIdSeq = new Array (); //array di item sequenziali degli item della lista
var arrayIdSeqNavigation = new Array (); //array di tracciamento della navigazione (id sequenziali)
var arrayIdSeqNavigationPage = new Array (); //array di tracciamento della navigazione (id pagina)
var clickFirstElement = false; //true se dopo aver caricato la lista devo cliccare il primo elemento
var clickLastElement = false; //true se dopo aver caricato la lista devo cliccare l'ultimo elemento
var setFirstHilight = 'na'; //utilizzato per selezionare il dettaglio all'atterraggio sulla pagina lista
var firstLoad = true;
/** Num totale pagine */
var totPage;
/** Commentario disabilitato */
var disabled=false;
/** Commentario sospeso */
var suspended=false;
/** Controllo per pagina caricata */
var pageLoaded = false;
/**
* Fa partire l'applicazione.
* Chiamata all'on load del body.
*/
function startCommenti ()
{
	setVar();
	//alert('startCommenti, type: '+pageType);
	/* Scrittura html */
	if (pageType == 'list')
		document.getElementById('htmlComm').innerHTML=htmlList;
	else
		document.getElementById('htmlComm').innerHTML=htmlLastTen;
	/* Titolo */
	if(document.getElementById('commenti_titolo'))
		document.getElementById('commenti_titolo').innerHTML=titoloLista;
	start=extractParam('start');
	if(!start)
		start=0;
	loadTable();
	if (pageType == 'list')
	{
		//load();
		dhtmlHistory.initialize();
		dhtmlHistory.addListener(historyChange);
	}
}


function CheckIdCommento(){
	if (commentarioID==-1)
		oSC.StartCommenti();
	else
		startCommenti();
}

window.onload=CheckIdCommento;



/** Implementazione del back */
/**
* In Firefox, viene chiamata anche all'on load della pagina; 
* in Explorer solo al caricamento della pagina conseguente ad azioni
* di back/forward.
* Deve essere eseguita solo dopo il caricamento completo dell'applicazione.
* Implementa il meccanismo
* di history back.
*@param newLocation: stringa successiva al # nella querystring
*@param historyData: NON UTILIZZATO
*/
var timerHistoryID;
function historyChange (newLocation, historyData)
{
	if(pageLoaded)
	{
	    window.clearTimeout(timerHistoryID)
		reloadADV();
		var dataArray=newLocation.split('_');
		messageIDToLoad=dataArray[0];
		
		startToLoad=dataArray[1];
		if((!document.location.hash)||(document.location.hash=='#'))
		{
			firstLoad=true;
			parseQuery();
			load();
			loadTable();
		}
		else
		{
			if(startToLoad!=undefined&&startToLoad!=start)
			{
				start=startToLoad;
				messageID=messageIDToLoad;
				load();
				loadTable();
			}
			else if(messageIDToLoad!=currComm)
			{
				currComm=messageIDToLoad;
				load();
			}
		}
	}
	else
		timerHistoryID = window.setTimeout(historyChange,500,newLocation, historyData);
}
/**
* Chiamata in corrispondenza di azioni utente. Traccia la navigazione.
*@param _key: stringa formata da idSequenzialeComm_numPagina
*/
function createHistoryEntry (_key)
{
	dhtmlHistory.add(_key,'');
}
/** Chiamate alla servlet */
/**
* Chiama la servlet per il dettaglio del commento.
*/
function load ()
{
	//alert('load');
	var paramString = '';
	if (messageID != 'na')
	{
		//alert('load1');
		setFirstHilight = paramString += 'messageID=' + messageID;
		messageID = 'na';
	}else
	{
		//alert('load2');
		var commToLoad = currComm;
		if (commToLoad != 'na')
			paramString += 'messageID=' + commToLoad;
		loadDelayed(paramString);
	}
}
/**
* Chiama la servlet per il dettaglio del commento. Chiamata
* dopo il caricamento della tabella.
*@param _paramString: querystring con i parametri
*/
function loadDelayed(_paramString)
{
	//alert('loadDelayed: '+_paramString);
	if(!disabled)
	{
		if (_paramString != '')
		{
			var url = urlSquidDetail + _paramString;
			var url2 = urlServletDetail + _paramString;
			contentLoad (url,setCommentDetail,commDisabled,null,commDetailTimeout,commDetailTimeout,timeouInterval,'boxcommandloading',loadingMsg,url2);
		} 
		else
			setCommentDetail (null,false);
	}
}
/**
* Chiama la servlet per la lista.
*/
function loadTable ()
{
	var paramString = '';
	if (commentarioID != 'na')
		paramString += 'commentarioID=' + commentarioID;
	if (perPage != 'na')
		paramString += '&' + 'perPage=' + perPage;
	if (numCharTit != 'def')
		paramString += '&' + 'numCharTit=' + numCharTit;
	if (numCharAut != 'def')
		paramString += '&' + 'numCharAut=' + numCharAut;
	paramString += '&' + 'start=' + start;
	var thereIsCookie=getCookie('commentiID');
	var url = '';
	var url2 = '';
	if (thereIsCookie!=null && thereIsCookie!='')
		url=urlServletList;
	else
	{
		url=urlSquidList;
		url2=urlServletList;
	}
	url += paramString;
	if(url2!='')
	{
		url2 += paramString;
		contentLoad(url,fillCommentTable,commSuspended,commDisabled,tableTimeout,tableTimeout,timeouInterval,'tabella_commenti',loadingMsg,url2);
	}
	else
		contentLoad(url,fillCommentTable,commSuspended,commDisabled,tableTimeout,tableTimeout,timeouInterval,'tabella_commenti',loadingMsg);
	
}
/** Navigazione della lista */
/**
* Invocata al click su un item della lista.
* Aggiorna in contatore e carica il dettaglio.
*@param _id: id sequenziale dell'item cliccato
*/
function commentClicked (_id)
{
	//alert('commentClicked, id: '+_id);
	if(pageType=='lastTen')
	{
		var abstractUrlDef = '';
		if(abstractUrl.indexOf('&amp;') > -1)
		{
			var abstUrlArray = abstractUrl.split('&amp;');
			for (var h = 0; h < abstUrlArray.length; h++)
			{
				abstractUrlDef += abstUrlArray[h];
				if(h != (abstUrlArray.length-1))
					abstractUrlDef += '&';
			}
		}
		else
			abstractUrlDef = abstractUrl;
		var linkUrl=abstractUrlDef + 'commentarioID=' + commentarioID + '&type=list&messageID='+_id+'&start=0&perPage='+perPageList;
		document.location.href=linkUrl;
	}
	else
	{
		currComm=_id;
		trackNavigation ();
		load ();
	}
}
/**
* Resetta la selezione sulla tabella
*/
function updateHilight ()
{
	var _id=getIdSeq(currComm);
	//alert('updateHilight, id: '+_id);
	for(var t=0;t<numComm;t++)
	{
		if(t!=_id)
		{
			if(document.getElementById ("commenti_itemList" + t))
			{
				document.getElementById ("commenti_itemList" + t).style.fontWeight = "normal";
				document.getElementById (t).className = "";
			}
		}
		else
		{
			if(document.getElementById ("commenti_itemList" + _id))
			{
				document.getElementById ("commenti_itemList" + _id).style.fontWeight = "bold";
				document.getElementById (_id).className = "underline";
			}
		}
	}
	if (pageLoaded == false)
		pageLoaded = true;
}

/**
* Chiamata alla pressione del tasto "successivo"
* Aggiorna i contatori e carica il dettaglio.
*/
function next ()
{
	var currCommSeq=getIdSeq(currComm);
	var control1 = (currCommSeq == 0);
	//alert('NEXT - prevComm: '+prevComm+', prevPage: '+prevPage);
	if (control1)
	{
		start --;
		clickLastElement = true;
		loadTable ();
	}
	else
	{
		currCommSeq--;
		currComm =getIdEff(currCommSeq);
		trackNavigation ();
		load();
	}
}
/**
* Chiamata alla pressione del tasto "precedente"
* Aggiorna i contatori e carica il dettaglio.
*/
function prev ()
{
	var currCommSeq=getIdSeq(currComm);
	var control1 = (currCommSeq == (perPage-1));
	//alert('PREV - prevComm: '+prevComm+', prevPage: '+prevPage);
	if (control1)
	{
		start ++;
		clickFirstElement = true;
		loadTable ();
	}
	else
	{
		currCommSeq++;
		currComm =getIdEff(currCommSeq);
		trackNavigation ();
		load();
	}
}
/**
* Chiamata al click sui numeri di pagina presenti in fondo
* alla lista.
*@param _num: numero di pagina cliccato
*/
function clickPageNumber(_num)
{
	if(_num==-1)
		start++;
	else if(_num==-2)
		start--;
	else
		start = _num;
	resetDetail();
	loadTable ();
}
/**
* Ricava l'id effettivo a partire da quello progressivo
*@param _id: id senquenziale
*@return id effettivo
*/
function getIdEff (_id)
{
	var returnStr=arrayIdEff [_id];
	if(returnStr!=undefined&&returnStr!=null)
		return returnStr;
	else
		return 'na';
}
/**
* Ricava l'id progressivo a partire da quello effettivo
*@param _id: id effettivo
*@return id sequenziale
*/
function getIdSeq (_messID)
{
	for (var a = 0; a < numComm; a ++)
	{
		if (arrayIdEff [a] == _messID)
		{
			return arrayIdSeq [a];
		}
	}
	return 'na';
}
/**
* Aggiorna il contatore del commento attuale e tiene traccia della navigazione
*@param _idSeq: id sequenziale
*/
function trackNavigation ()
{
	if(firstLoad==true)
		firstLoad=false;
	else
	{
		createHistoryEntry(currComm+'_'+start);
		reloadADV();
		callRS();
	}
}
/**
* Cancella il dettaglio del commento.
*/
function resetDetail()
{
	currComm='na';
	setCommentDetail (null,false);
}
/** Popolamento della lista e del dettaglio */
/**
* Scrive il dettaglio del commento selezionato.
* Se nessun commento &egrave; stato selezionato, aggiunge solo il bottone scrivi.
*@param _responseText: testo ritornato dalla servlet
*@param fill: false se non c'&egrave; testo da visualizzare
*/
function setCommentDetail (_responseText,fill)
{
	if (fill != false)
		fill = true;
	if (fill)
	{
		document.getElementById ('bgdetail').innerHTML = nbSpace;
		document.getElementById ('boxcommandloading').innerHTML = '<div id="pag"></div><div id="boxcomm"></div><div id="boxbottsfum"></div>';
		if(!suspended)
			document.getElementById ('boxbottsfum').innerHTML = postDetail;
		else
			document.getElementById ('boxbottsfum').innerHTML = postDetailSuspended;
		/** controllo se c'&egrave; l'href */
		if (_responseText.indexOf('href') == -1)
			document.getElementById ('boxcomm').innerHTML = _responseText;
		else
		{
			//aggiusto il link solo su Community
			if (typeof GetNomeCanale=="function"){
				
				if (GetNomeCanale()=="community"){
				
					var tagStart=_responseText.indexOf('<a class="autred"');
				
					if(tagStart>-1){
					
						var tagEnd=_responseText.indexOf('</a',tagStart);					
						var iStartSubstr=_responseText.indexOf('href',tagStart)+6;
						var sTemp=_responseText.substring(iStartSubstr,tagEnd);
						var iEndSubstr=sTemp.indexOf('"');
						var nick=sTemp.substring(0,iEndSubstr);
						var linkAuthor=urlPersonalArea+nick;
						_responseText=_responseText.replace('"'+nick+'"','"'+linkAuthor+'"');
						_responseText=_responseText.replace("href=","target='_new' href=");
						document.getElementById ('boxcomm').innerHTML = _responseText;
					}
					else
						//se l'utente nn &egrave; loggato
						document.getElementById ('boxcomm').innerHTML = _responseText;	

				}
				else
					//se nn sono su community
					document.getElementById ('boxcomm').innerHTML = _responseText;	
			}
			else
				//se sono su un canale ke nn ha la fnz ke legge la var apache
				document.getElementById ('boxcomm').innerHTML = _responseText;
		}
		var precAndSuccStr=writeDetailPrecAndSucc();
		//alert('fill: '+precAndSuccStr);
		document.getElementById ('pag').innerHTML = precAndSuccStr;
	}else
	{
		currComm='na';
		document.getElementById ('bgdetail').innerHTML = nbSpace;
		document.getElementById ('boxcommandloading').innerHTML = '<div id="boxbottsfum"></div>';
		if(!suspended)
			document.getElementById ('boxbottsfum').innerHTML = postDetail;
		else
			document.getElementById ('boxbottsfum').innerHTML = postDetailSuspended;
	}
	updateHilight ();
}
/**
* Scrive la lista
*@param _responseText: testo ritornato dalla servlet
*/
function fillCommentTable(_responseText)
{
	//alert('fillCommentTable');
	if(disabled)
	{
		//non faccio niente
		document.getElementById ('tabella_commenti').innerHTML=disabledMsg;
	}
	else
	{
		var tableCode = '';
		var tableDef = '';
		if (pageType == 'list')
		{	
			var pageNumDisplay=Number(start+1);
			tableCode = adjustTableCode (_responseText);
			//if (start==undefined) start=0-1;
			
			tableDef = setPaginazString(pageNumDisplay,totPage) + tableCode + postTabList;
			if (clickFirstElement)
			{
				clickFirstElement = false;
				currComm = getIdEff(0);
			}
			else if (clickLastElement)
			{
				clickLastElement = false;
				currComm = getIdEff(numComm-1);
			}
			trackNavigation ();
			load();
		} else if (pageType == 'lastTen')
		{
			tableCode = adjustTableCode (_responseText);
			if(suspended)
				tableDef = preTabLastTenSuspended + tableCode + postTabLastTen;
			else
				tableDef = preTabLastTen + tableCode + postTabLastTen;
			pageLoaded = true;
		} 
		else
		{
			tableDef = tableCode;
			pageLoaded = true;
		}
		document.getElementById ('tabella_commenti').innerHTML = tableDef;
		if (pageType == 'list')
		{
			document.getElementById ('commenti_pagnumber').innerHTML = writePagRange();
			document.getElementById ('commenti_pagprecsucc').innerHTML = writePagPrecAndSucc();
			if (setFirstHilight != 'na')
			{
				currComm=setFirstHilight.substring(setFirstHilight.indexOf('=')+1);
				loadDelayed(setFirstHilight);
				setFirstHilight = 'na';
			}
		}
	}
	//document.getElementById('htmlComm').style.minHeight='136px';
}
/**
* Scrive l'html dei numerini
*/
function writePagRange(){
	var strPageNumber='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
	if (totPage > maxPageNumber)
		pageNumber=maxPageNumber;
	else
		pageNumber=totPage;
	var delta=Math.floor((pageNumber-1)/2);
	var startInd=0;
	if (start>=(pageNumber-delta))
	{
		if(start<(totPage-delta))
			startInd=start-delta;
		else
			startInd=totPage-pageNumber;
	}
	var stopInd=startInd+pageNumber;
	if(stopInd>totPage)
		stopInd=totPage;
	for (p=startInd;p<stopInd;p++)
	{
		if (p==start)
			strPageNumber += '<b>'+(p+1)+'</b>';
		else
			strPageNumber += '<a href="javascript:clickPageNumber('+p+')">'+(p+1)+'</a>';
		if (p < (stopInd-1))
			strPageNumber += ' | ';
	}
	return strPageNumber;
}
/**
* Scrive l'html dei bottoni avanti e indietro delle pagine
*/
function writePagPrecAndSucc(){
	var strPrec=-2;
	var strSucc=-1;
	var strPageNumber='';
	if (start>0)
		strPageNumber+='&laquo; |  <a href="javascript:clickPageNumber('+strPrec+')">indietro</a>';
	else
		strPageNumber+='';
	strPageNumber+='&nbsp;&nbsp;&nbsp';
	if (start<(totPage-1))
		strPageNumber+='<a href="javascript:clickPageNumber('+strSucc+')">avanti</a> | &raquo;';
	else
		strPageNumber+='';
	return strPageNumber;
}
/**
* Scrive l'html dei bottoni precedente e successivo del dettaglio.
*@return testo html dei bottoni
*/
function writeDetailPrecAndSucc ()
{
	var currCommSeq=getIdSeq(currComm);
	//alert('writeDetailPrecAndSucc: '+currCommSeq)
	var strDetailBtn='';
	var isPrec=false;
	var isSucc=false;
	if(currCommSeq>0||(currCommSeq==0&&start>0))
		isSucc=true;
	if(currCommSeq<(numComm-1)||(currCommSeq==(numComm-1)&&start<totPage))
	{
		if(!(start==(totPage-1)&&currCommSeq==(numComm-1)))
			isPrec=true;
	}
	if(isPrec==true&&isSucc==true)
		strDetailBtn+='<a href="javascript:prev()">Precedente</a><span class="arancio"> | </span><a href="javascript:next()">Successivo</a>';
	else if(isPrec==true)
		strDetailBtn+='<a href="javascript:prev()">Precedente</a><span class="arancio"> | </span>Successivo';
	else if(isSucc==true)
		strDetailBtn+='Precedente<span class="arancio"> | </span><a href="javascript:next()">Successivo</a>';
	return strDetailBtn;
}


/**
* Modifica l'html ritornato dalla servlet:
* -> assegna l'azione corretta ai click sui vari elementi
* -> legge il numero di elementi ritornati
* -> associa un id progressivo ad ogni id effettivo
*/
function adjustTableCode (_tableCode)
{	//alert('adjustTableCode');
	arrayIdSeq = new Array ();
	arrayIdEff = new Array ();
	numComm=0;
	var modTableCode = '';
	var trArray = _tableCode.split ('<tr');
	for (j = 0; j < trArray.length; j ++)
	{
		var id = 0;
		/** modifico la stringa ritornata dalla servlet */
		if(pageType=='list')
		{
			
			if (trArray [j].indexOf ('totPage="') > - 1)
			{
				totPage=Math.ceil(readParamValue(trArray[j],'totPage="','"')/perPage);
			}
			if ((trArray [j].indexOf ('href="') > - 1) && (trArray [j].indexOf ('id') > - 1))
			{
				/** leggo il num di item */
				numComm++;
				/** associo gli id */
				id=readParamValue(trArray[j],'id="','"');
				arrayIdSeq.push(id);
				var thisId=readParamValue(trArray[j],'href="','"');
				var substrTemp=trArray[j].substring(trArray[j].indexOf('href'));
				var thisTitle=substrTemp.substring(substrTemp.indexOf('">')+2,substrTemp.indexOf('</a>'));
				var idStart=readParamValue(trArray[j],'><a href="','">','start');
				var idStop=readParamValue(trArray[j],'</a>','">','stop');
				arrayIdEff.push(thisId);
				modTableCode += '<tr style="cursor:pointer" onclick="commentClicked(' + thisId + ')" onmouseover="onMouseOver(' + thisId + ',this)" onmouseout="onMouseOut(' + thisId + ',this)"' + trArray[j].substring(0,idStart) + ' id="commenti_itemList'+id+'" class="titolo">'+ thisTitle + trArray[j].substring(idStop);
			}
		}
		else if(pageType=='lastTen')
		{
			if ((trArray [j].indexOf ('href="') > - 1) && (trArray [j].indexOf ('id') > - 1))
			{
				numComm++;
				var thisId=readParamValue(trArray[j],'href="','"');
				var substrTemp=trArray[j].substring(trArray[j].indexOf('href'));
				var thisTitle=substrTemp.substring(substrTemp.indexOf('">')+2,substrTemp.indexOf('</a>'));
				var myIndex=j-1;
				var idStart=readParamValue(trArray[j],'><a href="','">','start');
				var idStop=readParamValue(trArray[j],'</a>','">','stop');
				modTableCode += '<tr style="cursor:pointer" onclick="commentClicked(' + thisId + ')" onmouseover="onMouseOver(' + myIndex + ',this)" onmouseout="onMouseOut(' + myIndex + ',this)"' + trArray[j].substring(0,idStart) + ' id="commenti_itemList'+id+'" class="titolo">'+ thisTitle + trArray[j].substring(idStop);
			}
		}
	}
	//alert(modTableCode);
	if(numComm==0)
		return emptyList;
	else
		return modTableCode;
}
function onMouseOut(_id,_ref)
{
	if(pageType=='lastTen')
		document.getElementById (_id).className="";
	else if(_id!=currComm)
		document.getElementById (getIdSeq(_id)).className="";
}
function onMouseOver(_id,_ref)
{
	if(pageType=='lastTen')
		document.getElementById (_id).className="mouseover";
	else if(_id!=currComm)
		document.getElementById (getIdSeq(_id)).className="mouseover";
}
/** Commentario disabilitato */
function commDisabled(){
	disabled=true;
	fillCommentTable();
}
/** Commentario sospeso */
function commSuspended(_responseText){
	suspended=true;
	fillCommentTable(_responseText);
}
/** Timeout */
function tableTimeout(){
	fillCommentTable(errorMsg);
}
function commDetailTimeout(){
	setCommentDetail (errorMsg);
}
/** Manipolazione di stringhe */
/**
* Legge il valore di un parametro contenuto in una stringa in
* forma 'chiave=valore'
*/
function readParamValue(_string,_paramName,_endChar,_ret){
	if(_string.indexOf(_paramName)>-1){
		var idStart=_string.indexOf(_paramName);
		var idStop=_string.substring(idStart+_paramName.length+1).indexOf(_endChar);
		var value=_string.substr(idStart+_paramName.length,idStop+1);
		if(_ret=='start')
			return (idStart);
		else if(_ret=='stop')
			return (idStart+_paramName.length+1+idStop);
		else
			return value;
	}else
		return '';
}