/*
COOKIE ===============
USO ###############
SrCmndCkes_Leggi = restituisce il valore, se il cookie non c'è restituisce "null"; se ne sono presenti più di 1 mostra il primo
		* Struttura		SrCmndCkes_Leggi(NomeCookie);
		* Parametri:	NomeCookie = stringa che identifica il nome del cookie
		* Esempio:		if(SrCmndCkes_Leggi('nome')==null) ...
SrCmndCkes_Scrivi = restituisce TRUE o FALSE a seconda che sia avvenuta o no correttamente la scrittura; la mancanza del valore comporta la cancellazione del cookie, la mancanza dei parametri tempo genera un cookie di sessione, il path "/" è sempre consigliato
		* Struttura:	SrCmndCkes_Scrivi(NomeCookie [,ValoreCookie] [,UdM, Tempo] [,Path] [,Domain] [,Secure]);
		* Parametri:	NomeCookie = stringa che identifica il nome del cookie
									ValoreCookie = contenuto cookie
									UdM = stringa che indica unità di misura per indicare la durata; OPZIONALE, se non specificato è TEMPORANEO;
												valori ammessi: anni/mesi/giorni/ore/minuti/secondi/GMT
									Tempo = stringa che indica la durata numerica del cookie; OPZIONALE, ma richiesta se è stato usato il precedente parametro
									Path = stringa che indica lo "scope" del cookie: "/" per tutto "" per attuale e figli (default)
									Domain = idem di Path, ma a livello di dominio
									Secure = scritta che attiva il criptaggio: per criptare basta "1" o "secure" mentre vuoto o altro per lasciare così
		* Esempio:		if(!SrCmndCkes_Scrivi('Lingua','Ita')) alert('Scrittura non riuscita');
SrCmndCkes_Cancella = restistuisce TRUE o FALSE; FALSE significa che cmq un cookie con quel nome c'è ancora, e ciò può essere perchè le proprietà non coincidono o perchè ce ne erano più di uno con lo stesso nome
		* Struttura:	SrCmndCkes_Cancella(NomeCookie [,Path] [,Domain]);
		* Parametri:	NomeCookie = stringa che identifica il nome del cookie
									Path = stringa che indica lo "scope" del cookie: "/" per tutto "" per attuale e figli (default)
									Domain = idem di Path, ma a livello di dominio
		* Esempio:		if(SrCmndCkes_Cancella('nome' [,'path: "\" per tutto "" per attuale e figli'] [,'Domain'])) alert('OK'); else alert('Ancora No');
SrCmnmCkes_CancellaTutti = restituisce TRUE o FALSE; FALSE significa che dei cookie sono ancora presenti, probabilmente perchè le proprietà non coincidono
		* Struttura:	SrCmnmCkes_CancellaTutti();
		* Parametri:	
		* Esempio:		if(SrCmnmCkes_CancellaTutti()) alert('Cookie cancellati'); else alert('Sono rimasti ancora dei cookie');
SrCmndCkes_Visualizza = mostra alert con contenuto di tutti i cookie, mettendo in risalto quello eventualmente indicato, con il conteggio delle ripetizioni; restistuisce TRUE, a meno che l'eventuale cookie indicato non esista allora restituisce FALSE; 
		* Struttura:	
		* Parametri:	
		* Esempio:		if(SrCmndCkes_Visualizza(['nome'])) alert('Il cookie esiste'); else alert('Il cookie non esiste');

EVENTI ===============
SrCmndEvnt_Add = accoda funzioni da eseguire all'avveramento di eventi su di un oggetto
		* Struttuta:	SrCmndEvnt_Add(Oggetto,Evento,Funzione);
		* Parametri:	Oggetto 	= oggetto
									Evento 		= stringa che indica l'eventi
									Funzione 	= cosa deve fare 
		* Esempio: 		SrCmndEvnt_Add(window,'load',function(){funzione('pippo')});

FLASH ================
SrCmndFlsh_Include = 	include gli oggetti flash nel punto di richiamo; in questo modo viene raggirata la protezione di IE che renderebbe il flash disattivato e tratteggiato
		* Struttura:	SrCmndFlsh_Include(FlashFile,WidthPx,HeightPx); 
		* Parametri:	FlashFile	= stringa dell'url per recuperare il file
									WidthPx, HeightPx = pixel della dimensione del riquadro dedicato al flash
		* Esempio:		SrCmndFlsh_Include('http://www.pippo.it/file.swf,640,480); 

STATISTICHE ==========
SrCmndStatShny_Increase = lo script di shinystat è xhtml invalido poichè usa document.write, ma non potevo ricorrere alla IMG sostitutiva perchè lo script cmq resttuisce info sul browser, per questo ho creato questa funzione
		* Struttura:	SrCmndStatShny_Increase(TagId,User); 
		* Parametri:	TagId = Id del tag IMG su cui verrà caricato l'immagine-contatore
									User = stringa che identifica l'account in Shinystat
		* Esempio:		SrCmndStatShny_Increase('SrCmndStatShnyImmg','primamano'); 

STILE Effetti ========
SrCmndStleEfft_Blink = effettua un lampeggio sul colore del testo contenuto in un tag ogni tot millisecondi
		* Struttura:	SrCmndStleEfft_Blink(idd,colore,coloreSuccessivo,pausa);
		* Parametri:	idd = stringa con id del tag
									colore, coloreSuccessivo = stringhe con i colori in HEX: '#aa3521'
									pausa = millisecondi di intervallo
		* Esempio:
SrCmndStleEfft_Fade = cambia la proprietà alpha di un elemento (IE necessita che tramite CSS file abbia il width o height impostato)
		* Struttura:	SrCmndStleEfft_Fade(id, opacStart, opacEnd, millisec, callbackFunction);
		* Parametri:	id = stringa con id del tag
									opacStart, opacEnd = numero da 0 (invisibile) a 100 (visibile)
									millisec = millisecondi che vogliamo duri l'effetto: in realtà imposta le pause, a tale durata si aggiunge il tempo di esecuzione del codice
									callbackFunction = funzione da eseguire al termine
		* Esempio:		SrCmndStleEfft_Fade('SrLyotIntrR2C1', 0, 100, 1000); // compare in 1 secondo
									SrCmndStleEfft_Fade('SrLyotIntrR2C1', 0, 100, 1000, function(){ // compare in 1 secondo 1 cosa, al termine compare in un altro secondo una seconda cosa
										SrCmndStleEfft_Fade('SrLyotIntrR2C2', 0, 100, 1000)
										}); 
SrCmndStleEfft_Opacity = change the opacity for different browsers 
		* Struttura:	SrCmndStleEfft_Opacity(id, opacity);
		* Parametri:	id = stringa con id del tag
									opacity = numero da 0 (invisibile) a 100 (visibile)
		* Esempio:		SrCmndStleEfft_Opacity('IdCommenti',0); // lo rende invisibile

WINDOWS ==============
SrCmndWndw_CloseAfter = dopo tot millisecondi, lancia CloseNow e ricarica il contenuto della finestra opener
		* Struttura:	SrCmndWndw_CloseAfter(Millisecondi); 
		* Parametri:	Millisecondi = numero di millisecondi di attesa prima della chiusura
		* Esempio:		SrCmndWndw_CloseAfter(1000);
SrCmndWndw_CloseNow = chiude la finestra dov'è presente il codice
		* Struttura:	SrCmndWndw_CloseNow(); 
		* Parametri:	
		* Esempio:		SrCmndWndw_CloseNow();
*/




// COOKIE
		/*
		NOTE ##############
		LETTURA: non è possibile leggere le singole proprietà: expires, path, domain , secure
		ELIMINAZIONE: non è possibile eliminare tutto insieme con "document.cookie='';", i browser cancellano i cookie nel momento preciso in cui vengono SCRITTI con un qls "expires" scaduto
		o nel momento in cui RECUPERANO i cookies con "document.cookie" e trovano che "expires" è scaduto o non esiste; c'è chi per cancellare scrive la scadenza "Thu, 01 Jan 1970 00:00:01 GMT" ma se qualcosa è errato, mentre NN ricoscosce abbastanza tutto IE no, e quindi questo invece che cancellare un cookie ne scrive uno che non scade mai;
		non è vero che IE cancella i cookie se si inserisce in contenuto vuoto, è solo un'apparenza, poichè tale contenuto è salvato come "nome;" che quindi nella lettura non viene trovato perchè si cerca "nome=;" quindi sembra cancellato invece c'è, occupa spazio, ed è inutilizzato
		*/
function SrCmndCkes_Leggi(CookieNome){
	if (CookieNome.length==0) return null;
	var PosizioneIniziale = document.cookie.indexOf(CookieNome+"=");
		if (PosizioneIniziale == -1) return null;
		PosizioneIniziale += CookieNome.length+1;  // restituisce la posizione del primo carattere del valore della variabile-cookie
	var PosizioneFinale = document.cookie.indexOf(";",PosizioneIniziale);
		if (PosizioneFinale == -1) PosizioneFinale = document.cookie.length;  // serve perchè se il cookie è l'ultimo non avrà ";"
	return unescape(document.cookie.substring(PosizioneIniziale,PosizioneFinale));
}

function SrCmndCkes_Scrivi(name,value,expiresUdM,expires,path,domain,secure){
	if (!name) { return false }
	if (!value) { return SrCmndCkes_Cancella(name); }  // se è vuoto non si può fare la scrittura purtroppo, perchè, mentre in NN esiste il cookie vuoto "nome=;", in IE viene scritto "nome;" e quindi al check non risulta e inoltre occupa spazio
	if ((expiresUdM && expires) && (expiresUdM!='GMT')) {
		var ExpiresMillisec = ExpiresDate = Oggi = new Date();
		switch (expiresUdM) {    // calcola i JS-millisecondi del momento di scadenza
			case "anni":    ExpiresMillisec=Oggi.getTime()+expires*365*24*60*60*1000; break;
			case "mesi":    ExpiresMillisec=Oggi.getTime()+expires*31*24*60*60*1000; break;
			case "giorni":  ExpiresMillisec=Oggi.getTime()+expires*24*60*60*1000; break;
			case "ore":     ExpiresMillisec=Oggi.getTime()+expires*60*60*1000; break;
			case "minuti":  ExpiresMillisec=Oggi.getTime()+expires*60*1000; break;
			case "secondi": ExpiresMillisec=Oggi.getTime()+expires*1000; break;
			default:        ExpiresMillisec=Oggi.getTime()+expires;  // ha poco senso ma qlcs ci andava messo
			}
		ExpiresDate.setTime(ExpiresMillisec);   // converte JS-millisecondi in Date
		expires = ExpiresDate.toGMTString(); }  // converte Date in GMT-stringa
	secure = (secure=="1" || secure==1 || secure=="secure") ? 1 : "";
	document.cookie = name + "=" +escape(value) +
	        ( (expiresUdM && expires) ? "; expires=" + expires : "") +
	        ( (path) ? "; path=" + path : "") + 
	        ( (domain) ? "; domain=" + domain : "") +
	        ( (secure) ? "; secure" : "");

	if (SrCmndCkes_Leggi(name)==null && secure!=1) { return false } else { return true }
}

function SrCmndCkes_Cancella(CookieNome, CookiePath, CookieDomain){
	var DoveSiTrovaPrima = document.cookie.indexOf(CookieNome);
	if(DoveSiTrovaPrima==-1) {   // se non c'è si taglia corto
		return true;
	} else {
		if( CookiePath &&  CookieDomain) { SrCmndCkes_Scrivi(CookieNome,'cancellato','anni',-1,CookiePath,CookieDomain); }  // dovevo inventare un contenuto sennò saltava la scrittura
		if( CookiePath && !CookieDomain) { SrCmndCkes_Scrivi(CookieNome,'cancellato','anni',-1,CookiePath); }
		if(!CookiePath &&  CookieDomain) { SrCmndCkes_Scrivi(CookieNome,'cancellato','anni',-1,'',CookieDomain); }
		if(!CookiePath && !CookieDomain) { SrCmndCkes_Scrivi(CookieNome,'cancellato','anni',-1); }
		var DoveSiTrovaDopo = document.cookie.indexOf(CookieNome);
		if(DoveSiTrovaPrima!=DoveSiTrovaDopo) { return true } else { return false } // se Prima<>Dopo vuol dire che qualcosa è stato fatto; si guarda a questo e non alla semplice verifica di lettura perchè in presenza di 2 cookie omonimi la verifica fallirebbe
	}
}

function SrCmndCkes_CancellaTutti(){
	stringa=document.cookie.split(";");
	for(i=0;i<stringa.length;i++) {
		var c=stringa[i].split("=");
		if(c[0]) SrCmndCkes_Cancella(c[0],'/');
		};
	return (document.cookie.length==0);
}

function SrCmndCkes_Visualizza(CookieNome){
	// recupera info su tutti i cookie
	testo= 'STRINGA COOKIES\nContenuto= \"' +unescape(document.cookie)+ '\"\n\n';
	esito=1;
	// recupera info sul cookie richiesto
	if(CookieNome) {
		cloni=0;
		valore=SrCmndCkes_Leggi(CookieNome);
		if(valore==null){
			esito=0;
		}else{
			i=-1;
			do { i=document.cookie.indexOf(CookieNome+"=",i+1); if(i!=-1) cloni++; } while(i!=-1);
			testo+='SINGOLO COOKIE\nNome= \"' +CookieNome+ '\"\nPrimo Valore= \"' +valore+ '\"\nRipetizioni= '+cloni;
		}
	}
	// produce output
	alert(testo);
	if(esito==1) return true; else return false;
}


// EVENTI
function SrCmndEvnt_Add(obj,ev,fn){
	if(obj.addEventListener) {
		// metodo w3c
		obj.addEventListener(ev, fn, false);
	} else if(obj.attachEvent) {
		// metodo IE
		obj.attachEvent('on'+ev, fn);
	} else {
		// se i suddetti metodi non sono applicabili
		// se esiste gia' una funzione richiamata da quel gestore evento
		if(typeof(obj['on'+ev])=='function'){
			// salvo in variabile la funzione gia' associata al gestore
			var f=obj['on'+ev];
			// setto per quel gestore una nuova funzione 
			// che comprende la vecchia e la nuova
			obj['on'+ev]=function(){if(f)f();fn()}
			}
		// altrimenti setto la funzione per il gestore
		else obj['on'+ev]=fn;
		}
}



// FLASH
function SrCmndFlsh_Include(FlashFile,Xxx,Yyy){
	document.write('<br /><embed src="'+FlashFile+'" width="'+Xxx+'" height="'+Yyy+'" /><br />&nbsp;'); 
}



// STATISTICHE
function SrCmndStatShny_Increase(TagId,User){
	c_="";l_=""+screen.width;d_=document.referrer;
	if (self != top){try {r_=""+escape(parent.document.referrer);}catch(e_r) {r_=""+escape(d_);}}
	else {r_=""+escape(d_);}
	if(navigator.appName!="Netscape"){c_=screen.colorDepth}
	else{c_=screen.pixelDepth}
	document.getElementById(TagId).src='http://s2.shinystat.com/cgi-bin/shinystat.cgi?USER='+User+'&REFER='+r_+'&COLOR='+c_+'&SIZE='+l_;
}



// STILE Effetti
SrCmndStleEfftLogg = new Array();

function SrCmndStleEfft_Clear(id){
	if(typeof(SrCmndStleEfftLogg[id]) != "undefined")
		clearInterval(SrCmndStleEfftLogg[id]['Interval']);
	else
		SrCmndStleEfftLogg[id] = new Array();
	SrCmndStleEfftLogg[id]['Start']= new Date();
	SrCmndStleEfftLogg[id]['Start']= SrCmndStleEfftLogg[id]['Start'].getTime();
}

function SrCmndStleEfft_Blink(id,colore,coloreSuccessivo,pausa){
	SrCmndStleEfft_Clear(id);
	// controlla esistenza ID
	if(document.getElementById(id)==null) { alert('L\'elemento '+id+' indicato per il blink di colore non è stato trovato'); return false; }
	// cambia colore
	document.getElementById(id).style.color=colore;
	// riavvia
	SrCmndStleEfftLogg[id]['Interval']=setTimeout("SrCmndStleEfft_Blnk('"+id+"', '"+coloreSuccessivo+"', '"+colore+"', '"+pausa+"')", pausa);
}

function SrCmndStleEfft_Fade(id, opacStart, opacEnd, millisec, callback, passaggi) { 
	if(!passaggi){SrCmndStleEfft_Clear(id); delayTot=0; logdelay=''; logpasso=''; }
	SrCmndStleEfft_Opacity(id,opacStart,1); 
  if(opacStart!=opacEnd){ 
		// delay
		var Ora  = new Date(); Ora=Ora.getTime();
    var TempoRimasto=(millisec-Ora+SrCmndStleEfftLogg[id]['Start']);
    var ScattiRimasti=Math.abs(Number(opacEnd)-Number(opacStart));
    delay = Math.round(TempoRimasto/ScattiRimasti); 
		delay=(delay>0 && delay<10000)?(delay):(0);
		delayTot+=delay;
		logdelay+=" "+delay;

		// passo
		var passo=1;
		var Ora  = new Date(); Ora=Ora.getTime();
		if(passaggi){
			passo *= (Ora-SrCmndStleEfftLogg[id]['Start'])/delayTot;
			passo =Math.round(passo);
			if(passo<1) passo=1;
			if(passo>Math.abs(Number(opacEnd)-Number(opacStart))) passo=Math.abs(Number(opacEnd)-Number(opacStart));
		}
		logpasso+=" "+passo;
		opacStart+= (opacStart>opacEnd)?(-passo):(passo);
		SrCmndStleEfftLogg[id]['Interval']=setTimeout("SrCmndStleEfft_Fade('"+id+"',"+opacStart+","+opacEnd+","+millisec+","+callback+",1);",delay); 
	}else{
		var Ora  = new Date(); Ora=Ora.getTime();
		alert("ritardo sui "+millisec+" ="+(-millisec+Ora-SrCmndStleEfftLogg[id]['Start'])/1000);
		alert(logdelay);
		alert(logpasso);
		if(callback) callback.call(document.getElementById('" +id+ "'));
	}
} 

function SrCmndStleEfft_Opacity(id,opacity,passaggi) { 
	if(!passaggi) SrCmndStleEfft_Clear(id);
  var object = document.getElementById(id).style; 
  object.opacity = (opacity / 100); 
  object.MozOpacity = (opacity / 100); 
  object.KhtmlOpacity = (opacity / 100); 
  object.filter = "alpha(opacity=" + opacity + ")"; 
} 



// WINDOWS
function SrCmndWndw_CloseAfter(attesa){
	window.opener.location.reload(true);
	setTimeout('SrCmndWndw_CloseNow();',attesa);
}

function SrCmndWndw_CloseNow(){
	window.opener.focus(); 
	self.close();
}



