<?php
/**
* @version $Id: md_submenu.php,v 1.2 2005/04/28 04:56:49 rhuk Exp $
* @package Mambo
* @copyright (C) 2000 - 2005 Miro International Pty Ltd
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* Mambo is Free Software
*/

/** ensure this file is being included by a parent file */
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

if (!defined( '_MOS_SUBMENU_MODULE' )) {
	/** ensure that functions are declared only once */
	define( '_MOS_SUBMENU_MODULE', 1 );
	$hilightid = -1;
	
	$tab_colors = array('red');
	$tab_color = 'red';
	$tab_index = 0;
	
	/**
	* Utility function for writing a menu link
	*/
	function rtGetTabColor() {
		global $tab_color;
		return $tab_color;
	}
	

	function rtGetHilightid() {
		global $hilightid;
		return $hilightid;
	}
	
	function rtGetSubMenuLink( $mitem, $level, $hilight=false , $color_index=false) {
		global $Itemid, $mosConfig_live_site, $mainframe, $hilightid, $menuname, $tab_colors, $tab_color, $tab_index, $forcehilite;
		$txt = '';
		$id = '';
		$active = '';
		$rowcolor = '';
		$start = '';
		$spanstart = '';

		switch ($mitem->type) {
			case 'separator':
			case 'component_item_link':
			break;
			case 'content_item_link':
			$temp = split("&task=view&id=", $mitem->link);
			$mitem->link .= '&Itemid='. $mainframe->getItemid($temp[1]);
			break;
			case 'url':
			if ( eregi( 'index.php\?', $mitem->link ) ) {
				if ( !eregi( 'Itemid=', $mitem->link ) ) {
					$mitem->link .= '&Itemid='. $mitem->id;
				}
			}
			break;
			case 'content_typed':
			default:
			$mitem->link .= '&Itemid='. $mitem->id;
			break;
		}

		$rowcolor = "bg" . $tab_index++%2;

		// Active Menu highlighting
		$current_itemid = trim( mosGetParam( $_REQUEST, 'Itemid', 0 ) );
		
		if ($level==0) $spanstart = "<span class=\"top\">";
	
		if (($forcehilite && $hilight) || (($current_itemid == $mitem->id || $hilight) && !$forcehilite)) {
			if ($level == 0) {
				$tab_color = $id;
				$menuname = $mitem->name;
				$hilightid = $mitem->id;
			} 
			$start = "<li class=\"" . $rowcolor . " active\">" . $spanstart;
		} else {
			$start = "<li class=\"" . $rowcolor . "\">" . $spanstart;
		}
		
		$mitem->link = ampReplace( $mitem->link );

		if ( strcasecmp( substr( $mitem->link,0,4 ), 'http' ) ) {
			$mitem->link = sefRelToAbs( $mitem->link );
		}

		$txt = '';

		switch ($mitem->browserNav) {
			// cases are slightly different
			case 1:
			// open in a new window
			$txt .= '<a href="'. $mitem->link .'" target="_blank">'. $mitem->name ."</a>";
			break;

			case 2:
			// open in a popup window
			$txt .= "<a href=\"#\" onclick=\"javascript: window.open('". $mitem->link ."', '', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=550'); return false\">". $mitem->name ."</a>";
			break;

			case 3:
			// don't link it
			$txt .= '<span class="seperator">'. $mitem->name ."</span>";
			break;

			default:	// formerly case 2
			// open in parent window
			$txt .= '<a href="'. $mitem->link .'">'. $mitem->name ."</a>";
			break;
		}
		

		$menu_params 	= new stdClass();
		$menu_params 	= new mosParameters( $mitem->params );
		$menu_image 	= $menu_params->def( 'menu_image', -1 );
		if ( ( $menu_image != '-1' ) && $menu_image ) {
			$image = '<img src="'. $mosConfig_live_site .'/images/stories/'. $menu_image .'" border="0" alt="'. $mitem->name .'"/>';
				$txt = $image .' '. $txt;
		}

		
		if ($level==0) $txt .= "<span class=\"selector\"></span></span></li>\n";

		return $start . $txt;
	}

	
	
	function rtShowHorizMenu(  $menutype) {
		global $database, $my, $cur_template, $Itemid, $hilightid, $forcehilite, $tab_index;
		global $mosConfig_absolute_path, $mosConfig_shownoauth;
		$topnav = '';
		
		$tab_index = 0;

		if ($mosConfig_shownoauth) {
			$sql = "SELECT m.* FROM #__menu AS m"
			. "\nWHERE menutype='". $menutype ."' AND published='1' AND parent=0"
			. "\nORDER BY ordering";
		} else {
			$sql = "SELECT m.* FROM #__menu AS m"
			. "\nWHERE menutype='". $menutype ."' AND published='1' AND access <= '$my->gid' AND parent=0"
			. "\nORDER BY ordering";
		}
		$database->setQuery( $sql );

		$topmenu = $database->loadObjectList( 'id' );
		
		//work out if this should be highlighted
		$sql = "SELECT m.* FROM #__menu AS m"
		. "\nWHERE menutype='". $menutype ."' AND published='1'"; 
		$database->setQuery( $sql );
		$subrows = $database->loadObjectList( 'id' );
		$maxrecurse = 5;
		$parentid = $Itemid;

		//this makes sure toplevel stays hilighted when submenu active
		while ($maxrecurse-- > 0) {
			$parentid = getParentRow($subrows, $parentid);
			if (isset($parentid) && $parentid >= 0 && $subrows[$parentid]) {
				$hilightid = $parentid;
			} else {
				break;	
			}
		}
				
		$links = array();
		$i = 0;
		foreach ($topmenu as $menuitem) {
			$hilight = false;
			if (isset($forcehilite) && $forcehilite && $forcehilite == $i++) {
					$hilight = true;
			} else {
				if ($menuitem->id == $hilightid) {
					$hilight = true;	
				}
			}
			$links[] = rtGetSubMenuLink( $menuitem, 0, $hilight, true );
		}
		



		$menuclass = 'menu';
		if (count( $links )) {
	
			$topnav .= "<ul class=\"" . $menuclass ."\" id=\"horiznav\">\n";
			foreach ($links as $link) {
				$topnav .= $link;
			}
			$topnav .= "\n</ul>\n";
			
		}
		return $topnav;
	}
	
	function getParentRow($rows, $id) {
		if (isset($rows[$id]) && $rows[$id]) {
			if($rows[$id]->parent > 0) {
				return $rows[$id]->parent;
			}	
		}
		return -1;
	}
	
	/**
	* Vertically Indented Menu
	*/
	function rtShowSubMenu(  $menutype, $suffix=""  ) {
		global $database, $my, $cur_template, $Itemid;
		global $mosConfig_absolute_path, $mosConfig_live_site, $mosConfig_shownoauth;
		
		$sidenav = '';

		/* If a user has signed in, get their user type */
		$intUserType = 0;
		if($my->gid){
			switch ($my->usertype) {
				case 'Super Administrator':
				$intUserType = 0;
				break;
				case 'Administrator':
				$intUserType = 1;
				break;
				case 'Editor':
				$intUserType = 2;
				break;
				case 'Registered':
				$intUserType = 3;
				break;
				case 'Author':
				$intUserType = 4;
				break;
				case 'Publisher':
				$intUserType = 5;
				break;
				case 'Manager':
				$intUserType = 6;
				break;
			}
		} else {
			/* user isn't logged in so make their usertype 0 */
			$intUserType = 0;
		}

		if ($mosConfig_shownoauth) {
			$sql = "SELECT m.* FROM #__menu AS m"
			. "\nWHERE menutype='". $menutype ."' AND published='1'"
			. "\nAND parent > 0"
			. "\nORDER BY parent,ordering";
		} else {
			$sql = "SELECT m.* FROM #__menu AS m"
			. "\nWHERE menutype='". $menutype ."' AND published='1' AND access <= '$my->gid'"
			. "\nAND parent > 0"
			. "\nORDER BY parent,ordering";
		}
		$database->setQuery( $sql );
		$rows = $database->loadObjectList( 'id' );
	

		// establish the hierarchy of the menu
		$children = array();
		// first pass - collect children
		

		foreach ($rows as $v ) {
			$pt = $v->parent;
			$list = @$children[$pt] ? $children[$pt] : array();
			array_push( $list, $v );
			$children[$pt] = $list;
		}
				
		

		// 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;
			}
		}
		
		if (isset($children[$id]) && $children[$id]) {
			$sidenav = rtRecurseSubMenu( $id, 1, $children, $open, $suffix);
		}

		return $sidenav;

	}

	/**
	* Utility function to recursively work through a vertically indented
	* hierarchial menu
	*/
	function rtRecurseSubMenu( $id, $level, &$children, &$open, $suffix) {
		global $Itemid, $menuname;
		
		$output = "";
		$sub_class = "menuside";
		
		if (@$children[$id]) {
			//$n = min( $level, count( $indents )-1 );
			if ($level == 1 ) {
				$output .= "<div class=\"moduletable-hilite6\">\n";
				$output .= "<h3>" . $menuname . " Menu</h3>\n";
				$output .= "<ul class=\"" . $sub_class . "\">\n";
			} else {
				$output .= "<ul>\n";
			}


			
			foreach ($children[$id] as $row) {
				$output .= rtGetSubMenuLink( $row, $level );
				if ( in_array( $row->id, $open )) {
					$output .= rtRecurseSubMenu( $row->id, $level+1, $children, $open, $suffix );
				}
				$output .= "</li>\n";
			}
		
			$output .= "</ul>\n";

			if ($level == 1) {
				$output .= "</div>\n";
			}
			
		}

		return $output;
	}
	
	function beginsWith( $str, $sub ) {
   return ( substr( $str, 0, strlen( $sub )-1 ) == $sub );
	}

}

?>
