Here's a bit of code I knocked together before now - does almost exactly the same thing that you're after, so perhaps you can use it
I implemented it on an intranet site with a target audience of only ie5+ users, so I can't make any wild claims about portabiity, but I reckon that there's no reason why it shouldnt work on ns6.x
hope it helps
code:
<html>
<body style="margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px;">
<table>
<tr>
<td><a href="#"><img src="1.gif" height="20" width="100" border="0" onmouseover="fShowDiv(0)" /></a></td>
<td><a href="#"><img src="2.gif" height="20" width="100" border="0" onmouseover="fShowDiv(1)" /></a></td>
<td><a href="#"><img src="3.gif" height="20" width="100" border="0" onmouseover="fShowDiv(2)" /></a></td>
<td><a href="#"><img src="4.gif" height="20" width="100" border="0" onmouseover="fShowDiv(3)" /></a></td>
</tr>
<tr>
<td>
<div id="menu" style="position: absolute; width: 100; background-color: #99ccff; display: none;" onMouseOver="this.style.display='inline'" onMouseOut="fHideDiv()">
</div>
</td>
</tr>
<tr>
<td>other stuff</td>
</tr>
</table>
<script language="javascript">
var arrContent =
new Array(
new Array(new Array("link01", "#"), new Array("link02", "#"), new Array("link03", "#"), new Array("link04", "#")),
new Array(Array("link11", "#"), new Array("link12", "#")),
new Array(Array("link21", "#")),
new Array(Array("link31", "#"), new Array("link32", "#"), new Array("link33", "#"), new Array("link34", "#"))
);
function fShowDiv(intPositionID)
{
var objElement = document.getElementById("menu")
var strHTML = "";
for (intLoop1 = 0; intLoop1 < arrContent[intPositionID].length; intLoop1++)
{
strHTML += "<a href=\"" + arrContent[intPositionID][intLoop1][1] + "\">" + arrContent[intPositionID][intLoop1][0] + "</a><br>";
}
objElement.innerHTML = strHTML;
objElement.style.left = (3 * intPositionID) + (101 * intPositionID) + 3;
objElement.style.display = "inline";
}
function fHideDiv()
{
document.getElementById("menu").style.display = "none"
}
</script>
</body>
</html>