/* fix IE6 flicker*/
try {
  document.execCommand("BackgroundImageCache", false, true);
} catch(err) {}
/* fix IE6 flicker*/

function individuaOggetto(e){ //individua l'oggetto da cui e' partito l'evento
		// questa prima parte serve per avere una gestione degli oggetti comune
		if (!e) var e = window.event;
		// e gives access to the event in all browsers
		
		//questa seconda parte individua l'elemento che ha scatenato l'oggetto
		var targ;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;
			
		//restituisce l'elemento
		return targ;
	
	}

/***************************** funzione che crea i menu   *****************/
	
function Menu(menu_id,attivaClick,position,attivaOver,defaultGroup) { //creo una classe menu
	
		this.menu_id=menu_id;
		this.attivaClick=attivaClick;
		this.position=position;
		this.attivaOver=attivaOver;
		this.defaultGroup=defaultGroup;
	
		/*** metodi della classe ***/
		
		this.Menu=function Menu() { //costruttore
			/*** lancio funzioni che costruiscono la classe***/		
			this.inizializzaMenu();
		}
		
		this.inizializzaMenu=function inizializzaMenu() {
			
					//se il click e' attivato ed e' il primo elemento, all'inzializzazione del menu,
					//evidenzio il primo tab
					//con position specifico, l'elemento che deve essere attivato
					
					var elementoEvidenziato=0; //di default l'elemento evidenzato e' il primo
					if (this.position) {
							elementoEvidenziato=this.position;
					}
					
			
				varGlobMenu=eval(this.menu_id+'varGlob=new Array()');
				 //creo una variabile globale che ha come nome
				//il nome del menu, e contiene la posizione dell'elemento evidenziato
				
				//se il menu non necessita mouse over la variabile globale e' settata a 'no'

				varGlobMenu[0]=this.position;		//posizione iniziale		
				varGlobMenu[1]='no';		//elemento evidenziato
				varGlobMenu[2]='no';		//gruppo di default
				
				if (this.attivaOver) {

					varGlobMenu[1]=this.position;  
	
					
					if (this.defaultGroup) {
						varGlobMenu[2]=this.defaultGroup;
					}
					
					
				}

				ancore=document.getElementById(this.menu_id).getElementsByTagName('a');
				lunAncore=ancore.length;

				
				for (var n=0;n<lunAncore;n++) {
		
					/***gestione mouse over e mouse out ***/

					if ( (this.attivaClick)&&(n==elementoEvidenziato) ) {
						ancore.item(elementoEvidenziato).onmouseover=null;
						ancore.item(elementoEvidenziato).onmouseout=null;
						separaGruppi(ancore.item(elementoEvidenziato).id); //evidenzia il gruppo corrispondente al tab
					
						if(ancore.item(elementoEvidenziato).className.indexOf('_over')==-1) {
						//se l'elemento e' instato mouse out, lo coloro
							cambiaOver(ancore.item(elementoEvidenziato)); 
						}
					}
					
					else { //se non c'e' il click e si tratta degli altri elementi
						//variabile per vedere se c'e' da attivare il mouse over
											
						if (  ( ( (this.attivaClick)&&(this.attivaOver) )&& ( (ancore.item(n).id!='') ) || ( (ancore.item(n).id=='')&&(varGlobMenu[2]!='no') )  )  ) { //se c'e' da visualizzare gli elementi al mous eover
								ancore.item(n).onmouseover=tabClick;
						}
						else {
							a=ancore.item(n).onmouseover;
							
							ancore.item(n).onmouseover=tabOver;

						}
						
						ancore.item(n).onmouseout=tabOut;
					}
					/***gestione click ***/
					
					if(this.attivaClick) {
						ancore.item(n).onclick=tabClick;

					}
					
					
				}
				
			  function tabOver(e){

					var el=individuaOggetto(e); //el e' elemento che ha fatto partire l'evento
												//la funzione individuaOggetto(e) e' etserna a questa classe
					cambiaOver(el);


				}
				
				function cambiaOver(el) {
				
					
					if ( (el.previousSibling!=null)&&(el.previousSibling.tagName.toLowerCase()=='span') &&(el.className.indexOf('_over')==-1) ) { 
						el.className=el.className+'_over';
						el.previousSibling.className=el.previousSibling.className+'_over';
						el.nextSibling.className=el.nextSibling.className+'_over';
					}
					
					else if (el.id.indexOf('_over')==-1) {
							el.id=el.id+'_over';
					}
					
					
				}
				
				function tabOut(e) {
					var el=individuaOggetto(e); //el e' elemento che ha fatto partire l'evento
					cambiaOut(el);
				}
				
				function cambiaOut(el) {
											
					if ( (el.previousSibling!=null) &&(el.previousSibling.tagName.toLowerCase()=='span') &&(el.className.indexOf('_over')>0) ) { //se e' un menu con tab di tre elementi..
						el.className=el.className.replace('_over','');
						el.previousSibling.className=el.previousSibling.className.replace('_over','');
						el.nextSibling.className=el.nextSibling.className.replace('_over','');
						
					}
					
					
					else if (el.id.indexOf('_over')>0) {		//se e' un menu con tab img...
							el.id=el.id.replace('_over','');
					}
	

					
				}
				
				
				function controllaClick(e,el,id_menu) {
					if (!e) var e = window.event;
					var varGlobMenu=eval(id_menu+'varGlob');
					/*
					Questa parte disabilita' l'over in caso di click. Non necessaria qui.
					
					if(e.type=='click') {
						eval(id_menu+"varGlob='no';");
					}
				
					*/
					//else if(el.id!=''){
						
						// || ((el.id=='')&&(varGlobMenu[2]!='no')) 
					if ( (varGlobMenu[1]!='no') && (el.id!='')  ){
						var anch=document.getElementById(id_menu).getElementsByTagName('a');
						var lunAnch=anch.length;
						for (var m=0;m<lunAnch;m++) {
							if (anch.item(m).id==el.id) {
								varGlobMenu[1]=m;
								
							}
						}
						
					}
					

					
				}
				
				function tabClick(e) {

					var el=individuaOggetto(e); //el e' elemento che ha fatto partire l'evento
					
					controllaClick(e,el,el.parentNode.parentNode.id);
					var varGlobMenu=eval(el.parentNode.parentNode.id+'varGlob');
					
					//rimuovo mouse over e mouse out dall'elemento:
					el.onmouseover=null;
					el.onmouseout=null;
			
					cambiaOver(el); 

					
					//la struttura del documento e' UL > LI > A -- noi siamo nell'A
					
					var ancore=document.getElementById(el.parentNode.parentNode.id).getElementsByTagName('a');
					var lunAncore=ancore.length;
					
					for (var n=0;n<lunAncore;n++) {
						if(ancore.item(n)!=el) {
							//riassegno gli eventi agli altri elementi

							cambiaOut(ancore.item(n)); //riassegno lo stato mout

							if ( ((varGlobMenu[1]!='no')&& ( (ancore.item(n).id!='') ) || ( (ancore.item(n).id=='' &&varGlobMenu[2]!='no') ) ) ) {	//controllo che la visualizzazione dei contenuti all'over
																						//non sia disabilitata e che l'id dell'elemento non sia vuoto

									ancore.item(n).onmouseover=tabClick;
							}
							else {
								ancore.item(n).onmouseover=tabOver;
							}

							ancore.item(n).onmouseout=tabOut;
						}
						
						
					}				
					
					var elemento='';
					
					if(el.id.indexOf('_over')>0) { //se l'id dell'elmento contiene '_over'.
													//non puo' succedere per il cambio di classe
													//ma puo' succedere pe ril cambio di ID.
													//Quindi questo controllo e' utile per la classe MenuID
													//che erdita da questa.
													
						elemento=el.id.replace('_over','');
					}
					
					else if (el.id==''&&varGlobMenu[2]!='no') {
						elemento=varGlobMenu[2];
					}
					
					else elemento=el.id;
					return separaGruppi(elemento); //funzione che verifica se ci sono da visualizzare dei contenuti
				
				}
				
				
		}


		this.Menu(); //lancio il costruttore


}

/**************************** funzione per la gestione dei gruppi  **************/

function separaGruppi(el_id) {
	if (el_id!=null) { //se e' settato l'elemento id
					
		var temp=(el_id).split('||'); //se all'interno dell'id c'e' || --> i gruppi da ricaricare sono 2 alla volta
		var tempL=temp.length;			
						
		for (var n=0;n<tempL;n++) {
						
			var ritorno=visualizzaContent(temp[n]);
			if (n==tempL-1) { // se e' l'ultimo elemento dell'id
				return ritorno; // restituisco il valore 
			}

		}
						
	}
					
	else return true; //se non e' settato l'ID si prosegue con il link
					
				
}

function visualizzaContent(el_id) {
	//la funzione deve restituire true o false
	//true fa proseguire il link; false ferma il link
				
	/*** se e' settato l'ID faccio partire le funzioni che cambiano il blocco ***/
	if (el_id.indexOf('-')>0) { //se e' settato l'id e se contiene il trattino
			var temp=(el_id).split('-'); //ricavo due parti con: gruppo-blocco
							
			//gruppo e' un oggetto quindi va trasformato da stringa a oggetto
							
			var gruppo=eval(temp[0]);
			var blocco=temp[1];
							
			if (gruppo) { //se l'oggetto gruppo e' stato creato, rimando al link statico
				gruppo.mostraBlocco(blocco); // visualizzo il blocco e fermo il link
				return false; 
			}
	
			else {	//se l'oggetto gruppo non e' stato creato proseguo con il link statico
				return true;

			}
					
	}
						
						
}
				



/***************************** funzione per la visualizzazione blocchi   *****************/

 function Gruppo(args) {
	
	
		this.blocchi=Gruppo.arguments;				//assegno all'array "blocchi" i valori passati
		this.lunBlocchi=this.blocchi.length; // conto quanti blocchi sono
		
 	

		this.bloccoEsiste=function bloccoEsiste(blocco) {
			//verifico che il blocco faccia parte del gruppo
			//restituisce true se il blocco eiste, false se non esiste
			var esiste=false;
			
				for (var n=0;n<this.lunBlocchi;n++) {
				
					if (blocco==this.blocchi[n]) {
					
						esiste=true;
						break;
					}
				}
				
				return esiste;
		}
		
		
	 this.mostraBlocco=function mostraBlocco(blocco) {
	
		if(this.bloccoEsiste(blocco)==false) {
			void(0); //se il blocco non esiste non fare niente

		}
		else {
			for (var n=0;n<this.lunBlocchi;n++) {
				if (blocco==this.blocchi[n]){
					document.getElementById(this.blocchi[n]).style.display='block';
				}
				else {
					document.getElementById(this.blocchi[n]).style.display='none';
				}
			}
			
		}
		
	 }

 
}
