// second pass - collect 'open' menus
$open = array( $Itemid );
$count = 20; // maximum levels - to prevent runaway loop
$id = $Itemid;
while (--$count) {
if (isset($rows[$id]) && $rows[$id]->parent > 0) {
$id = $rows[$id]->parent;
$open[] = $id;
} else {
break;
}
}
$class_sfx = null;
mosRecurseListMenu( 0, 0, $children, $open, $indents, $class_sfx, $hilightid );
echo "<br/>"; ?>
<script type="text/javascript">
<!--
var obj_cssMenu1 = new CSSMenu("cssMenu1");
obj_cssMenu1.setTimeouts(400, 200, 800);
obj_cssMenu1.setSubMenuOffset(0, 0, 0, 0);
obj_cssMenu1.setHighliteCurrent(true);
obj_cssMenu1.setAnimation('none');
obj_cssMenu1.show();
//-->
</script>
<?php echo "</div>";
}
/**
* Utility function to recursively work through a vertically indented
* hierarchial menu
*/
function sefRelToAbs($value) {
return JRoute::_($value);
}
function mosRecurseListMenu( $id, $level, &$children, $open, &$indents, $class_sfx, $highlight ) {
global $Itemid;
global $HTTP_SERVER_VARS, $mosConfig_live_site;
if (@$children[$id]) {
$n = min( $level, count( $indents )-1 );
echo $indents[$n][0];
foreach ($children[$id] as $row) {
switch ($row->type) {
case 'separator':
// do nothing
$row->link = "seperator";
break;
case 'url':
if ( eregi( 'index.php\?', $row->link ) ) {
if ( !eregi( 'Itemid=', $row->link ) ) {
$row->link .= '&Itemid='. $row->id;
}
}
break;
default:
$row->link .= "&Itemid=$row->id";
break;
}
$li = "\n".$indents[$n][1] ;
$current_itemid = trim( JArrayHelper::getValue( $_REQUEST, 'Itemid', 0 ) );
if ($row->link != "seperator" &&
$current_itemid == $row->id ||
$row->id == $highlight ||
(sefRelToAbs( substr($_SERVER['PHP_SELF'],0,-9) . $row->link)) == $_SERVER['REQUEST_URI'] ||
(sefRelToAbs( substr($_SERVER['PHP_SELF'],0,-9) . $row->link)) == $HTTP_SERVER_VARS['REQUEST_URI']) {
$li = "<li>";
}
echo $li;
echo mosGetLink( $row, $level, $class_sfx );
mosRecurseListMenu( $row->id, $level+1, $children, $open, $indents, $class_sfx, "" );
echo $indents[$n][2];
}
echo "\n".$indents[$n][3];
}
}
function getParentRow($rows, $id) {
if (isset($rows[$id]) && $rows[$id]) {
if($rows[$id]->parent > 0) {
return $rows[$id]->parent;
}
}
return -1;
}