Salve gente,

ti posso fare io un esempio semplice semplice con solo un livello di dipendenza
codice:
<HTML>
<HEAD>
<script language="javascript">
	function elemento(valore,testo,padre){
		this.valore=valore
		this.testo=testo
		this.padre=padre
	}
	
	var opzioni = new Array()
	opzioni[opzioni.length]=new elemento('cat1','film',null)
	opzioni[opzioni.length]=new elemento('cat2','telefilm',null)

	opzioni[opzioni.length]=new elemento('film1','matrix','cat1')
	opzioni[opzioni.length]=new elemento('film2','biancaneve','cat1')
	opzioni[opzioni.length]=new elemento('film3','pulp fiction','cat1')
	opzioni[opzioni.length]=new elemento('film4','pinocchio','cat1')
	opzioni[opzioni.length]=new elemento('film5','trainspotting','cat1')

	opzioni[opzioni.length]=new elemento('tfilm1','heppy days','cat2')
	opzioni[opzioni.length]=new elemento('tfilm2','streghe','cat2')
	opzioni[opzioni.length]=new elemento('tfilm3','8 sotto un tetto','cat2')
	opzioni[opzioni.length]=new elemento('tfilm4','arnold','cat2')
	
	
	function svuotaSelect(ss){
		nn = ss.length
		for(i=nn; i>=0; i--)
			ss[i]=null;
	}
	
	function VisPrimaSelect(){
		prima = document.forms[0].primaSelect.options
		svuotaSelect(prima)
		for(i=0;i<opzioni.length;i++)
			if(!opzioni[i].padre)
				prima[prima.length]=new Option(opzioni[i].testo,opzioni[i].valore)
	}
	
	function VisSecondaSelect(){
		seconda = document.forms[0].secondaSelect.options
		svuotaSelect(seconda)
		pp = document.forms[0].primaSelect
		valorePrima = pp.options[pp.selectedIndex].value

		for(i=0;i<opzioni.length;i++)
			if(opzioni[i].padre==valorePrima)
				seconda[seconda.length]=new Option(opzioni[i].testo,opzioni[i].valore)
	}
	
</script>

<TITLE>Select dipendenti</TITLE>
</HEAD>
<BODY onload="VisPrimaSelect();VisSecondaSelect()">
<form>
	<select name="primaSelect" onchange="VisSecondaSelect();">
	</select>
	

	<select name="secondaSelect" multiple size="5">
	</select>
</form>
</BODY>
</HTML>
dovrebbe essere abbastanza chiaro il codice... se hai bisogno di chiarimenti chiedi pure
Aloha