Allora sto proseguendo nel tentativo di trovare una soluzione, ma qui con i nodi sto sbagliando di sicuro qualcosa perché il risultato è incompleto. Ho recuperato un codice javascript per la gestione dei nodi ed ho cercato di aggiornare il mio file. Questo il codice:
Codice PHP:
<script type="text/javascript">
<!--
if (document.images) {
var lastNode;
}
function showItem(node) {
if (lastNode != null ) {
var tempNode = lastNode.parentNode.firstChild
while (tempNode != null) {
if (tempNode.nodeName == "DIV" && tempNode.className == "item") {
tempNode.style.display="none";
}
tempNode = tempNode.nextSibling;
}
}
lastNode=node;
var itemNode = node.nextSibling;
while (itemNode.nodeName != "DIV" && itemNode.className != "item") {
itemNode = itemNode.nextSibling;
}
var tempNode = node.parentNode.firstChild
while (tempNode != null) {
if (tempNode.nodeName == "DIV" && tempNode.className == "item") {
if (tempNode.style.display == "none"){
tempNode.style.display="block";
}
else
{
tempNode.style.display = "none";
}
}
tempNode = tempNode.nextSibling;
}
}
//-->
</script>
<body>
<?php
include ("config.inc.php");
include ("connect.php");
$query ="SELECT * FROM cat_it ORDER BY idcat";
$result = mysql_query($query,$db) or die (mysql_error());
$tot = mysql_num_rows($result);
while ($row = mysql_fetch_array($result)) {
$id = $row['idcat'];
$categoria = $row['categoria'];
echo "<table>
<tr >
<td colspan='2' class='nav1stLevel'> [url='#']$categoria[/url]
<div class='item' style='display:none;'>
<table cellspacing='0' cellpadding='0' border='0'>
<tr ><td width='10' bgcolor='#FFFFFF' >>$link2</td>
<td colspan='2' bgcolor='#FFFFFF' width='160'>
[url='...'][/url]
</td>
</tr>
</tr>
</table>";
//}
}
?>
così facendo mi compare soltanto una voce e non tutti le voci delle categorie... 
L'idea è giusta però? E' la strada corretta per un menu verticale che recupera valori da mysql?