//+============| CHANGESTYLE 1.00 |=============+
//| serie di funzioni atta a cambiare foglio 	  |
//| di stile css tramite javascript		          |
//|						                                  |
//+---------------------------------------------+
//| # versione 1.00 [FC 06092006] 		          |
//+---------------------------------------------+
//|	 integrazione con keypress.js		            |
//+---------------------------------------------+


/*
-----------------------------------------------------------------------------------
esempio di inclusione di fogli di stile necessari per l'uso della funzione sizeRotate()
-----------------------------------------------------------------------------------
NOTE:
	href : inifluente ai fini del funzionamento dello script
	title : deve essere composto dal prefisso e dal modificatore di dimensione
      non inserire modificatori negativi -1,-2 ecc...
		  per il foglio di default scrivere solo il prefisso.
	rel : "stylesheet" per il foglio di stile di default 
		"alternate stylesheet" per gli altri possibili


<LINK href="Gruppo Generali_file/generali.css" 		title="generali"   type=text/css  rel="stylesheet">
<LINK href="Gruppo Generali_file/generali_BIG1.css" 	title="generali+1" type=text/css  rel="alternate stylesheet">
<LINK href="Gruppo Generali_file/generali_BIG2.css" 	title="generali+2" type=text/css  rel="alternate stylesheet">
-----------------------------------------------------------------------------------
esempio di rollover dello stile in base all'esempio precederte
-----------------------------------------------------------------------------------

<a href="#" onclick="sizeRotate();">font size *</a>
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
*/

/*
-----------------------------------------------------------------------------------
esempio di inclusione di fogli di stile necessari per l'uso della sola funzione templateChange()
-----------------------------------------------------------------------------------
NOTE:
	href : inifluente ai fini del funzionamento dello script
	title : parametro da passare alla funzione templateChange()
		  NB. è necessario che tutti i toltoli comincino 
			per il prefisso impostato
	rel : "stylesheet" per il foglio di stile di default 
		"alternate stylesheet" per gli altri possibili

<LINK href="Gruppo Generali_file/generali_SMALL.css" 	title="generaliSmallFont"  type=text/css  rel="alternate stylesheet">
<LINK href="Gruppo Generali_file/generali_BIG.css" 	title="generaliBigFont"	   type=text/css  rel="alternate stylesheet">
<LINK href="Gruppo Generali_file/generali.css"		title="generaliNormalFont" type=text/css  rel="stylesheet">

esempio di swicth dello stile in base all'esempio precedente
-----------------------------------------------------------------------------------

<a href="#" onclick="templateChange('generaliSmallFont');">size(-)</a>
<a href="#" onclick="templateChange('generaliNormalFont');">size(=)</a>
<a href="#" onclick="templateChange('generaliBigFont');">size(+)</a>
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
*/

/*
-----------------------------------------------------------------------------------
esempio di inclusione di fogli di stile necessari per l'uso della combinato della 
funzione sizeChange(mod)
-----------------------------------------------------------------------------------
NOTE:
	href : inifluente ai fini del funzionamento dello script
	title : deve essere composto dal prefisso e dal modificatore di dimensione
		  per il foglio di default scrivere solo il prefisso.
	rel : "stylesheet" per il foglio di stile di default 
		"alternate stylesheet" per gli altri possibili

<LINK href="Gruppo Generali_file/generali_SMALL.css" 	title="generali-2" type=text/css  rel="alternate stylesheet">
<LINK href="Gruppo Generali_file/generali_SMALL.css" 	title="generali-1" type=text/css  rel="alternate stylesheet">
<LINK href="Gruppo Generali_file/generali.css" 		title="generali"   type=text/css  rel="stylesheet">
<LINK href="Gruppo Generali_file/generali_BIG.css" 	title="generali+1" type=text/css  rel="alternate stylesheet">
<LINK href="Gruppo Generali_file/generali_BIG.css" 	title="generali+2" type=text/css  rel="alternate stylesheet">
-----------------------------------------------------------------------------------
esempio di swicth dello stile in base all'esempio precederte
-----------------------------------------------------------------------------------
NOTE:
	i parametri devono coincidere con quelli impostati nelle variabili:
	css_PLUS per gli incrementi
	css_MINUS per i decrementi

<a href="#" onclick="sizeChange('-');">-</a>
<a href="#" onclick="sizeChange('+');">+</a>
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
*/

var css_namePrefix='generali';
var css_sizeIndex=0;
var css_PLUS='+';
var css_MINUS='-';
var css_cookieId='w3gStyleSheet';

// disattiva tutti i fogli di stile con un nome che inizia 
// il prefisso contenuto nella variabile css_namePrefix 
// e attiva il corrispondente ai nomi passati a parametro
//es >>templateChange(nome1,nome2,...,nomeN-1,nomeN)
function templateChange(){	
	//controllo browser
	if(!document.styleSheets){
		var ss = getAllSheets() //Opera
	}else{
		var ss = document.styleSheets; //Dom
	}
	// disabilita tutti i fogli di stile con un titolo 
	// tranne quello passato per argomento alla funzione
	for( var x = 0; x < ss.length; x++ ) {
		for( var y = 0; y < arguments.length; y++ ) {
			//controlla ogni titolo ...
			if(ss[x].title == arguments[y]){
				//abilita il foglio di stile se ha il titolo scelto
				ss[x].disabled=false;
				// salva i fogli prescelti in un cookie
				setCookie(css_cookieId,ss[x].title,0,'/');
			} else { //disabilita tutti i fogli di stile con un titolo prefissato
				if( ss[x].title.substr(0,css_namePrefix.length)==css_namePrefix )
					ss[x].disabled=true;
			}
		}
		//alert(ss[x].title+ "="+ss[x].disabled)
	}
	if( !ss.length ) { 
		alert( "sorry, your browser doesn't allow runtime stylesheet changement");
	}
	if(isJSHotKeyActive())//Se hotkey.js è stato incluso ed è attivo...
		refreshArrowPosition();//aggiorna la posizione della freccia di puntamento hotkey

}

function templateChangeForProxy(pathname){	
	//controllo browser
	if(!document.styleSheets){
		var ss = getAllSheets() //Opera
	}else{
		var ss = document.styleSheets; //Dom
	}
	// disabilita tutti i fogli di stile con un titolo 
	// tranne quello passato per argomento alla funzione
	for( var x = 0; x < ss.length; x++ ) {
		for( var y = 0; y < arguments.length; y++ ) {
			//controlla ogni titolo ...
			if(ss[x].title == arguments[y]){
				//abilita il foglio di stile se ha il titolo scelto
				ss[x].disabled=false;
				// salva i fogli prescelti in un cookie
				setCookie(css_cookieId,ss[x].title,0,pathname);
			} else { //disabilita tutti i fogli di stile con un titolo prefissato
				if( ss[x].title.substr(0,css_namePrefix.length)==css_namePrefix )
					ss[x].disabled=true;
			}
		}
		//alert(ss[x].title+ "="+ss[x].disabled)
	}
	if( !ss.length ) { 
		alert( "sorry, your browser doesn't allow runtime stylesheet changement");
	}
	if(isJSHotKeyActive())//Se hotkey.js è stato incluso ed è attivo...
		refreshArrowPosition();//aggiorna la posizione della freccia di puntamento hotkey
	
	location.reload();

}

function swapButtonStyle(idFirstBtn, idSecondBtn) {
	 var elemToHide;
     var style_stored = getCookie(css_cookieId);
      
	 if ( style_stored==css_namePrefix || style_stored==null )
	 	elemToHide = document.getElementById(idSecondBtn);
	 else 
	 	elemToHide = document.getElementById(idFirstBtn);
	 
	 elemToHide.style.display='none';

}

// Funzione per Opera
function getAllSheets(){
	if( document.getElementsByTagName ) {
		var Lt = document.getElementsByTagName('LINK');
		var St = document.getElementsByTagName('STYLE');
	} else {
		// browser minori - restituisce array vuoto
		return []; 
	}
	//per tutti i tag link ...
	for( var x = 0, os = []; Lt[x]; x++ ) {
		//controlla l'attributo rel per vedere se contiene 'style'
		if( Lt[x].rel ) {
			var rel = Lt[x].rel;
		} else if( Lt[x].getAttribute ) {
			var rel = Lt[x].getAttribute('rel');
		} else {
			var rel = '';
		}
		if(typeof(rel)=='string'&&rel.toLowerCase().indexOf('style')+1){
			//riempe la variabile os con i stylesheets linkati
			os[os.length] = Lt[x];
		}
	}
	//include anche tutti i tags style e restituisce l'array
	for( var x = 0; St[x]; x++ ) {
		os[os.length] = St[x];
	}
	
	return os;
}
// scorre i fogli di stile dal default al più grande ciclicamente
// default-> +1 -> +2 -> +n-1 -> +n -> default -> +1 -> e così via...
function sizeRotate(){
    if(css_sizeIndex<-1)
			name=css_namePrefix+(css_sizeIndex+1)
		else if(css_sizeIndex==-1)
			name=css_namePrefix
		else if(css_sizeIndex>(-1))
			name=css_namePrefix+'_'+(css_sizeIndex+1)
		if(CSSExist(name)){
			css_sizeIndex++
			if(css_sizeIndex==0)
				templateChange(css_namePrefix);
			else
				templateChange(name);
		}else{
      css_sizeIndex=0;
      templateChange(css_namePrefix);
    }
}
// cambia il foglio in base alle preferenze di incremento/decremento font-size
function sizeChange(mod){
	var name=''
	if(mod==css_PLUS){
		if(css_sizeIndex<-1)
			name=css_namePrefix+(css_sizeIndex+1)
		else if(css_sizeIndex==-1)
			name=css_namePrefix
		else if(css_sizeIndex>(-1))
			name=css_namePrefix+'+'+(css_sizeIndex+1)
		if(CSSExist(name)){
			css_sizeIndex++
			if(css_sizeIndex==0)
				templateChange(css_namePrefix);
			else
				templateChange(name);
		}
	}else if(mod==css_MINUS){	
		if(css_sizeIndex<1)
			name=css_namePrefix+(css_sizeIndex-1)
		else if(css_sizeIndex==1)
			name=css_namePrefix
		else if(css_sizeIndex>1)
			name=css_namePrefix+'+'+(css_sizeIndex-1)
		if(CSSExist(name)){
			css_sizeIndex=css_sizeIndex-1;			
			if(css_sizeIndex==0)
				templateChange(css_namePrefix);
			else
				templateChange(name);
		}	
	}
}

// controlla se esiste un foglio di stile con il nome identico
// al parametro passato
function CSSExist(name){
	var exist=false;
	if(!document.styleSheets){
		var ss = getAllSheets() //Opera
	}else{
		var ss = document.styleSheets; //Dom
	}
	//scorre tutti i fogli di stile..
	for( var x = 0; x < ss.length; x++ ) {
		if( ss[x].title==name) {
			exist=true;
		}
	}
	return exist;
}

function setStyleSheetFromCookie() {
	var preferredStyle = getCookie(css_cookieId);
	if (preferredStyle!=null) templateChange(preferredStyle);
}

function templateExchange(preferredStyle) {
	templateChange(preferredStyle);
	location.reload();
}

setStyleSheetFromCookie();



