<?php 
/**
* @version		$Id$
* @package		Elxis CMS
* @subpackage	Templates / Five
* @author		Ioannis Sannos ( https://www.isopensource.com )
* @copyright	Copyleft (c) 2008-2025 Is Open Source (https://www.isopensource.com).
* @license		Elxis Public License ( https://www.elxis.org/elxis-public-license.html )
* @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 templateFive {

	private $tplparams = array();
	private $is_frontpage = false;
	private $sidecolumn = true;


	/*********************/
	/* MAGIC CONSTRUCTOR */
	/*********************/
	public function __construct() {
		$elxis = eFactory::getElxis();

		$elxuri = eFactory::getURI()->getElxisUri();
		if (preg_match('@(\:)$@', $elxuri)) { $elxuri .= '/'; }
		if (($elxuri == '') || ($elxuri == 'content:/') || ($elxuri == '/') || ($elxuri == 'content') || ($elxuri == $elxis->getConfig('DEFAULT_ROUTE'))) {
			$this->is_frontpage = true;
		}

		$this->prepare($elxis);
	}


	/***************************/
	/* GET TEMPLATE PARAMETERS */
	/***************************/
	private function prepare($elxis) {
		elxisLoader::loadFile('includes/libraries/elxis/parameters.class.php');
		$xmlpath = ELXIS_PATH.'/templates/five/five.xml';
		$tplparams = $this->getDBParams();
		$params = new elxisParameters($tplparams, $xmlpath, 'template');

		$this->tplparams['tplwidth'] = (int)$params->get('tplwidth', 0);
		$this->tplparams['title'] = eUTF::trim($params->getML('title', ''));
		if ($this->tplparams['title'] == '') {
			$parts = preg_split('@\s@', $elxis->getConfig('SITENAME'));
			if (count($parts) > 1) {
				$title = '<span>'.$parts[0].'</span>';
				foreach ($parts as $k => $part) { if ($k == 0) { continue; } $title .= ' '.$part; }
			} else {
				$title = $elxis->getConfig('SITENAME');
			}
			$this->tplparams['title'] = $title;
		}
		$this->tplparams['slogan'] = eUTF::trim($params->getML('slogan', ''));
		if ($this->tplparams['slogan'] == '') { $this->tplparams['slogan'] = 'Template Five for Elxis CMS'; }

		$socials = array('facebook', 'twitter', 'youtube', 'flickr', 'instagram', 'linkedin', 'pinterest', 'tumblr', 'tripadvisor');
		foreach ($socials as $social) {
			$this->tplparams[$social] = trim($params->get($social, ''));
			if ($this->tplparams[$social] != '') {
				if (!preg_match('@^(https?\:\/\/)@i', $this->tplparams[$social])) { $this->tplparams[$social] = ''; }	
			}
		}

		$this->tplparams['rss'] = (int)$params->get('rss', 1);
		$this->tplparams['sitemap'] = (int)$params->get('sitemap', 1);
		if (!file_exists(ELXIS_PATH.'/components/com_sitemap/sitemap.php')) { $this->tplparams['sitemap'] = 0; }
		$this->tplparams['sliderimage'] = (int)$params->get('sliderimage', 0);

		$this->tplparams['slider'] = array();
		$this->tplparams['sltitle'] = eUTF::trim($params->getML('sltitle', ''));
		if ($this->is_frontpage) { //frontpage slider
			for ($i=1; $i < 7; $i++) {
				$idx1 = 'sl'.$i;
				$idx2 = 'slcaption'.$i;
				$idx3 = 'sllink'.$i;
				$img = trim($params->get($idx1, ''));
				if ($img == '') { continue; }
				$caption = eUTF::trim($params->getML($idx2, ''));
				$link = trim($params->get($idx3, ''));
				if (!file_exists(ELXIS_PATH.'/'.$img)) { continue; }
				if ($link != '') {
					if (!preg_match('@^(http(s?)\:\/\/)@i', $link)) {
						$link = $elxis->makeURL($link, 'index.php', true, false);
					}
				}
				$this->tplparams['slider'][] = array(
					'image' => $elxis->secureBase().'/'.$img,
					'caption' => $caption,
					'link' => $link
				);
			}

			if (count($this->tplparams['slider']) == 0) {
				if ($this->tplparams['sltitle'] == '') { $this->tplparams['sltitle'] = 'Amazing discoveries'; }
				$this->tplparams['slider'][] = array(
					'image' => $elxis->secureBase().'/templates/five/images/slider/def1.jpg',
					'caption' => 'Giant stone spheres@The mysterious stone spheres of Costa Rica',
					'link' => $elxis->makeURL('content:amazing-discoveries/costa-rica-stone-spheres.html')
				);
				$this->tplparams['slider'][] = array(
					'image' => $elxis->secureBase().'/templates/five/images/slider/def2.jpg',
					'caption' => 'Yonaguni Monument@The Underwater City of Yonaguni',
					'link' => $elxis->makeURL('content:amazing-discoveries/underwater-city-yonaguni.html')
				);
				$this->tplparams['slider'][] = array(
					'image' => $elxis->secureBase().'/templates/five/images/slider/def3.jpg',
					'caption' => 'Antikythera Mechanism@A 2200-year-old astronomical calculator',
					'link' => $elxis->makeURL('content:amazing-discoveries/antikythera-mechanism.html')
				);
				$this->tplparams['slider'][] = array(
					'image' => $elxis->secureBase().'/templates/five/images/slider/def4.jpg',
					'caption' => 'Voynich Manuscript@The most mysterious manuscript',
					'link' => $elxis->makeURL('content:amazing-discoveries/voynich-manuscript.html')
				);
				$this->tplparams['slider'][] = array(
					'image' => $elxis->secureBase().'/templates/five/images/slider/def5.jpg',
					'caption' => 'The unfinished obelisk@Egypt, 1500 BC',
					'link' => $elxis->makeURL('content:amazing-discoveries/unfinished-obelisk.html')
				);
				//shuffle($this->tplparams['slider']);
			}
		}//else background image "fpimg"

		$this->tplparams['fpimgpos'] = trim($params->getML('fpimgpos', ''));//if sliderimage = 1
		$this->tplparams['bgtype'] = (int)$params->get('bgtype', 0);
		$this->tplparams['pathway'] = (int)$params->get('pathway', 3);
		$this->tplparams['marquee'] = eUTF::trim($params->getML('marquee', ''));
		if (($this->tplparams['pathway'] == 3) || ($this->tplparams['pathway'] == 4) || ($this->tplparams['pathway'] == 5)) {
			if ($this->tplparams['marquee'] == '') {
				$this->tplparams['marquee'] = '<strong>Five</strong> is a template for Elxis 5.x designed by <a href="https://www.isopensource.com">Is Open Source</a>. The template is friendly to mobile phones and tablets and has many parameters to customize it.';
			}
		}

		$this->tplparams['marqspeed'] = (int)$params->get('marqspeed', 7);
		$this->tplparams['sidecol'] = (int)$params->get('sidecol', 1);

		$this->tplparams['hidecol_paths'] = array();
		for ($i = 1; $i < 6; $i++) {
			$v = trim($params->get('hidecol_path'.$i, ''));
			if ($v != '') { $this->tplparams['hidecol_paths'][] = $v; }
		}
		$this->sidecolumn = $this->determineColumn();

		$this->tplparams['search'] = trim($params->get('search', 'content'));
		if ($this->tplparams['search'] == 'none') { $this->tplparams['search'] = ''; }
		$this->tplparams['searchuri'] = trim($params->get('searchuri', ''));
		if ($this->tplparams['searchuri'] != '') {
			if ((stripos($this->tplparams['searchuri'], 'http://') === 0) || (stripos($this->tplparams['searchuri'], 'https://') === 0)) {
				$this->tplparams['searchuri'] = '';
			} else if (strpos($this->tplparams['searchuri'], ':') === false) {
				$this->tplparams['searchuri'] = '';
			}
		}
		$this->tplparams['searchpar'] = trim($params->get('searchpar', 'q'));
		if ($this->tplparams['searchpar'] == '') { $this->tplparams['searchpar'] = 'q'; }

		$this->tplparams['contact'] = trim($params->get('contact', ''));
		$this->tplparams['phone'] = trim($params->get('phone', ''));
		$this->tplparams['langselect'] = (int)$params->get('langselect', 1);
		$this->tplparams['login'] = (int)$params->get('login', 1);
		$this->tplparams['cart'] = (int)$params->get('cart', 0);
		if (!file_exists(ELXIS_PATH.'/components/com_shop/shop.php')) { $this->tplparams['cart'] = 0; }
		$this->tplparams['copyright'] = (int)$params->get('copyright', 1);
		$this->tplparams['copyrighttxt'] = $params->get('copyrighttxt', '');
	}


	/***********************************/
	/* GET TEMPLATE PARAMETERS FROM DB */
	/***********************************/    
	private function getDBParams() {
		$db = eFactory::getDB();

		$sql = "SELECT ".$db->quoteId('params')." FROM ".$db->quoteId('#__templates')
		."\n WHERE ".$db->quoteId('template').' = '.$db->quote('five').' AND '.$db->quoteId('section').' = '.$db->quote('frontend');
		$stmt = $db->prepareLimit($sql, 0, 1);
		$stmt->execute();
		return (string)$stmt->fetchResult();        
	}


	/**************************/
	/* GET TEMPLATE PARAMETER */
	/**************************/
	public function getParam($name) {
		return (isset($this->tplparams[$name])) ? $this->tplparams[$name] : '';       
	}


	/***********************************************/
	/* DETERMINE IF WE SHOULD SHOW THE SIDE COLUMN */
	/***********************************************/
	private function determineColumn() {
		if ($this->tplparams['sidecol'] == 0) { return false; }

		$eURI = eFactory::getURI();
		$elxuri = $eURI->getElxisUri();
		$uri_str = $eURI->getUriString();

		if ($this->tplparams['sidecol'] === 2) {
			if ($this->is_frontpage === true) { return false; }
		}

		if (($elxuri == '') || ($uri_str == '')) { return true; }

		$parts = explode('/', $uri_str);
		if (!$parts) { return true; }
		if (strlen($parts[0]) < 3) {
			array_shift($parts);
			if (!$parts) { return true; }
			$uri_str = implode('/', $parts);
		}

		if ($uri_str == '') { return true; }
		if ($this->tplparams['hidecol_paths']) {
			foreach ($this->tplparams['hidecol_paths'] as $path) {
				if (strpos($uri_str, $path) === 0) { return false; }
			}
		}

		return true;
	}


	/******************************/
	/* DETERMINE HEADER CSS CLASS */
	/******************************/
	public function globalHeaderClass() {
		if ($this->is_frontpage) {
			if ($this->tplparams['sliderimage'] == 1) {//display static image
				if (defined('ELXIS_MULTISITE')) {
					if (ELXIS_MULTISITE > 1) {
						return 'tpl5_header_all_wrap tpl5_header_ms'.ELXIS_MULTISITE.'_fpbg';
					}
				}
				return 'tpl5_header_all_wrap tpl5_header_fpbg';
			} else if ($this->tplparams['sliderimage'] == 2) {//display nothing
				return 'tpl5_header_all_wrapno';
			} else {//0: slider
				return 'tpl5_header_all_wrapfp';
			}
		}

		if ($this->tplparams['bgtype'] == 0) {//display nothing
			return 'tpl5_header_all_wrapno';
		}
		//display background image
		if (defined('ELXIS_MULTISITE')) {
			if (ELXIS_MULTISITE > 1) {
				return 'tpl5_header_all_wrap tpl5_header_ms'.ELXIS_MULTISITE.'_inbg';
			}
		}
		return 'tpl5_header_all_wrap tpl5_header_inbg';
	}


	/**********************************/
	/* DETERMINE TOP HEADER CSS CLASS */
	/**********************************/
	public function topHeaderClass() {
		if ($this->is_frontpage) {
			if ($this->tplparams['sliderimage'] == 2) {//display nothing
				return 'tpl5_header_top_wrapno';
			}
			return 'tpl5_header_top_wrap';
		}
		if ($this->tplparams['bgtype'] == 0) {//display nothing
			return 'tpl5_header_top_wrapno';
		}
		return 'tpl5_header_top_wrap';
	}


	/*****************/
	/* MAKE TOP LINE */
	/*****************/
	public function makeTopLine() {
		$elxis = eFactory::getElxis();
		$eLang = eFactory::getLang();
		$eURI = eFactory::getURI();

		$block_search = '';
		$block_login = '';
		$block_lang = '';
		$block_cart = '';
		$has_blocks = false;

		//search
		if (($this->tplparams['search'] != '') || ($this->tplparams['searchuri'] != '')) {
			$has_blocks = true;
			if ($this->tplparams['searchuri'] != '') {//custom search
				$action = $elxis->makeURL($this->tplparams['searchuri'], 'index.php', true, false);
				$par = $this->tplparams['searchpar'];
			} else {//search engine
				$action = $elxis->makeURL('search:/', 'index.php', true, false).$this->tplparams['search'].'.html';
				$par = 'q';
			}

			$q = '';
			if (isset($_GET[$par])) {
				$pat = "#([\']|[\;]|[\.]|[\"]|[\$]|[\/]|[\|]|[\=]|[\#]|[\<]|[\>]|[\*]|[\~]|[\`]|[\^]|[\|]|[\\\])#u";
				$v = urldecode($elxis->sanitizeInput($par, INPUT_GET, true, false));
				$v = eUTF::trim(preg_replace($pat, '', $v));
				if (eUTF::strlen($v) > 3) { $q = $v; }	
			}
			$block_search .= '<form id="fmtpl5search455" class="tpl5_searchform" name="fmtpl5search" action="'.$action.'" method="get">';
			$block_search .= '<div><div class="tpl5_search_magn"><i class="fas fa-search"></i></div>';
			$block_search .= '<div class="tpl5_search_in"><input type="text" name="'.$par.'" value="'.$q.'" id="tpl5search_q455" class="tpl5_search_input" placeholder="'.$eLang->get('SEARCH').'" dir="'.$eLang->getinfo('DIR').'" required="required"></div>';
			$block_search .= '</div>';
			$block_search .= '<button type="submit" name="b" class="tpl5_search_btn">'.$eLang->get('SEARCH').'</button>';
			$block_search .= '</form>';
		}

		if ($this->tplparams['login'] == 1) {
			$has_blocks = true;
			if ($elxis->user()->gid <> 7) {
				$block_login = $this->userProfile($elxis, $eLang);
			} else {
				$block_login = $this->userLogin($elxis, $eLang);
			}
		}

		//language
		if ($this->tplparams['langselect'] == 1) {
			if (($elxis->getConfig('SITELANGS') == '') || (strpos($elxis->getConfig('SITELANGS'), ',') !== false)) {
				$has_blocks = true;
				$lang = $eLang->currentLang();
				$infolangs = $eLang->getSiteLangs(true);
				$ssl = $eURI->detectSSL();

				$segs = $eURI->getSegments();
				$elxis_uri = $eURI->getComponent();
				if ($elxis_uri == 'content') { $elxis_uri = ''; }
				if ($segs) {
					$elxis_uri .= ($elxis_uri == '') ? implode('/', $segs) : ':'.implode('/', $segs);
					$n = count($segs) - 1;
					if (!preg_match('#\.#', $segs[$n])) { $elxis_uri .= '/'; }
				} else {
					$elxis_uri .= ($elxis_uri != '') ? '/' : '';
				}
				$qstr = '';
				if (isset($_SERVER['QUERY_STRING'])) {
					if ($_SERVER['QUERY_STRING'] != '') { $qstr = '?'.$_SERVER['QUERY_STRING']; }
				}
				$block_lang .= '<form name="tpl5langfm" id="tpl5langfm" method="get" action="#" class="tpl5_lang_form">'."\n";
				if (isset($infolangs[$lang])) {
					$block_lang .= '<img src="'.$elxis->secureBase().'/templates/five/images/flags/'.$lang.'.png" alt="'.$infolangs[$lang]['NAME'].' - '.$infolangs[$lang]['NAME_ENG'].'" title="'.$infolangs[$lang]['NAME'].' - '.$infolangs[$lang]['NAME_ENG'].'"> ';
				}
				$block_lang .= '<select name="lang" class="tpl5_select_lang" id="tpl5_select_lang">'."\n";
				foreach ($infolangs as $lng => $info) {
					$selected = ($lang == $lng) ? ' selected="selected"' : '';
					$link = $elxis->makeURL($lng.':'.$elxis_uri, '', $ssl).$qstr;
					$block_lang .= '<option value="'.$lng.'"'.$selected.' data-act="'.$link.'">'.strtoupper($lng)."</option>\n";
				}
				$block_lang .= "</select>\n";
				$block_lang .= "</form>\n";
			}
		}

		if ($this->tplparams['cart'] == 1) {
			if (isset($_COOKIE['shopcart'])) {
				$helper = $this->loadgetShop();
				if (!$helper) {
					$cart_items = 0;
				} else {
					$sid = $helper->getSession();
					$cart_items = $this->countCartItems($sid);						
				}
			} else {
				$cart_items = 0;
			}
			$has_blocks = true;
			$shop_link = $elxis->makeURL('shop:/', 'index.php', true);
			$title = ($cart_items == 1) ? $eLang->get('TPL5_ITEM_INCART') : sprintf($eLang->get('TPL5_ITEMS_INCART'), $cart_items);
			$block_cart .= '<a href="'.$shop_link.'cart.html" title="'.$title.'"><i class="fas fa-shopping-cart"></i> '.$cart_items.'</a>';
		}

		if (!$has_blocks) {
			echo '<div class="tpl5_header_top_lineno"></div>'."\n";
			return;
		}

		//Display top blocks
		echo '<div class="tpl5_header_top_line">'."\n";
		echo '<div class="tpl5_container'.$this->containerSuffix().'">'."\n";
		echo '<div class="tpl5_header_top_linein">'."\n";
		if ($block_search != '') {
			echo '<div class="tpl5_search_box">';
			echo $block_search;
			echo "</div>\n";
		}
		if ($block_lang != '') {
			echo '<div class="tpl5_lang_box">';
			echo $block_lang;
			echo "</div>\n";
		}
		if ($block_cart != '') {
			echo '<div class="tpl5_cart_box">';
			echo $block_cart;
			echo "</div>\n";
		}
		if ($block_login != '') {
			echo '<div class="tpl5_login_box">';
			echo $block_login;
			echo "</div>\n";
		}
		echo '<div class="clear"></div>'."\n";
		echo "</div>\n";
		echo "</div>\n";
		echo "</div>\n";
	}


	/*************************/
	/* USER PROFILE / LOGOUT */
	/*************************/
	private function userProfile($elxis, $eLang) {
		if ($elxis->user()->gid != 6) {
			$fullname = eUTF::substr($elxis->user()->firstname, 0, 1).'. '.$elxis->user()->lastname;
			$utitle = $eLang->get('TPL5_MY_PROFILE');
			$ulink = $elxis->makeURL('user:members/myprofile.html');
		} else {
			if ($elxis->user()->firstname != '') {
				$fullname = $elxis->user()->firstname.' '.$elxis->user()->lastname;
			} else if ($elxis->user()->uname != '') {
				$fullname = $elxis->user()->uname;
			} else if ($elxis->user()->email != '') {
				$parts = preg_split('#\@#', $elxis->user()->email, -1, PREG_SPLIT_NO_EMPTY);
				$fullname = $parts[0];
			} else {
				$fullname = $eLang->get('USER');
			}
			$utitle = $eLang->get('TPL5_USERS_CENTRAL');
			$ulink = $elxis->makeURL('user:/');
		}

		$logout_link = $elxis->makeURL('user:ilogout', 'inner.php', true, false);
		$redirect_link = $elxis->makeURL();
		$avatar = $elxis->obj('avatar')->getAvatar($elxis->user()->avatar, 48, 0, $elxis->user()->email);

		$html = '<div class="tpl5_logout_wrap">'."\n";
		$html .= '<a href="#" title="'.$eLang->get('LOGOUT').'" class="tpl5_logout" id="tpl5_logoutlink" data-lo="'.$logout_link.'" data-rl="'.$redirect_link.'" ><i class="fas fa-sign-out-alt"></i></a>'."\n";
		$html .= '<a href="'.$ulink.'" class="tpl5_logout_prof" title="'.$utitle.'"><img src="'.$avatar.'" alt="user"> '.$fullname.'</a>';
		$html .= "</div>\n";
		return $html;
	}


	/**************/
	/* USER LOGIN */
	/**************/
	private function userLogin($elxis, $eLang) {
		$token = trim(eFactory::getSession()->get('token_loginform')); //check if another login module has already set the token
		if ($token == '') {
			$token = md5(uniqid(rand(), true));
			eFactory::getSession()->set('token_loginform', $token);
		}
		$twofa = ($elxis->getConfig('TWOFA') != '') ? 1 : 0;
		$vtip_txt_generic = sprintf($eLang->get('VERIFY_CODE_TIP'), '@@@');

		switch ($elxis->getConfig('TWOFA')) {
			case 'sms': $vtip_txt = sprintf($eLang->get('VERIFY_CODE_TIP'), 'SMS'); break;
			case 'email': $vtip_txt = sprintf($eLang->get('VERIFY_CODE_TIP'), 'e-mail'); break;
			default: $vtip_txt = sprintf($eLang->get('VERIFY_CODE_TIP'), 'message'); break;
		}

		elxisLoader::loadFile('includes/libraries/elxis/form5.class.php');
		$htmlHelper = $elxis->obj('html');
		$action = $elxis->makeURL('user:/', 'inner.php', true, false);

		$html = '<div class="tpl5_login_wrap">'."\n";
		$html .= '<a href="#" title="'.$eLang->get('LOGIN').'" class="tpl5_login" id="tpl5_loginlink"><i class="fas fa-user"></i> '.$eLang->get('LOGIN').'</a>'."\n";
		$html .= "</div>\n";

		$html .= $htmlHelper->startModalWindow('<i class="fas fa-user"></i> '.$eLang->get('LOGIN'), 'tplog', '', false, '', '');

		$html .= '<div id="tpl5loginformwrap" class="elx5_zero">'."\n";
		$form = new elxis5Form(array('idprefix' => 'tplog', 'labelclass' => 'elx5_label', 'sideclass' => 'elx5_labelside', 'returnhtml' => true));
		$html .= $form->openForm(array('name' => 'tpl5loginform', 'method' =>'post', 'action' => $action, 'id' => 'tpl5loginform', 'data-twofa' => $twofa));
		$html .= $form->addText('uname', '', $eLang->get('USERNAME'), array('required' => 'required', 'dir' => 'ltr', 'autocomplete' => 'off', 'class' => 'elx5_text elx5_modlogin_uname', 'placeholder' => $eLang->get('USERNAME').' / '.$eLang->get('EMAIL')));
		$html .= $form->addPassword('pword', '', $eLang->get('PASSWORD'), array('required' => 'required', 'maxlength' => 60, 'autocomplete' => 'off', 'class' => 'elx5_text elx5_modlogin_pword'));
		$html .= $form->addHidden('modtoken', $token);
		$html .= $form->addButton('sublogin', $eLang->get('LOGIN'), 'submit', array('class' => 'elx5_btn', 'data-waitlng' => $eLang->get('PLEASE_WAIT'), 'data-loginlng' => $eLang->get('LOGIN'), 'sidepad' => 1));
		if ($elxis->getConfig('REGISTRATION') == 1) {
			$link = $elxis->makeURL('user:register.html', '', true, false);
			$html .= '<div class="tpl5_regprompt">'.$eLang->get('TPL5_NOACCOUNT').' <a href="'.$link.'" title="'.$eLang->get('TPL5_REGISTER').'">'.$eLang->get('TPL5_REGISTER').'</a></div>'."\n";
		}
		$html .= $form->closeForm();
		$html .= "</div>\n";

		$html .= '<div id="tpl52faloginformwrap" class="elx5_invisible">'."\n";
		$form = new elxis5Form(array('idprefix' => 'tpopt', 'labelclass' => 'elx5_label', 'sideclass' => 'elx5_labelside', 'returnhtml' => true));
		$html .= $form->openForm(array('name' => 'tpl52faloginform', 'method' =>'post', 'action' => $action, 'id' => 'tpl52faloginform'));
		$tip = '<span id="tpl5vcode_tip" data-genlng="'.addslashes($vtip_txt_generic).'">'.$vtip_txt.'</span>';
		$html .= $form->addText('vcode', '', $eLang->get('VERIFY_CODE'), array('required' => 'required', 'dir' => 'ltr', 'inputmode' => 'numeric', 'pattern' => '[0-9]+', 'autocomplete' => 'one-time-code', 'maxlength' => 6, 'class' => 'elx5_text', 'tip' => $tip));
		$html .= $form->addButton('otpbtn', $eLang->get('CONTINUE'), 'submit', array('class' => 'elx5_btn', 'data-waitlng' => $eLang->get('PLEASE_WAIT'), 'data-loginlng' => $eLang->get('CONTINUE'), 'sidepad' => 1));
		$html .= $form->addHidden('modtoken', $token);//not actually used, put for ZAP
		$html .= $form->closeForm();
		$html .= "</div>\n";

		$html .= $htmlHelper->endModalWindow(false);

		return $html;
	}


	/*********************************************************************/
	/* IF FRONTPAGE, MAKE SLIDER OR DISPLAY MODULES POSITION ON BG IMAGE */
	/*********************************************************************/
	public function makeSliderHeaderModules() {
		if (!$this->is_frontpage) { return; }
		if ($this->tplparams['sliderimage'] == 2) { return; } //display nothing
		if ($this->tplparams['sliderimage'] == 1) { //display static image
			if ($this->tplparams['fpimgpos'] != '') {
				$eDoc = eFactory::getDocument();
				if ($eDoc->countModules($this->tplparams['fpimgpos']) > 0) {
					echo '<div class="tpl5_container'.$this->containerSuffix().'"><div class="tpl5_slidermodule">'."\n";
					$eDoc->modules($this->tplparams['fpimgpos'], 'none');
					echo "</div></div>\n";
				}
			}
			return;
		}
		if (!$this->tplparams['slider']) { return; }

		$eDoc = eFactory::getDocument();
		$tplbase = eFactory::getElxis()->secureBase().'/templates/five/';

		$eDoc->addStyleLink($tplbase.'css/glide.core.min.css');
		$eDoc->addStyleLink($tplbase.'css/glide.theme.min.css');
		$eDoc->addScriptLink($tplbase.'includes/glide.min.js');

		echo '<div class="tpl5_slider">';
		echo '<div class="glide__track" data-glide-el="track">';
		echo '<ul class="glide__slides" id="tpl5sl">';
		foreach ($this->tplparams['slider'] as $k => $item) {
			if ($item['link'] != '') {
				echo '<li class="glide__slide"><a href="'.$item['link'].'"><img src="'.$item['image'].'" alt="image"></a></li>';
			} else {
				echo '<li class="glide__slide"><img src="'.$item['image'].'" alt="image"></li>';
			}
		}
		echo "</ul>";
		echo "</div>\n";
		echo '<div class="glide__arrows" data-glide-el="controls">'."\n";
		echo '<button class="glide__arrow glide__arrow--left" data-glide-dir="<">&lt;</button>'."\n";
		echo '<button class="glide__arrow glide__arrow--right" data-glide-dir=">">&gt;</button>'."\n";
		echo "</div>\n";

		$caption = '';
		$capclass = 'elx5_invisible';
		if ($this->tplparams['slider'][0]['caption'] != '') {
			if (strpos($this->tplparams['slider'][0]['caption'], '@') !== false) {
				$caption = str_replace('@', '<span>', $this->tplparams['slider'][0]['caption']).'</span>';
			} else {
				$caption = $this->tplparams['slider'][0]['caption'];
			}
			$capclass = 'tpl5_captionswrap';
		}
		if ($this->tplparams['sltitle'] != '') {
			echo '<div class="tpl5_slidertitle">'.$this->tplparams['sltitle'].'</div>'."\n";
		}
		echo '<div class="'.$capclass.'" id="tpl5_captionswrap"><div class="tpl5_caption" id="tpl5_caption">'.$caption.'</div></div>'."\n";
		echo "</div>\n";

		echo '<div class="elx5_invisible">'."\n";
		foreach ($this->tplparams['slider'] as $k => $item) {
			if ($item['caption'] == '') { continue; }
			if (strpos($item['caption'], '@') !== false) {
				$caption = str_replace('@', '<span>', $item['caption']).'</span>';
			} else {
				$caption = $item['caption'];
			}
			echo '<div class="elx5_invisible" id="tpl5_slider_caption'.$k.'">'.$caption."</div>\n";
		}
		echo "</div>\n";

		$dir = (eFactory::getLang()->getinfo('DIR') == 'rtl') ? 'rtl' : 'ltr';
?>
		<script nonce="<?php echo $eDoc->getNonce(); ?>">
			var tpl5glide = new Glide('.tpl5_slider', { type: 'carousel', paddings: 0, startAt: 0, gap: 0, autoplay: 5000, animationDuration: 1000, hoverpause: false, bound: true, direction: '<?php echo $dir; ?>' });
			tpl5glide.mount();
			tpl5glide.on('run.after', function() {
				if (document.getElementById('tpl5_slider_caption'+tpl5glide.index)) {
					document.getElementById('tpl5_caption').innerHTML = document.getElementById('tpl5_slider_caption'+tpl5glide.index).innerHTML;
					document.getElementById('tpl5_captionswrap').className = 'tpl5_captionswrap';
				} else {
					document.getElementById('tpl5_captionswrap').className = 'elx5_invisible';
					document.getElementById('tpl5_caption').innerHTML = '';
				}
			});
		</script>

<?php 
	}


	/*****************************/
	/* LOAD/GET OPEN SHOP HELPER */
	/*****************************/
	private function loadgetShop() {
		if (eRegistry::isLoaded('shophelper')) { return eRegistry::get('shophelper'); }
		if (!file_exists(ELXIS_PATH.'/components/com_shop/includes/helper.class.php')) { return false; }
		elxisLoader::loadFile('components/com_shop/includes/helper.class.php');
		eRegistry::set(new shopHelper(true), 'shophelper');
		return eRegistry::get('shophelper');
	}


	/******************************/
	/* COUNT OPEN SHOP CART ITEMS */
	/******************************/
	private function countCartItems($sid) {
		$db = eFactory::getDB();

		$sql = "SELECT COUNT(".$db->quoteId('cartid').") FROM ".$db->quoteId('#__shop_cart')." WHERE ".$db->quoteId('session_id')." = :xsid";
		$stmt = $db->prepareLimit($sql, 0, 1);
		$stmt->bindParam(':xsid', $sid, PDO::PARAM_STR);
		$stmt->execute();
		$num = (int)$stmt->fetchResult();
		return $num;
	}


	/***********************/
	/* PATHWAY CUSTOM HTML */
	/***********************/
	private function pathwayHTML() {
		$nodes = eFactory::getPathway()->getNodes();
		if (!$nodes) { return ''; }

		$elxis = eFactory::getElxis();

		$html = '<nav class="tpl5_pathway">'."\n";
		$html .= '<ul>'."\n";
		foreach ($nodes as $idx => $node) {
			if ($node->link == '') {
				$html .= '<li>'.$node->title."</li>\n";
			} else {
				$elxuri = ($node->link == '/') ? '' : $node->link;
				$link = $elxis->makeURL($elxuri, 'index.php', $node->ssl);
				$html .= '<li><a href="'.$link.'" title="'.$node->title.'">'.$node->title."</a></li>\n";
			}
		}
		$html .= "</ul>\n";
		$html .= "</nav>\n";
		return $html;
	}


	/***************/
	/* MARQUEE HTML */
	/***************/
	private function marqueeHTML() {
		if ($this->tplparams['marquee'] == '') { return; }
		$tplbase = eFactory::getElxis()->secureBase().'/templates/five/';
		$reverse = (eFactory::getLang()->getinfo('DIR') == 'rtl') ? '1' : '0';
		if ($this->tplparams['marqspeed'] < 1) {
			$speed = '0.70';
		} else {
			$speed = ($this->tplparams['marqspeed'] / 10);
			$speed = number_format($speed, 2, '.', '');
		}
?>
		<div class="tpl5_marquee_wrap">
			<div class="tpl5_container<?php echo $this->containerSuffix(); ?>">
				<div class="tpl5_marquee_container">
					<div class="tpl5_marquee" data-speed="<?php echo $speed; ?>" data-reverse="<?php echo $reverse; ?>" data-pausable="1"><div><?php echo $this->tplparams['marquee']; ?> </div></div>
				</div>
			</div>
		</div>
		<script src="<?php echo $tplbase; ?>includes/marquee3k.js" nonce="<?php echo eFactory::getDocument()->getNonce(); ?>"></script>
		<script nonce="<?php echo eFactory::getDocument()->getNonce(); ?>">Marquee3k.init({ 'selector': 'tpl5_marquee' });</script>

<?php 
	}


	/***********************************************/
	/* DISPLAY PATHWAY OR MARQUEE OR VERTICAL SPACE */
	/***********************************************/
	public function pathwayMarqueeSpace() {
		if ($this->tplparams['pathway'] == 0) {
			echo '<div class="tpl5_shadow_space"></div>'."\n";
			return;
		}

		if ($this->tplparams['pathway'] == 1) {
			$html = $this->pathwayHTML();
			if ($html == '') {
				echo '<div class="tpl5_shadow_space"></div>'."\n";
				return;
			}
			echo '<div class="tpl5_pathwrap"><div class="tpl5_container'.$this->containerSuffix().'">'."\n";
			echo $html;
			echo "\n</div></div>\n";
			return;
		}

		if ($this->tplparams['pathway'] == 2) {
			if (!$this->is_frontpage) {
				$html = $this->pathwayHTML();
				if ($html == '') {
					echo '<div class="tpl5_shadow_space"></div>'."\n";
					return;
				}
				echo '<div class="tpl5_pathwrap"><div class="tpl5_container'.$this->containerSuffix().'">'."\n";
				echo $html;
				echo "\n</div></div>\n";
			} else {
				echo '<div class="tpl5_shadow_space"></div>'."\n";
			}
			return;
		}

		if ($this->tplparams['pathway'] == 3) {
			if ($this->is_frontpage) {
				$this->marqueeHTML();
			} else {
				$html = $this->pathwayHTML();
				if ($html == '') {
					echo '<div class="tpl5_shadow_space"></div>'."\n";
					return;
				}
				echo '<div class="tpl5_pathwrap"><div class="tpl5_container'.$this->containerSuffix().'">'."\n";
				echo $html;
				echo "\n</div></div>\n";
			}
			return;
		}

		if ($this->tplparams['pathway'] == 4) {
			if ($this->is_frontpage) {
				$this->marqueeHTML();
			} else {
				echo '<div class="tpl5_shadow_space"></div>'."\n";
			}
			return;
		}

		$this->marqueeHTML();
	}


	/*************************/
	/* SHOW THE SIDE COLUMN? */
	/*************************/
	public function showColumn() {
		return $this->sidecolumn;
	}


	/******************************************************************/
	/* TEMPLATE CONTAINER SUFFIX (1200/1300/1400/1500/1600px or 100%) */
	/******************************************************************/
	public function containerSuffix() {
		switch ($this->tplparams['tplwidth']) {
			case 1: $sfx = '1'; break;
			case 2: $sfx = '2'; break;
			case 3: $sfx = '3'; break;
			case 4: $sfx = '4'; break;
			case 5: $sfx = '5'; break;
			case 0: default: $sfx = ''; break;
		}
		return $sfx;
	}


	/***************************/
	/* SHOW SIDE COLUMN BLOCKS */
	/***************************/
	public function sideBlocks($eDoc) {
		$eDoc->modules('left');
		$eDoc->modules('right');
	}


	private function getArticleCategory($id) {
		$db = eFactory::getDB();

		$sql = "SELECT ".$db->quoteId('catid')." FROM ".$db->quoteId('#__content')." WHERE ".$db->quoteId('id')." = :xid";
		$stmt = $db->prepareLimit($sql, 0, 1);
		$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
		$stmt->execute();
		$catid = (int)$stmt->fetchResult();
		return $catid;
	}


	/********************************************/
	/* DISPLAY COPYRIGHT, SOCIAL ICONS AND MORE */
	/********************************************/
	public function footerCopyIcons() {
		$elxis = eFactory::getElxis();
		$eLang = eFactory::getLang();

		$socials = array(
			'facebook' => 'fab fa-facebook-f',
			'twitter' => 'fab fa-twitter', 
			'youtube' => 'fab fa-youtube', 
			'flickr' => 'fab fa-flickr', 
			'instagram' => 'fab fa-instagram', 
			'linkedin' => 'fab fa-linkedin-in', 
			'pinterest' => 'fab fa-pinterest', 
			'tumblr' => 'fab fa-tumblr', 
			'tripadvisor' => 'fab fa-tripadvisor'
		);

		$icons_html = '';
		if ($this->tplparams['contact'] != '') {
			$link = $elxis->makeURL($this->tplparams['contact']);
			$icons_html .= '<a href="'.$link.'" title="'.$eLang->get('CONTACT').'"><i class="fas fa-envelope"></i></a>';
		}
		if ($this->tplparams['phone'] != '') {
			$phone = preg_replace('@[\s]@', '', $this->tplparams['phone']);
			$icons_html .= '<a href="tel:'.$phone.'" title="'.$eLang->get('TELEPHONE').': '.$this->tplparams['phone'].'"><i class="fas fa-phone"></i></a>';
		}
		foreach ($socials as $social => $iconclass) {
			if ($this->tplparams[$social] != '') {
				$title = ucfirst($social);
				$icons_html .= '<a href="'.$this->tplparams[$social].'" title="'.$title.'" target="_blank"><i class="'.$iconclass.'"></i></a>';
			}
		}
		if ($this->tplparams['rss'] == 1) {
			$link = $elxis->makeURL('content:feeds.html');
			$icons_html .= '<a href="'.$link.'" title="RSS"><i class="fas fa-rss"></i></a>';
		}
		if ($this->tplparams['sitemap'] == 1) {
			$title = $eLang->get('SITEMAP');
			$link = $elxis->makeURL('sitemap:/');
			$icons_html .= '<a href="'.$link.'" title="'.$title.'"><i class="fas fa-sitemap"></i></a>';
		}

		$copyright_html = '';
		if ($this->tplparams['copyright'] == 1) {
			if (trim($this->tplparams['copyrighttxt']) == '') {
				$copyright_html = '&copy; '.gmdate('Y').' elxis.org - powered by <a href="https://www.elxis.org" title="Elxis CMS">Elxis CMS</a>';
			} else {
				$copyright_html = $this->tplparams['copyrighttxt'];
			}
		}

		if (($copyright_html == '') && ($icons_html == '')) { return; }

		echo '<div class="tpl5_footer_copyicons">';
		if (($copyright_html != '') && ($icons_html != '')) {
			echo '<div class="tpl5_footer_copy">'.$copyright_html.'</div>'."\n";
			echo '<div class="tpl5_footer_icons">'.$icons_html.'</div>'."\n";
		} else if ($copyright_html != '') {
			echo '<div class="tpl5_footer_copy tpl5_footer_cisingle">'.$copyright_html.'</div>'."\n";
		} else {
			echo '<div class="tpl5_footer_icons tpl5_footer_cisingle">'.$icons_html.'</div>'."\n";
		}
		echo "</div>\n";
	}


	/**************************/
	/* DISPLAY FOOTER MODULES */
	/**************************/
	public function footerMods() {
		$eDoc = eFactory::getDocument();

		$mods1 = $eDoc->countModules('user1');
		$mods2 = $eDoc->countModules('user2');
		$mods3 = $eDoc->countModules('user3');

		$cols = 0;
		if ($mods1 > 0) { $cols++; }
		if ($mods2 > 0) { $cols++; }
		if ($mods3 > 0) { $cols++; }
		if ($cols == 0) { return; }

		if ($cols == 3) {
			$class = 'tpl5_fmods_33';
		} else if ($cols == 2) {
			$class = 'tpl5_fmods_50';
		} else {
			$class = 'tpl5_fmods_100';
		}

		$q = 1;
		echo '<div class="tpl5_fmods" id="tpl5_fmods'.$q.'">'."\n";
		if ($mods1 > 0) {
			echo '<div class="'.$class.'">'."\n";
			$eDoc->modules('user1');
			echo "</div>\n";
			$q++;
		}
		if ($mods2 > 0) {
			echo '<div class="'.$class.'" id="tpl5_fmods'.$q.'">'."\n";
			$eDoc->modules('user2');
			echo "</div>\n";
			$q++;
		}
		if ($mods3 > 0) {
			echo '<div class="'.$class.'" id="tpl5_fmods'.$q.'">'."\n";
			$eDoc->modules('user3');
			echo "</div>\n";
		}
		if ($cols > 1) {
			echo '<div class="clear"></div>'."\n";
		}
		echo "</div>\n";
	}

}

?>