PK œqhYî¶J‚ßFßF)nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/ $#$#$#

Dir : /home/jairosvt/public_html/afmediosc/plugins/system/jat3/core/
Server: Linux server2.noticiasdecolima.com 4.18.0-553.30.1.el8_10.x86_64 #1 SMP Tue Nov 26 02:30:26 EST 2024 x86_64
IP: 107.161.180.42
Choose File :

Url:
Dir : /home/jairosvt/public_html/afmediosc/plugins/system/jat3/core/common.php

<?php
/*
# ------------------------------------------------------------------------
# JA T3v2 Plugin - Template framework for Joomla 1.5
# ------------------------------------------------------------------------
# Copyright (C) 2004-2010 JoomlArt.com. All Rights Reserved.
# @license - GNU/GPL V2, http://www.gnu.org/licenses/gpl2.html. For details 
# on licensing, Please Read Terms of Use at http://www.joomlart.com/terms_of_use.html.
# Author: JoomlArt.com
# Websites: http://www.joomlart.com - http://www.joomlancers.com.
# ------------------------------------------------------------------------
*/

function t3import ($object) {
	$object  = str_replace( '.', DS, $object );
	$path = dirname(dirname(__FILE__)).DS.$object.'.php';
	if (file_exists ($path)) require_once ($path);
}
function t3_import ($object) {
	$path = dirname(dirname(__FILE__)).DS.$object.'.php';
	if (file_exists ($path)) require_once ($path);
}

class T3Common {
	//Detect a template is T3 based
	function detect_ ($template = '') {
		static $ist3 = array();
		if (!$template) {
			$template = T3Common::get_active_template();
		}
		if (isset ($ist3[$template])) {
			return;
		}
		$ist3[$template] = false;
		$path = JPATH_SITE.DS.'templates'.DS.$template.DS.'templateDetails.xml';		
		if (is_file ($path)) {
			$xml = & JFactory::getXMLParser('Simple');	
			if ($xml->loadFile($path))
			{
				if (($templateinfo = & $xml->document) && isset($templateinfo->engine) && trim($templateinfo->engine[0]->_data=='t3')) {
					$ist3[$template] = true;
				}
			}
		}
		
		return $ist3[$template];
	}
	
	function detect ($template = '') {
		if (!$template) {
			$template = T3_ACTIVE_TEMPLATE;
		}
		$path = T3Path::path(T3_TEMPLATE).DS.'info.xml';
		return is_file ($path);
	}
	
	function get_active_template () {
		$mainframe = JFactory::getApplication();
		if ($mainframe->isAdmin()) {
			t3import ('core.admin.util');
			return strtolower(JAT3_AdminUtil::get_active_template());
		}
		return strtolower($mainframe->getTemplate());
	}
	
	function getinfo ($info, $name, $default=null){
		if (isset ($info) && isset($info[$name])) return $info[$name];
		return $default;
	}
	//Merge multi-dimension array
	function merge_array ($arr1, $arr2) {
	    foreach( $arr1 as $k => $v ) {
	        if (isset($arr2[$k])) {
	        	if (is_array($arr1[$k]) && is_array($arr2[$k])) {
	        		$arr2[$k] = T3Common::merge_array ($arr1[$k], $arr2[$k]); 
	        	}
	        } else {
	        	$arr2[$k] = $arr1[$k];
	        }
	    }
	    return $arr2;
	}
	
	function merge_info (& $element1, & $element2) {
		for ($i=0,$n=count($element1['children']);$i<$n;$i++)
		{
			$child1 = $element1['children'][$i]; 
			$name = $child1['name'];
			if ($name == 'blocks') {
				$child2 = T3Common::arr_find_child ($element2, 'blocks', 'name', $child1['attributes']['name']);
				if (!$child2) {
					//Add child1 into element2
					$element2['children'][] = $child1;
				}
			} else {
				$child2 = null;
				if (isset($child1['attributes']['name'])) $child2 = T3Common::arr_find_child ($element2, $name, 'name', $child1['attributes']['name']);
				else $child2 = T3Common::arr_find_child ($element2, $name);
				
				if (!count($child1['children']) || !$child2) {
					//$element2->{$name} = array();
					//Add child1 into element2
					$element2['children'][] = $child1;
				} else {
					$element2['children'][isset($child2['index'])?$child2['index']:0] = T3Common::merge_info ($child1, $child2);
				}
			}
		}
		return $element2;
	}

	function &arr_find_child (&$element, $name, $attr='', $value='', $all=false) {
		$null = null;
		if (!$element || !count ($element['children'])) return $null;
		//if (!$attr) return $element->{$name}[0]; //get the first match
		$children = array();
		for ($j=0,$m=count($element['children']);$j<$m;$j++) {
			$child = & $element['children'][$j];
			if ($child['name']!=$name) continue;
			$child['index'] = $j;
			if (!$attr || (isset($child['attributes'][$attr]) && $child['attributes'][$attr] == $value)) {
				if ($all) 
					$children[] = $child;
				else 
					return $child;
			}
		}
		if ($all) 
			return $children;
		else
			return $null;
	}
	
	function xml_find_element ($element, $name, $attr='', $value='') {
		if (!$element || !isset ($element->{$name}) || !count ($element->{$name})) return null;
		if (!$attr) return $element->{$name}[0]; //get the first match
		
		for ($j=0,$m=count($element->{$name});$j<$m;$j++) {
			$node = $element->{$name}[$j];
			if ($node->attributes ($attr) == $value) {
				$node->_index = $j;			
				return $node;
			}
		}
		return null;
	}
	
	function merge_xml (& $element1, & $element2) {
		for ($i=0,$n=count($element1->_children);$i<$n;$i++)
		{
			$child1 = $element1->_children[$i]; 
			$name = $child1->name();
			if ($name == 'blocks') {
				$child2 = T3Common::xml_find_element ($element2, 'blocks', 'name', $child1->attributes('name'));
				if (!$child2) {
					//Add child1 into element2
					$element2->{$name}[] = $child1;
					//Add the reference to the children array member
					$element2->_children[] = $child1;				
				}
			} else {
				$child2 = null;
				if ($child1->attributes('name')) $child2 = T3Common::xml_find_element ($element2, $name, 'name', $child1->attributes('name'));
				else $child2 = T3Common::xml_find_element ($element2, $name);
				
				if (!isset($child1->_children) || !count($child1->_children) || !$child2) {
					//$element2->{$name} = array();
					//Add child1 into element2
					$element2->{$name}[] = $child1;
					//Add the reference to the children array member
					$element2->_children[] = $child1;
				} else {
					$element2->{$name}[isset($child2->_index)?$child2->_index:0] = T3Common::merge_xml ($child1, $child2);
				}
			}
		}
		return $element2;
	}
	
	function xmltoarray($xml) {
		if (!$xml) return null;
		$arr = array();
		$arr['name'] = $xml->name();
		$arr['data'] = $xml->data();
		//remove blank space for module position 
		if ($arr['name'] == 'block') $arr['data'] = preg_replace ('/\s/','', $arr['data']);
		$arr['attributes'] = $xml->attributes();
		$arr['children'] = array();
		if (count ($xml->children())) {
			foreach ($xml->children() as $child) {
				$arr['children'][] = T3Common::xmltoarray($child);
				//assign parent for block
				if ($arr['name'] == 'blocks') $arr['children'][count($arr['children'])-1]['attributes']['parent'] = $arr['attributes']['name'];
			}
		}
		return $arr;
	}
	
	function getXML ($xmlfile, $array = true) {
		$xml = & JFactory::getXMLParser('Simple');
		if ($xml->loadFile($xmlfile))
		{
			if ($array) return T3Common::xmltoarray($xml->document); 
			return $xml->document;
		}
		return null;
	}
	
	function mobile_device_detect_ () {
		$ui = T3Parameter::_getParam('ui');
		//detect mobile
		t3import ('core.libs.mobile_device_detect');
		//bypass special browser:
		$special = array('jigs', 'w3c ', 'w3c-', 'w3c_');		
		if (in_array(strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4)), $special)) $mobile_device = false;
		else $mobile_device = mobile_device_detect('iphone','android','opera','blackberry','palm','windows');
		
		return $ui=='desktop'?false:(($ui=='mobile' && !$mobile_device)?'iphone':$mobile_device);
	}
	
	function mobile_device_detect () {
		$ui = T3Parameter::_getParam('ui');
		if ($ui=='desktop') return false;
		//detect mobile
		t3import ('core.libs.Browser');
		$browser = new Browser();
		//bypass
		if ($browser->isRobot()) return false; 
		//consider ipad as normal browser
		if ($browser->getBrowser() == Browser::BROWSER_IPAD) return false;
		
		//mobile
		if ($browser->isMobile()) {
			if (in_array($browser->getBrowser(), array(Browser::BROWSER_IPHONE, Browser::BROWSER_IPOD))) 
				$device = 'iphone';
			else
				$device = strtolower($browser->getBrowser());
				//$device = 'handheld';
			$layout = T3Parameter::get ($device."_layout", '');
			if ($layout == -1) return false; //disable
			return $device;
			//return 'handheld';
		}
		//Not mobile
		if ($ui=='mobile') return 'iphone'; //default for mobile layout on desktop
		return false;
	}
	
	function get_theme_info ($theme) {
		static $theme_infos = array();
		if (!isset($theme_infos[$theme[0].'.'.$theme[1]])) {
			$theme_infos[$theme[0].'.'.$theme[1]] = null;
			
			if ($theme[0] == 'engine') {
				$theme_info_path = T3Path::path(T3_BASE).DS.'base-themes'.DS.$theme[1].DS.'info.xml';
			} else if ($theme[0] == 'template') {
				$theme_info_path = T3Path::path(T3_TEMPLATE).DS.'info.xml';
			} else {
				$theme_info_path = T3Path::path(T3_TEMPLATE).DS.$theme[0].DS.'themes'.DS.$theme[1].DS.'info.xml';
			}
			if (!is_file ($theme_info_path)) return null;
			$theme_infos[$theme[0].'.'.$theme[1]] = T3Common::getXML ($theme_info_path);
		}
		return $theme_infos[$theme[0].'.'.$theme[1]];
	}
	
	function profile_exists ($profile) {
		if (!$profile) return false;
		$path = 'etc'.DS.'profiles'.DS.$profile.'.ini';
		
		if (is_file (T3Path::path(T3_TEMPLATE_LOCAL).DS.$path)) return T3Path::path(T3_TEMPLATE_LOCAL).DS.$path;
		if (is_file (T3Path::path(T3_TEMPLATE_CORE).DS.$path)) return T3Path::path(T3_TEMPLATE_CORE).DS.$path;

		return false;
	}
		
	function layout_exists ($layout) {
		if (!$layout) return false;
		
		$path = 'etc'.DS.'layouts'.DS.$layout.'.xml';
		$pathrtl = 'etc'.DS.'layouts'.DS.$layout.'-rtl.xml';
		//check in local path
		if (T3Common::isRTL() && is_file (T3Path::path(T3_TEMPLATE_LOCAL).DS.$pathrtl)) return T3Path::path(T3_TEMPLATE_LOCAL).DS.$pathrtl;
		if (is_file (T3Path::path(T3_TEMPLATE_LOCAL).DS.$path)) return T3Path::path(T3_TEMPLATE_LOCAL).DS.$path;
		//check in core path
		if (T3Common::isRTL() && is_file (T3Path::path(T3_TEMPLATE_CORE).DS.$pathrtl)) return T3Path::path(T3_TEMPLATE_CORE).DS.$pathrtl;
		if (is_file (T3Path::path(T3_TEMPLATE_CORE).DS.$path)) return T3Path::path(T3_TEMPLATE_CORE).DS.$path;
		//check in engine path
		if (T3Common::isRTL() && is_file (T3Path::path(T3_BASETHEME.'-rtl').DS.$path)) return T3Path::path(T3_BASETHEME.'-rtl').DS.$pathrtl;
		if (is_file (T3Path::path(T3_BASETHEME).DS.$path)) return T3Path::path(T3_BASETHEME).DS.$path;

		return false;
	}
	
	function get_layout_info ($layout = '') {
		static $layout_infos = array();
		$params = T3Common::get_template_params ();
		$device = T3Common::mobile_device_detect();
		if (!$layout || !T3Common::layout_exists ($layout)) {
			$layout = T3Common::get_active_layout();
		}
		
		if (!isset($layout_infos[$layout])) {
			$layout_infos[$layout] = null;
			
			$active_layout_path = T3Common::layout_exists ($layout);
			$engine_layout_path = '';
			
			//detect engine layout to extend
			//check the layout with the same name in engine
			//if not found - check the layout base on the device
			$engine_layout_path = T3Path::path(T3_BASETHEME).DS.'etc'.DS.'layouts'.DS.$layout.'.xml';
			if (!is_file ($engine_layout_path)) {
				if (!$device) {
					$engine_layout_path = T3Path::path(T3_BASETHEME).DS.'etc'.DS.'layouts'.DS.'default.xml';
				} else {
					$engine_layout_path = T3Path::path(T3_BASETHEME).DS.'etc'.DS.'layouts'.DS.$device.'.xml';
					if (!is_file($engine_layout_path)) $engine_layout_path = T3Path::path(T3_BASETHEME).DS.'etc'.DS.'layouts'.DS.'handheld.xml';
				}
			}

			$layout_info = null;
			if (is_file ($active_layout_path)) {
				$layout_info = T3Common::getXML($active_layout_path);
			}

			if ($engine_layout_path != $active_layout_path && is_file ($engine_layout_path)) {
				$layout_info = $layout_info? T3Common::merge_info (T3Common::getXML($engine_layout_path), $layout_info):T3Common::getXML($engine_layout_path);
			}
			
			$layout_infos[$layout] = $layout_info;
		}
		return $layout_infos[$layout];
	}
	
	function get_active_layout () {
		//return T3Parameter::_getParam('layouts');
		$params = T3Common::get_template_params ();
		$device = T3Common::mobile_device_detect();
		
		if (!$device) { //desktop
			//get from override profile
			$active_profile = T3Common::get_active_profile();
			$default_profile = T3Common::get_default_profile();
			if ($active_profile != $default_profile && $active_profile != 'default') {
				$path = 'etc'.DS.'profiles'.DS.$active_profile.'.ini';		
				$file = T3Path::path(T3_TEMPLATE_LOCAL).DS.$path;
				if (!is_file ($file)) $file = T3Path::path(T3_TEMPLATE_CORE).DS.$path;
				if (is_file ($file)) {
					$content = file_get_contents ($file);
					$params = new JParameter ($content);
					$layout = $params->get ('desktop_layout', '');
					if (T3Common::layout_exists ($layout)) return $layout;
				}
			}

			//cannot get from override profile for this page, get from usersetting
			$layout = T3Parameter::get ('layouts', '');
			if (T3Common::layout_exists ($layout)) return $layout;
			//get default
			$layout = $params->get ('desktop_layout', '');
			if (!T3Common::layout_exists ($layout)) $layout = 'default';
		} else {
			$layout = $params->get ($device.'_layout', '');
			if (!$layout) $layout = $params->get ('handheld_layout', '');
			if ($layout == -1) { //disable => use layout from desktop
				$device = '';
				$layout = $params->get ('desktop_layout', '');
				if (!T3Common::layout_exists ($layout)) $layout = 'default';
			} else if ($layout == 1) { //default => use layout from t3 engine
				$layout = $device;
				if (!T3Common::layout_exists ($layout)) $layout = 'handheld';
			} else if (!T3Common::layout_exists ($layout)) {
				$layout = 'handheld';
			}
		}
		return $layout;
	}
	
	function get_layouts () {
		//get from preload object
		$layouts = T3Preload::getObject ('layouts');
		if ($layouts) {
			return $layouts;
		}

		//cannot get from preload object, get direct from template
		$local_layouts = is_dir (T3Path::path(T3_TEMPLATE_LOCAL).DS.'etc'.DS.'layouts')?@ JFolder::files (T3Path::path(T3_TEMPLATE_LOCAL).DS.'etc'.DS.'layouts', '.xml$'):null;
		$core_layouts = is_dir (T3Path::path(T3_TEMPLATE_CORE).DS.'etc'.DS.'layouts')?@ JFolder::files (T3Path::path(T3_TEMPLATE_CORE).DS.'etc'.DS.'layouts', '.xml$'):null;
		
		if (!$local_layouts && !$core_layouts) return array();
		if ($local_layouts && $core_layouts) $layouts = array_merge ($core_layouts, $local_layouts);
		else if ($local_layouts) $layouts = $local_layouts;
		else $layouts = $core_layouts;

		$_layouts = array();
		$_layouts ['default'] = null;
		foreach ($layouts as $layout) {
			$layout = preg_replace ('/\.xml$/', '', $layout);
			$_layouts[$layout] = $layout;
		}
		return $_layouts;
	}
	
	function get_profiles () {
		//get from preload object
		$profiles = T3Preload::getObject ('profiles');
		if ($profiles) {
			return $profiles;
		}
		
		$local_profiles = is_dir (T3Path::path(T3_TEMPLATE_LOCAL).DS.'etc'.DS.'profiles')?@ JFolder::files (T3Path::path(T3_TEMPLATE_LOCAL).DS.'etc'.DS.'profiles', '.ini$'):array();
		$core_profiles = is_dir (T3Path::path(T3_TEMPLATE_CORE).DS.'etc'.DS.'profiles')?@ JFolder::files (T3Path::path(T3_TEMPLATE_CORE).DS.'etc'.DS.'profiles', '.ini$'):array();
		$_profiles = array_merge ($core_profiles, $local_profiles);
		$profiles = array();
		foreach ($_profiles as $profile) {
			$profile = substr ($profile, 0, -4);
			$profiles[$profile] = $profile;
		}
		return $profiles;
	}
		
	function get_themes () {
		//get from preload object
		$themes = T3Preload::getObject ('themes');
		if ($themes) {
			return $themes;
		}
		
		$themes["engine.default"] = array('engine','default');
		$themes["template.default"] = array('template','default');
		$core_themes = is_dir(T3Path::path(T3_TEMPLATE_CORE).DS.'themes')?@ JFolder::folders (T3Path::path(T3_TEMPLATE_CORE).DS.'themes'):null;
		if ($core_themes) {
			foreach ($core_themes as $theme) {
				$themes["core.$theme"] = array('core',$theme);
			}
		}
		$local_themes = is_dir(T3Path::path(T3_TEMPLATE_LOCAL).DS.'themes')?@ JFolder::folders (T3Path::path(T3_TEMPLATE_LOCAL).DS.'themes'):null;
		if ($local_themes) {
			foreach ($local_themes as $theme) {
				$themes["local.$theme"] = array('local',$theme);
			}
		}
		return $themes;
	}
	
	function get_active_themes () {
		static $_themes = null;
		if (!isset($_themes)) {
			$_themes = array();
			
			$themes = T3Parameter::_getParam('themes');
			//active themes
			$themes = preg_split ('/,/', $themes);
			for ($i=0;$i<count($themes);$i++) {
				$themes[$i] = trim($themes[$i]);
				$theme = array();
				if (preg_match ('/^(local)\.(.*)$/', $themes[$i], $matches)) {
					$theme[0] = $matches[1];
					$theme[1] = $matches[2];
					//$themes[$i] = array('local', $matches[1]);
				} else if (preg_match ('/^(core)\.(.*)$/', $themes[$i], $matches)) {
					$theme[0] = $matches[1];
					$theme[1] = $matches[2];
					//$themes[$i] = array('core', $matches[1]);
				} else {
					$theme[0] = 'core';
					$theme[1] = $themes[$i];
					//$themes[$i] = array('core', $themes[$i]);
				}
				/*if isRTL, and -rtl theme exists then add this theme automatically, before add the current theme to active list*/
				if (T3Common::isRTL()) {
					$themertl = array();
					$themertl[0] = $theme[0];
					$themertl[1] = $theme[1].'-rtl';
					if ($themertl[1] && is_dir (T3Path::path(T3_TEMPLATE).DS.$themertl[0].DS.'themes'.DS.$themertl[1])) {
						$_themes[] = $themertl; 
					}
				}
				if ($theme[1] && is_dir (T3Path::path(T3_TEMPLATE).DS.$theme[0].DS.'themes'.DS.$theme[1])) {
					$_themes[] = $theme; 
				}
			}
			if (T3Common::isRTL()) $_themes[] = array('core', 'default-rtl');
			$_themes[] = array('template', 'default');
			if (T3Common::isRTL()) $_themes[] = array('engine', 'default-rtl');
			$_themes[] = array('engine', 'default');
		}
		return $_themes;
	}
	
	function get_template_based_params () {
		static $params = null;
		if ($params) return $params;
		$content = '';
		$file = T3Path::path(T3_TEMPLATE).DS.'params.ini';
	 	if (is_file ($file)) $content = file_get_contents($file);	 	
		$params = new JParameter($content);
		return $params;
	}
	
	function get_template_params () {
		static $params = null;
		if (!isset ($params)) {
			$key = T3Cache::getProfileKey();
			$data = T3Cache::get_file($key);
			if ($data) {
				$params = new JParameter ($data);
				return $params;
			}
			
			$profile = T3Common::get_active_profile ();
			//Load global params
			$content = '';
			$file = T3Path::path(T3_TEMPLATE).DS.'params.ini';
		 	if (is_file ($file)) $content = file_get_contents($file);	 	
			//Load default profile setting
			$path = 'etc'.DS.'profiles'.DS.'default.ini';		
			$file = T3Path::path(T3_TEMPLATE_LOCAL).DS.$path;
			if (!is_file ($file)) $file = T3Path::path(T3_TEMPLATE_CORE).DS.$path;
			if (is_file ($file)) {
				$content .= "\n".file_get_contents ($file);
			}
			//Load all-pages profile setting
			$default_profile = T3Common::get_default_profile ();
			if ($default_profile != 'default') {
				$path = 'etc'.DS.'profiles'.DS.$default_profile.'.ini';		
				$file = T3Path::path(T3_TEMPLATE_LOCAL).DS.$path;
				if (!is_file ($file)) $file = T3Path::path(T3_TEMPLATE_CORE).DS.$path;
				if (is_file ($file)) {
					$content .= "\n".file_get_contents ($file);
				}
			}
			//Load override profile setting
			if ($profile != $default_profile && $profile != 'default') {
				$path = 'etc'.DS.'profiles'.DS.$profile.'.ini';		
				$file = T3Path::path(T3_TEMPLATE_LOCAL).DS.$path;
				if (!is_file ($file)) $file = T3Path::path(T3_TEMPLATE_CORE).DS.$path;
				if (is_file ($file)) {
					$content .= "\n".file_get_contents ($file);
				}
			}
			$params = new JParameter ($content);
			T3Cache::store_file ($params->toString(), $key);
		}
		return $params;		
	}
	
	function get_default_profile () {
		//Get active profile from user setting
		$k = 'profile';
		$kc = T3_ACTIVE_TEMPLATE."_".$k;
		if (($profile = JRequest::getVar($k, null, 'GET')) && T3Common::profile_exists ($profile)) {
			$exp = time() + 60*60*24*355;
			setcookie ($kc, $profile, $exp, '/');
			return $profile;
		}
		
		if (($profile = JRequest::getVar($kc, '', 'COOKIE')) && T3Common::profile_exists ($profile)) {
			return $profile;
		} 

		//Get default profile
		$params = T3Common::get_template_based_params();
		$pages_profile = strtolower($params->get ('pages_profile'));
		
		$regex = '/(^|,|\>|\n)all(,[^=]*)?=([^\<\n]*)/';
		if (preg_match ($regex, $pages_profile, $matches) && T3Common::profile_exists ($matches[3])) {
			return $matches[3];
		}
		
		return '';
	}
	
	function get_active_profile () {
		static $profile = null;
		if ($profile) return $profile;
		
		$params = T3Common::get_template_based_params();
		$pages_profile = strtolower($params->get ('pages_profile'));
		$profile = '';
		//Get profile by component name(such as com_content)
		$comname = JRequest::getCmd( 'option' );
		if ($comname) {
			$regex = '/(^|,|\>|\n)\s*'.$comname.'\s*(,[^=]*)?=([^\<\n]*)/';
			if (preg_match ($regex, $pages_profile, $matches)) {
				$profile = $matches[3];
				if (T3Common::profile_exists ($profile)) return $profile;
			}
		}
		//Get active profile by pages
		$menu = &JSite::getMenu();
		$menuid = T3Common::getItemid ();		
		while ($menuid && !$profile) {			
			$regex = '/(^|,|\>|\n)\s*'.$menuid.'(,[^=]*)?=([^\<\n]*)/';
			if (preg_match ($regex, $pages_profile, $matches)) {
				$profile = $matches[3];
				if (T3Common::profile_exists ($profile)) return $profile;
			}
			
			$menuitem = $menu->getItem ($menuid);
			$menuid = ($menuitem && isset ($menuitem->parent)) ? $menuitem->parent:0;
		}
		//Get profile by page name (such as home)
		if (JRequest::getCmd( 'view' ) == 'frontpage') {
			$regex = '/(^|,|\>|\n)\s*home(,[^=]*)?=([^\<\n]*)/';
			if (preg_match ($regex, $pages_profile, $matches)) {
				$profile = $matches[3];
				if (T3Common::profile_exists ($profile)) return $profile;
			}
		}

		//Get active profile from user setting
		$profile = T3Common::get_default_profile ();
		
		return $profile;
	}
	
	function get_active_themes_info () {
		global $mainframe;
		//$key = T3Parameter::getKey ('themes-info',2);
		$key = T3Cache::getThemeKey();
		$themes_info = T3Cache::get_object ($key); //force cache
		if ($themes_info && isset ($themes_info['layout']) && $themes_info['layout']) {
			return $themes_info;
		}
		$themes = T3Common::get_active_themes();
		$themes[] = array('engine', 'default');
		$themes_info = null;
		foreach ($themes as $theme) {
			//$theme_info = T3Common::get_themes (implode('.', $theme));
			$theme_info = T3Common::get_theme_info ($theme);
			if (!$theme_info) continue;
			if (!$themes_info) $themes_info = $theme_info;
			else {
				//merge info
				$themes_info = T3Common::merge_info ($theme_info, $themes_info);
			}
		}
		//Get layout if tmpl is not component
		$themes_info['layout'] = null;
		$tmpl = JRequest::getCmd ('tmpl');
		if ($tmpl != 'component') {
			$themes_info['layout'] = T3Common::get_layout_info();
		}
		T3Cache::store_object($themes_info, $key);

		return $themes_info;
	}
	
	function get_browser () {
		$agent = $_SERVER['HTTP_USER_AGENT'];
		if ( strpos($agent, 'Gecko') )
		{
		   if ( strpos($agent, 'Netscape') )
		   {
		     $browser = 'NS';
		   }
		   else if ( strpos($agent, 'Firefox') )
		   {
		     $browser = 'FF';
		   }
		   else
		   {
		     $browser = 'Moz';
		   }
		}
		else if ( strpos($agent, 'MSIE') && !preg_match('/opera/i',$agent) )
		{
			 $msie='/msie\s(7|8\.[0-9]).*(win)/i';
		   	 if (preg_match($msie,$agent)) $browser = 'IE7';
		   	 else $browser = 'IE6';
		}
		else if ( preg_match('/opera/i',$agent) )
		{
		     $browser = 'OPE';
		}
		else
		{
		   $browser = 'Others';
		}
		return $browser;
	}
	
	function createObject ($class, $args) {
		$object = new $class ('');
		foreach ($args as $key=>$value) {
			$object->$key = $value;
		}
		return $object;
	}
	
	function getBrowserSortName () {
		t3import ('core.libs.Browser');
		$browser = new Browser();
		$bname = $browser->getBrowser();
		switch ($bname) {
			case Browser::BROWSER_IE:
				return 'ie';
			case Browser::BROWSER_POCKET_IE:
				return 'pie';
			case Browser::BROWSER_FIREFOX:
				return 'ff';
			case Browser::BROWSER_OPERA:
				return 'op';
			case Browser::BROWSER_OPERA_MINI:
				return 'mop';
			case Browser::BROWSER_MOZILLA:
				return 'moz';
			case Browser::BROWSER_KONQUEROR:
				return 'kon';
			case Browser::BROWSER_CHROME:
				return 'chr';
			default:
				return strtolower(str_replace (' ', '-', $bname));
		}
	}
	function getBrowserMajorVersion () {
		t3import ('core.libs.Browser');
		$browser = new Browser();
		$bver = explode ('.', $browser->getVersion());
		return $bver[0]; //Major version only		
	}

	function isRTL () {
		$doc =& JFactory::getDocument();
		$params = & T3Parameter::getInstance();
		return ($doc->direction == 'rtl' || $params->getParam ('direction', 'ltr')=='rtl');
	}

	//simulate xml
	function node_data ($node) {
		return isset ($node['data'])?$node['data']:null;
	}
	function node_attributes ($node, $attr, $default = null) {
		return isset ($node['attributes'][$attr])?$node['attributes'][$attr]:$default;
	}
	function set_node_attributes (&$node, $attr, $value) {
		$node['attributes'][$attr] = $value;
	}	
	function &node_children (&$node, $name=null, $index = -1) {
		$children = array();
		if (!$node) return $children;
		if (!$name) return $node['children'];
		foreach ($node['children'] as $child) {
			if ($child['name'] == $name) $children[] = $child;
		}
		if ($index > -1) $children = isset ($children[$index])?$children[$index]:null;
		return $children;
	}
	
	function getLastUpdate(){
		$db	 = &JFactory::getDBO();
		$query = 'SELECT created FROM #__content a ORDER BY created DESC LIMIT 1';
		$db->setQuery($query);
		$data = $db->loadObject();
		if( $data->created ){  //return gmdate( 'h:i:s A', strtotime($data->created) ) .' GMT ';
			 $date =& JFactory::getDate(strtotime($data->created));
			 $user =& JFactory::getUser();
   			 $tz = $user->getParam('timezone');
   			 $sec =$date->toUNIX();   //set the date time to second
   			 return gmdate("h:i:s A", $sec+$tz).' GMT';
		}
		return ;
	}		

	function log ($msg, $traceback=false) {
		$app = & JFactory::getApplication();
		$log_path = $app->getCfg('log_path');
		if (!is_dir ($log_path)) $log_path = JPATH_ROOT.DS.'logs';
		if (!is_dir ($log_path)) @JFolder::create ($log_path);
		if (!is_dir ($log_path)) return false; //cannot create log folder
		//prevent http access to this location
		$htaccess = $log_path.DS.'.htaccess';
		if (!is_file ($htaccess)) {
			$htdata = "Order deny,allow\nDeny from all\n";
			@JFile::write ($htaccess, $htdata);
		}
		//Build log message
		$data = date ('H:i:s')."\n".$msg;
		if ($traceback) {
			$data .= "\n---------\n";
			$cdata = ob_get_contents(); //store old data
			ob_start();
			debug_print_backtrace();
			$data .= ob_get_contents();
			ob_end_clean();
			echo $cdata; //write the old data
			$data .= "\n---------";
		}
		$data .= "\n\n";
		$log_file = $log_path.DS.'t3.log';
		if (!($f = fopen ($log_file, 'a'))) return false;
		fwrite ($f, $data);
		fclose ($f);
		return true;
	}

	function getItemid () {
		if (JVERSION < '1.6') {
			//for joomla 1.5 and 1.0
			global $Itemid;
			return $Itemid;
		}
		//for joomla 1.6
		$app	= JFactory::getApplication();
		$menu	= $app->getMenu();
		$active	= $menu->getActive();
		$active_id = isset($active) ? $active->id : $menu->getDefault()->id;
		return $active_id;
	}
}