function CL_Menu(param) {
//	Oggetto con l'indicazione degli eventuali pulsanti di menu che devono risultare selezionati.
	if(param == 'undefined') param = {};
//	La classe CSS per i pulsanti "toggle" del menu.
	var sezione	= param.classSezione;
//	La classe CSS per i pulsanti "toggle" del menu.
	var gSezione = param.gSezione;
//	Array contenente Gli ELEMENTI (pulsanti) del menu che devono risultati come "selezionati"
	var sezSelected = param.sezSelected;
//	 Le classi predefinite per il pulsante "toggle" ... 
	if( !$defined(sezione) )		sezione = 'div.sezione1';
//	... ed il "div" contenente i pulsanti delle sottosezioni */
	if( !$defined(gSezione) )		gSezione = '.gSezione';

	/* Inizializza i pulsanti quando si completa il caricamento della pagina */
	window.addEvent('domready', function() {

		var firstTime = true;
		var params;

//		Esistono elementi/pulsanti selezionati: applica ad essi gli stili della classe "selected"
		$defined(sezSelected) && sezSelected.each( function(obj) {
		$defined( $(obj) )	&& $(obj).addClass('selected');
								});
//		Trova tutti i pulsanti "toggle" a cui sono applicati gli stili della classe CSS $$(sezione):
//		sono i pulsanti toggle (valore predefinito della classe: "selezione1").
		$$(sezione).each(function(el) {

			if(firstTime) {
				params = {
					'el'				: el,	
					'mouseover'			: 'mouseover',
					'mouseout'			: 'mouseout'
				};
				params = findRolloverClasses(params);
				firstTime=false;
			}

//			Applica all'elemento successivo ad ogni pulsante di tipo toggle, cioč al "div"
//			(valore predefinito della classe associata: "gSezione") contenente i pulsanti
//			delle sottosezioni relative, l'effetto "Slide" ...
			var fx = new Fx.Slide(el.getNext(), {
				initialize: function() {
					this.wrapper.addClass('.wrapperSezioni');
				}
			}).hide(); //... quindi nascondilo.

//			Trova fra tutti i gruppi delle sottosezioni il pulsante eventuale che deve risultare selezionato.
//			Quindi mostralo (e mostra naturalmente anche le altre sottosezioni della sezione di cui fa parte).
			el.getNext().getElements('a').each(function(link) {
				if(link.hasClass('selected')) fx.show();
			});


//			Quando si clicca sul pulsante "toggle", aziona l'effetto slide sul gruppo delle sottosezioni "relative"
			el.addEvent('click', function(){
				el.toggleClass('selected');
				fx.toggle();
			});
			params.el = el;
			attachRollover(params);
//			attachRollover(el,propsMouseover,propsMouseout);
		});

//		Qualora il pulsante della sezione corrente non abbia sottosezioni,
//		associa ad esso gli stili della classe CSS "selected".
		firstTime = true;
		$$('.sezione0').each(function(el) {
			if(firstTime) {
				params = {
					'el'				: el,	
					'mouseover'			: 'mouseover',
					'mouseout'			: 'mouseout'
				};
				params = findRolloverClasses(params);
				firstTime=false;
			}
			params.el = el;
			attachRollover(params);
			el.addEvent('click', function(){
				el.addClass('selected');
			});

		});


		firstTime = true;
		$$(gSezione).each(function(el) {
			el.getElements('a').each(function(elem) {
				if(firstTime) {
					params = {
						'el'				: elem,	
						'mouseover'			: 'mouseover2',
						'mouseout'			: 'mouseout2'
					};
					params = findRolloverClasses(params);
					firstTime=false;
				}
				params.el = elem;
				attachRollover(params);
			})
		});

	});
// window.addEvent: fine


	function findRolloverClasses(params) {
		var props = {};
		var el = params.el;
		var currentClass = el.className;
		el.className = params.mouseout;
		props.propsMouseout = el.getStyles('color','backgroundColor');
		el.className = params.mouseover;
		props.propsMouseover = el.getStyles('color','backgroundColor');
		el.className = currentClass;
		return props;
	}



	// Gestione degli effetti di transizione sui pulsanti delle sezioni, con riferimento agli eventi "mouseover"
	// e "mouseout
	function attachRollover(params) {
//		Crea gli effetti da associare a ciascun pulsante principale in riferimento agli eventi
//		"mouseover" e "mouseout".
		var el = params.el;
		el.effetto_over = new Fx.Styles(el, {duration:200, transition: Fx.Transitions.Sine.easeOut});
		el.effetto_out 	= new Fx.Styles(el, {duration:200, transition: Fx.Transitions.Sine.easeOut});

//		Effettua sul pulsante principale la transizione: si parte dallo stato attuale della transizione
//		per arrivare allo stato finale, individuato con l'elemento provvisorio div ("__provv") di cui sopra.
		el.addEvent('mouseover', function() {
			if( el.hasClass('selected')) {
				return;
			}
			el.effetto_out.stop();
			el.effetto_over.start({
				'backgroundColor'	: [el.getStyle('backgroundColor'), params.propsMouseover.backgroundColor ],
				'color'				: [el.getStyle('color'), params.propsMouseover.color]
			});

		});

		el.addEvent('mouseout', function() {
			if( el.hasClass('selected')) return;
			el.effetto_over.stop();
			el.effetto_out.start({
				'backgroundColor'	: [el.getStyle('backgroundColor'), params.propsMouseout.backgroundColor ],
				'color'				: [el.getStyle('color'), params.propsMouseout.color]
			});

		});

	}
}

try{
	if(paramSezioni == undefined) paramSezioni = {};
}
catch(e) {
	paramSezioni = {};
}
var cl_menu = new CL_Menu(paramSezioni);

