function prendiElementoDaId(id_elemento) {
	var elemento;
	if(document.getElementById) {
		elemento = document.getElementById(id_elemento);
		//alert ("EUREKA! Ho preso "+id_elemento+"!!!");
	}	else {
		elemento = document.all[id_elemento];
	}
	return elemento;
}
var uso =new Array();
var stile = new Array();
var colore = new Array();
var selettori = new Array();
var gruppi_attivati = '';

function inizializza (str1, str2, str3) {
	//alert (str1+'  |  '+str2+'  |  '+str3);
	ripristina_valori (uso, str1);
	ripristina_valori (stile, str2);
	ripristina_valori (colore, str3);
	//alert(selettori);
}

function ripristina_valori (gruppo, valori) {
	if (valori!='') {
		arr = valori.split(',');
		//alert ('array splittato = '+arr);
		//alert ('lunghezza array splittato = '+arr.length);
		for (q=0; q<arr.length; q++) {
			//alert('i vale '+q+' - nell\'arr vale '+arr[q]);
			on_off(arr[q], gruppo);
		};
	}
}

function on_off (selettore, gruppo) {
	interruttore (selettore, gruppo);
	incrocia_risultati();
	evidenzia();
	aggiorna_href();
};
function interruttore(selettore, gruppo) {
	var str_gruppo = gruppo.toString()+',';
	if (str_gruppo.search(selettore)==-1) {
		//alert('il seletore "'+selettore+'" è spento, quindi lo accendo');
		gruppo.push(selettore);
		colora(prendiElementoDaId(selettore));
	} else {
		//alert('il seletore "'+selettore+'" è acceso, quindi lo spengo');
		decolora(prendiElementoDaId(selettore));
		str_gruppo = str_gruppo.replace(selettore, '');
		gruppo.splice(0, gruppo.length+1);
		//alert ('ora gruppo dovrebbe essere vuoto. verifica: '+gruppo);
		//alert(str_gruppo.indexOf(','));
		while (str_gruppo.indexOf(',')!=-1) {
			prima_virgola = str_gruppo.indexOf(',');
			chiave = str_gruppo.substr(0, prima_virgola);
			str_gruppo = str_gruppo.substr(prima_virgola+1);
			//alert (chiave);
			if (chiave != '') {
				gruppo.push(chiave);
			}
			//alert (str_gruppo);
		}
	}
	//alert ('operazione terminata. il gruppo che hai scelto ora contiene '+gruppo.length+' elementi: -'+gruppo+'-');
};
function incrocia_risultati() {
	gruppi_attivati = '';
	controlla_singolo_gruppo(uso);
	controlla_singolo_gruppo(stile);
	controlla_singolo_gruppo(colore);
	selettori.splice(0, selettori.length+1);
	switch (gruppi_attivati) {
		case '111':
			incrocia_3selettori ();
			break;
		case '110':
			incrocia_2selettori (uso, stile);
			break;
		case '101':
			incrocia_2selettori (uso, colore);
			break;
		case '011':
			incrocia_2selettori (stile, colore);
			break;
		case '100':
			solo1selettore(uso);
			break;
		case '010':
			solo1selettore(stile);
			break;
		case '001':
			solo1selettore(colore);
	}
	//alert ('selettori ora vale: '+selettori);
};
function controlla_singolo_gruppo(gruppo) {
	if (gruppo.length > 0) {
		gruppi_attivati = gruppi_attivati+'1';
	} else {
		gruppi_attivati = gruppi_attivati+'0';
	}
	//alert ('gruppi attivati adesso vale: '+gruppi_attivati);
};
function incrocia_3selettori() {
	for (i=0; i<uso.length; i++) {
		if (uso[i]!=false) {
			for (n=0; n<stile.length; n++) {
				if (stile[n]!=false) {
					for (m=0; m<colore.length; m++) {
						if (colore[m]!=false) {
							selettori.push(uso[i]+"-"+stile[n]+"-"+colore[m]);
						};
					};
				};
			};
		};
	};
}
function incrocia_2selettori(primo_gruppo, secondo_gruppo) {
	for (i=0; i<primo_gruppo.length; i++) {
		for (n=0; n<secondo_gruppo.length; n++) {
			selettori.push(primo_gruppo[i]+"-"+secondo_gruppo[n]);
		};
	};
}
function solo1selettore(gruppo) {
	for (i=0; i<gruppo.length; i++) {
			selettori.push(gruppo[i]);
	};
}

function evidenzia() {
	listare = prendiElementoDaId('lista');
	elenco_ddone = listare.getElementsByTagName('dd');
	//alert (elenco_ddone);
	//alert ('lunghezza elenco = '+elenco_ddone.length);
	for (i=0; i<elenco_ddone.length; i++) {
		decolora(elenco_ddone[i]);
		for (n=0; n<selettori.length; n++) {
			chiavi = selettori[n].split('-');
			verifica = 0;
			for (j=0; j<chiavi.length; j++) {
				if (elenco_ddone[i].className.match(chiavi[j])) {
					verifica++;
				}; 
			};
			if (verifica == chiavi.length && elenco_ddone[i].className.match('evidenziato')==null) {
				//alert ('chiavi = '+chiavi);
				//alert ('verifica = '+verifica);
				//alert ('ne ho trovato 1: '+elenco_ddone[i].firstChild.innerHTML);
				colora (elenco_ddone[i]);
				//alert (elenco_ddone[i].firstChild.innerHTML+' ora ha una nuova classe che corrisponde a:<br />'+elenco_ddone[i].className);
			};
		}
	};
}
function colora(elemento) {
classe = elemento.className;
nuova_classe = classe+' evidenziato';
elemento.className = nuova_classe;
}
function decolora(elemento) {
	classe = elemento.className;
	nuova_classe = classe.replace('evidenziato','');
	//alert ('ho ripulito '+elemento.firstChild.innerHTML+' che ora ha come classe: '+nuova_classe);
	elemento.className = nuova_classe;
}
function aggiorna_href() {
	listone = prendiElementoDaId('lista');
	//alert('In questo momento ti sto segnalando l\'elemento che ho recuperato: '+listone.id);
  elenco_dd = listone.getElementsByTagName('dd');
	for (i=0; i<elenco_dd.length; i++) {
		href = elenco_dd[i].firstChild.href;
		if (href.match('&')) {
			href_pulito = href.substring(0, href.indexOf('&'));
		} else {
			href_pulito = href;
		};
		if (gruppi_attivati!='000') {
			parametri = '&uso='+uso.toString()+'&stile='+stile.toString()+'&colore='+colore.toString();
		} else {
			parametri = '';
		}
		if (prendiElementoDaId('ricerca').style.display != 'none') {
			parametri = parametri+'&open=true';
		};
		nuovo_href = href_pulito+parametri;
		//alert ('ho ripulito '+elemento.firstChild.innerHTML+' che ora ha come classe: '+nuova_classe);
		elenco_dd[i].firstChild.href = nuovo_href;
	}
}