<?php
// no direct access
defined('_JEXEC') or die;


/*-----------------------------------------------
-- File for B/C of the Version 8 of the module
------------------------------------------------*/


jimport('joomla.filesystem.file');
require_once dirname(__FILE__) . '/helper.php';

// set the default html id for the menu
if ( $params->get('menuid', '') === '' || is_numeric($params->get('menuid', ''))) {
	$params->set('menuid', 'maximenuck' . $module->id);
}
$menuID = $params->get('menuid', '');
$loadfontawesome = false;
$theme = $params->get('theme', 'default');

// check the compilation process
$doCompile = false;
// if one of the compile option is active (compile or yes)
if ($params->get('loadcompiledcss', '0') != '0') {
	if ( ($params->get('loadcompiledcss', '0') == '2' && file_exists(dirname(__FILE__) . '/themes/' . $theme . '/css/maximenuck.php'))
			|| ! file_exists(dirname(__FILE__) . '/themes/custom/css/maximenuck_' . $menuID . '.css') ) {
		$doCompile = true;
	} else if($params->get('loadcompiledcss', '0') == '2') {
		echo '<p style="color:red;font-weight:bold;">MAXIMENU ERROR : Advanced Options - Compile theme is active but file themes/' . $theme . '/css/maximenuck.php not found.</p>';
	}
}
// set the doCompile params to use in the helper for menu items css
$params->set('doCompile', $doCompile);


// retrieve menu items
$thirdparty = $params->get('thirdparty', 'none');
if ($thirdparty == 'hikashop' && !file_exists(dirname(__FILE__) . '/helper_hikashop.php') ) $thirdparty = 'hikashop2'; // BC compatibility
switch ($thirdparty) :
	case 'none':
		// Include the syndicate functions only once
		// require_once dirname(__FILE__).'/helper.php';
		$items = modMaximenuckHelper::getItems($params);
		break;
//	case 'virtuemart':
//		// Include the syndicate functions only once
//		if (file_exists(dirname(__FILE__) . '/helper_virtuemart.php')) {
//			require_once dirname(__FILE__) . '/helper_virtuemart.php';
//			$items = modMaximenuckvirtuemartHelper::getItems($params);
//		} else {
//			echo '<p style="color:red;font-weight:bold;">File helper_virtuemart.php not found ! Please download the patch for Maximenu - Virtuemart on <a href="https://www.joomlack.fr">https://www.joomlack.fr</a></p>';
//			return false;
//		}
//		break;
	case 'hikashop':
		// Include the syndicate functions only once
		if (file_exists(dirname(__FILE__) . '/helper_hikashop.php')) {
			require_once dirname(__FILE__) . '/helper_hikashop.php';
			$items = modMaximenuckhikashopHelper::getItems($params);
		} else {
			echo '<p style="color:red;font-weight:bold;">File helper_hikashop.php not found ! Please download the patch for Maximenu - Hikashop on <a href="https://www.joomlack.fr">https://www.joomlack.fr</a></p>';
			return false;
		}
		break;
	case 'articles':
		// Include the syndicate functions only once
		if (file_exists(dirname(__FILE__) . '/helper_articles.php')) {
			require_once dirname(__FILE__) . '/helper_articles.php';
			$items = modMaximenuckhikashopHelper::getItems($params);
		} else {
			echo '<p style="color:red;font-weight:bold;">File helper_articles.php not found ! Please download the patch for Maximenu - Joomla articles on <a href="https://www.joomlack.fr">https://www.joomlack.fr</a></p>';
			return false;
		}
		break;
	case 'k2':
		// Include the syndicate functions only once
		if (file_exists(dirname(__FILE__) . '/helper_k2.php')) {
			require_once dirname(__FILE__) . '/helper_k2.php';
			$items = modMaximenuckk2Helper::getItems($params);
		} else {
			echo '<p style="color:red;font-weight:bold;">File helper_k2.php not found ! Please download the patch for Maximenu - k2 on <a href="https://www.joomlack.fr">https://www.joomlack.fr</a></p>';
			return false;
		}
		break;
	case 'joomshopping':
		// Include the syndicate functions only once
		if (file_exists(dirname(__FILE__) . '/helper_joomshopping.php')) {
			require_once dirname(__FILE__) . '/helper_joomshopping.php';
			$items = modMaximenuckjoomshoppingHelper::getItems($params, false);
		} else {
			echo '<p style="color:red;font-weight:bold;">File helper_joomshopping.php not found ! Please download the patch for Maximenu - Joomshopping on <a href="https://www.joomlack.fr">https://www.joomlack.fr</a></p>';
			return false;
		}
		break;
	default: // for all thirdparty like virtuemart or adsmanager
	// case 'adsmanager':
		if ($thirdparty == 'hikashop2') $thirdparty = 'hikashop'; // BC compatibility
		// Include the syndicate functions only once
		if (file_exists(JPATH_ROOT . '/plugins/system/maximenuck_'.$thirdparty.'/helper/helper_maximenuck_'.$thirdparty.'.php')) {
			require_once JPATH_ROOT . '/plugins/system/maximenuck_'.$thirdparty.'/helper/helper_maximenuck_'.$thirdparty.'.php';
			$className = 'modMaximenuck'.$thirdparty.'Helper';
			$items = $className::getItems($params, $all = false);
		} else {
			echo '<p style="color:red;font-weight:bold;">Plugin maximenuck_'.$thirdparty.' not found ! Please download the patch for Maximenu - '.ucfirst($thirdparty).' on <a href="https://www.joomlack.fr">https://www.joomlack.fr</a></p>';
			return false;
		}
		break;
endswitch;

// if no item in the menu then exit
if (!$items OR !count($items))
	return false;

foreach ($items as $item) {
	// B/C to avoid php errors, because of migration to J4
	if (! isset($item->fparams)) $item->fparams = $item->params;
}

$document = \Joomla\CMS\Factory::getDocument();
$app = \Joomla\CMS\Factory::getApplication();
$menu = $app->getMenu();
$active = $menu->getActive();
$active_id = isset($active) ? $active->id : $menu->getDefault()->id;
$path = isset($active) ? $active->tree : array();
$class_sfx = htmlspecialchars($params->get('class_sfx'));
jimport('joomla.plugin.helper');

// get the language direction
$langdirection = $document->getDirection();

// page title management
if ($active) {
	$pagetitle = $document->getTitle();
	$title = $pagetitle;
	if (preg_match("/||/", $active->title)) {
		$title = explode("||", $active->title);
		$title = str_replace($active->title, $title[0], $pagetitle);
	}
	if (preg_match("/\[/", $active->title)) {
		if (!$title)
			$title = $active->title;
		$title = explode("[", $title);
		$title = str_replace($active->title, $title[0], $pagetitle);
	}
	$document->setTitle($title); // returns the page title without description
}


// retrieve parameters from the module
// params for the script
$fxduration = $params->get('fxduration', 500);
$fxtransition = $params->get('fxtransition', 'linear');
$orientation = $params->get('orientation', 'horizontal');
$testoverflow = $params->get('testoverflow', '0');
$opentype = $params->get('opentype', 'open');
$fxdirection = $params->get('direction', 'normal');
$directionoffset1 = $params->get('directionoffset1', '30');
$directionoffset2 = $params->get('directionoffset2', '30');
$behavior = $params->get('behavior', 'moomenu');
$usecss = $params->get('usecss', '1'); // for old version compatibility (no more used in the xml)
$usefancy = $params->get('usefancy', '1');
$fancyduree = $params->get('fancyduration', 500);
$fancytransition = $params->get('fancytransition', 'linear');
$fancyease = $params->get('fancyease', 'easeOut');
$fxtype = $params->get('fxtype', 'open');
$dureein = $params->get('dureein', 0);
$dureeout = $params->get('dureeout', 500);
$showactivesubitems = $params->get('showactivesubitems', '0');
$menubgcolor = $params->get('menubgcolor', '') ? "background:" . $params->get('menubgcolor', '') : '';
$ismobile = '0';
$logoimage = $params->get('logoimage', '');
$logolink = $params->get('logolink', '');
$logoheight = $params->get('logoheight', '');
$logowidth = $params->get('logowidth', '');
$usejavascript = $params->get('usejavascript', '1');
$effecttype = ($params->get('layout', 'default') == '_:pushdown') ? 'pushdown' : 'dropdown';

if ( ($effecttype == 'pushdown' || $effecttype == 'megatabs') && $orientation == 'vertical') {
	echo '<p style="color:red;font-weight:bold;">MAXIMENU MESSAGE : You can not use this layout for a Vertical menu</p>';
	return false;
}
// detection for mobiles
if (isset($_SERVER['HTTP_USER_AGENT']) && (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPad') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod') || strstr($_SERVER['HTTP_USER_AGENT'], 'Android'))) {
	$behavior = 'click';
	$ismobile = '1';
}

// get the css from the plugin params and inject them
if ( file_exists(JPATH_ROOT . '/administrator/components/com_maximenuck/maximenuck.php') ) {
	modMaximenuckHelper::injectModuleCss($params, $menuID);
}


if ( $theme != '-1' ) {
	if ($params->get('loadcompiledcss', '0')) {
		if ( $doCompile ) {
			$compilation = modMaximenuckHelper::getCompiledCss($params);
			if (! $compilation) {
				echo '<p style="color:red;font-weight:bold;">MAXIMENU ERROR : Advanced Options - Compile theme is active, error during compilation process.</p>';
			}
		}
		$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/custom/css/maximenuck_' . $menuID . '.css');
	} else if ( file_exists(dirname(__FILE__) . '/themes/' . $theme . '/css/maximenuck.php') ) {
		if ($langdirection == 'rtl' && file_exists(dirname(__FILE__) . '/themes/' . $theme . '/css/maximenuck_rtl.php')) {
			$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/maximenuck_rtl.php?monid=' . $menuID);
		} else {
			$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/maximenuck.php?monid=' . $menuID);
		}
	} else { // compatibility with old themes
		$retrocompatibility_css = '#'.$menuID.' div.floatck, #'.$menuID.' ul.maximenuck li:hover div.floatck div.floatck, #'.$menuID.' ul.maximenuck li:hover div.floatck:hover div.floatck div.floatck,
#'.$menuID.' ul.maximenuck li.sfhover div.floatck div.floatck, #'.$menuID.' ul.maximenuck li.sfhover div.floatck.sfhover div.floatck div.floatck {
left: auto !important;
height: auto;
width: auto;
display: none;
}

#'.$menuID.' ul.maximenuck li:hover div.floatck, #'.$menuID.' ul.maximenuck li:hover div.floatck li:hover div.floatck, #'.$menuID.' ul.maximenuck li:hover div.floatck li:hover div.floatck li:hover div.floatck,
#'.$menuID.' ul.maximenuck li.sfhover div.floatck, #'.$menuID.' ul.maximenuck li.sfhover div.floatck li.sfhover div.floatck, #'.$menuID.' ul.maximenuck li.sfhover div.floatck li.sfhover div.floatck li.sfhover div.floatck {
display: block;
left: auto !important;
height: auto;
width: auto;
}

div#'.$menuID.' ul.maximenuck li.maximenuck.nodropdown div.floatck,
div#'.$menuID.' ul.maximenuck li.maximenuck div.floatck li.maximenuck.nodropdown div.floatck,
div#'.$menuID.' .maxipushdownck div.floatck div.floatck {
display: block !important;
}';
		$document->addStyleDeclaration($retrocompatibility_css);
		// add external stylesheets
		if ($orientation == 'vertical') {
			if ($langdirection == 'rtl' && file_exists(dirname(__FILE__) . '/themes/' . $theme . '/css/moo_maximenuvck_rtl.css')) {
				$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/moo_maximenuvck_rtl.css');
			} else {
				$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/moo_maximenuvck.css');
			}
			if ($usecss == 1 ) {
				if ($langdirection == 'rtl' && file_exists(dirname(__FILE__) . '/themes/' . $theme . '/css/maximenuvck_rtl.php')) {
					$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/maximenuvck_rtl.php?monid=' . $menuID);
				} else {
					$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/maximenuvck.php?monid=' . $menuID);
				}
			}
		} else {
			if ($langdirection == 'rtl' && file_exists(dirname(__FILE__) . '/themes/' . $theme . '/css/moo_maximenuhck_rtl.css')) {
				$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/moo_maximenuhck_rtl.css');
			} else {
				$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/moo_maximenuhck.css');
			}
			if ($usecss == 1) {
				if ($langdirection == 'rtl' && file_exists(dirname(__FILE__) . '/themes/' . $theme . '/css/maximenuhck_rtl.php')) {
					$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/maximenuhck_rtl.php?monid=' . $menuID);
				} else {
					$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/maximenuhck.php?monid=' . $menuID);
				}
			}
		}
	}

	if (file_exists('modules/mod_maximenuck/themes/' . $theme . '/css/ie7.css')) {
		echo '
			<!--[if lte IE 7]>
			<link href="' . \Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/themes/' . $theme . '/css/ie7.css" rel="stylesheet" type="text/css" />
			<![endif]-->';
	}
} else {
	$dropdown_css = '#'.$menuID.' div.floatck, #'.$menuID.' ul.maximenuck li:hover div.floatck div.floatck, #'.$menuID.' ul.maximenuck li:hover div.floatck:hover div.floatck div.floatck,
#'.$menuID.' ul.maximenuck li.sfhover div.floatck div.floatck, #'.$menuID.' ul.maximenuck li.sfhover div.floatck.sfhover div.floatck div.floatck {
display: none;
}

#'.$menuID.' ul.maximenuck li:hover div.floatck, #'.$menuID.' ul.maximenuck li:hover div.floatck li:hover div.floatck, #'.$menuID.' ul.maximenuck li:hover div.floatck li:hover div.floatck li:hover div.floatck,
#'.$menuID.' ul.maximenuck li.sfhover div.floatck, #'.$menuID.' ul.maximenuck li.sfhover div.floatck li.sfhover div.floatck, #'.$menuID.' ul.maximenuck li.sfhover div.floatck li.sfhover div.floatck li.sfhover div.floatck {
display: block;
}';
		$document->addStyleDeclaration($dropdown_css);
}

$menuposition = $params->get('menuposition', '0');
if ($menuposition) {
	$fixedcssposition = ($menuposition == 'bottomfixed') ? "bottom: 0 !important;" : "top: 0 !important;";
	$fixedcss = "div#" . $menuID . ".maximenufixed {
        position: fixed !important;
        left: 0 !important;
        " . $fixedcssposition . "
        right: 0 !important;
        z-index: 1000 !important;
		margin: 0 auto;
		width: 100%;
		" . ($params->get('fixedpositionwidth') ? "max-width: " . modMaximenuckHelper::testUnit($params->get('fixedpositionwidth')) . ";" : "" ) . "
    }";
	if ($menuposition == 'topfixed') {
		$fixedcss .= "div#" . $menuID . ".maximenufixed ul.maximenuck {
            top: 0 !important;
        }";
	} else if ($menuposition == 'bottomfixed') {
		$fxdirection = 'inverse';
	}
//$topfixedmenu = $params->get('topfixedmenu', '0');
	//if ($topfixedmenu)
	$document->addStyleDeclaration($fixedcss);
}

$isMaximenuMobilePluginActive = \Joomla\CMS\Plugin\PluginHelper::isEnabled('system', 'maximenuckmobile');
$loadModuleMobileIcon = false;
if ($params->get('maximenumobile_enable') === '1' && !$isMaximenuMobilePluginActive) {
	$loadModuleMobileIcon = true;
	$mobiletogglercss = "@media screen and (max-width: 524px) {"
		. "#" . $menuID . " .maximenumobiletogglericonck {display: block !important;font-size: 33px !important;text-align: right !important;padding-top: 10px !important;}"
		. "#" . $menuID . " .maximenumobiletogglerck + ul.maximenuck {display: none !important;}"
		. "#" . $menuID . " .maximenumobiletogglerck:checked + ul.maximenuck {display: block !important;}"
		. "}";
	$document->addStyleDeclaration($mobiletogglercss);
}

// add the css classes to show/hide the items
if ($isMaximenuMobilePluginActive) {
	$maximenuplugin = \Joomla\CMS\Plugin\PluginHelper::getPlugin('system', 'maximenuckmobile');
	$pluginParams = new \Joomla\Registry\Registry($maximenuplugin->params);
	$resolution = $pluginParams->get('maximenumobile_resolution', '640');
} else {
	$resolution = "524";
}
$mobilecss = "@media screen and (max-width: " . (int)$resolution . "px) {"
	. "div#" . $menuID . " ul.maximenuck li.maximenuck.nomobileck, div#" . $menuID . " .maxipushdownck ul.maximenuck2 li.maximenuck.nomobileck { display: none !important; }"
	. "}"
	. "@media screen and (min-width: " . ((int)$resolution+1) . "px) {"
	. "div#" . $menuID . " ul.maximenuck li.maximenuck.nodesktopck, div#" . $menuID . " .maxipushdownck ul.maximenuck2 li.maximenuck.nodesktopck { display: none !important; }"
	. "}"
		. "#" . $menuID . " .maximenuck-toggler-anchor {
	height: 0;
	opacity: 0;
	overflow: hidden;
	display: none;
}";
$document->addStyleDeclaration($mobilecss);


// add compatibility css for templates
$templatelayer = $params->get('templatelayer', 'beez3-position1');
if ($templatelayer != -1)
	$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/templatelayers/' . $templatelayer . '.css');

// add responsive css
if ($orientation == 'horizontal' && $params->get('useresponsive', '1') == '1')
	$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/assets/maximenuresponsiveck.css');

\Joomla\CMS\HTML\HTMLHelper::_("jquery.framework", true);
\Joomla\CMS\HTML\HTMLHelper::_("jquery.ui");

if ($usejavascript && $params->get('layout', 'default') != '_:flatlist' && $params->get('layout', 'default') != '_:nativejoomla' && $params->get('layout', 'default') != '_:dropselect') {
	$document->addScript(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/assets/maximenuck.v8.js');

	if ($fxtransition != 'linear' || $fancytransition != 'linear')
		$document->addScript(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/assets/jquery.easing.1.3.js');
	if ($opentype == 'scale' || $opentype == 'puff' || $opentype == 'drop')
		$document->addScript(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/assets/jquery.ui.1.8.js');

	$load = ($params->get('load', 'domready') == 'load') ? "jQuery(window).load(function(){jQuery" : "jQuery(document).ready(function(jQuery){jQuery";
	$js = $load . "('#" . $menuID . "').DropdownMaxiMenu({"
			. "fxtransition : '" . $fxtransition . "',"
			. "dureeIn : " . $dureein . ","
			. "dureeOut : " . $dureeout . ","
			. "menuID : '" . $menuID . "',"
			. "testoverflow : '" . $testoverflow . "',"
			. "orientation : '" . $orientation . "',"
			. "behavior : '" . $behavior . "',"
			. "opentype : '" . $opentype . "',"
			. "fxdirection : '" . $fxdirection . "',"
			. "directionoffset1 : '" . $directionoffset1 . "',"
			. "directionoffset2 : '" . $directionoffset2 . "',"
			. "showactivesubitems : '" . $showactivesubitems . "',"
			. "ismobile : " . $ismobile . ","
			. "menuposition : '" . $menuposition . "',"
			. "effecttype : '" . $effecttype . "',"
			. "topfixedeffect : '" . $params->get('topfixedeffect', '1') . "',"
			. "topfixedoffset : '" . $params->get('topfixedoffset', '') . "',"
			. "clickclose : '" . $params->get('clickclose', '0') . "',"
			. "fxduration : " . $fxduration . "});"
			. "});";

	$document->addScriptDeclaration($js);



// add fancy effect
	if ($orientation == 'horizontal' && $usefancy == 1) {
		$document->addScript(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/assets/fancymenuck.v8.js');
		$js = "jQuery(window).load(function(){
            jQuery('#" . $menuID . "').FancyMaxiMenu({"
				. "fancyTransition : '" . $fancytransition . "',"
				. "fancyDuree : " . $fancyduree . "});"
				. "});";
		$document->addScriptDeclaration($js);
	}
}

// manage microdata
if ($params->get('microdata', '1') == '1') {
	$microdata_ul = ' itemscope itemtype="https://www.schema.org/SiteNavigationElement"';
	$microdata_li = ' itemprop="name"';
	$microdata_a = ' itemprop="url"';
} else {
	$microdata_ul = '';
	$microdata_li = '';
	$microdata_a = '';
}

require \Joomla\CMS\Helper\ModuleHelper::getLayoutPath('mod_maximenuck', $params->get('layout', 'default'));

// load font awesome if needed
global $ckfontawesomeisloaded;
if ($loadfontawesome && !$ckfontawesomeisloaded) {
	$document->addStyleSheet(\Joomla\CMS\Uri\Uri::base(true) . '/modules/mod_maximenuck/assets/font-awesome.min.css');
	$ckfontawesomeisloaded = true;
}
