/*
CookieLeggi
OUTPUT: restituisce il valore, se il cookie non c'è restituisce "null"; se ne sono presenti più di 1 mostra il primo, ovvero quello più specifico; es: var AAA = CookieLeggi(nome) || "anonimo";
INPUT:  ('Nome del Cookie')

CookieScrivi
OUTPUT: restituisce TRUE o FALSE a seconda che sia avvenuta o no correttamente la scrittura; la scrittura ha un ordine: dal più specifico al più generico "/"; es: if (!CookieScrivi(document.cok.ckNome.value,document.cok.ckDato.value,document.cok.exSimb.value,document.cok.exDato.value,document.cok.ckPat.value,document.cok.ckDom.value,document.cok.ckSec.value)) alert('Scrittura non riuscita');
INPUT:  ('Nome del Cookie', 'Valore', 'UdM: anni/mesi/giorni/ore/minuti/secondi/GMT', 'tempo', 'path: "\" per tutto "" per attuale e figli', 'Domain', 'Secure: per criptare basta "1" o "secure" mentre vuoto o altro per lasciare così')  

CookieCancella
OUTPUT: restituisce TRUE o FALSE a seconda che sia avvenuta o no correttamente la cancellazione; restituire FALSE quando rimane cmq un cookie con quel nome e ciò può essere perchè le proprietà non coincidono o perchè ce ne erano più di uno con lo stesso nome; es: if (!CookieCancella(document.cok.ckNome.value)) alert('Cancellazione non riuscita')
INPUT:  ('Nome del Cookie', 'Path: "\" per tutto "" per attuale e figli', 'Domain')
*/

function CookieLeggi(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 CookieScrivi(name,value,days,path,domain,secure){

	if (!name || !value) { return false }  // se uno dei 2 valori è vuoto evita la scrittura, 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 (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";

	secure = (secure=="1" || secure==1 || secure=="secure") ? 1 : "";
	document.cookie = name + "=" +escape(value) +
	        ( (expires) ? "; expires=" + expires : "") +
	        ( (path) ? "; path=" + path : "") + 
	        ( (domain) ? "; domain=" + domain : "") +
	        ( (secure) ? "; secure" : "");

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


function CookieCancella(CookieNome,CookiePath,CookieDomain)
	{
	var DoveSiTrovaPrima = document.cookie.indexOf(CookieNome);
	if(DoveSiTrovaPrima==-1) {   // se non c'è si taglia corto
		return true;
		
	} else {
		
		if( CookiePath &&  CookieDomain)
			{ CookieScrivi(CookieNome,'cancellato',-1,CookiePath,CookieDomain); }
		if( CookiePath && !CookieDomain)
			{ CookieScrivi(CookieNome,'cancellato',-1,CookiePath,''); }
		if(!CookiePath &&  CookieDomain)
			{ CookieScrivi(CookieNome,'cancellato',-1,'',CookieDomain); }
		if(!CookiePath && !CookieDomain)
			{ CookieScrivi(CookieNome,'cancellato',-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
	} }
// 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
// nb: 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
// nb: 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 CookieVisualizza(CookieNome)
	{
	// conta il numero di cloni
	if(CookieNome) {
		var i = cloni = 0;
		while ( i!=-1 ) {
			i = document.cookie.indexOf(CookieNome,i+1);
			if (i!=-1) cloni++; }
	} else {
		var cloni = ''; }
	// elabora il testo di output
	var valore = (CookieLeggi(CookieNome)!=null) ? CookieLeggi(CookieNome) : '';
	var testo= 'STRINGA COOKIES\nContenuto= \"'+unescape(document.cookie)+'\"\n\nSINGOLO COOKIE\nNome= \"'+CookieNome+'\"\nValore= \"'+ valore +'\"\nRipetizioni= '+cloni;

	}
// non è possibile leggere le singole proprietà: expires, path, domain , secure