<?php 
/**
* @version		$Id: menuitem.html.php 2719 2025-08-06 18:42:36Z IOS $
* @package		Elxis
* @subpackage	Component eMenu
* @copyright	Copyright (c) 2006-2025 Elxis CMS (https://www.elxis.org). All rights reserved.
* @license		Elxis Public License ( https://www.elxis.org/elxis-public-license.html )
* @author		Elxis Team ( https://www.elxis.org )
* @description 	Elxis CMS is free software. Read the license for copyright notices and details
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed');


class menuitemEmenuView extends emenuView {

	/*********************/
	/* MAGIC CONSTRUCTOR */
	/*********************/
	public function __construct() {
		parent::__construct();
	}


	/************************/
	/* SHOW MENU ITEMS LIST */
	/************************/
	public function listmenuitems($rows, $options, $collections, $allgroups, $eLang, $elxis) {
		$link = $elxis->makeAURL('emenu:/');
		$inlink = $elxis->makeAURL('emenu:/', 'inner.php');

		$htmlHelper = $elxis->obj('html');

		echo '<h2>'.$eLang->get('COLLECTION').' <span>'.$options['collection']."</span></h2>\n";

		echo '<div class="elx5_box elx5_border_blue">'."\n";
		echo '<div class="elx5_box_body">'."\n";
		echo '<div class="elx5_sticky">'."\n";
		echo '<div class="elx5_dataactions">'."\n";
		if ($elxis->acl()->check('com_emenu', 'menu', 'add') > 0) {
			echo '<a href="#" id="emenuopenadd" class="elx5_dataaction elx5_datahighlight" data-alwaysactive="1" title="'.$eLang->get('ADD').'"><i class="fas fa-plus"></i><span class="elx5_lmobhide"> '.$eLang->get('ADD')."</span></a>\n";
		}
		if ($elxis->acl()->check('com_emenu', 'menu', 'edit') > 0) {
			if (count($collections) > 1) {
				echo '<a href="#" id="emenuopencp" class="elx5_dataaction" title="'.$eLang->get('COPY').'" data-selector="1"><i class="fas fa-copy"></i><span class="elx5_tabhide"> '.$eLang->get('COPY')."</span></a>\n";
				echo '<a href="#" id="emenuopenmo" class="elx5_dataaction" title="'.$eLang->get('MOVE').'" data-selector="1"><i class="fas fa-share"></i><span class="elx5_tabhide"> '.$eLang->get('MOVE')."</span></a>\n";
			}
			echo '<a href="#" id="emenuopentrans" class="elx5_dataaction" data-selector="1" title="'.$eLang->get('TRANSLATIONS').'"><i class="fas fa-globe"></i></a>'."\n";
			echo '<a href="#" id="emenumoved" class="elx5_dataaction" title="'.$eLang->get('MOVE_DOWN').'" data-selector="1"><i class="fas fa-arrow-down"></i></a>'."\n";
			echo '<a href="#" id="emenumoveu" class="elx5_dataaction" title="'.$eLang->get('MOVE_UP').'" data-selector="1"><i class="fas fa-arrow-up"></i></a>'."\n";
		}
		if ($elxis->acl()->check('com_emenu', 'menu', 'delete') > 0) {
			echo '<a href="#" id="emenudelrows" class="elx5_dataaction" title="'.$eLang->get('DELETE').'" data-selector="1" data-activeclass="elx5_datawarn"><i class="fas fa-trash"></i><span class="elx5_tabhide"> '.$eLang->get('DELETE')."</span></a>\n";
		}
		echo "</div>\n";
		echo "</div>\n";//elx5_sticky

		echo '<table id="menuitemstbl" class="elx5_datatable" data-deletelng="'.addslashes($eLang->get('WARN_DELETE_MENUITEM')).'" data-deletepage="'.$inlink.'mitems/delete" data-inpage="'.$inlink.'">'."\n";
		echo "<thead>\n";
		echo "<tr>\n";
		echo $htmlHelper->tableHead('&#160;', 'elx5_nosorting elx5_center');
		echo $htmlHelper->tableHead($eLang->get('TITLE'), 'elx5_nosorting');
		echo $htmlHelper->tableHead($eLang->get('PUBLISHED'), 'elx5_nosorting elx5_center elx5_mobhide');
		echo $htmlHelper->tableHead($eLang->get('TYPE'), 'elx5_nosorting elx5_lmobhide');
		echo $htmlHelper->tableHead($eLang->get('EXPAND'), 'elx5_nosorting elx5_center elx5_tabhide');
		echo $htmlHelper->tableHead($eLang->get('ACCESS'), 'elx5_nosorting elx5_tabhide');
		echo $htmlHelper->tableHead($eLang->get('ID'), 'elx5_nosorting elx5_center elx5_lmobhide');
		echo $htmlHelper->tableHead('SSL', 'elx5_nosorting elx5_center elx5_lmobhide');
		echo "</tr>\n";
		echo "</thead>\n";

		echo "<tbody>\n";
		if ($rows) {
			$canedit = ($elxis->acl()->check('com_emenu', 'menu', 'edit') > 0) ? true : false;

			foreach ($rows as $k => $row) {
				if ($row->published == 1) {
					$status_class = 'elx5_statuspub';
					$status_title = $eLang->get('PUBLISHED');
				} else {
					$status_class = 'elx5_statusunpub';
					$status_title = $eLang->get('UNPUBLISHED');
				}

				switch ($row->expand) {
					case 2: $lvl = $eLang->get('FULL'); break;
					case 1: $lvl = $eLang->get('LIMITED'); break;
					case 0: default: $lvl = $eLang->get('NO'); break;
				}

				$acctxt = $elxis->alevelToGroup($row->alevel, $allgroups);

				switch ($row->menu_type) {
					case 'link': $typetxt = '<span title="'.$row->link.'">'.$eLang->get('LINK').'</span>'; break;
					case 'separator': $typetxt = '<span title="'.$row->link.'">'.$eLang->get('SEPARATOR').'</span>'; break;
					case 'wrapper': $typetxt = '<span title="'.$row->link.'">'.$eLang->get('WRAPPER').'</span>'; break;
					case 'onclick': $typetxt = '<span title="'.addslashes($row->link).'">OnClick</span>'; break;
					default: $typetxt = '<span title="'.$row->link.'">'.$row->menu_type.'</span>'; break;
				}
				$secureclass = ($row->secure == 1) ? 'fas fa-lock' : 'fas fa-lock-open';

				echo '<tr id="datarow'.$row->menu_id.'">'."\n";
				echo '<td class="elx5_center">';
				echo '<input type="checkbox" name="dataprimary" id="dataprimary'.$row->menu_id.'" class="elx5_datacheck" value="'.$row->menu_id.'">';
				echo '<label for="dataprimary'.$row->menu_id.'"></label></td>'."\n";
				if ($canedit) {
					echo '<td><a href="'.$link.'mitems/edit.html?menu_id='.$row->menu_id.'" title="'.$eLang->get('EDIT').'">'.$row->treename."</a></td>\n";
					echo '<td class="elx5_center elx5_mobhide"><a href="#" data-menuid="'.$row->menu_id.'" class="elx5_statusicon '.$status_class.'" title="'.$status_title.' - '.$eLang->get('CLICK_TOGGLE_STATUS').'" data-actlink="'.$link.'mitems/togglestatus"></a></td>'."\n";
				} else {
					echo '<td>'.$row->treename."</td>\n";
					echo '<td class="elx5_center elx5_mobhide"><a href="#" class="elx5_statusicon '.$status_class.'" title="'.$status_title.'"></a></td>'."\n";
				}

				echo '<td class="elx5_lmobhide">'.$typetxt.'</td>'."\n";
				echo '<td class="elx5_center elx5_tabhide">'.$lvl.'</td>'."\n";
				echo '<td class="elx5_tabhide">'.$acctxt.'</td>'."\n";
				echo '<td class="elx5_center elx5_lmobhide">'.$row->menu_id.'</td>'."\n";
				echo '<td class="elx5_center elx5_lmobhide"><i class="'.$secureclass.'"></i></td>'."\n";
				echo "</tr>\n";
			}
		} else {
			echo '<tr id="datarow0" class="elx5_rowwarn"><td class="elx5_center" colspan="8">'.$eLang->get('NO_RESULTS')."</td></tr>\n";
		}
		echo "</tbody>\n";
		echo "</table>\n";

		echo "</div>\n";//elx5_box_body

		if ($rows) {
			echo $htmlHelper->tableSummary($link, $options['page'], $options['maxpage'], $options['total']);
		}

		echo "</div>\n";//elx5_box
		echo '<div id="emenutranslations" class="elx5_invisible">'.$elxis->makeAURL('etranslator:single/editall.html', 'inner.php').'?category=com_emenu&element=title&tbl=menu&col=title&idcol=menu_id</div>'."\n";

		echo $htmlHelper->startModalWindow($eLang->get('SEL_MENUITEM_TYPE'), 'emenadd');
		echo '<div class="emenu5_typebox">'."\n";
		echo '<h4><a href="'. $link.'mitems/add.html?collection='.$options['collection'].'&amp;type=link">'.$eLang->get('LINK')."</a></h4>\n";
		echo '<div class="elx5_tip">'.$eLang->get('LINK_LINK_DESC')."</div>\n";
		echo "</div>\n";
		echo '<div class="emenu5_typebox">'."\n";
		echo '<h4><a href="'. $link.'mitems/add.html?collection='.$options['collection'].'&amp;type=url">URL'."</a></h4>\n";
		echo '<div class="elx5_tip">'.$eLang->get('LINK_URL_DESC')."</div>\n";
		echo "</div>\n";
		echo '<div class="emenu5_typebox">'."\n";
		echo '<h4><a href="'. $link.'mitems/add.html?collection='.$options['collection'].'&amp;type=onclick">OnClick</a></h4>'."\n";
		echo '<div class="elx5_tip">'.$eLang->get('ONCLICK_DESC')."</div>\n";
		echo "</div>\n";
		echo '<div class="emenu5_typebox">'."\n";
		echo '<h4><a href="'. $link.'mitems/add.html?collection='.$options['collection'].'&amp;type=separator">'.$eLang->get('SEPARATOR')."</a></h4>\n";
		echo '<div class="elx5_tip">'.$eLang->get('LINK_SEPARATOR_DESC')."</div>\n";
		echo "</div>\n";
		echo '<div class="emenu5_typebox">'."\n";
		echo '<h4><a href="'. $link.'mitems/add.html?collection='.$options['collection'].'&amp;type=wrapper">'.$eLang->get('WRAPPER')."</a></h4>\n";
		echo '<div class="elx5_tip">'.$eLang->get('LINK_WRAPPER_DESC')."</div>\n";
		echo "</div>\n";
		echo $htmlHelper->endModalWindow();

		echo $htmlHelper->startModalWindow($eLang->get('COPY'), 'emencp');
		echo '<form name="fmcopymenu" id="fmcopymenu" method="post" action="'.$inlink.'mitems/copy" class="elx5_form">'."\n";
		echo '<div class="elx5_formrow">'."\n";
		echo '<label class="elx5_label" for="emencpcollection">'.$eLang->get('COLLECTION')."</label>\n";
		echo '<div class="elx5_labelside">'."\n";
		echo '<select name="collection" id="emencpcollection" class="elx5_select">'."\n";
		echo '<option value="" selected="selected">- '.$eLang->get('SELECT')." -</option>\n";
		foreach ($collections as $mcol) {
			if ($mcol == $options['collection']) { continue; }
			echo '<option value="'.$mcol.'">'.$mcol."</option>\n";
		}
		echo "</select>\n";
		echo "</div>\n</div>\n";
		echo '<input type="hidden" name="menu_id" id="emencpmenu_id" value="0">'."\n";
		echo '<div class="elx5_vpad">'."\n";
		echo '<button type="button" class="elx5_btn elx5_sucbtn" id="emencpsave" name="save">'.$eLang->get('COPY')."</button> \n";
		echo "</div>\n";
		echo "</form>\n";
		echo $htmlHelper->endModalWindow();

		echo $htmlHelper->startModalWindow($eLang->get('MOVE'), 'emenmo');
		echo '<form name="fmmovemenu" id="fmmovemenu" method="post" action="'.$inlink.'mitems/move" class="elx5_form">'."\n";
		echo '<div class="elx5_formrow">'."\n";
		echo '<label class="elx5_label" for="emenmocollection">'.$eLang->get('COLLECTION')."</label>\n";
		echo '<div class="elx5_labelside">'."\n";
		echo '<select name="collection" id="emenmocollection" class="elx5_select">'."\n";
		echo '<option value="" selected="selected">- '.$eLang->get('SELECT')." -</option>\n";
		foreach ($collections as $mcol) {
			if ($mcol == $options['collection']) { continue; }
			echo '<option value="'.$mcol.'">'.$mcol."</option>\n";
		}
		echo "</select>\n";
		echo "</div>\n</div>\n";
		echo '<input type="hidden" name="menu_id" id="emenmomenu_id" value="0">'."\n";
		echo '<div class="elx5_vpad">'."\n";
		echo '<button type="button" class="elx5_btn elx5_sucbtn" id="emenmosave" name="save">'.$eLang->get('MOVE')."</button> \n";
		echo "</div>\n";
		echo "</form>\n";
		echo $htmlHelper->endModalWindow();
	}


	/**********************/
	/* ADD/EDIT MENU ITEM */
	/**********************/
	public function editMenuItem($row, $treeitems, $components, $leveltip, $component='', $is_new=false) {
		$eLang = eFactory::getLang();
		$elxis = eFactory::getElxis();

		$clang = $elxis->getConfig('LANG');
		$cinfo = $eLang->getallinfo($clang);

		$action = $elxis->makeAURL('emenu:mitems/save.html', 'inner.php');

		switch ($row->menu_type) {
			case 'link':
				if ($row->menu_id) {
					$typetxt = $this->linkTitle($component, $row->link);
				} else {
					$typetxt = $eLang->get('LINK');
				}
				$typetxt2 = $eLang->get('LINK');
			break;
			case 'url': $typetxt = 'URL'; $typetxt2 = 'URL'; break;
			case 'onclick': $typetxt = 'OnClick'; $typetxt2 = 'OnClick'; break;
			case 'wrapper': $typetxt = $eLang->get('WRAPPER'); $typetxt2 = $eLang->get('WRAPPER'); break;
			case 'separator': $typetxt = $eLang->get('SEPARATOR'); $typetxt2 = $eLang->get('SEPARATOR'); break;
			default: $typetxt = $row->menu_type; $typetxt2 = $row->menu_type; break;
		}

		if ($is_new) {
			echo '<h2>'.$typetxt2.' <span>'.$eLang->get('NEW')."</span></h2>\n";
		} else {
			echo '<h2>'.$typetxt2.' <span>'.$row->title."</span></h2>\n";
		}

		echo '<div class="elx5_2colwrap">'."\n";
		echo '<div class="elx5_2colbox">'."\n";

		elxisLoader::loadFile('includes/libraries/elxis/form5.class.php');
		$form = new elxis5Form(array('idprefix' => 'epr'));
		$form->openForm(array('name' => 'fmrtedit', 'method' =>'post', 'action' => $action, 'id' => 'fmrtedit'));
		$form->openFieldset($eLang->get('BASIC_SETTINGS'));

		$form->addInfo($eLang->get('TYPE'), $typetxt);

		$trdata = array('category' => 'com_emenu', 'element' => 'title', 'elid' => intval($row->menu_id));
		$form->addMLText('title', $trdata, $row->title, $eLang->get('TITLE'), array('required' => 'required', 'maxlength' => 255));

		if (($row->menu_type == 'url') || ($row->menu_type == 'wrapper')) {
			$form->addUrl('link', $row->link, $eLang->get('LINK'), array('required' => 'required', 'maxlength' => 255));
		} else if ($row->menu_type == 'onclick') {
			$form->addText('link', $row->link, $eLang->get('JSCODE'), array('required' => 'required', 'maxlength' => 255, 'tip' => $eLang->get('JSCODE_DESC')));
		} else {
			$attrs = array('dir' => 'ltr', 'maxlength' => 160);
			if ($row->menu_type == 'separator') {
				$label = $eLang->get('LINK');
			} else {
				$attrs['required'] = 'required';
				$label = $eLang->get('ELXIS_LINK');
			}
			$form->addText('link', $row->link, $label, $attrs);
		}

		$options = array();
		$options[] = $form->makeOption(0, $eLang->get('NO'));
		if ($treeitems) {
			foreach ($treeitems as $treeitem) {
				$disabled = 0;
				if ($row->menu_id) {
					if ($row->menu_id == $treeitem->menu_id) { $disabled = 1; }
				}
				$options[] = $form->makeOption($treeitem->menu_id, $treeitem->treename, array(), $disabled);
			}
		}
		$form->addSelect('parent_id', $eLang->get('PARENT_ITEM'), $row->parent_id, $options, array('tip' => $eLang->get('PARENT_ITEM_DESC')));

		$options = array();
		$options[] = $form->makeOption(0, '- '.$eLang->get('FIRST'));
		$q = 1;
		if ($row->menu_id) {
			if ($treeitems) {
				foreach ($treeitems as $item) {
					if ($item->parent_id == $row->parent_id) {
						$options[] = $form->makeOption($q, $q.' - '.$item->title);
						$q++;
					}
				}
			}
		}
		$q = ($q > 1) ? $q : 999;
		$options[] = $form->makeOption($q, '- '.$eLang->get('LAST'));
		$form->addSelect('ordering', $eLang->get('ORDERING'), $row->ordering, $options);

		$form->addAccesslevel('alevel', $eLang->get('ACCESS_LEVEL'), $row->alevel, $elxis->acl()->getLevel(), array('dir' => 'ltr', 'tip' => $leveltip));

		$form->addYesNo('published', $eLang->get('PUBLISHED'), $row->published);
		$form->closeFieldset();

		if ($row->menu_type != 'separator') {
			$form->openFieldset($eLang->get('OTHER_OPTIONS'));

			$options = array();
			$options[] = $form->makeOption('felxis-logo', 'felxis-logo');
			$options[] = $form->makeOption('fas fa-address-card', 'fas fa-address-card');
			$options[] = $form->makeOption('fas fa-at', 'fas fa-at');
			$options[] = $form->makeOption('fas fa-calendar-alt', 'fas fa-calendar-alt');
			$options[] = $form->makeOption('fas fa-car', 'fas fa-car');
			$options[] = $form->makeOption('fas fa-caret-left', 'fas fa-caret-left');
			$options[] = $form->makeOption('fas fa-caret-right', 'fas fa-caret-right');
			$options[] = $form->makeOption('fas fa-chart-line', 'fas fa-chart-line');
			$options[] = $form->makeOption('fas fa-chart-pie', 'fas fa-chart-pie');
			$options[] = $form->makeOption('fas fa-comment', 'fas fa-comment');
			$options[] = $form->makeOption('fas fa-database', 'fas fa-database');
			$options[] = $form->makeOption('fas fa-desktop', 'fas fa-desktop');
			$options[] = $form->makeOption('fas fa-download', 'fas fa-download');
			$options[] = $form->makeOption('fas fa-envelope', 'fas fa-envelope');
			$options[] = $form->makeOption('fas fa-film', 'fas fa-film');
			$options[] = $form->makeOption('fas fa-folder-open', 'fas fa-folder-open');
			$options[] = $form->makeOption('fas fa-globe', 'fas fa-globe');
			$options[] = $form->makeOption('fas fa-home', 'fas fa-home');
			$options[] = $form->makeOption('fas fa-image', 'fas fa-image');
			$options[] = $form->makeOption('fas fa-info', 'fas fa-info');
			$options[] = $form->makeOption('fas fa-map-marker-alt', 'fas fa-map-marker-alt');
			$options[] = $form->makeOption('fas fa-microphone-alt', 'fas fa-microphone-alt');
			$options[] = $form->makeOption('fas fa-motorcycle', 'fas fa-motorcycle');
			$options[] = $form->makeOption('fas fa-music', 'fas fa-music');
			$options[] = $form->makeOption('fas fa-pen', 'fas fa-pen');
			$options[] = $form->makeOption('fas fa-phone', 'fas fa-phone');
			$options[] = $form->makeOption('fas fa-sign-in-alt', 'fas fa-sign-in-alt');
			$options[] = $form->makeOption('fas fa-shopping-cart', 'fas fa-shopping-cart');
			$options[] = $form->makeOption('fas fa-star', 'fas fa-star');
			$options[] = $form->makeOption('fas fa-tag', 'fas fa-tag');
			$options[] = $form->makeOption('fas fa-user', 'fas fa-user');
			$options[] = $form->makeOption('fas fa-volume-up', 'fas fa-volume-up');
			$form->addSelectAddOther('iconfont', $eLang->get('ICON_FONT'), $row->iconfont, $options, array('dir' => 'ltr', 'tip' => $eLang->get('ICON_FONT_DESC')));
			unset($options);

			if ($row->menu_type == 'link') {
				$options = array(
					array('name' => $eLang->get('NO'), 'value' => 0, 'color' => 'red'),
					array('name' => $eLang->get('LIMITED'), 'value' => 1, 'color' => 'yellow'),
					array('name' => $eLang->get('FULL'), 'value' => 2, 'color' => 'green')
				);
				$form->addItemStatus('expand', $eLang->get('EXPAND'), $row->expand, $options, array('tip' => $eLang->get('EXPAND_DESC')));
			}

			if (($row->menu_type == 'link') || ($row->menu_type == 'wrapper')) {
				$options = array();
				$options[] = $form->makeOption('index.php', $eLang->get('FULL_PAGE'));
				$options[] = $form->makeOption('inner.php', $eLang->get('ONLY_COMPONENT'));
				$form->addSelect('file', $eLang->get('ELXIS_INTERFACE'), $row->file, $options, array('tip' => $eLang->get('ELXIS_INTERFACE_DESC')));
			}
			if ($row->menu_type != 'onclick') {
				$options = array(
					array('name' => $eLang->get('NO'), 'value' => 0, 'color' => 'red'),
					array('name' => $eLang->get('TYPICAL_POPUP'), 'value' => 1, 'color' => 'yellow'),
					array('name' => $eLang->get('LIGHTBOX_WINDOW'), 'value' => 2, 'color' => 'green')
				);
				$form->addItemStatus('popup', $eLang->get('POPUP_WINDOW'), $row->popup, $options);

				$form->addNumber('width', $row->width, $eLang->get('WIDTH'), array('min' => '0', 'max' => 9999, 'step' => 1, 'tip' => $eLang->get('POPUP_WIDTH_DESC'), 'class' => 'elx5_text elx5_mediumtext'));

				$form->addNumber('height', $row->height, $eLang->get('HEIGHT'), array('min' => '0', 'max' => 9999, 'step' => 1, 'tip' => $eLang->get('POPUP_HEIGHT_DESC'), 'class' => 'elx5_text elx5_mediumtext'));
				$options = array();
				$options[] = $form->makeOption('', $eLang->get('NONE'));
				$options[] = $form->makeOption('_self', $eLang->get('SELF_WINDOW'));
				$options[] = $form->makeOption('_blank', $eLang->get('NEW_WINDOW'));
				$options[] = $form->makeOption('_parent', $eLang->get('PARENT_WINDOW'));
				$options[] = $form->makeOption('_top', $eLang->get('TOP_WINDOW'));
				$form->addSelect('target', $eLang->get('LINK_TARGET'), $row->target, $options);
			}

			if (($row->menu_type == 'link') || ($row->menu_type == 'wrapper')) {
				$form->addYesNo('secure', $eLang->get('SECURE_CONNECT'), $row->secure, array('tip' => $eLang->get('SECURE_CONNECT_DESC')));
			}
			$form->closeFieldset();
		} //not separator

		$form->addHidden('section', $row->section);
		$form->addHidden('collection', $row->collection);
		$form->addHidden('menu_type', $row->menu_type);
		$form->addHidden('menu_id', $row->menu_id);
		if (($row->menu_type != 'link') && ($row->menu_type != 'wrapper')) {
			$form->addHidden('file', '');
		}
		if ($row->menu_type != 'link') { $form->addHidden('expand', 0); }
		if ($row->menu_type == 'separator') {
			$form->addHidden('popup', 0);
			$form->addHidden('width', 0);
			$form->addHidden('height', 0);
			$form->addHidden('target', '');
			$form->addHidden('iconfont', '');
		}
		if ($row->menu_type == 'onclick') {
			$form->addHidden('popup', 0);
			$form->addHidden('width', 0);
			$form->addHidden('height', 0);
			$form->addHidden('target', '');
		}
		if (($row->menu_type != 'link') && ($row->menu_type != 'wrapper')) { $form->addHidden('secure', 0); }

		$form->addToken('menuitem');
		$form->addHidden('task', '');

		$form->closeForm();

		echo '</div>'."\n";//elx5_2colbox
		echo '<div class="elx5_2colbox">'."\n";

		$this->initMenuHelper($row->menu_type, $components, $component, $eLang, $elxis);

		echo '</div>'."\n";//elx5_2colbox
		echo '</div>'."\n";//elx5_2colwrap
	}


	/************************************/
	/* INITIALIZE MENU GENERATOR/HELPER */
	/************************************/
	private function initMenuHelper($menu_type, $components, $component, $eLang, $elxis) {
		if ($menu_type == 'link') {
			$title = $eLang->get('LINK_GENERATOR');
		} else if ($menu_type == 'url') {
			$title = 'URL';
		} else if ($menu_type == 'wrapper') {
			$title = $eLang->get('WRAPPER');
		} else if ($menu_type == 'separator') {
			$title = $eLang->get('SEPARATOR');
		} else if ($menu_type == 'onclick') {
			$title = 'OnClick';
		} else {
			$title = '';
		}

		echo '<div class="elx5_box elx5_border_green">'."\n";
		echo '<div class="elx5_box_body">'."\n";
		if ($title != '') {
			echo '<div class="elx5_dataactions elx5_spad">'."\n";
			echo '<h3 class="iosrt_box_title">'.$title."</h3>\n";
			echo "</div>\n";
		}

		if ($menu_type == 'link') {
			$datalink = $elxis->makeAURl('emenu:mitems/generator', 'inner.php');

			echo '<div class="elx5_formrow">'."\n";
			echo '<label class="elx5_label" for="emenpickcomponent">'.$eLang->get('SEL_COMPONENT')."</label>\n";
			echo '<div class="elx5_labelside">';
			echo '<select name="pickcomponent" id="emenpickcomponent" class="elx5_select" data-loadlng="'.$eLang->get('LOADING').'" data-datalink="'.$datalink.'">'."\n";
			if ($component == '') {
				echo '<option value="" selected="selected">- '.$eLang->get('SELECT')." -</option>\n";
			}
			if ($components) {
				foreach ($components as $key => $val) {
					$sel = ($key == 'com_'.$component) ? ' selected="selected"' : '';
					echo '<option value="'.$key.'"'.$sel.'>'.$val.'</option>'."\n";
				}
			}
			echo "</select>\n";
			echo "</div>\n</div>\n";
			echo '<div id="emenu_generator" class="emenu5_generatorwrap"></div>'."\n";
		} else if ($menu_type == 'url') {
			echo '<div class="elx5_info">'.$eLang->get('URL_HELPER')."</div>\n";
		} else if ($menu_type == 'wrapper') {
			echo '<div class="elx5_info">'.$eLang->get('WRAPPER_HELPER')."</div>\n";
			echo '<div class="elx5_help">'.$eLang->get('TIP_INTERFACE')."</div>\n";
		} else if ($menu_type == 'separator') {
			echo '<div class="elx5_info">'.$eLang->get('SEPARATOR_HELPER')."</div>\n";
		} else if ($menu_type == 'onclick') {
			echo '<div class="elx5_sminfo elx5_dspace">'.$eLang->get('ONCLICK_DESC')."</div>\n";
			echo '<h4>Example 1</h4>';
			echo '<div class="elx5_info">somefunction();</div>'."\n";
			echo '<h4>Example 2</h4>';
			echo '<div class="elx5_info">this.style.color = \'red\';</div>'."\n";
		} else {
		}

		echo "</div>\n</div>\n";
	}


	/*************************************************************************/
	/* GET A TITLE FOR THE CURRENT LINK (ONLY FOR EDIT AND MENU TYPE = LINK) */
	/*************************************************************************/
	private function linkTitle($component, $link) {
		$eLang = eFactory::getLang();
		if ($component == '') { return $eLang->get('LINK'); }
		if ($component == 'content') {
			if (($link == '') || ($link == '/') || ($link == 'content:/')) {
				return $eLang->get('FRONTPAGE');
			} else if (preg_match('#(\/)$#', $link)) {
				return $eLang->get('LINK_TO_CAT');
			} else if ($link == 'feeds.html') {
				return $eLang->get('SPECIAL_LINK').' <span dir="ltr">('.$eLang->get('CONTENT').')</span>';
			} else if (strpos('tags.html', $link) === 0) {
				return $eLang->get('SPECIAL_LINK').' <span dir="ltr">('.$eLang->get('CONTENT').')</span>';
			} else if (preg_match('#(\.html)$#', $link)) {
				if (strpos($link, '/') !== false) {
					return $eLang->get('LINK_TO_CAT_ARTICLE');
				} else {
					return $eLang->get('LINK_TO_AUT_PAGE');
				}
			} else if (preg_match('#(rss\.xml)$#', $link)) {
				return $eLang->get('LINK_TO_CAT_RSS');
			} else if (preg_match('#(atom\.xml)$#', $link)) {
				return $eLang->get('LINK_TO_CAT_ATOM');
			} else {
				return $eLang->get('SPECIAL_LINK').' <span dir="ltr">('.$eLang->get('CONTENT').')</span>';
			}
		} else {
			if ($link == $component.':/') {
				return sprintf($eLang->get('COMP_FRONTPAGE'), ucfirst($component));
			} else {
				return $eLang->get('SPECIAL_LINK').' <span dir="ltr">('.ucfirst($component).')</span>';
			}
		}
	}


	/********************/
	/* GENERATOR OUTPUT */
	/********************/
	public function linkGeneratorOutput($items, $xmlmenus, $cname, $elxis, $eLang) {
		$this->ajaxHeaders('text/plain');

		if (is_array($items) && (count($items) > 0)) {
			echo '<h3 class="emenu5_gtitle">'.$eLang->get('STANDARD_LINKS')."</h3>\n";
			echo '<ul class="emenu5_gblock">'."\n";
			foreach ($items as $item) {
				$this->showAddLink($item, 0);
			}
			if ($cname == 'content') {
				$pop = $elxis->makeAURL('emenu:mitems/browser.html', 'inner.php');
				echo '<li class="emenu5_glevel0">';
				echo '<a href="#" id="emenugenlca" data-pop="'.$pop.'">'.$eLang->get('LINK_TO_CAT_OR_ARTICLE').'</a>';
				echo "</li>\n";
			}
			echo "</ul>\n";
		}
		if (is_array($xmlmenus) && (count($xmlmenus) > 0)) {
			foreach ($xmlmenus as $xmlmenu) {
				if (!is_array($xmlmenu->items) || (count($xmlmenu->items) == 0)) { continue; }
				echo '<h3 class="emenu5_gtitle">'.$eLang->get('MENU').': '.$xmlmenu->title."</h3>\n";
				echo '<ul class="emenu5_gblock">'."\n";
				foreach ($xmlmenu->items as $item) {
					$this->showAddLink($item, 0, true);
					if (count($item->children) > 0) {
						foreach ($item->children as $level1) {
							$this->showAddLink($level1, 1, true);
							if (count($level1->children) > 0) {
								foreach ($level1->children as $level2) {
									$this->showAddLink($level2, 2, true);
									if (count($level2->children) > 0) {
										foreach ($level2->children as $level3) {
											$this->showAddLink($level3, 3, true);
											if (count($level3->children) > 0) {
												foreach ($level3->children as $level4) {
													$this->showAddLink($level4, 4, true);
												}
											}
										}
									}
								}
							}
						}
					}
				}
				echo "</ul>\n";
			}
		}
		exit;
	}


	/********************************/
	/* SHOW GENERATOR ADDITION LINK */
	/********************************/
	private function showAddLink($item, $level=0, $multiplier=false) {
		$title = addslashes($item->title);
		$alevel = ($multiplier === true) ? $item->alevel * 1000 : $item->alevel;
		echo '<li class="emenu5_glevel'.$level.'">';
		echo '<a href="#" data-genltitle="'.$title.'" data-link="'.$item->link.'" data-secure="'.$item->secure.'" data-alevel="'.$alevel.'">'.$item->name.'</a>';
		echo "</li>\n";
	}


	/***************************/
	/* CATEGORIES BROWSER HTML */
	/***************************/
	public function categoriesBrowser($rows, $paths, $options, $allgroups) {
		$eLang = eFactory::getLang();
		$elxis = eFactory::getElxis();

		$browser_link = $elxis->makeAURL('emenu:mitems/browser.html', 'inner.php');
		$n = count($paths) - 1;

		echo '<div class="elx5_pad">'."\n";
		echo '<div class="elx5_formtext">'."\n";
		foreach ($paths as $i => $path) {
			$cattitle = $path->title;
			$len = eUTF::strlen($path->title);
			$title = ($len > 20) ? eUTF::substr($path->title, 0, 17).'...' : $path->title;
			echo '<a href="'.$browser_link.'?catid='.$path->catid.'&amp;t=c&amp;o='.$options['order'].'" title="'.$path->title.'">'.$title.'</a>';
			if ($i < $n) { echo " &#187; \n"; }
		}
		echo "</div>\n";

		echo '<table dir="'.$eLang->getinfo('DIR').'" class="elx5_datatable">'."\n";
		echo "<tr>\n";
		echo '<th class="elx5_center">&#160;'."</th>\n";
		echo '<th>'.$eLang->get('CATEGORY')."</th>\n";
		echo '<th class="elx5_center">'.$eLang->get('PUBLISHED')."</th>\n";
		echo '<th class="elx5_center">'.$eLang->get('ARTICLES')."</th>\n";
		echo '<th class="elx5_center">'.$eLang->get('ACCESS')."</th>\n";
		echo '<th class="elx5_center">'.$eLang->get('ACTIONS')."</th>\n";
		echo "</tr>\n";

		$folder_icon = $elxis->icon('folder', 16);
		if ($rows) {
			$link_icon = $elxis->icon('link', 16);
			$rss_icon = $elxis->icon('rss', 16);
			$atom_icon = $elxis->icon('atom', 16);
			$pub_icon = $elxis->icon('tick', 16);
			$unpub_icon = $elxis->icon('error', 16);

			foreach ($rows as $row) {
				$picon = ($row->published == 1) ? $pub_icon : $unpub_icon;
				$title = addslashes($row->title);
				$acctxt = $elxis->alevelToGroup($row->alevel, $allgroups);

				echo '<tr>'."\n";
				echo '<td class="elx5_center"><a href="#" data-poptitle="'.$title.'" data-link="content:'.$row->seolink.'" data-secure="0" data-alevel="'.$row->alevel.'" title="'.$eLang->get('LINK_TO_ITEM').' ('.$row->catid.')"><img src="'.$link_icon.'" alt="add"></a></td>'."\n";
				echo '<td><a href="'.$browser_link.'?catid='.$row->catid.'&amp;t=c&amp;o='.$options['order'].'">'.$row->title."</a></td>\n";
				echo '<td class="elx5_center"><img src="'.$picon.'" alt="publish status">'."</td>\n";
				echo '<td class="elx5_center">'.$row->articles."</td>\n";
				echo '<td class="elx5_center">'.$acctxt."</td>\n";
				echo '<td class="elx5_center">'."\n";
				echo '<a href="'.$browser_link.'?catid='.$row->catid.'&amp;t=a&amp;o='.$options['order'].'" title="'.$eLang->get('BROWSE_ARTICLES').'"><img src="'.$folder_icon.'" alt="browse"></a> &#160; '."\n";
				echo '<a href="#" data-poptitle="'.$title.' RSS" data-link="content:'.$row->seolink.'rss.xml" data-secure="0" data-alevel="0" title="'.$eLang->get('LINK_TO_CAT_RSS').'"><img src="'.$rss_icon.'" alt="RSS"></a> &#160; '."\n";
				echo '<a href="#" data-poptitle="'.$title.' ATOM" data-link="content:'.$row->seolink.'atom.xml" data-secure="0" data-alevel="0" title="'.$eLang->get('LINK_TO_CAT_ATOM').'"><img src="'.$atom_icon.'" alt="ATOM"></a>'."\n";
				echo "</td>\n";
				echo "</tr>\n";
			}
		} else {
			echo '<tr class="elx5_rowwarn"><td class="elx5_center" colspan="6">'.$eLang->get('NO_ITEMS_DISPLAY')."</td></tr>\n";
		}
		echo "</table>\n";

		echo '<div class="elx5_tspace">'."\n";
		if ($options['catid'] == 0) {
			$txt = sprintf($eLang->get('ART_WITHOUT_CAT'), '<strong>'.$options['articles'].'</strong>');
		} else {
			$txt = sprintf($eLang->get('CAT_CONT_ART'), '<strong>'.$cattitle.'</strong>', '<strong>'.$options['articles'].'</strong>');
		}

		echo '<a href="'.$browser_link.'?catid='.$options['catid'].'&amp;t=a&amp;o='.$options['order'].'" title="'.$eLang->get('BROWSE_ARTICLES').'" class="emenu5_catarts">';
		echo '<img src="'.$folder_icon.'" alt="browse"> '.$txt.'</a>'."\n";

		if ($options['maxpage'] > 1) {
			$linkbase = $browser_link.'?catid='.$options['catid'].'&amp;t='.$options['type'].'&amp;o='.$options['order'];
			$navigation = $elxis->obj('navigation')->navLinks($linkbase, $options['page'], $options['maxpage']);
			echo $navigation;
		}
		$this->sortingOptions($options);
		echo "</div>\n";
		echo "</div>\n";//elx5_pad
	}


	/*************************/
	/* ARTICLES BROWSER HTML */
	/*************************/
	public function articlesBrowser($rows, $paths, $options, $allgroups) {
		$eLang = eFactory::getLang();
		$elxis = eFactory::getElxis();

		$browser_link = $elxis->makeAURL('emenu:mitems/browser.html', 'inner.php');
		$ctg_seolink = '';

		echo '<div class="elx5_pad">'."\n";
		echo '<div class="elx5_formtext">'."\n";
		foreach ($paths as $i => $path) {
			$len = eUTF::strlen($path->title);
			$title = ($len > 20) ? eUTF::substr($path->title, 0, 17).'...' : $path->title;
			$ctg_seolink = $path->seolink;
			echo '<a href="'.$browser_link.'?catid='.$path->catid.'&amp;t=c&amp;o='.$options['order'].'" title="'.$path->title.'">'.$title.'</a>';
			echo " &#187; \n";
		}
		echo $eLang->get('ARTICLES')."\n";
		echo "</div>\n";

		echo '<table dir="'.$eLang->getinfo('DIR').'" class="elx5_datatable">'."\n";
		echo "<tr>\n";
		echo '<th class="elx5_center">&#160;'."</th>\n";
		echo '<th>'.$eLang->get('ARTICLE')."</th>\n";
		echo '<th class="elx5_center">'.$eLang->get('PUBLISHED')."</th>\n";
		echo '<th class="elx5_center">'.$eLang->get('ACCESS')."</th>\n";
		echo "</tr>\n";
		if ($rows) {
			$link_icon = $elxis->icon('link', 16);
			$folder_icon = $elxis->icon('folder', 16);
			$pub_icon = $elxis->icon('tick', 16);
			$unpub_icon = $elxis->icon('error', 16);
			$browser_link = $elxis->makeAURL('emenu:mitems/browser.html', 'inner.php');

			foreach ($rows as $row) {
				$picon = ($row->published == 1) ? $pub_icon : $unpub_icon;
				$title = addslashes($row->title);
				$acctxt = $elxis->alevelToGroup($row->alevel, $allgroups);

				echo '<tr>'."\n";
				echo '<td class="elx5_center"><a href="#" data-poptitle="'.$title.'" data-link="content:'.$ctg_seolink.$row->seotitle.'.html" data-secure="0" data-alevel="'.$row->alevel.'" title="'.$eLang->get('LINK_TO_ITEM').' ('.$row->id.')"><img src="'.$link_icon.'" alt="add"></a>'."</td>\n";
				echo '<td>'.$row->title."</td>\n";
				echo '<td class="elx5_center"><img src="'.$picon.'" alt="publish status">'."</td>\n";
				echo '<td class="elx5_center">'.$acctxt."</td>\n";
				echo '<td class="elx5_center">'."\n";
				echo "</td>\n";
				echo "</tr>\n";
			}
		} else {
			echo '<tr class="elx5_rowwarn"><td class="elx5_center" colspan="4">'.$eLang->get('NO_ITEMS_DISPLAY')."</td></tr>\n";
		}
		echo "</table>\n";

		echo '<div class="elx5_vspace">'."\n";
		if ($options['maxpage'] > 1) {
			$linkbase = $browser_link.'?catid='.$options['catid'].'&amp;t='.$options['type'].'&amp;o='.$options['order'];
			$navigation = $elxis->obj('navigation')->navLinks($linkbase, $options['page'], $options['maxpage']);
			echo $navigation;
		}
		$this->sortingOptions($options);
		echo "</div>\n";
		echo "</div>\n";//elx5_pad
	}


	/***************************************/
	/* DISPLAY SORTING OPTIONS FOR BROWSER */
	/***************************************/
	private function sortingOptions($options) {
		$eLang = eFactory::getLang();

		$browser_link = eFactory::getElxis()->makeAURL('emenu:mitems/browser.html', 'inner.php');
		$sorts = array(
			'oa' => $eLang->get('ORDERING').' '.$eLang->get('ASCENDING'),
			'od' => $eLang->get('ORDERING').' '.$eLang->get('DESCENDING'),
			'ta' => $eLang->get('TITLE').' '.$eLang->get('ASCENDING'),
			'td' => $eLang->get('TITLE').' '.$eLang->get('DESCENDING'),
			'ia' => $eLang->get('ID').' '.$eLang->get('ASCENDING'),
			'id' => $eLang->get('ID').' '.$eLang->get('DESCENDING')
		);
		if ($options['type'] == 'a') {
			$sorts['da'] = $eLang->get('DATE').' '.$eLang->get('ASCENDING');
			$sorts['dd'] = $eLang->get('DATE').' '.$eLang->get('DESCENDING');
			$sorts['ma'] = $eLang->get('LAST_MODIFIED').' '.$eLang->get('ASCENDING');
			$sorts['md'] = $eLang->get('LAST_MODIFIED').' '.$eLang->get('DESCENDING');
		}

		echo '<div class="elx5_tspace">'."\n";
		echo '<form name="emchangesort" id="emchangesort" method="get" action="'.$browser_link.'" class="elx5_form">'."\n";
		echo '<div class="elx5_formrow">'."\n";
		echo '<label class="elx5_label" for="emensoo">'.$eLang->get('ORDERING')."</label>\n";
		echo '<div class="elx5_labelside">'."\n";
		echo '<select name="o" id="emensoo" class="elx5_select">'."\n";
		foreach ($sorts as $key => $name) {
			$sel = ($key == $options['order']) ? ' selected="selected"' : '';
			echo '<option value="'.$key.'"'.$sel.'>'.$name."</option>\n";
		}
		echo "</select>\n";
		echo "</div>\n</div>\n";
		echo '<input type="hidden" name="catid" value="'.$options['catid'].'">'."\n";
		echo '<input type="hidden" name="t" value="'.$options['type'].'">'."\n";
		echo '<input type="hidden" name="page" value="'.$options['page'].'">'."\n";
		echo "</form>\n";
		echo "</div>\n";
	}

}

?>