HEX
Server: Apache
System: Linux sg241.singhost.net 2.6.32-896.16.1.lve1.4.51.el6.x86_64 #1 SMP Wed Jan 17 13:19:23 EST 2018 x86_64
User: honghock (909)
PHP: 8.0.30
Disabled: passthru,system,shell_exec,show_source,exec,popen,proc_open
Upload Files
File: //opt/cpanel/ea-php54/root/usr/share/pear/RVSeagullMod/lib/RVSGL/rvsLibs/Template.php
<?php
/* Reminder: always indent with 4 spaces (no tabs). */
// +---------------------------------------------------------------------------+
// WebSite:  http://www.rvglobalsoft.com
// Unauthorized copying is strictly forbidden and may result in severe legal action.
// Copyright (c) 2006 RV Global Soft Co.,Ltd. All rights reserved.
//
// =====YOU MUST KEEP THIS COPYRIGHTS NOTICE INTACT AND CAN NOT BE REMOVE =======
// Copyright (c) 2006 RV Global Soft Co.,Ltd. All rights reserved.
// This Agreement is a legal contract, which specifies the terms of the license
// and warranty limitation between you and RV Global Soft Co.,Ltd. and RV Site Builder.
// You should carefully read the following terms and conditions before
// installing or using this software.  Unless you have a different license
// agreement obtained from RV Global Soft Co.,Ltd., installation or use of this software
// indicates your acceptance of the license and warranty limitation terms
// contained in this Agreement. If you do not agree to the terms of this
// Agreement, promptly delete and destroy all copies of the Software.
//
// =====  Grant of License =======
// The Software may only be installed and used on a single host machine.
//
// =====  Disclaimer of Warranty =======
// THIS SOFTWARE AND ACCOMPANYING DOCUMENTATION ARE PROVIDED "AS IS" AND
// WITHOUT WARRANTIES AS TO PERFORMANCE OF MERCHANTABILITY OR ANY OTHER
// WARRANTIES WHETHER EXPRESSED OR IMPLIED.   BECAUSE OF THE VARIOUS HARDWARE
// AND SOFTWARE ENVIRONMENTS INTO WHICH RV SITE BUILDER MAY BE USED, NO WARRANTY OF
// FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.  THE USER MUST ASSUME THE
// ENTIRE RISK OF USING THIS PROGRAM.  ANY LIABILITY OF RV GLOBAL SOFT CO.,LTD. WILL BE
// LIMITED EXCLUSIVELY TO PRODUCT REPLACEMENT OR REFUND OF PURCHASE PRICE.
// IN NO CASE SHALL RV GLOBAL SOFT CO.,LTD. BE LIABLE FOR ANY INCIDENTAL, SPECIAL OR
// CONSEQUENTIAL DAMAGES OR LOSS, INCLUDING, WITHOUT LIMITATION, LOST PROFITS
// OR THE INABILITY TO USE EQUIPMENT OR ACCESS DATA, WHETHER SUCH DAMAGES ARE
// BASED UPON A BREACH OF EXPRESS OR IMPLIED WARRANTIES, BREACH OF CONTRACT,
// NEGLIGENCE, STRICT TORT, OR ANY OTHER LEGAL THEORY. THIS IS TRUE EVEN IF
// RV GLOBAL SOFT CO.,LTD. IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO CASE WILL
// RV GLOBAL SOFT CO.,LTD.'S LIABILITY EXCEED THE AMOUNT OF THE LICENSE FEE ACTUALLY PAID
// BY LICENSEE TO RV GLOBAL SOFT CO.,LTD.
// +---------------------------------------------------------------------------+
// $Id$
// +---------------------------------------------------------------------------+

/**
 * RvSiteBuilder templates libary
 *
 * @package RvsLibs
 * @author  Pairote Manunphol <pairote@rvglobalsoft.com>
 * @version $Revision$
 * @since   PHP 5.1
 */
if (class_exists('RvsLibs_Template_Delete') === false) {
	class RvsLibs_Template_Delete
	{

	}
}

if (class_exists('RvsLibs_Template_Set') === false) {
	class RvsLibs_Template_Set extends RvsLibs_Template_Delete
	{
		/**
		 * 	<!-- Start Navigation -->
		 	...
		 	<!-- End Navigation -->

		 	<!-- Start Header Banner -->
		 	...
		 	<!-- End Header Banner -->

		 	<div class="rs_header_spacer">
		 	</div>

		 * @param unknown $templateCode
		 * @param unknown $navConfig
		 * @return unknown|mixed
		 */
		public static function setRsNavPosition($templateCode, $navConfig)
		{
			if (empty($templateCode)) return $templateCode;
			if (preg_match('/(<\!--\s*Navigation\s*-->.*?<\!--\s*End\s*Navigation\s*-->)/ims', $templateCode, $aMatch)) {
				$navCode = $aMatch[1];
				$templateCode = preg_replace('/(<\!--\s*Navigation\s*-->.*?<\!--\s*End\s*Navigation\s*-->)/ims', "", $templateCode);
				switch ($navConfig)
				{
					case 'HDSP+HB+NAV':
						$templateCode = preg_replace('/(<\!--\s*End\s*Header\s*Banner\s*-->)/ims', "$1 \n" . $navCode, $templateCode);
						break;
					case 'HDSP+NAV+HB':
						$templateCode = preg_replace('/(<\!--\s*Header\s*Banner\s*-->)/ims', $navCode . "\n $1", $templateCode);
						break;
					case 'NAV+HDSP+HB';
					default:
						$templateCode = preg_replace('/(<div\s*class\s*=\s*"[^"]*rs_header_spacer[^"]*"[^>]*>)/ims', $navCode . "\n $1", $templateCode);
						break;
				}
			}
			return $templateCode;
		}
		/**
		 <!-- Start Navigation -->
		 ...
		 <!-- End Navigation -->

		 <!-- Start Header Banner -->
		 ...
		 <!-- End Header Banner -->

		 <div class="selected_headerblock">
		 ...
		 </div>

		 * @param unknown $templateCode
		 * @param unknown $navConfig
		 * @return unknown|mixed
		 */
		public static function setUikitNavPosition($templateCode, $navConfig)
		{
			if (empty($templateCode)) return $templateCode;

			if (preg_match('/(<\!--\s*Start\s*Navigation\s*-->.*?<\!--\s*End\s*Navigation\s*-->)/ims', $templateCode, $aMatch)) {
				$navCode = $aMatch[1];
				$templateCode = preg_replace('/(<\!--\s*Start\s*Navigation\s*-->.*?<\!--\s*End\s*Navigation\s*-->)/ims', "", $templateCode);
				switch ($navConfig)
				{
					case 'HDSP+HB+NAV':
						SGL::logMessage('rvdebug: layout1:' . $navConfig);
						$templateCode = preg_replace('/(<\!--\s*End\s*Header\s*Banner\s*-->)/ims', "$1 \n" . $navCode, $templateCode);
						break;
					case 'HDSP+NAV+HB':
						SGL::logMessage('rvdebug: layout2:' . $navConfig);
						$templateCode = preg_replace('/(<\!--\s*Start\s*Header\s*Banner\s*-->)/ims', $navCode . "\n $1", $templateCode);
						break;
					case 'NAV+HDSP+HB';
					SGL::logMessage('rvdebug: layout3:' . $navConfig);
					default:
						$templateCode = preg_replace('/(<div\s*id\s*=\s*"[^"]*selected_headerblock[^"]*"[^>]*>)/ims', $navCode . "\n $1", $templateCode);
						break;
				}
			}

			//SGL::logMessage('rvdebug: ==== templateCode ====' . $templateCode, PEAR_LOG_DEBUG);
			return $templateCode;
		}

		public static function setUikitNavStyle($navConfig, $tarGetFile, $fileCss)
		{
			switch ($fileCss) {
				case 'rvsb-nav-style-1.css':
					self::setUikitNavStyle1($navConfig, $tarGetFile);
					break;
				case 'rvsb-nav-style-2.css':
					self::setUikitNavStyle2($navConfig, $tarGetFile);
					break;
				case 'rvsb-nav-style-3.css':
					self::setUikitNavStyle3($navConfig, $tarGetFile);
					break;
				case 'rvsb-nav-style-4.css':
					self::setUikitNavStyle4($navConfig, $tarGetFile);
					break;
				case 'rvsb-nav-style-5.css':
					self::setUikitNavStyle5($navConfig, $tarGetFile);
					break;
				default:
			}
		}

		public static function setUikitNavStyle1($navConfig, $tarGetFile, $sourceFile=null)
		{
			if (is_null($sourceFile)) {
				$sourceFile = RvsLibs_File::buildPath(
					array(UIKIT_LIB_PATH, 'rvsb-css', 'rvsb-nav-style-1.css')
				);
			}
			require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
			$oCss = RV_CssParser::singleton();
			//load default
			$aData = $oCss->parse_file($sourceFile);

			//bg normal
			$oCss->set_value('.uk-navbar', 'background-color', $navConfig['bgcolor']['color_bgn']);

			//lv0
			//text normal
			$oCss->set_value('.uk-navbar-nav > li > a', 'color', $navConfig['link']['color_anor']);
			$oCss->set_value('.uk-navbar-nav > li > a', 'font-family', $navConfig['font']['font_family']);
			$oCss->set_value('.uk-navbar-nav > li > a', 'font-size', $navConfig['font']['font_size']);
			$oCss->set_value('div.uk-dropdown ul.uk-nav li a', 'font-family', $navConfig['font']['font_family']);
			$oCss->set_value('div.uk-dropdown ul.uk-nav li a', 'font-size', $navConfig['font']['font_size']);

			//bg hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.getHoverNavColorLevel0', 'background-color', $navConfig['bgcolor']['color_bgh']);

			//text hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.getHoverNavColorLevel0', 'color', $navConfig['link']['color_ahov']);

			//active
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'color', $navConfig['link']['color_ahov']);

			//lv1
			//bg normal
			$oCss->set_value('.uk-dropdown', 'background-color',$navConfig['bgcolor']['color_bgn']);
			//text normal
			$oCss->set_value('.uk-nav-navbar > li > a', 'color', $navConfig['link']['color_anor_sub']);
			//text hover
			$oCss->set_value('.uk-nav-navbar > li > a:hover', 'color', $navConfig['link']['color_ahov_sub']);
			$oCss->set_value('.getHoverNavColorLevel1', 'color', $navConfig['link']['color_ahov_sub']);
			//bg hover
			$oCss->set_value('.uk-nav-navbar > li > a:hover', 'background-color', $navConfig['bgcolor']['color_bgh_sub']);
			$oCss->set_value('.getHoverNavColorLevel1', 'background-color', $navConfig['bgcolor']['color_bgh_sub']);

			//lv2
			//text normal
			$oCss->set_value('ul.uk-nav-sub > li > a', 'color', $navConfig['link']['color_anor_sub2']);

			//text hover
			$oCss->set_value('ul.uk-nav-sub > li > a:hover', 'color', $navConfig['link']['color_ahov_sub2']);
			$oCss->set_value('ul.uk-nav-sub > li > a:focus', 'color', $navConfig['link']['color_ahov_sub2']);
			$oCss->set_value('.getHoverNavColorLevel2', 'color', $navConfig['link']['color_ahov_sub2']);

			$oCss->build_css(false);

			//update uikit css footer
			SGL::logMessage($tarGetFile, PEAR_LOG_DEBUG);
			$oCss->write_file($tarGetFile);
		}

		public static function setUikitNavStyle2($navConfig, $tarGetFile, $sourceFile=null)
		{
			if (is_null($sourceFile)) {
				$sourceFile = RvsLibs_File::buildPath(
					array(UIKIT_LIB_PATH, 'rvsb-css', 'rvsb-nav-style-2.css')
				);
			}
			require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
			$oCss = RV_CssParser::singleton();
			//load default
			$aData = $oCss->parse_file($sourceFile);

			//bg normal
			$oCss->set_value('.uk-navbar', 'background-color', $navConfig['bgcolor']['color_bgn']);

			//lv0
			//text normal
			$oCss->set_value('.uk-navbar-nav > li > a', 'color', $navConfig['link']['color_anor']);
			$oCss->set_value('.uk-navbar-nav > li > a', 'font-family', $navConfig['font']['font_family']);
			$oCss->set_value('.uk-navbar-nav > li > a', 'font-size', $navConfig['font']['font_size']);
			$oCss->set_value('div.uk-dropdown ul.uk-nav li a', 'font-family', $navConfig['font']['font_family']);
			$oCss->set_value('div.uk-dropdown ul.uk-nav li a', 'font-size', $navConfig['font']['font_size']);

			//bg hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.getHoverNavColorLevel0', 'background-color', $navConfig['bgcolor']['color_bgh']);

			//text hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.getHoverNavColorLevel0', 'color', $navConfig['link']['color_ahov']);

			//active
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'color', $navConfig['link']['color_ahov']);

			//lv1
			//bg normal
			$oCss->set_value('.uk-dropdown', 'background-color',$navConfig['bgcolor']['color_bgn']);
			//text normal
			$oCss->set_value('.uk-nav-navbar > li > a', 'color', $navConfig['link']['color_anor_sub']);
			//text hover
			$oCss->set_value('.uk-nav-navbar > li > a:hover', 'color', $navConfig['link']['color_ahov_sub']);
			$oCss->set_value('.getHoverNavColorLevel1', 'color', $navConfig['link']['color_ahov_sub']);
			//bg hover
			$oCss->set_value('.uk-nav-navbar > li > a:hover', 'background-color', $navConfig['bgcolor']['color_bgh_sub']);
			$oCss->set_value('.getHoverNavColorLevel1', 'background-color', $navConfig['bgcolor']['color_bgh_sub']);

			//lv2
			//text normal
			$oCss->set_value('ul.uk-nav-sub > li > a', 'color', $navConfig['link']['color_anor_sub2']);

			//text hover
			$oCss->set_value('ul.uk-nav-sub > li > a:hover', 'color', $navConfig['link']['color_ahov_sub2']);
			$oCss->set_value('ul.uk-nav-sub > li > a:focus', 'color', $navConfig['link']['color_ahov_sub2']);
			$oCss->set_value('.getHoverNavColorLevel2', 'color', $navConfig['link']['color_ahov_sub2']);

			$oCss->build_css(false);

			//update uikit css footer
			SGL::logMessage($tarGetFile, PEAR_LOG_DEBUG);
			$oCss->write_file($tarGetFile);
		}

		public static function setUikitNavStyle3($navConfig, $tarGetFile, $sourceFile=null)
		{
			if (is_null($sourceFile)) {
				$sourceFile = RvsLibs_File::buildPath(
						array(UIKIT_LIB_PATH, 'rvsb-css', 'rvsb-nav-style-3.css')
				);
			}
			require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
			$oCss = RV_CssParser::singleton();
			//bg normal
			$oCss->set_value('.uk-navbar', 'background-color', $navConfig['bgcolor']['color_bgn']);

			//lv0
			//text normal
			$oCss->set_value('.uk-navbar-nav > li > a', 'color', $navConfig['link']['color_anor']);
			$oCss->set_value('.uk-navbar-nav > li > a', 'font-family', $navConfig['font']['font_family']);
			$oCss->set_value('.uk-navbar-nav > li > a', 'font-size', $navConfig['font']['font_size']);

			//bg hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'background-color', 'transparent !important');
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'background-color', 'transparent !important');
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'background-color', 'transparent !important');
			$oCss->set_value('.getHoverNavColorLevel0',  'background-color',$navConfig['bgcolor']['color_bgh']);

			//text hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.getHoverNavColorLevel0', 'color', $navConfig['link']['color_ahov']);

			//line Hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'border-color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'border-color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-dropdown > ul > li > a:focus', 'border-top', '0px !important');

			//uk-active
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'border-color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'color', $navConfig['link']['color_ahov']);

			$oCss->set_value('.getHoverNavColorLevel0', 'background-color', $navConfig['bgcolor']['color_bgh']);

			//lv1
			//bg normal
			$oCss->set_value('.uk-dropdown', 'background-color',$navConfig['bgcolor']['color_bgn']);
			//text normal
			$oCss->set_value('.uk-nav-navbar > li > a', 'color', $navConfig['link']['color_anor_sub']);
			//text hover
			$oCss->set_value('.uk-nav-navbar > li > a:hover', 'color', $navConfig['link']['color_ahov_sub']);
			$oCss->set_value('.getHoverNavColorLevel1', 'color', $navConfig['link']['color_ahov_sub']);
			//bg hover
			$oCss->set_value('.uk-nav-navbar > li > a:hover', 'background-color', $navConfig['bgcolor']['color_bgh_sub']);
			$oCss->set_value('.getHoverNavColorLevel1', 'background-color', $navConfig['bgcolor']['color_bgh_sub']);

			//lv2
			//text normal
			$oCss->set_value('ul.uk-nav-sub > li > a', 'color', $navConfig['link']['color_anor_sub2']);

			//text hover
			$oCss->set_value('ul.uk-nav-sub > li > a:hover', 'color', $navConfig['link']['color_ahov_sub2']);
			$oCss->set_value('ul.uk-nav-sub > li > a:focus', 'color', $navConfig['link']['color_ahov_sub2']);
			$oCss->set_value('.getHoverNavColorLevel2', 'color', $navConfig['link']['color_ahov_sub2']);

			$oCss->build_css(false);

			//update uikit css footer
			SGL::logMessage($tarGetFile, PEAR_LOG_DEBUG);
			$oCss->write_file($tarGetFile);
		}

		public static function setUikitNavStyle4($navConfig, $tarGetFile, $sourceFile=null)
		{
			if (is_null($sourceFile)) {
				$sourceFile = RvsLibs_File::buildPath(
						array(UIKIT_LIB_PATH, 'rvsb-css', 'rvsb-nav-style-4.css')
				);
			}
			require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
			$oCss = RV_CssParser::singleton();;
			//bg normal
			$oCss->set_value('.uk-navbar', 'background-color', $navConfig['bgcolor']['color_bgn']);

			//lv0
			//text normal
			$oCss->set_value('.uk-navbar-nav > li > a', 'color', $navConfig['link']['color_anor']);
			$oCss->set_value('.uk-navbar-nav > li > a', 'font-family', $navConfig['font']['font_family']);
			$oCss->set_value('.uk-navbar-nav > li > a', 'font-size', $navConfig['font']['font_size']);

			//bg hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'background-color', 'transparent !important');
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.getHoverNavColorLevel0', 'background-color', $navConfig['bgcolor']['color_bgh']);

			//bg hover image(style4 only)
			//$oCss->set_value('.uk-navbar-nav > li:hover > a', 'background-image', 'linear-gradient(to bottom, '.$navConfig['bgcolor']['color_bgn'].' 50%, '.$navConfig['bgcolor']['color_bgh'].' 50%)');
			//$oCss->set_value('.uk-navbar-nav > li > a:focus', 'background-image', 'linear-gradient(to bottom, '.$navConfig['bgcolor']['color_bgn'].' 50%, '.$navConfig['bgcolor']['color_bgh'].' 50%)');
			//$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'background-image', 'linear-gradient(to bottom, '.$navConfig['bgcolor']['color_bgn'].' 50%, '.$navConfig['bgcolor']['color_bgh'].' 50%)');
			//$oCss->set_value('.getHoverNavColorLevel0', 'background-image', 'linear-gradient(to bottom, '.$navConfig['bgcolor']['color_bgn'].' 50%, '.$navConfig['bgcolor']['color_bgh'].' 50%)');

			//text hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.getHoverNavColorLevel0', 'color', $navConfig['link']['color_ahov']);

			//line Hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'border-color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'border-color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'border-color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-dropdown > ul > li > a:focus', 'border-bottom', '0px !important');

			//uk-active
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'background-color', $navConfig['bgcolor']['color_bgh']);
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'border-color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'color', $navConfig['link']['color_ahov']);

			$oCss->set_value('.getHoverNavColorLevel0', 'background-color', $navConfig['bgcolor']['color_bgh']);

			//lv1
			//bg normal
			$oCss->set_value('.uk-dropdown', 'background-color',$navConfig['bgcolor']['color_bgn']);
			//text normal
			$oCss->set_value('.uk-nav-navbar > li > a', 'color', $navConfig['link']['color_anor_sub']);
			//text hover
			$oCss->set_value('.uk-nav-navbar > li > a:hover', 'color', $navConfig['link']['color_ahov_sub']);
			$oCss->set_value('.getHoverNavColorLevel1', 'color', $navConfig['link']['color_ahov_sub']);
			//bg hover
			$oCss->set_value('.uk-nav-navbar > li > a:hover', 'background-color', $navConfig['bgcolor']['color_bgh_sub']);
			$oCss->set_value('.getHoverNavColorLevel1', 'background-color', $navConfig['bgcolor']['color_bgh_sub']);

			//lv2
			//text normal
			$oCss->set_value('ul.uk-nav-sub > li > a', 'color', $navConfig['link']['color_anor_sub2']);

			//text hover
			$oCss->set_value('ul.uk-nav-sub > li > a:hover', 'color', $navConfig['link']['color_ahov_sub2']);
			$oCss->set_value('ul.uk-nav-sub > li > a:focus', 'color', $navConfig['link']['color_ahov_sub2']);
			$oCss->set_value('.getHoverNavColorLevel2', 'color', $navConfig['link']['color_ahov_sub2']);

			$oCss->build_css(false);

			//update uikit css footer
			SGL::logMessage($tarGetFile, PEAR_LOG_DEBUG);
			$oCss->write_file($tarGetFile);
		}

		public static function setUikitNavStyle5($navConfig, $tarGetFile, $sourceFile=null)
		{
			if (is_null($sourceFile)) {
				$sourceFile = RvsLibs_File::buildPath(
						array(UIKIT_LIB_PATH, 'rvsb-css', 'rvsb-nav-style-5.css')
				);
			}
			require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
			$oCss = RV_CssParser::singleton();;
			//bg normal
			$oCss->set_value('.uk-navbar', 'background-color', $navConfig['bgcolor']['color_bgn']);

			//lv0
			//text normal
			$oCss->set_value('.uk-navbar-nav > li > a', 'color', $navConfig['link']['color_anor']);
			$oCss->set_value('.uk-navbar-nav > li > a', 'font-family', $navConfig['font']['font_family']);
			$oCss->set_value('.uk-navbar-nav > li > a', 'font-size', $navConfig['font']['font_size']);

			//bg hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'background-color', 'transparent !important');
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'background-color', 'transparent !important');
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'background-color', 'transparent !important');
			$oCss->set_value('.getHoverNavColorLevel0', 'background-color', 'transparent !important');

			//text hover
			$oCss->set_value('.uk-navbar-nav > li:hover > a', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li > a:focus', 'color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li.uk-open > a', 'color', $navConfig['link']['color_ahov']);

			$oCss->set_value('.getHoverNavColorLevel0', 'color', $navConfig['link']['color_ahov']);

			//thin line hover = link hover
			$oCss->set_value('.uk-navbar-nav > li > a:after', 'background-color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li.uk-active a:after', 'background-color', $navConfig['link']['color_ahov']);
			$oCss->set_value('.getHoverNavColorLevel0', 'background-color', $navConfig['link']['color_ahov']);

			//uk-active
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'background-color', 'transparent !important');
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a:after', 'background-color', $input->$navConfig['link']['color_ahov']);
			$oCss->set_value('.uk-navbar-nav > li.uk-active > a', 'color', $navConfig['link']['color_ahov']);



			//lv1
			//bg normal
			$oCss->set_value('.uk-dropdown', 'background-color',$navConfig['bgcolor']['color_bgn']);
			//text normal
			$oCss->set_value('.uk-nav-navbar > li > a', 'color', $navConfig['link']['color_anor_sub']);
			//text hover
			$oCss->set_value('.uk-nav-navbar > li > a:hover', 'color', $navConfig['link']['color_ahov_sub']);
			$oCss->set_value('.getHoverNavColorLevel1', 'color', $navConfig['link']['color_ahov_sub']);
			//bg hover
			$oCss->set_value('.uk-nav-navbar > li > a:hover', 'background-color', $navConfig['bgcolor']['color_bgh_sub']);
			$oCss->set_value('.getHoverNavColorLevel1', 'background-color', $navConfig['bgcolor']['color_bgh_sub']);

			//lv2
			//text normal
			$oCss->set_value('ul.uk-nav-sub > li > a', 'color', $navConfig['link']['color_anor_sub2']);

			//text hover
			$oCss->set_value('ul.uk-nav-sub > li > a:hover', 'color', $navConfig['link']['color_ahov_sub2']);
			$oCss->set_value('ul.uk-nav-sub > li > a:focus', 'color', $navConfig['link']['color_ahov_sub2']);
			$oCss->set_value('.getHoverNavColorLevel2', 'color', $navConfig['link']['color_ahov_sub2']);

			$oCss->build_css(false);

			//update uikit css footer
			SGL::logMessage($tarGetFile, PEAR_LOG_DEBUG);
			$oCss->write_file($tarGetFile);

		}
	}
}

if (class_exists('RvsLibs_Template_Get') === false) {
	class RvsLibs_Template_Get extends RvsLibs_Template_Set
	{
		public static function getPictureId($picture_name)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$aPictureId = DaoFactory::Picture()->findPictureIdByPictureName($picture_name, 'getrowobj');
			if ($aPictureId) {
				return $aPictureId->picture_id;
			} elseif ($picture_name) {
				$res = RvsLibs_Template::addNewPictureName($picture_name);
				if ($res) {
					return $res;
				}
			}
			return false;
		}
		public static function getGenColorTone($pathRsColorConf)
		{
			if (isset($GLOBALS['_SGL']['rvsCache']['Main']['colorConfig']) === true) {
				SGL::logMessage('By cache', PEAR_LOG_DEBUG);
				$aColorConfig = $GLOBALS['_SGL']['rvsCache']['Main']['colorConfig'];
			} else {
				SGL::logMessage('set cache', PEAR_LOG_DEBUG);
				$aColorConfig = array();
				if (is_readable($pathRsColorConf) === true) {
					$aColorConfig = RvsLibs_File::getFileSerialData($pathRsColorConf);
				}
				$GLOBALS['_SGL']['rvsCache']['Main']['colorConfig'] = $aColorConfig;
			}
			return $aColorConfig;
		}

		public static function getRsTemplateConfigFromCss($projectId, $templatePath, $templateItemFolder)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$aConfig = array();
			$customcss = RvsLibs_Project::getCustomCssPath($projectId, $templateItemFolder);
			$rvCssFile = RvsLibs_File::buildPath(array(
				$customcss, 'layout.css'
			));
			if (!is_file($rvCssFile)) {
				$rvCssFile = RvsLibs_File::buildPath(array(
					$templatePath,
					$templateItemFolder,
					'layout.css'
				));
			}

			if (is_file($rvCssFile)) {
				require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
				$oCss = RV_CssParser::singleton();
				$oCss->parse_file($rvCssFile);
				$atMedia = $oCss->get_media_by_screen(960);
				$mAtMedia = $oCss->get_media_by_screen(480);

				$aConfig = array(
					'rs_master'				=> 'HDSP+HB+NAV',
					'header_spacerheight'	=> $oCss->get_value('.rs_header_spacer', 'height', $atMedia),
					'header_bgcolor'		=> $oCss->get_value('.rs_header_spacer', 'background-color', $atMedia),
					'background_color' 		=> $oCss->get_value('body', 'background-color'),
					'bgmenu'				=> $oCss->get_value('.bgmenu', 'background-color'),
					'hb_effect'				=> 'slide',
					'hb_effecttime'			=> '5',

				/*start custom font*/
					'content_margin_top'	=> '',
					'content_margin_bottom'	=> '',
					'content_margin_left'	=> '',
					'content_margin_right'	=> '',

					'body_font_family' 		=> $oCss->get_value('body', 'font-family'),
					'body_lineheight' 		=> $oCss->get_value('body', 'line-height'),
					'body_bgcolor' 			=> $oCss->get_value('.rs_body_bgcolor', 'background-color'),
					'body_color' 			=> $oCss->get_value('body', 'color'),
					'body_font_size'		=> $oCss->get_value('body', 'font-size'),
					'body_font_weight'		=> $oCss->get_value('body', 'font-weight'),
					'body_font_style'		=> $oCss->get_value('body', 'font-style'),

					'link_font_family' 		=> $oCss->get_value('a:link', 'font-family'),
					'link_color'			=> $oCss->get_value('a:link', 'color'),
					'link_font_size'		=> $oCss->get_value('a:link', 'font-size'),
					'link_font_weight'		=> $oCss->get_value('a:link', 'font-weight'),
					'link_font_style'		=> $oCss->get_value('a:link', 'font-style'),
					'link_text_decoration'	=> $oCss->get_value('a:link', 'text-decoration'),

					'hover_color'			=> $oCss->get_value('a:hover', 'color'),
					'hover_font_size'		=> $oCss->get_value('a:hover', 'font-size'),
					'hover_font_weight'		=> $oCss->get_value('a:hover', 'font-weight'),
					'hover_font_style'		=> $oCss->get_value('a:hover', 'font-style'),
					'hover_text_decoration'	=> $oCss->get_value('a:hover', 'text-decoration'),
				/*end customfont*/

					'm_header_banner_display'	=> $oCss->get_value('.rs_header_banner', 'display', $mAtMedia),
					'm_logo_display'		=> $oCss->get_value('.rs_header_logo', 'display', $mAtMedia),
					'm_companyname_display'	=> $oCss->get_value('.rs_header_companyname', 'display', $mAtMedia),
					'm_slogan_display'		=> $oCss->get_value('.rs_header_slogan', 'display', $mAtMedia),
					'm_body_color'			=> $oCss->get_value('.rs_header_companyname', 'color', $mAtMedia),
					'm_body_bgcolor'		=> $oCss->get_value('.rs_header_spacer', 'background-color', $mAtMedia),

				);
				unset($oCss);
			}

			return $aConfig;
		}

		public static function getUikitTemplateConfigFromCss($projectId, $templatePath, $templateItemFolder)
		{
			SGL::logMessage($templateItemFolder, PEAR_LOG_DEBUG);
			$aConfig = array();
			$customcss = RvsLibs_Project::getCustomCssPath($projectId, $templateItemFolder);
			SGL::logMessage('===2'.$customcss, PEAR_LOG_DEBUG);
			$rvCssFile = RvsLibs_File::buildPath(array(
					$customcss, 'rvsb-css/rvsb-extended-uikit.css'
			));
			SGL::logMessage('===3'.$rvCssFile, PEAR_LOG_DEBUG);
			if (!is_file($rvCssFile)) {
				$rvCssFile = RvsLibs_File::buildPath(array(
						$templatePath,
						$templateItemFolder,
						'rvsb-css/rvsb-extended-uikit.css'
				));
			}
//echo '==>'.$rvCssFile;
			if (is_file($rvCssFile)) {
				require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
				$oCss = RV_CssParser::singleton();
				$oCss->parse_file($rvCssFile);
				//$atMedia = $oCss->get_media_by_screen(768,960);
				$mAtMedia = $oCss->get_media_by_screen(480);
				//echo '<pre>';print_r($oCss);exit;
				$aConfig = array(
					'rs_master'				=> 'HDSP+HB+NAV',
					'header_spacerheight'	=> $oCss->get_value('.rs_header_spacer', 'height'),
					'header_bgcolor'		=> $oCss->get_value('.rs_header_spacer', 'background-color'),
					//'background_color' 		=> $oCss->get_value('body', 'background-color'),
					//'bgmenu'				=> $oCss->get_value('.bgmenu', 'background-color'),
					//'hb_effect'				=> 'slide',
					//'hb_effecttime'			=> '5',

				/*start custom font*/
					'content_margin_top'	=> '',
					'content_margin_bottom'	=> '',
					'content_margin_left'	=> '',
					'content_margin_right'	=> '',

					'body_font_family' 		=> $oCss->get_value('body', 'font-family'),
					'body_lineheight' 		=> $oCss->get_value('body', 'line-height'),
					'body_bgcolor' 			=> $oCss->get_value('.rs_body_bgcolor', 'background-color'),
					'body_color' 			=> $oCss->get_value('body', 'color'),
					'body_font_size'		=> $oCss->get_value('body', 'font-size'),
					'body_font_weight'		=> $oCss->get_value('body', 'font-weight'),
					'body_font_style'		=> $oCss->get_value('body', 'font-style'),

					'link_font_family' 		=> $oCss->get_value('a:link', 'font-family'),
					'link_color'			=> $oCss->get_value('a:link', 'color'),
					'link_font_size'		=> $oCss->get_value('a:link', 'font-size'),
					'link_font_weight'		=> $oCss->get_value('a:link', 'font-weight'),
					'link_font_style'		=> $oCss->get_value('a:link', 'font-style'),
					'link_text_decoration'	=> $oCss->get_value('a:link', 'text-decoration'),

					'hover_color'			=> $oCss->get_value('a:hover', 'color'),
					'hover_font_size'		=> $oCss->get_value('a:hover', 'font-size'),
					'hover_font_weight'		=> $oCss->get_value('a:hover', 'font-weight'),
					'hover_font_style'		=> $oCss->get_value('a:hover', 'font-style'),
					'hover_text_decoration'	=> $oCss->get_value('a:hover', 'text-decoration'),
				/*end customfont*/

					'm_header_banner_display'	=> $oCss->get_value('.rs_header_banner', 'display', $mAtMedia),
					'm_logo_display'		=> $oCss->get_value('.rs_header_logo', 'display', $mAtMedia),
					'm_companyname_display'	=> $oCss->get_value('.rs_header_companyname', 'display', $mAtMedia),
					'm_slogan_display'		=> $oCss->get_value('.rs_header_slogan', 'display', $mAtMedia),
					'm_body_color'			=> $oCss->get_value('.rs_header_companyname', 'color', $mAtMedia),
					'm_body_bgcolor'		=> $oCss->get_value('.rs_header_spacer', 'background-color', $mAtMedia),

				);
			}
			//echo '<pre>';print_r($aConfig);exit;
			return $aConfig;
		}


		public static function getTemplateConfig($projectId, $templatePath, $templateItemFolder)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$customcss = RvsLibs_Project::getCustomCssPath($projectId, $templateItemFolder);
			$templateConfCustom = RvsLibs_File::buildPath(array(
				$customcss, 'template.ini.php'
			));
			$templateConf = RvsLibs_File::buildPath(array(
				$templatePath,
				$templateItemFolder,
				'template.ini.php'
			));
			$defaultConfig = array(
				'rs_master' 			=> 'HDSP+HB+NAV',/*(HDSP+HB+NAV, HDSP+NAV+HB, NAV+HDSP+HB)*/
				'rs_header_theme'		=> '7-black',
				'rs_header_id'			=> 'header14.ini.php',
				'rs_header_custom'		=> false,
				'rs_header_spacerheight'=> '100px',
				'rs_header_height'		=> 250,
				'rs_header_width'		=> 940,
				'rs_header_positionx'	=> 0,
				'rs_header_positiony'	=> 0,
				'rs_header_component_theme'	=> '7-black',
				'rs_header_component_id'	=> 'HD024.ini.php',
				'rs_hb_img'				=> 'header_banner.jpg',
				'rs_hb_effect'			=> 'slide',
				'rs_hb_effecttime'		=> 5,
				'rs_navigator_theme'	=> '7-black',
				'rs_navigator_id'		=> 'navColor14.ini.php',
				'rs_navigator_custom'	=> false,
				'rs_navigator_align'	=> 'left',
				'rs_navigator_txtSliderSpaceNavColor' => 1,
				'rs_navigator_level'	=> 1,
				'rs_background_color'	=> '',
				'rs_background_image'	=> '',
				/* 'rs_background_position_x' => 'left',
				'rs_background_position_y' => 'top', */
				'rs_background_repeat'	=> 'repeat',
				'rs_body_color' 		=> '#fff',
				'rs_body_lineheight'	=> 1,
				'rs_body_txtSliderSpaceBgColor'	=> 1,
				'rs_mobile_compatible'	=> 'enable'
			);
			$aCustomConfig = array();
			if (is_file($templateConfCustom)) {
				$aCustomConfig = RvsLibs_Config::parse_ini_file($templateConfCustom, true);
			}
			$aConfig = array();
			if (is_file($templateConf)) {
				$aConfig = RvsLibs_Config::parse_ini_file($templateConf, true);
			}
			return array_merge($defaultConfig, $aConfig, $aCustomConfig);
		}



		public static function getCodeEmbed($templateFile, $isPhpSuexec)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$blockData = '';
			$templatePath = SGL_PATH . '/scripts/seagull_mod/public_html/themes/rvtheme/default/' . $templateFile;
			if (is_file($templatePath)) {
				$aBlockData = file($templatePath);
				$blockData = implode('' , $aBlockData);
				$blockData = ($isPhpSuexec == 1) ? str_replace('rvsindex.php', 'rvsindex.php?', $blockData) : $blockData;
			}

			$code['staticpage'] = $blockData;
			$code['dynamicpage'] = '<flexy:include src="' . $templateFile . '">';
			return $code;
		}

		/**
		 * get component block preview code
		 * @param unknown $templateFile
		 */
		public static function getCodeEmbedPreview($templateFile)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$blockData = '';
			$templatePath = SGL_PATH . '/scripts/seagull_mod/public_html/themes/rvtheme/default/' . $templateFile;
			if (is_file($templatePath)) {
				$blockData = file_get_contents($templatePath);
				if (preg_match('/<\!--\s*for\s*preview\s*mode\s*-->(.*?)<\!--\s*for\s*preview\s*mode\s*-->/ims', $blockData, $aMatch))
					$blockData = $aMatch[1];
			}
			return $blockData;

		}
		/*
		 * load get file data.txt
		 */

		public static function getFileData($path)
		{
			SGL::logMessage("path " . $path, PEAR_LOG_DEBUG);
			$aVariables = array();
			if (is_file($path)) {
				$fileData = RvsLibs_File::file($path);
			} else {
				SGL::logMessage("cannot find path " . $path, PEAR_LOG_ERR);
				return $aVariables;
			}
			foreach ($fileData as $line) {
				$aFileData = RvsLibs_String::dbeExplode(",",$line);
			}
			foreach ($aFileData as $line) {
				$bValue = strstr($line,':');
				$count1 = RvsLibs_String::strlen($line);
				$count2 = RvsLibs_String::strlen($bValue);
				$countSum = $count1 - $count2;
				$aValue = RvsLibs_String::str_replace(':','',$bValue);
				$aKey = RvsLibs_String::dbeSubstr($line,0,$countSum);
				if ($line != "") {
					$aVariables['' . $aKey . ''] = $aValue;
				}
				if ( RvsLibs_String::trim($aKey) == "aAssociatedCategory" || RvsLibs_String::trim($aKey) == "aAssociatedTemplateType" ) {
					$aVal['' . $aKey . ''] = RvsLibs_String::dbeExplode("|", $aVariables[''  . $aKey . '']);
					$aVariables[''  . $aKey . ''] = "";
					foreach ($aVal[''  . $aKey . ''] as $k =>$v) {
						if ($v) {
							$aVariables[''  . $aKey . ''][$v] = $v;
						}
					}
				}
			}
			return $aVariables;
		}

		/**
		 * Get rvsitebuilder template data by rvsitebuilder project id
		 * @author Parinya Chaipetch <parinya@rvglobalsoft.com>
		 * @access public
		 *
		 * @param string $projectId
		 *
		 * return array
		 */
		public static function getTemplatesDataByTemplateId($projectId)
		{
			/// @TODO::BooM
			$aProjectInfo = RvsLibs_UserAndProject::getDataProjectInfoByProjectId($projectId);

			$aProjectInfo[0]->template_id = isset($aProjectInfo[0]->template_id) ? $aProjectInfo[0]->template_id : null;
			//get menustyle_id
			/// Select template by template id :: BooM
			$aMenuStyleId = DaoFactory::Template()->findTemplateByTemplateId($aProjectInfo[0]->template_id, 'getall');

			if ($aProjectInfo[0]->template_id && $aProjectInfo[0]->template_item_id) {
				///
				$arraydata = DaoFactory::Template()->findTemplateItemByTemplateData($aProjectInfo[0]->template_id, $aProjectInfo[0]->template_item_id, $aMenuStyleId[0]->menustyle_id, 'getall');
				/// Select template user id by template id : BooM
				$aImportTemplateData = DaoFactory::TemplateImport()->findTemplateUsrIdByTemplateId($aProjectInfo[0]->template_id, 'getassoc');

				$aTemplatePahtUrl = RvsLibs_Template::getTemplatePathUrl(key($aImportTemplateData), $arraydata[0]->template_item_folder, 'view');
				$arraydata[0]->templatePath = $aTemplatePahtUrl['path'];
				$arraydata[0]->templateUrl =  $aTemplatePahtUrl['url'];

				if (count($aImportTemplateData) > 0) {
					$arraydata[0]->isImportTemplate = true;
					$arraydata[0]->templateImportUsrId = key($aImportTemplateData);
					$arraydata[0]->templateImportPrivate = $aImportTemplateData[key($aImportTemplateData)];
				} else {
					$arraydata[0]->isImportTemplate = false;
					$arraydata[0]->templateImportUsrId = '';
					$arraydata[0]->templateImportPrivate = '';
				}

				if (isset($arraydata)) {
					/// :: BooM
					$aTemplateData = ($noIndex === true) ? $arraydata[0] : $arraydata;

					$GLOBALS['_SGL']['rvsCache']['Main']['getTemplatesData']['projectId'] = $projectId;
					$GLOBALS['_SGL']['rvsCache']['Main']['getTemplatesData']['arraydata'] = $aTemplateData;
					return $aTemplateData;
				} else {
					return array();
				}
			}
		}

		/**
		 * Load template item data by template id
		 * @author Parinya Chaipetch <parinya@rvglobalsoft.com>
		 *
		 * @param string $template_item_id
		 * @return mix
		 *     ->template_item_id              ;varchar(32)
		 *     ->products_id                   ;varchar(11)
		 *     ->template_id                   ;varchar(32)
		 *     ->template_item_folder          ;varchar(64)
		 *     ->template_type_s_preview       ;varchar(32)
		 *     ->color_id                      ;int(3)
		 *     ->picture_id
		 */

		public static function getTemplateItemDataByTemplateItemId($templateItemId)
		{
			$_allowed_field = array(
		  'template_item_id'
		  , 'products_id'
		  , 'template_id'
		  , 'template_item_folder'
		  , 'template_type_s_preview'
		  , 'color_id'
		  , 'picture_id'
		  );

		  $aTemplateItemData = new stdClass;
		  foreach ($_allowed_field as $k) {
		  	$aTemplateItemData->{$k} = null;
		  }

		  if (isset($templateItemId)) {
		  	/// Selece template item data by template item id : BooM
		  	$aQueryTemplateItemData = DaoFactory::Template()
		  	->findTemplateItemByTemplateItemId($templateItemId, 'getrow');

		  	foreach ($aQueryTemplateItemData as $k => $v) {
		  		if (in_array($k, $_allowed_field) === true) {
		  			$aTemplateItemData->{$k} = $v;
		  		}
		  	}
		  }
		  return $aTemplateItemData;
		}

		public static function getTemplateUniqueIdFolderMapFile()
		{
			///Debug SGL::logMessage(null, PEAR_LOG_DEBUG);
		}

		public static function getTemplateDataNoCache($projectId)
		{
				SGL::logMessage('By new', PEAR_LOG_DEBUG);
				$arraydata = array();
				$aProjectInfo = RvsLibs_Project::getProjectInfoData($projectId);
				if (!count($aProjectInfo)) {
					return $arraydata;
				}
				$aProjectInfo[0]->template_id = isset($aProjectInfo[0]->template_id) ? $aProjectInfo[0]->template_id : null;
				//get menustyle_id
				/// Select template by template id :: BooM
				$aMenuStyleId = DaoFactory::Template()->findTemplateByTemplateId($aProjectInfo[0]->template_id, 'getall');

				if ($aProjectInfo[0]->template_id && $aProjectInfo[0]->template_item_id) {
					///
					$aProjectInfo[0]->template_id = (isset($aProjectInfo[0]->template_id))? $aProjectInfo[0]->template_id : '';
					$aProjectInfo[0]->template_item_id = (isset($aProjectInfo[0]->template_item_id))? $aProjectInfo[0]->template_item_id : '';
					$aMenuStyleId[0]->menustyle_id = (isset($aMenuStyleId[0]->menustyle_id))? $aMenuStyleId[0]->menustyle_id : '';
					$arraydata = DaoFactory::Template()->findTemplateItemByTemplateData($aProjectInfo[0]->template_id, $aProjectInfo[0]->template_item_id, $aMenuStyleId[0]->menustyle_id, 'getall');
					/// Select template user id by template id : BooM
					$aImportTemplateData = DaoFactory::TemplateImport()->findTemplateUsrIdByTemplateId($aProjectInfo[0]->template_id, 'getassoc');
					$templateItemFolder = isset($arraydata[0]->template_item_folder) ? $arraydata[0]->template_item_folder : $aProjectInfo[0]->template_item_folder;
					$aTemplatePahtUrl = RvsLibs_Template::getTemplatePathUrl(key($aImportTemplateData), $templateItemFolder, 'view');
					$arraydata[0]->templatePath = (isset($aTemplatePahtUrl['path']) && $aTemplatePahtUrl['path'])? $aTemplatePahtUrl['path'] : null;
					$arraydata[0]->templateUrl =  (isset($aTemplatePahtUrl['url']) && $aTemplatePahtUrl['url'])? $aTemplatePahtUrl['url'] : null;
                    $arraydata[0]->template_url =  (isset($aTemplatePahtUrl['url']) && $aTemplatePahtUrl['url'])? $aTemplatePahtUrl['url'] : null;

					if (count($aImportTemplateData) > 0) {
						$arraydata[0]->isImportTemplate = true;
						$arraydata[0]->templateImportUsrId = key($aImportTemplateData);
						$arraydata[0]->templateImportPrivate = $aImportTemplateData[key($aImportTemplateData)];
					} else {
						$arraydata[0]->isImportTemplate = false;
						$arraydata[0]->templateImportUsrId = '';
						$arraydata[0]->templateImportPrivate = '';
					}
				}
				return $arraydata;
		}

		public static function getTemplatesData($projectId, $noIndex=false, $fromCache=true)
		{
			// Optimization
			$arraydata = array();
			if ($fromCache === true && isset($GLOBALS['_SGL']['rvsCache']['Main']['getTemplatesData']) === true  && $GLOBALS['_SGL']['rvsCache']['Main']['getTemplatesData']['projectId'] == $projectId) {
				SGL::logMessage('By cache', PEAR_LOG_DEBUG);
				$arraydata = $GLOBALS['_SGL']['rvsCache']['Main']['getTemplatesData']['arraydata'];
				$arraydata = (is_array($arraydata) && isset($arraydata[0]) && $noIndex === true)
					? $arraydata[0] : $arraydata;
				return $arraydata;
			} else {
				SGL::logMessage('not By cache', PEAR_LOG_DEBUG);
					$arraydata = RvsLibs_Template::getTemplateDataNoCache($projectId);

					if (isset($arraydata) && is_array($arraydata) && count($arraydata) > 0) {
						/// ไม่เข้าใจว่าทำไมจะต้องใส่ index 0 ไว้ :: BooM
						$aTemplateData = ($noIndex === true) ? $arraydata[0] : $arraydata;

						$GLOBALS['_SGL']['rvsCache']['Main']['getTemplatesData']['projectId'] = $projectId;
						$GLOBALS['_SGL']['rvsCache']['Main']['getTemplatesData']['arraydata'] = $aTemplateData;
						return $aTemplateData;
					} else {
						return array();
					}
			}
		}

		public static function getTemplatePathUrl($templateUserId, $templateItemFolder, $action = 'edit')
		{
			// Optimization
			if (isset($GLOBALS['_SGL']['rvsCache']['Main']['getTemplatePathUrl']) === true &&
			    $GLOBALS['_SGL']['rvsCache']['Main']['getTemplatePathUrl']['templateUserId'] == $templateUserId &&
			    $GLOBALS['_SGL']['rvsCache']['Main']['getTemplatePathUrl']['templateItemFolder'] == $templateItemFolder &&
			    $GLOBALS['_SGL']['rvsCache']['Main']['getTemplatePathUrl']['action'] == $action
			) {

				$aTemplatePathUrl = $GLOBALS['_SGL']['rvsCache']['Main']['getTemplatePathUrl']['aTemplatePathUrl'];
			} else {
				//fixed PHPMD scan 07/07/2554
				/*
				$aTemplateOption = array(
					'templateUserId' => $templateUserId,
					'templateItemFolder' => $templateItemFolder
				);
				*/
				/*
				$aTemplatePathUrl = array();
				if ($templateUserId && CPMODE != 'tryout') {
					if (RvsLibs_Template::isValidTemplate($templateUserId, $templateItemFolder) ) {
						if ( $action == 'edit' ) {
							$aTemplatePathUrl = RvsLibs_Template::getImportedTemplatePathUrlAdmin();
						} else {
							$aTemplatePathUrl = RvsLibs_Template::getImportedTemplatePathUrlUser($templateUserId);
						}
					}
				} elseif ($templateUserId && CPMODE == 'tryout') {
					$aTemplatePathUrl = RvsLibs_Template::getImportedTemplatePathUrlUser($templateUserId);
				} else {
					$aTemplatePathUrl['path'] = TEMPLATE_PATH;
					$aTemplatePathUrl['url'] = TEMPLATE_URL;
				}
				*/
				$aTemplatePathUrl = array();
				if ($templateUserId) {
					 $oCp = CpHandle::factory();
					 if(SGL::isError($oCp) === true) {
					 	return SGL::raiseError(RvsLibs_String::translate('CpWaring %MESSAGE', 'vprintf', array('MESSAGE' => $oCp->getMessage())));
					 }
						if ($oCp->skipValidTemplate() === true) {
							$aTemplatePathUrl = RvsLibs_Template::getImportedTemplatePathUrlUser($templateUserId);
						} else {
							if (RvsLibs_Template::isValidTemplate($templateUserId, $templateItemFolder) ) {
								if ( $action == 'edit' ) {
									$aTemplatePathUrl = RvsLibs_Template::getImportedTemplatePathUrlAdmin();
								} else {
									$aTemplatePathUrl = RvsLibs_Template::getImportedTemplatePathUrlUser($templateUserId);
								}
							}
						}
				} else {
					$aTemplatePathUrl['path'] = TEMPLATE_PATH;
					$aTemplatePathUrl['url'] = TEMPLATE_URL;
				}

				$GLOBALS['_SGL']['rvsCache']['Main']['getTemplatePathUrl']['templateUserId'] = $templateUserId;
				$GLOBALS['_SGL']['rvsCache']['Main']['getTemplatePathUrl']['templateItemFolder'] = $templateItemFolder;
				$GLOBALS['_SGL']['rvsCache']['Main']['getTemplatePathUrl']['action'] = $action;
				$GLOBALS['_SGL']['rvsCache']['Main']['getTemplatePathUrl']['aTemplatePathUrl'] = $aTemplatePathUrl;
			}
			return $aTemplatePathUrl;
		}

		/**
		 * return
		 *
		 * @return path template user
		 */
		public static function getImportedTemplatePathUrlAdmin()
		{
			$userName = RvsLibs_User::getUsername(true);
			SGL::logMessage('rvdebug: ==========' . $userName, PEAR_LOG_DEBUG);
			$userPath = RvsLibs_File::buildPath(array(SGL_USERDATA_PATH, $userName));
			if ( !file_exists($userPath) && (RvsLibs_User::getUserImportTemplate() != "internal") ) {
				$resSecure = RvsLibs_System::secureCommand('makeuserdatapath');
				if (SGL::isError($resSecure)) {
					SGL::logMessage('rvdebug: ========== Error', PEAR_LOG_DEBUG);
					return $resSecure;
				}
			}

			//detect mode to set path template
			if (RvsLibs_User::getUserImportTemplate() == "internal" ) {
				SGL::logMessage('rvdebug: mode: internal ===== ', PEAR_LOG_DEBUG);
				// for internal designer import template in server 192.168.1.1
				$templateUploadPath = SGL_PATH;
				$templateUploadUrl = RVSITEBUILDER_URL;

			} elseif ( RvsLibs_User::getUserStatus() == RVS_ROOT_USER_NAME ) {
				//admin mode
				SGL::logMessage('rvdebug: mode: admin  ===== ', PEAR_LOG_DEBUG);

				$rootPathUpload = RvsLibs_File::buildPath(array(ROOT_HOME_USERDATA_PATH, 'upload'));
				$rootNameRvsitePath = RvsLibs_File::buildPath(array(ROOT_USERDATA_PATH, 'upload'));
				$rootNameRvsiteUrl = ROOT_HOME_USERDATA_URL . '/upload';
				$rootUploadTemplatePath = RvsLibs_File::buildPath(array($rootPathUpload, 'template'));

				if ( !file_exists($rootUploadTemplatePath) ) {
					RvsLibs_System::mkDir(array('-p', $rootUploadTemplatePath));
				}

				$oCp = CpHandle::factory();
				if(SGL::isError($oCp) === true) {
					return SGL::raiseError(RvsLibs_String::translate('CpWaring %MESSAGE', 'vprintf', array('MESSAGE' => $oCp->getMessage())));
				}
				$oCp->makeUploadFolder($rootPathUpload, $rootNameRvsitePath, ROOT_HOME_USERDATA_PATH . '/upload');

				$templateUploadPath = $rootPathUpload;
				$templateUploadUrl = $rootNameRvsiteUrl;
			} else {
				//user mode
				SGL::logMessage('rvdebug: mode: user  ===== ', PEAR_LOG_DEBUG);
				$userPathUpload = RvsLibs_File::buildPath(array(USER_HOME_USERDATA_PATH, 'upload'));
				$userNameRvsitePath = RvsLibs_File::buildPath(array(SGL_USERDATA_PATH, $userName, 'upload'));
				$userNameRvsiteUrl = SGL_USERDATA_URL . '/' . $userName . '/upload';
				$userUploadTemplatePath = RvsLibs_File::buildPath(array($userPathUpload, 'template'));

				if ( !file_exists($userUploadTemplatePath) ) {
					RvsLibs_System::mkDir(array('-p', $userUploadTemplatePath));
				}

				$oCp = CpHandle::factory();
				if(SGL::isError($oCp) === true) {
					return SGL::raiseError(RvsLibs_String::translate('CpWaring %MESSAGE', 'vprintf', array('MESSAGE' => $oCp->getMessage())));
				}
				$oCp->makeUploadFolder($userPathUpload, $userNameRvsitePath, SGL_USERDATA_PATH . '/upload');

				$templateUploadPath =  $userPathUpload;
				$templateUploadUrl = $userNameRvsiteUrl;
			}

			$aTemplatePathUrl['path'] = RvsLibs_File::buildPath(array($templateUploadPath, 'template'));
			$aTemplatePathUrl['tmp'] = RvsLibs_File::buildPath(array($templateUploadPath, 'rvstemplate'));
			$aTemplatePathUrl['url'] = $templateUploadUrl . "/template";

			SGL::logMessage('rvdebug: template path=' . $aTemplatePathUrl['path'], PEAR_LOG_DEBUG);
			SGL::logMessage('rvdebug: template url=' . $aTemplatePathUrl['url'], PEAR_LOG_DEBUG);

			return $aTemplatePathUrl;
		}

		public static function getImportedTemplatePathUrlUser($templateUserId)
		{
			$userName = RvsLibs_User::getUsername(true);
			$userPath = RvsLibs_File::buildPath(
				array(SGL_USERDATA_PATH, $userName)
			);
			if ( !file_exists($userPath)) {
				///TODO : ใช้ secure user
				RvsLibs_System::mkDir(array('-m', 0777, $userPath));
			}

			if (RvsLibs_User::getUserImportTemplate() == "internal" ) {
				// for internal designer import template in server 192.168.1.1
				// return path /home/rvsitebuilder
				$templateUploadPath = SGL_PATH;
				$templateUploadUrl = RVSITEBUILDER_URL;
			} elseif ( $templateUserId == RvsLibs_User::getRootId() ) {
				$rootPathUpload = RvsLibs_File::buildPath(
					array(ROOT_HOME_USERDATA_PATH, 'upload')
				);
				$rootNameRvsitePath = RvsLibs_File::buildPath(
					array(ROOT_USERDATA_PATH , 'upload')
				);
				$rootNameRvsiteUrl = ROOT_HOME_USERDATA_URL . '/upload';
				$rootUploadTemplatePath = RvsLibs_File::buildPath(
					array($rootPathUpload, 'template')
				);
				if ( !file_exists($rootUploadTemplatePath) ) {
					RvsLibs_System::mkDir(array('-p', $rootUploadTemplatePath));
				}

				$oCp = CpHandle::factory();
				if(SGL::isError($oCp) === true) {
					return SGL::raiseError(RvsLibs_String::translate('CpWaring %MESSAGE', 'vprintf', array('MESSAGE' => $oCp->getMessage())));
				}
				$oCp->makeUploadFolder($rootPathUpload, $rootNameRvsitePath, ROOT_USERDATA_PATH . '/upload');

				$templateUploadPath = $rootPathUpload;
				$templateUploadUrl = $rootNameRvsiteUrl;
			} elseif ( $templateUserId != RvsLibs_User::getUserId()) {
				$userPathUpload = RvsLibs_File::buildPath(
					array(OWNER_HOME_USERDATA_PATH, 'upload')
				);
				 /*modify CpHandle by nipaporn*/
			     $oCp = CpHandle::factory();
				 if(SGL::isError($oCp) === true) {
				 	return SGL::raiseError(RvsLibs_String::translate('CpWaring %MESSAGE', 'vprintf', array('MESSAGE' => $oCp->getMessage())));
				 }
				 //fixed PHPMD scan 07/07/2554
				$oCp->replateAtOnUserName(RVS_OWNER_USER_NAME);
				$userNameRvsitePath = RvsLibs_File::buildPath(
					array(OWNER_USERDATA_PATH, 'upload')
				);
				$userNameRvsiteUrl = RvsLibs_File::buildPath(
					array(OWNER_HOME_USERDATA_URL, 'upload')
				);

				$userUploadTemplatePath = RvsLibs_File::buildPath(
					array($userPathUpload, 'template')
				);
				if ( !file_exists($userUploadTemplatePath) ) {
					RvsLibs_System::mkDir(array('-p', $userUploadTemplatePath));
				}

				$oCp = CpHandle::factory();
				if(SGL::isError($oCp) === true) {
					return SGL::raiseError(RvsLibs_String::translate('CpWaring %MESSAGE', 'vprintf', array('MESSAGE' => $oCp->getMessage())));
				}
				$oCp->makeUploadFolder($userPathUpload, $userNameRvsitePath, OWNER_USERDATA_PATH . '/upload');

				$templateUploadPath =  $userPathUpload;
				$templateUploadUrl = $userNameRvsiteUrl;
			} else {
				$userPathUpload = RvsLibs_File::buildPath(
                	array(USER_HOME_USERDATA_PATH, 'upload')
                );
				$userNameRvsitePath = RvsLibs_File::buildPath(
					array(SGL_USERDATA_PATH, $userName, 'upload')
				);
				$userNameRvsiteUrl = SGL_USERDATA_URL . '/' . $userName . '/upload';

				$userUploadTemplatePath = RvsLibs_File::buildPath(
					array($userPathUpload, 'template')
				);
				if ( !file_exists($userUploadTemplatePath) ) {
					System::mkDir(array('-p', $userUploadTemplatePath));
				}

				$oCp = CpHandle::factory();
				if(SGL::isError($oCp) === true) {
					return SGL::raiseError(RvsLibs_String::translate('CpWaring %MESSAGE', 'vprintf', array('MESSAGE' => $oCp->getMessage())));
				}

				if (defined('RVS_OWNER_HOME')) {
					$oCp->makeUploadFolder($userPathUpload, $userNameRvsitePath, $userPathUpload);
				}

				$templateUploadPath =  $userPathUpload;
				$templateUploadUrl = $userNameRvsiteUrl;
			}
			$aTemplatePathUrl['path'] = RvsLibs_File::buildPath(
				array($templateUploadPath, 'template')
			);
			$aTemplatePathUrl['url'] = $templateUploadUrl . "/template";
			SGL::logMessage('template url=' . $aTemplatePathUrl['url'], PEAR_LOG_DEBUG);
			return $aTemplatePathUrl;
		}

		public static function getTemplateData($templateId, $templateItemId, $menustyleId)
		{
			SGL::logMessage('template_id=' . $templateId  . ',template_item_id=' .  $templateItemId . ',menustyle_id=' .  $menustyleId, PEAR_LOG_DEBUG);
			$aTemplateData = DaoFactory::Template()->findTemplateItemByTemplateData($templateId, $templateItemId, $menustyleId, 'getrowobj');
			$aImportTemplateData = DaoFactory::TemplateImport()->findTemplateUsrIdByTemplateId($templateId, 'getassoc');

			$aTemplatePahtUrl = RvsLibs_Template::getTemplatePathUrl(key($aImportTemplateData), $aTemplateData->template_item_folder, 'view');
			$aTemplateData->templatePath = (isset($aTemplatePahtUrl['path'])) ? $aTemplatePahtUrl['path'] : TEMPLATE_PATH;
			$aTemplateData->templateUrl =  (isset($aTemplatePahtUrl['url'])) ? $aTemplatePahtUrl['url'] : TEMPLATE_URL;
			if (isset($aTemplateData)) {
				return $aTemplateData;
			}
		}

		//fixed PHPMD scan 07/07/2554
		public static function getTemplateColorConfig($rvsUsrId, $projectId)
		{
			$fileConfigName = 'colorConfig.ini.php';
			$templateData = RvsLibs_Project::getProjectInfoData($projectId);
			if (RvsLibs_Template::isValidTemplate($rvsUsrId, $templateData[0]->template_item_folder)) {
				$aTemplatePathUrl = RvsLibs_Template::getTemplatePathUrl($rvsUsrId, $templateData[0]->template_item_folder, 'view');
			} else {
				$aTemplatePathUrl = RvsLibs_Template::getTemplatePathUrl(null, $templateData[0]->template_item_folder, 'view');
			}

			$colorConfigPath =  RvsLibs_File::buildPath(array($aTemplatePathUrl['path'], $templateData[0]->template_item_folder, $fileConfigName));
			$folderColorGroup = RvsLibs_Template::getFolderColorGroup($templateData[0]->color_id);
			$defaultColorConfigPath = SGL_PATH . '/scripts/seagull_mod/public_html/themes/rvtheme/defaultColorConf/' . $folderColorGroup . '/' . $fileConfigName;

			// load
			$aColorConfigEX = (is_file($colorConfigPath))
			     ? RvsLibs_Config::parse_ini_file($colorConfigPath, true)
			     : RvsLibs_Config::parse_ini_file($defaultColorConfigPath, true);

			if (SGL::isError($aColorConfigEX) === true) {
			    SGL::logMessage('Cannot get color config=' . $aColorConfigEX->getMessage(), PEAR_LOG_DEBUG);
			    SGL_Error::pop();
			    return array();
			}

			$aBlock = array('c'=>'','l'=>'','r'=>'');

			foreach($aBlock as $k => $v) {
				foreach($aColorConfigEX as $k2 => $v2){
					if(RvsLibs_String::dbeSubStrCount($k2,$k) > 0) {
						$aBlock[$k] = $aColorConfigEX[$k2];
					}
				}
			}
			foreach($aBlock as $k => $v) {
				if($k != 'c' && is_array($aBlock['c']) === true && is_array($aBlock[$k]) === true) {
					$aBlock[$k] = array_merge($aBlock['c'],$aBlock[$k]);
				}
			}
			return $aBlock;
		}

		public static function getFolderColorGroup($colorId)
		{
			$aColorGroupId = RvsLibs_Project::getColorGroupID($colorId);
			$colorGroupId = (isset($aColorGroupId[0]->color_group_id)) ? $aColorGroupId[0]->color_group_id : false;

			$pathGroupColor = SGL_PATH . '/scripts/seagull_mod/public_html/themes/rvtheme/defaultColorConf/group.ini';
			if (is_file($pathGroupColor) && is_readable($pathGroupColor)) {
				$aColorGroup = RvsLibs_Config::parse_ini_file($pathGroupColor, true);
				foreach ($aColorGroup as $k => $v) {
					$aColorGroup[$k] = RvsLibs_String::dbeExplode(',', $v);
				}
				foreach ($aColorGroup as $group => $aV) {
					foreach ($aV as $k => $v) {
						if ($colorGroupId == $v) {
							$folderColorGroup = $group;
						}
					}
				}
			}
			return (isset($folderColorGroup)) ? $folderColorGroup : false;
		}

	 public static function isDiyTemplate($templatePath, $template)
	 {
	 	///for old Diy template
	 	$templateDiyConf = RvsLibs_File::buildPath(array($templatePath, $template, 'diyconf.ini.php'));
	 	if ($template && preg_match('/\_DiyPicture\_/', $template) && is_file($templateDiyConf)) {
	 		return true;
	 	} elseif ($template && preg_match('/\_DiyPicture\_/', $template)) {
	 		return true;
	 	}
	 	return false;
	 }

		/** setFormTemplateId()
		 *     Add Form Template Id on rvs_project_pate Table
		 *
		 */
		public static function setFormTemplateId($onlineFormId, $projectPageId, $projectId, $rvsUsrId)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			if ($onlineFormId && $projectPageId) {
				$result = DaoFactory::ProjectPage()->updateSetFormTemplateIdByusrIdAndProjectIdAndProjectId($rvsUsrId, $projectPageId, $projectId, $onlineFormId);
				return true;
			} else {
				return false;
			}
		}

		public static function getNewLayoutTemplateId($projectpageId, $defaultLayoutTemplateId)
		{
			$resLayout =  DaoFactory::OutSuggestion()->findNewLayoutByTemplateId($projectpageId, 'getarray');
			$aKey = array_rand($resLayout);
			return (isset($resLayout[$aKey]['layout_template_id'])) ? $resLayout[$aKey]['layout_template_id'] : $defaultLayoutTemplateId;
		}

		/**
		 * select custom category by owner
		 *
		 * @return Ambigous <multitype:, unknown>
		 */
		public static function getCustomCategoryList()
		{
			$ownerId = RvsLibs_User::getOwnerId();
			$aCategory = DaoFactory::Category()->findCustomCategoryOrderByCategoryId('getall');
			foreach ($aCategory as $key) {
				if ($key->custom_category_user == $ownerId) {
					$category[$key->custom_category_id] = $key->custom_category_name;
				} elseif ($key->custom_category_user == $ownerId) {
					$category[$key->custom_category_id] = $key->custom_category_name;
				}
			}
			//optimize : siwakorn
			return (isset($category)) ? $category : array();
		}
		/**
		 * GetLayoutData()
		 2488  * query ค่า data ของ layout template จาก db
		 * ฟังก์ชัน GetLayoutData() และ GetLayoutReplaceWidth() จะมีอยู่ทั้ง Main และ Common
		 * ฟังก์ชัน GetLayoutData() ใน Main และ Common จะมีของตัวแปรพารามิเตอร์ต่างกัน และคำสั่งต่างกันเล็กน้อย
		 */
		//template
		public static function GetLayoutData($layoutTemplateId, $templateItemFolder = "", $templatePath = TEMPLATE_PATH)
		{
			// Optimization
			if (isset($GLOBALS['_SGL']['rvsCache']['Common']['GetLayoutData']) === true &&
			$GLOBALS['_SGL']['rvsCache']['Common']['GetLayoutData']['layoutTemplateId'] == $layoutTemplateId &&
			$GLOBALS['_SGL']['rvsCache']['Common']['GetLayoutData']['templateItemFolder'] == $templateItemFolder &&
			$GLOBALS['_SGL']['rvsCache']['Common']['GetLayoutData']['templatePath'] == $templatePath
			) {
				SGL::logMessage('Optmization layoutTemplateId: ' . $layoutTemplateId , PEAR_LOG_DEBUG);
				$layoutHTML = $GLOBALS['_SGL']['rvsCache']['Common']['GetLayoutData']['layoutHTML'];

			} else {
				SGL::logMessage('First Call - layoutTemplateId: ' . $layoutTemplateId , PEAR_LOG_DEBUG);

				if (!$layoutTemplateId) {
					$layoutTemplateId = '1';
				}
				// Get Layout Template Head
				$resHead = DaoFactory::LayoutTemplate()
					->findLayoutTemplatePreviewAndDataByLayoutTemplateId($layoutTemplateId, 'getrow');

				$data = $resHead['layout_template_head'];
				$layoutHTML['head'] = $data;
				// Get Layout Template Body
				$resLayout =  DaoFactory::LayoutTemplate()
					->findLayoutTemplatePreviewAndDataByLayoutTemplateId($layoutTemplateId, 'getrow');
				// Get Path Layout  index.htm
				if ($templateItemFolder) {
					$fileTemplateIndex = $templatePath . '/' . $templateItemFolder . '/index.htm';
					// Get Width Option
					$fileLayoutWidth = RVS_USER_HOME . '/.rvsitebuilder/rvsbTemplateLayoutWidth.txt';
					if (file_exists($fileLayoutWidth)) {
						$widthOption = 'CustomSize';
					} else {
						$widthOption = 'AutoSize';
					}
					// Get Replace Width
					if ($widthOption == 'CustomSize') {
						$replaceWidth = RvsLibs_Template::GetLayoutReplaceWidth($fileTemplateIndex);
					} else {
						$replaceWidth = '100%';
					}
				} else {
					$replaceWidth = "80%";
				}
				// Replace layout template id folder
				require_once SGL_MOD_DIR . '/sitebuilder/classes/LayoutInsertDataMgr.php';
				$resLayout['layout_template_data'] = LayoutInsertDataMgr::replaceHeadData($resLayout['layout_template_data'], $layoutTemplateId);
				$resLayout['layout_template_data'] = LayoutInsertDataMgr::replaceLayoutData($resLayout['layout_template_data'], $layoutTemplateId);

				// Replace Layout Data
				$data = $resLayout['layout_template_data'];
				$data = RvsLibs_String::str_replace("\"images/", "\"" . PUBLIC_IMG_URL . "/", $data);
				$data = RvsLibs_String::str_replace('[IMG_PATH]', PUBLIC_IMG_URL, $data);
				$data = RvsLibs_String::str_replace('{rvs_width}', $replaceWidth , $data);
				$layoutHTML['body'] = $data;

				$GLOBALS['_SGL']['rvsCache']['Common']['GetLayoutData']['layoutTemplateId'] = $layoutTemplateId;
				$GLOBALS['_SGL']['rvsCache']['Common']['GetLayoutData']['templateItemFolder'] = $templateItemFolder;
				$GLOBALS['_SGL']['rvsCache']['Common']['GetLayoutData']['templatePath'] = $templatePath;
				$GLOBALS['_SGL']['rvsCache']['Common']['GetLayoutData']['layoutHTML'] = $layoutHTML;
			}
			return  $layoutHTML;
		}

		public static function GetLayoutReplaceWidth($fileTemplateIndex)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			//Read Template File index.html
			$templateHandle = fopen($fileTemplateIndex, "r");
			$templateHTML = fread($templateHandle , filesize($fileTemplateIndex));
			//Find id="rv_adjust_width_xxx"
			$regExpAdjustWidth = '/id\s*=\s*["|\']rv_adjust_width_[0-9]{1,}["|\']/i';
			preg_match($regExpAdjustWidth, $templateHTML, $resultMatchAdjustWidth);
			// Define $replaceWidth
			if (count($resultMatchAdjustWidth) != 0) {
				$regExpReplaceWidth = '/[0-9]{1,}/';
				preg_match($regExpReplaceWidth, $resultMatchAdjustWidth[0], $aAdjustWidth);
				$adjustWidth = $aAdjustWidth[0];
			} else {
				$adjustWidth = 0;
			}
			$replaceWidth = 760 - $adjustWidth;
			return $replaceWidth;
		}

		public static function getCodeCreatedByData($action, $publishUrl, $isResponsive = true, $isUikit = true)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			if ($isResponsive == true || $isUikit == true) {
				return "\n" . '<div>Created By RVsitebuilder</div>' . "\n";
			}
			$protocol  = (SSL_MODE == 1) ? 'https' : 'http';
			$imagesUrl = ($action == 0) ? PUBLIC_IMG_URL : $publishUrl . "/images";
			return <<<EOF
			<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="$protocol://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="119" height="35">
					<param name="movie" value="$imagesUrl/rvbanner.swf" />
					<param name="quality" value="high" />
					<embed src="$imagesUrl/rvbanner.swf" quality="high" pluginspage="$protocol://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="119" height="35"></embed>
			</object>
EOF;
		}

		/**
		 * add Random TemplateRecommmend
		 * @author nipaporn
		 * @param $category
		 * @return unknown_type
		 */
		public static function getRandomTemplateRecommmend($category, $project_res=null)
		{
			if (!empty($project_res) && $project_res == '1') {
				//responsive template
				return RvsLibs_Template_Get::_randTemplateItemIdFromRecommend($category);
			} else {
				///ถ้า category ที่ไม่มี responsive template
				$pathFile = SGL_WEB_ROOT . '/js/rvsitebuilder/RecommentOfTemplate.js';
				//Business
				$categoryDef = 17;
			}

			if (is_file($pathFile) === true) {
				$fileOpen = fopen($pathFile, "r");
				$contents = fread($fileOpen, filesize($pathFile));
				fclose($fileOpen);
			} else {
				//TODOใส่ pear error ด้วย
				return false;
			}
			$replaceRecomment = str_replace('var aRecommentOfTemplate =', '', $contents);
			$replaceRecomment = str_replace(';', '', $replaceRecomment);
			$decodeFile = SGL_AjaxProvider::jsonDecode($replaceRecomment);

			if (isset($decodeFile[$category]) && count($decodeFile[$category]) > 0) {
				$oRandomObj = $decodeFile[$category];
			} else {
				$oRandomObj = $decodeFile[$categoryDef];
			}

			if ($oRandomObj === false) {
				return false;
			} else {
				$templateRate  = array_rand(get_object_vars($oRandomObj), 1);
				$aCategory = $oRandomObj->$templateRate;
				$randomTemID  = array_rand(get_object_vars($aCategory), 1);
				$rvsTemplateItem = DaoFactory::Template()->findAllDataTemplateItemByTemplateId($randomTemID, 'getrow');
				return $rvsTemplateItem['template_item_id'];
			}
		}

		protected static function _randTemplateItemIdFromRecommend($category=7)
		{
			/*
			//TODO:
			- load recommend template
			- find all data template item by product id
			*/
			$pathFile = SGL_WEB_ROOT . '/' . RvsLibs_Project::getJsCssPathV5('js/rvsitebuilder/allTemplate.js');
	        $content = file_get_contents($pathFile);
	        $rvsTemplateItem = array();
	        SGL::logMessage(' rvdebug : category ' . $category , PEAR_LOG_DEBUG);

	        if (preg_match('/var\s*showDataTemplate\s*=\s*(\{[\d\D\b\B\w\W]*\});\s*$/ims', $content, $match)) {
				$aTemp = array_keys ( json_decode ( $match [1], true ) );
	        	$rvsTemplateItem = DaoFactory::Template()->randTemplateItemDataByCategoryId($aTemp, $category, 'getRow');
	        	SGL::logMessage(' 00 rvdebug : id ' . $rvsTemplateItem['template_item_id'] , PEAR_LOG_DEBUG);
		        if (!count($rvsTemplateItem)) {
		        	$rvsTemplateItem = DaoFactory::Template()->randTemplateItemDataByCategoryId($aTemp, 7, 'getRow');
		        	SGL::logMessage(' 11 rvdebug : id ' . $rvsTemplateItem['template_item_id'] , PEAR_LOG_DEBUG);
		        }
	        }
			return $rvsTemplateItem['template_item_id'];

		}

		/*start get old template specific: Witoon*/

		/* find real navigator type
		 * @param string $templateSpecificCss  code css
		 * @return int navigator type(1=Vertical or 2=Horizontal)
		 */
		protected static function _getOldImportTemplateNavType($templateSpecificCss)
		{
			if (preg_match('/#navigator\s*ul\s*li\s*\{[^\}]*display\s*:\s*inline\s*;(.*?)\}/ims', $templateSpecificCss))
				return 2;
			return 1;
		}
		protected static function _getOldBgNavDIY($templateSpecificCss)
		{
			if (preg_match('/\.bgnavigator\s*\{[^\}]*\}/ims', $templateSpecificCss, $match))
				return $match[0];
			return '';
		}
		protected static function _getOldBgNavImgDIY($templateSpecificCss)
		{
			if (preg_match('/\.bgnavigatorimg\s*\{[^\}]*\}/ims', $templateSpecificCss, $match))
				return $match[0];
			return '';
		}

		protected static function _getOldClassNavigator($templateSpecificCss)
		{
			if (preg_match('/#navigator\s*\{([^\}]*)\}/ims', $templateSpecificCss, $match))
				return $match[1];
			return '';
		}

		protected static function _getOldClassNavigatorLi($templateSpecificCss)
		{
			if (preg_match('/#navigator\s*ul\s*li\s*\{([^\}]*)\}/ims', $templateSpecificCss, $match))
				return $match[1];
			return '';
		}

		protected static function _getOldNavBorder($templateSpecificCss)
		{
			if (preg_match('/.subframe\s*{[^\}]*(border\s*:[^;]*;)/ims', $templateSpecificCss, $match))
				return $match[1];
			return '';
		}

		protected static function _getOldNavBackground($templateSpecificCss)
		{
			if (preg_match('/.subframe\s*{[^\}]*(background-color\s*:[^;]*;)/ims', $templateSpecificCss, $match))
				return $match[1];
			return '';
		}

		protected static function _getOldNavBorderBottom($templateSpecificCss)
		{
			if (preg_match('/.item\s*{[^\}]*(border-bottom\s*:[^;]*;)/ims', $templateSpecificCss, $match))
				return $match[1];
			return '';
		}
		protected static function _getOldLinkColor($templateSpecificCss)
		{
			if (preg_match('/.item\s*a\s*{[^\}]*color\s*:\s*(#[a-fA-F0-9]*);/ims', $templateSpecificCss, $match))
				return $match[1];
			return '';
		}
		protected static function _getOldHoverColor($templateSpecificCss)
		{
			if (preg_match('/.item\s*a\s*:\s*hover\s*{[^\}]*[^\-]color\s*:\s*(#[a-fA-F0-9]*);/ims', $templateSpecificCss, $match))
				return $match[1];
			return '';
		}
		protected static function _getOldHoverBackgroundColor($templateSpecificCss)
		{
			if (preg_match('/.item\s*a\s*:\s*hover\s*{[^\}]*background-color\s*:\s*(#[a-fA-F0-9]*);/ims', $templateSpecificCss, $match))
				return $match[1];
			return '';
		}

		protected static function _CopyOldCss($templateSpecificCss)
		{
			if (preg_match('/(#navigator\s*a\s*\{(.*?))\/\*\s*css\s*for\s*PHP/ims', $templateSpecificCss, $match))
				return $match[1];
			return '';
		}

		public static function getBaseCss2Level()
		{
			$code = <<<EOF
	/*  css for submenu */
ul.rvnavigator ul {
	/**TOP**/
	/**LEFT**/
	display: none; /*visibility: hidden;*/
	position: absolute;
	padding:0px; /* Change */
	z-index:25;
	width: auto;
	margin: 0;
	list-style: none;

	/**BORDER**/
	/**BACKGROUND_COLOR**/
	text-indent: 0px; /* Change */
	cursor:pointer;
}
ul.rvnavigator ul ul{
	width: 150px; /* Sub Menu Width */
	word-wrap: break-word;
	top: 0;
	left: 100%;
	/**BACKGROUND_COLOR**/
}
ul.rvnavigator ul li {
	word-wrap: break-word;
	text-align: left;
	/**BORDER_BOTTOM**/
	margin: 0px;
	padding: 0px;
	width:150px;
	background:none;
}

/* 1st Submenu */
ul.rvnavigator li:hover li a, ul.rvnavigator li:hover li a span {
	white-space:normal;
	text-decoration: none;
	position: relative;
	display:block;
	padding:3px;
	margin:0;
	width:144px;
	background:none;
    color:/**LINK_COLOR**/;
	text-align: left;
	border:0;
}
/* 1st Submenu Hover  */
ul.rvnavigator li:hover li a:hover {
	color:/**HOVER_COLOR**/;
	text-decoration:none;
	background-color:/**HOVER_BG_COLOR**/;
	position: relative;
	display:block;
	padding:3px;
}
ul.rvnavigator li:hover li a:hover span {
	color:/**HOVER_COLOR**/;
}
/* 2nd Submenu */
ul.rvnavigator li:hover li:hover li a {
	white-space:normal;
	text-decoration: none;
	position: relative;
	display:block;
	padding:3px;
	width:144px;
	background:none;
    color:/**LINK_COLOR**/;
}
/* 2nd Submenu Hover  */
ul.rvnavigator li:hover li:hover li a:hover{
	color:/**HOVER_COLOR**/;
	text-decoration:none;
	background-color:/**HOVER_BG_COLOR**/;
	position: relative;
	display:block;
	padding:3px;
}
ul.rvnavigator li:hover li:hover li a:hover span {
	color:/**HOVER_COLOR**/;
}
/* Hover Function - Do Not Move */
ul.rvnavigator li:hover ul ul,ul.rvnavigator li:hover ul ul ul {
	 display: none;
 }
ul.rvnavigator li:hover ul,ul.rvnavigator ul li:hover ul,ul.rvnavigator ul ul li:hover ul {
	display: block;
}
.rvarrowsubmenu{
	float:right;
	padding-left:5px;
}
ul.rvnavigator li:hover li a.arrowOne {
	background-image:url(images/arrow.gif);
	background-position:right bottom;
	background-repeat:no-repeat;
}
ul.rvnavigator li:hover li a.arrowsubOne {
	background-image:url(images/linkarrow.gif);
	background-position:right center;
	background-repeat:no-repeat;
}
.item .fwdarr {
	right: 7px;
	top: 5px;
	position: absolute;
}
EOF;
		return $code;
		}
		/*end get old template specific: Witoon*/

		public static function getUikitNavigation($navCode, $navConfig=null)
		{
			$align = !empty($navConfig)
				? $navConfig
				: 'left';
			switch ($align) {
				case 'center':
					$setCenter = 'id="rvnav-center"';
					$setLeftOrRight = '';
					break;
				case 'right':
					$setCenter = '';
					$setLeftOrRight = 'uk-align-right';
					break;
				case 'left':
				default:
					$setCenter = '';
					$setLeftOrRight = 'uk-align-left';
			}
			//$navConfig['']
			//$navConfig =
			$navCode = <<<EOF
<div class="uk-container uk-container-center">
<div id="rvnavigator" style="z-index:1001;">
<nav class="uk-navbar" data-uk-sticky="{top:-100, animation: uk-animation-slide-top}">
                <div {$setCenter}>
                <ul class="uk-navbar-nav uk-hidden-small {$setLeftOrRight}">
                {$navCode}
				</ul>
                </div>
                <a href="#offcanvas" class="uk-navbar-toggle uk-visible-small" data-uk-offcanvas></a>
                <div class="uk-navbar-brand uk-navbar-center uk-visible-small">Your Company</div>
</nav>
</div><div class="clear"></div>
</div>
EOF;
			return $navCode;
		}

    }
}

if (class_exists('RvsLibs_Template_Validate') === false) {
	class RvsLibs_Template_Validate extends RvsLibs_Template_Get
	{
		/**
		 * Check this template item folder is distribute by RVSiteBuilder
		 * @author Parinya Chaipetch <parinya@rvglobalsoft.com>
		 *
		 * @param string $templateItemFolder
		 * @return bool ; True if this template item folder is RVSiteBuilder distribute, false if not distribute by RVSiteBuilder
		 */
		public static function isDistributeTemplate($templateItemFolder, $rvsitebuilderPath = SGL_PATH)
		{
			SGL::logMessage(' === ondemand templateItemFolder: ' . $templateItemFolder, PEAR_LOG_DEBUG);
			if (is_null($templateItemFolder) || RvsLibs_String::trim($templateItemFolder) === '') {
				return false;
			} else {
				$templatePath = RvsLibs_File::buildPath(
				array(
				$rvsitebuilderPath
				, 'template'
				, $templateItemFolder
				)
				);
			}
			SGL::logMessage(' === ondemand path: ' . $templatePath, PEAR_LOG_DEBUG);
			return (is_dir($templatePath)) ? true : false;
		}

		/**
		 * Check template is import template
		 * @author Witoon Jansri <witoon.j@rvglobalsoft.com>
		 *
		 * @param String $templateId
		 * @return TRUE is import template or FALSE is not import template
		 */
		public static function isImportTemplate($templateId)
		{
			$aImportTemplateData = DaoFactory::TemplateImport()->findTemplateUsrIdByTemplateId($templateId, 'getarray');
			return count($aImportTemplateData) > 0 ? true : false;
		}

		public static function isTemplateUniqueIdFolderMapExists($templateUserId, $templateItemFolder)
		{
			return RvsLibs_Template::isValidTemplate($templateUserId, $templateItemFolder);
		}

		public static function isValidTemplate($templateUserId, $templateItemFolder)
		{
			if (!defined('RVS_ROOT_HOME') || !defined('RVS_USER_HOME')) {
				return false;
			}

			$templatePath = RvsLibs_File::buildPath(
			array(
			TEMPLATE_PATH,
			$templateItemFolder,
                'templateUniqueIdFolderMap.txt',
			)
			);

			if ( (RvsLibs_User::getUserImportTemplate() == "internal") && file_exists($templatePath)) {
				return true;
			} else {
				if ($templateUserId == RvsLibs_User::getRootId()) {
					//$homePath = RVS_ROOT_HOME;
					$homePath = ROOT_HOME_USERDATA_PATH;
				} elseif ($templateUserId == RvsLibs_User::getOwnerId()) {
					//$homePath = RVS_OWNER_HOME;
					$homePath = OWNER_HOME_USERDATA_PATH;
				} else {
					//$homePath = RVS_USER_HOME;
					$homePath = USER_HOME_USERDATA_PATH;
				}
				$filePath = RvsLibs_File::buildPath(
				array(
				    $homePath
                    ,'upload'
                    ,'template'
				    ,$templateItemFolder
                    ,'templateUniqueIdFolderMap.txt'
				)
				);
				if (file_exists($filePath)) {
					return true;
				}
			}
			return false;
		}

		public static function isLocalDesignerImport()
		{
			return (RvsLibs_String::trim($_SERVER['HTTP_HOST']) == "192.168.1.1"
			        ||  RvsLibs_String::trim($_SERVER['HTTP_HOST']) == "rvdesigner.rvglobalsoft.net")
			         ? true
			         : false;
		}

		/**
		 * validate is my import template to /home/{user}/.rvsitebuilder/upload/template/{templateFolder}
		 *
		 * @param <string> $templateFolder
		 * @param <string> $username
		 * @return bool
		 *
		 * @author apiruk boonruksa
		 */
		public static function isMyTemplateImport($templateFolder, $username = null)
		{
			$username = (is_null($username))
			             ? RvsLibs_User::getUsername()
                         : $username;

			$myTemplatePath = RvsLibs_File::buildPath(array(SGL_USERDATA_PATH, $username,'upload', 'template', $templateFolder));
			// optimize : nipaporn
			return ($templateFolder && is_dir($myTemplatePath)) ? true : false;
		}

		/**
		 * validate to reupload in STEP 2 for user
		 *
		 * @param <string> $username
		 * @param <string> $templateFolder
		 * @param <string> $license
		 * @return bool
		 *
		 * @author apiruk boonruksa
		 */
		public static function isAllowToReuploadTemplate($templateFolder, $license = null)
		{
			$license = (is_null($license))
			            ? RvsLibs_License::getSitebuilderLicense()
			            : $license;
			$isMyTemplateImport = RvsLibs_Template::isMyTemplateImport($templateFolder);
			if (($license == 'pro')
			    && RvsLibs_Config::getOwnerConf('AllowUserImportTemplate')
			    && $isMyTemplateImport === true) {
				return true;
			}
			return false;
		}

		public static function isProductIdExist($productId)
		{
			$res = DaoFactory::Template()->findProductsId($productId, 'getone');

			if (SGL::isError($res) === true) {
				SGL::logMessage('== FindProductId isPearError and Recursive to find productId ==', PEAR_LOG_DEBUG);
				SGL_Error::pop();
			}

			return is_null($res) === true ? false : true;
		}

		public static function isDIYTemplateForPro()
		{
			//$res = RvsLibs_License::isLicensePro();
			if (RvsLibs_License::isLicensePro() === false) {
				return false;
			} elseif ( file_exists(SGL_PATH . "/modules/sitebuilderpro/classes/DiyMain.php") ) {
				include_once SGL_PATH . "/modules/sitebuilderpro/classes/DiyMain.php";
			} else {
				return false;
			}
			$oDiyMain = new DiyMain();
			if ( !$oDiyMain->isDIYTemplateForPro() ) {
				return false;
			}
			return true;
		}

		public static function validateAllowDIYTemplateMain()
		{
			// Validate User Import
			if ( !RvsLibs_Template::isDIYTemplateForPro() ) {
				RvsLibs_String::translate(SGL::raiseMsg('Sorry, DIY Template for sitebuilder PRO'));
				SGL_HTTP::redirect(array('moduleName' => 'sitebuilder', 'managerName' => 'sitebuilder'));
			}
			// Validate skip allow user import template
			if (  !RvsLibs_Config::getOwnerConf('AllowDIYTemplate')) {
				RvsLibs_String::translate(SGL::raiseMsg('Sorry, Admin skip DIY Template.'));
				SGL_HTTP::redirect(array('moduleName' => 'sitebuilder', 'managerName' => 'sitebuilder'));
			}
		}

		public static function copyColorDbForResponsive($templateFolderPath, $colorTone=null, $fileNav=null)
		{
			SGL::logMessage('==Copy== colordb.ini.php : ', PEAR_LOG_DEBUG);
			$target = RvsLibs_File::buildPath(array($templateFolderPath, 'colordb.ini.php'));
			$colorTone = ($colorTone) ? $colorTone : '1-blue';

			$fileNav = is_null($fileNav) ? 'navColor14.ini.php' : $fileNav;
			$source = RvsLibs_File::buildPath(array(SGL_WEB_ROOT, 'DiyResponsive', 'NavigatorColor', 'NavigatorColor', $colorTone, $fileNav));
			if (is_file($target)) {
				$desMd5 = RvsLibs_File::getMd5File($target);
				$sourceMd5 = RvsLibs_File::getMd5File($source);
				if ($desMd5 == $sourceMd5) return true;
			}

			SGL::logMessage('===== source : ' . $source, PEAR_LOG_DEBUG);
			SGL::logMessage('===== target : ' . $target, PEAR_LOG_DEBUG);

			$res = RvsLibs_System::copy(array('-f', $source, $target));
			if (SGL::isError($res)) {
				SGL_Error::pop();
				return false;
			}
			return true;
		}

		public static function copyColorConfigForResponsive($templateFolderPath, $colorTone=null, $fileCompoHead=null)
		{
			SGL::logMessage('==Copy== colorConfig.ini.php : ', PEAR_LOG_DEBUG);
			$target = RvsLibs_File::buildPath(array($templateFolderPath, 'colorConfig.ini.php'));
			$colorTone = ($colorTone) ? $colorTone : '1-blue';
			$fileCompoHead = is_null($fileCompoHead) ? 'HD001.ini.php' : $fileCompoHead;
			$source = RvsLibs_File::buildPath(array(SGL_WEB_ROOT, 'DiyResponsive', 'Diyconfig_component', 'Header_Component', $colorTone, $fileCompoHead));

			SGL::logMessage('===== source : ' . $source, PEAR_LOG_DEBUG);
			SGL::logMessage('===== target : ' . $target, PEAR_LOG_DEBUG);

			if (!is_file($source)) {
				return false;
			}
			//copy
			$res = RvsLibs_System::copy(array($source, $target));

			if (SGL::isError($res)) {
				SGL_Error::pop();
				return false;
			}
			return true;
		}

		/*
		 1.lightblue   1-blue
		 2.blue     1-blue
		 3.ligthgreen    6-green
		 4.darkgreen 6-green
		 5.beige     4-orange
		 6.gold      5-yellow
		 7.maroon    4-orange
		 8.red       3-red
		 9.pink      3-red
		 10.magenta  2-violet
		 11.purple   2-violet
		 12.white    7-black
		 13.black    7-black
		 */
		public static function getResColorToneByGroupName($groupName)
		{
			$gName = trim($groupName);
			$aTone = array(
                   'lightblue' => '1-blue'
                   ,'blue' => '1-blue'
                   ,'lightgreen' => '6-green'
                   ,'darkgreen' => '6-green'
                   ,'beige' => '4-orange'
                   ,'gold' => '5-yellow'
                   ,'maroon' => '4-orange'
                   ,'red' => '3-red'
                   ,'pink' => '3-red'
                   ,'magenta' => '2-violet'
                   ,'purple' => '2-violet'
                   ,'white' => '7-black'
                   ,'black' => '7-black'
                   );
            return (isset($aTone[$gName])) ? $aTone[$gName] : '1-blue';
		}

		/**
		 *
		 * @param unknown $content
		 * @param string $isUikit
		 * @return string|unknown
		 */
		public static function getContainer($content, $isUikit = false, $full = 'rv-block-full')
		{
			if ($isUikit == true)  {
				return sprintf('<div class="uk-container uk-container-center %s">%s</div>', $full ,$content);
			} else {
				//normal, responsive
				return $content;
			}
		}

		/**
		 * return layout 100
		 *
		 * @param unknown $content
		 * @param string $isUikit
		 */
		public static function getLayoutUikit($content, $isUikit = false, $full = 'rv-block-full')
		{
			if ($isUikit == true)  {
			$code = <<<EOF
<div class="bgContent">
    <div class="uk-container uk-container-center {$full}">
        <div class="uk-grid" data-uk-grid-margin>
            <div class="uk-width-1-1 design-block" rv-layout="100">
                <div class="layoutfix">
                    <div id="editable_area_content" class="editable_area">$content</div>
         </div>
       </div>
            </div>


</div>
</div>
EOF;
			return $code;
			} else {
				return $content;
			}
		}

		/**
		 * check is uilit template
		 *
		 * @param string $templatePath
		 * @param string $templateFolder
		 * @return boolean
		 */
		public static function isUikitTemplate($templatePath = TEMPLATE_PATH , $templateFolder = '')
		{
			$uikitFile = $templatePath . '/' . $templateFolder . '/rvsb-css/rvsb-extended-uikit.css';
			if (is_file($uikitFile) == true) {
				SGL::logMessage("isUikit: 1", PEAR_LOG_DEBUG);
				SGL::logMessage("isUikit: " . $uikitFile, PEAR_LOG_DEBUG);
				return true;
			} else {
				return false;
			}
		}

		/**
		 * input:1 = path
		 * input:2 = array code html or css
		 *
		 * @param unknown_type $templateFolder
		 * @return string
		 */
		public static function isResponsiveTemplate($templateItemFolder)
		{
			$isResponSive = false;
			$code = '';
			if (is_array($templateItemFolder)) {
				$code = join('', $templateItemFolder);
			} else {
				$code = $templateItemFolder;
			}

			//|| is_file($code . '/mc_preview.jpg')
			if ( is_file($code . '/skeleton.css') ) {
				//case: 1 input path template
				$isResponSive = true;
			} elseif (preg_match('/skeleton.css|\$lineheight/', $code)) {
				//case: 2 input index.html
				$isResponSive = true;
			} elseif (is_file($code . '/index.htm') && is_file($code . '/rvsb-css/rvsb-extended-uikit.css') == false) {
				//and is not uikit
				$content = file_get_contents($code . '/index.htm');
				if (preg_match('/\{NAVIGATOR\-MOBILE\}/ims', $content)) {
					$isResponSive = true;
				}
			}

			SGL::logMessage("isResponsive:" . $isResponSive, PEAR_LOG_DEBUG);
			return $isResponSive;
		}

		/*
		 * detect import template responsive
		 * have file: mc_preview.jpg , skeleton.css
		 */
		public static function isImportResponsiveTemplate($templateFolderPath)
		{
			$isResponSive = false;
			//$pathImg = $target = RvsLibs_File::buildPath(array($templateFolderPath, 'mc_preview.jpg'));
			$pathSkeleton = $target = RvsLibs_File::buildPath(array($templateFolderPath, 'skeleton.css'));
			$isResponSive = ( is_file($pathSkeleton) ) ? true : false;
			SGL::logMessage("_responsive: " . $isResponSive, PEAR_LOG_DEBUG);
			return $isResponSive;
		}
		/**
		 * Start add css lineheight case template custom File style.css
		 * เฉพาะ none responsive
		 */
		public static function getLineheigh($templatePathCss, $lineHeightValue)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$strPageCss = '';
			if (is_file($templatePathCss . '/style.css')) {
				$aPageCss = RvsLibs_File::file($templatePathCss . '/style.css');
				$strPageCss = join("", $aPageCss);
				$lineHeight = "        line-height:{$lineHeightValue};";
				$strPageCss = preg_replace('/(\s+body\s*\{.*?)\}/mis', '$1' . $lineHeight . "\n" . '}',  $strPageCss);
			}
			return $strPageCss;
		}

		/**
		 * getpath for load config by type
		 *
		 * @param $aDiyConf
		 * @param $type
		 * @return unknown_type
		 */
		public static function getResponsivePath($aDiyConf, $type)
		{
			$defaultTheme = '1-blue';
			$resLayout = 'Diy01';
			//background
            $bgColorTheme = (isset($aDiyConf['rs_conf_background']['theme'])) ? $aDiyConf['rs_conf_background']['theme'] : $defaultTheme;
            $fileBgColorName = (isset($aDiyConf['rs_conf_background']['id'])) ? $aDiyConf['rs_conf_background']['id'] : 'bgColor14.ini.php';
            //body
            $bodyColorTheme = (isset($aDiyConf['rs_conf_body']['theme'])) ? $aDiyConf['rs_conf_body']['theme'] : $defaultTheme;
            $fileBodyName = (isset($aDiyConf['rs_conf_body']['id'])) ? $aDiyConf['rs_conf_body']['id'] : 'bodyColor1.ini.php';
            //header
            $headerColorTheme = (isset($aDiyConf['rs_conf_header']['theme'])) ? $aDiyConf['rs_conf_header']['theme'] : $defaultTheme;
            $fileHeaderName = (isset($aDiyConf['rs_conf_header']['id'])) ? $aDiyConf['rs_conf_header']['id'] : 'header14.ini.php';
            //navigation
            $navColorTheme = (isset($aDiyConf['rs_conf_navigator']['theme'])) ? $aDiyConf['rs_conf_navigator']['theme'] : $defaultTheme;
            $fileNavName = (isset($aDiyConf['rs_conf_navigator']['id'])) ? $aDiyConf['rs_conf_navigator']['id'] : 'navColor14.ini.php';

            $pathWebsiteBackground = RvsLibs_File::buildPath(array(SGL_WEB_ROOT, 'DiyResponsive', 'WebsiteBackground', 'bgColor'));
            $pathBodyColor = RvsLibs_File::buildPath(array(SGL_WEB_ROOT, 'DiyResponsive', 'BodyColor'));
            $pathHeaderColor = RvsLibs_File::buildPath(array(SGL_WEB_ROOT, 'DiyResponsive', 'HeaderColor'));
            $pathNavColor = RvsLibs_File::buildPath(array(SGL_WEB_ROOT, 'DiyResponsive', 'NavigatorColor', 'NavigatorColor'));

			switch ($type) {
				//WebsiteBackground
				case 'bg':
					return RvsLibs_File::buildPath(array($pathWebsiteBackground, $bgColorTheme, $fileBgColorName));
				//BodyColor
				case 'body':
					return RvsLibs_File::buildPath(array($pathBodyColor, $bodyColorTheme, $fileBodyName));
				//HeaderColor
				case 'header':
					return RvsLibs_File::buildPath(array($pathHeaderColor, $headerColorTheme, $fileHeaderName));
				//NavigatorColor
				case 'nav':
					return RvsLibs_File::buildPath(array($pathNavColor, $navColorTheme, $fileNavName));
			}
		}
	}
}
if (class_exists('RvsLibs_Template') === false) {
	class RvsLibs_Template extends RvsLibs_Template_Validate
	{

		/**
		 * insert hb for the first time to select template ...
		 * do not crop image
		 * @param $projectId
		 * @param $orgHB
		 * @param $templateItemFolder
		 */
		public static function updateDefaultHB($projectId, $orgHB, $templateItemFolder, $addNew=false, $isUikit=false)
		{
			$aSize = array();
			if (!is_file($orgHB) && $addNew == false) {
				SGL::logMessage('_responsive1: exist--> ' . $orgHB, PEAR_LOG_DEBUG);
				return false;
			} elseif (is_file($orgHB)) {
				$aSize = RvsLibs_Image2::getImageSize($orgHB, 'gd');
			}
			$fileName = end(explode('/', $orgHB));

			$pathHeaderBaner = RvsLibs_File::buildPath(array(
				REAL_PROJECT_PATH, $projectId, 'images', 'headerbanner'
			));
			$pathHeaderBanerOrg = RvsLibs_File::buildPath(array(
				REAL_PROJECT_PATH, $projectId, 'images', 'headerbannerorg'
			));

			$pathImgHeaderBanner = RvsLibs_File::buildPath(array($pathHeaderBaner, $fileName));
			$pathImgHeaderBannerOrg = RvsLibs_File::buildPath(array($pathHeaderBanerOrg, $fileName));

			$asizeWidth = isset($aSize[0]) ? $aSize[0] : 940;
			$asizeheight = isset($aSize[1]) ? $aSize[1] : 450;

			$id = md5($fileName);
			$aDataSub['id'] = $id;
			$aDataSub['name'] = $fileName;
			$aDataSub['hd_height'] = $asizeheight;
			$aDataSub['hd_width'] = $asizeWidth;
			$aDataSub['position_x'] = 0;
			$aDataSub['position_y'] = 0;
			$aDataSub['position_x2'] = $asizeWidth;
			$aDataSub['position_y2'] = $asizeheight;
			$aData[$id] = $aDataSub;
			unset($aDataSub);

			if (!is_dir($pathHeaderBaner)) {
				RvsLibs_System::mkDir(array('-p', '-m', '0755', $pathHeaderBaner));
			}
			if (!is_dir($pathHeaderBanerOrg)) {
				RvsLibs_System::mkDir(array('-p', '-m', '0755', $pathHeaderBanerOrg));
			}

			if (is_file($orgHB)) {
				///copy file to hb path
				if (is_file($pathImgHeaderBanner)) {
					SGL::logMessage('_responsive2: exist--> ' . $pathImgHeaderBanner, PEAR_LOG_DEBUG);
					RvsLibs_System::rm(array('-f', $pathImgHeaderBanner));
				}
				RvsLibs_System::copy(array($orgHB, $pathImgHeaderBanner));
				if (is_file($pathImgHeaderBannerOrg)) {
					SGL::logMessage('_responsive3: exist--> ' . $pathImgHeaderBannerOrg, PEAR_LOG_DEBUG);
					RvsLibs_System::rm(array('-f', $pathImgHeaderBannerOrg));
				}
				RvsLibs_System::copy(array($orgHB, $pathImgHeaderBannerOrg));
			}

			///write file
			$customCssPath = RvsLibs_Project::getCustomCssPath($projectId, $templateItemFolder);
			if (!is_dir($customCssPath)) {
				RvsLibs_System::mkDir(array('-p', '-m', '0755', $customCssPath));
			}
			$fileConfigImgHeaderBanner = RvsLibs_File::buildPath(array(
				$customCssPath, 'headerbannner.ini.php'
			));
			SGL::logMessage('write config: ' . $fileConfigImgHeaderBanner, PEAR_LOG_DEBUG);
			if ($isUikit == false) {
				//create new project จะสร้าง headerbannner.ini.php เฉพาะ responsive
				RvsLibs_File::writeFileSerialData($fileConfigImgHeaderBanner, $aData);
			}
			return true;
		}

		/**
		 * ตรวจสอบว่าเคย add headerbanner รูปเดิมไปแล้วหรือ ยัง
		 * ถ้าซ้ำลบเลย
		 * @param unknown $pathBanner
		 * @param unknown $templateItemPath
		 * @param unknown $customCssPath
		 */
		public static function bannerIsExist($pathBanner, $customCssPath)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$aMd5Exist = array();
			$projectID = RvsLibs_Project::getProjectId();
			$desMd5 = RvsLibs_File::getMd5File($pathBanner);

			$pathHeaderBaner = RvsLibs_File::buildPath(array(REAL_PROJECT_PATH, $projectID, 'images', 'headerbannerorg'));
			$pathImgProject = RvsLibs_File::buildPath(array(REAL_PROJECT_PATH, $projectID));

			$aFile = RvsLibs_System::ls(array('-a', '-R', $pathHeaderBaner));
			if (count($aFile['files'])) {
				foreach ($aFile['files'] as $sourceFile) {
					//preg_match('/banner\_(.*?)\./', $sourceFile, $aImg);
					//$imgId = (isset($aImg[1])) ? trim($aImg[1]) : '';
					$file = str_replace($pathImgProject, '', $sourceFile);
					//SGL::logMessage('case: ' . $file, PEAR_LOG_DEBUG);
					$sourceMd5 = RvsLibs_File::getMd5File($sourceFile);
					if (isset($aMd5Exist[$sourceMd5]) == false) {
						$aMd5Exist[$sourceMd5] = $file;
					}
				}
			}

			//echo '<pre>';
			//print_r($aMd5Exist);

			$fileCustom = RvsLibs_File::buildPath(array($customCssPath, 'headerbannner.ini.php'));
			$aData = RvsLibs_File::getJsonDecodeFile($fileCustom, true);

			//print_r($aData);
			//echo  'count: ' . count($aData['slide_item']);

			if (isset($aData['slide_item']) && count($aData['slide_item'])) {
				foreach ($aData['slide_item'] as $imgId => $aVal) {
					//clean imageId ที่ซ้ำออกจาก file conf
					//echo $imgId . '<br>';
					$sourceFileOrg = $pathImgProject . $aVal['img_org'];
					$sourceFilePath = $pathImgProject . $aVal['img_path'];
					$sourceMd5 = trim(RvsLibs_File::getMd5File($sourceFileOrg));

					//path ที่ไม่ใช่ rvs_libray
					if (in_array(trim($aVal['img_org']), $aMd5Exist) == false
							&& preg_match('/\/rvs\_library\//', $aVal['img_org']) == false) {
						unset($aData['slide_item'][$imgId]);
						/*echo '<br>== exist ==';
						echo '<br>' . $sourceMd5;
						echo '<br>delete:' . $sourceFileOrg;
						echo '<br>delete:' . $sourceFilePath;*/
						unlink($sourceFileOrg);
						unlink($sourceFilePath);
					}
				}
			}
			/*
			echo '<br>final aData<br>';
			print_r($aData);
			exit;*/

			RvsLibs_File::writeJsonEncodeFile($fileCustom, $aData);
			return $aData;
		}

		public static function updateUikitHB($templateItemPath, $customCssPath, $projectID=null)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$aData = array();
			if (is_null($projectID)) {
				$projectID = RvsLibs_Project::getProjectId();
			}

			$pathHeaderBaner = RvsLibs_File::buildPath(
					array(REAL_PROJECT_PATH, $projectID, 'images', 'headerbanner')
					);
			$slideOrgPath = RvsLibs_File::buildPath(
					array(REAL_PROJECT_PATH, $projectID, 'images', 'headerbannerorg')
					);

			$pathBanner = $templateItemPath . '/images/header_banner.jpg';
			if (is_file($pathBanner) == true) {
				$aData = self::bannerIsExist($pathBanner, $customCssPath);
			}
			//case banner อันเดิมไม่ต้อง add เพิ่ม
			if (isset($aData['slide_item']) && count($aData['slide_item'])) {
				SGL::logMessage('case: select headerbanner exist return aData', PEAR_LOG_DEBUG);
				return $aData;
			}

			//case: select headerbanner ใหม่
			if (is_file($pathBanner)) {
				SGL::logMessage('case: add new headerbanner', PEAR_LOG_DEBUG);
				require_once SGL_MOD_DIR . '/sitebuilder/classes/AjaxClass/AdjustStyleAjaxMgr.php';
				$oAjax = new AdjustStyleAjaxMgr();

				if (!is_dir($pathHeaderBaner)) {
					RvsLibs_System::mkDir(array('-p', '-m', 0755, $pathHeaderBaner));
				}
				if (!is_dir($slideOrgPath)) {
					RvsLibs_System::mkDir(array('-p', '-m', 0755, $slideOrgPath));
				}

				$res->aSizeImg = array('h' => '350','w' => '1440', 'x' => '0','y' => '0');

				$res->hbId = uniqid();
				$res->forderCustomCss = $customCssPath;
				$res->slideId = $res->hbId;
				$res->imgName = $oAjax->getSlideName('jpg');
				$res->img_path = $slideOrgPath . '/' . $res->imgName;

				RvsLibs_System::copy(array($pathBanner, $res->img_path));

				$res->img_url = $oAjax->getUrlByPath($res->img_path);
				$res->pathImgHeaderBannerCrop = $pathHeaderBaner . '/' . $res->imgName;

				$aData = $oAjax->doAddSlide($res);
			}
			return $aData;
		}

		/**
		 *
		 * Enter description here ...
		 * @param $aCss = array(0 => array(
		 *			'min-screen-width'	=> null, //for @media
		 *			'max-screen-width'	=> null, //for @media
		 *			'prop'		=> 'body', //css class or id
		 *			'attr'		=> '', //css attibute (color, background-color, position ...)
		 *			'val'		=> '', // value(100%,100px,none,#ddf000 ...)
		 *		));
		 */
		public static function updateRsCustomcss($soueceFile, $desFile, $aCss=array(), $noMediaQuery=false)
		{
			SGL::logMessage('rvdebug:source: ' . $soueceFile, PEAR_LOG_DEBUG);
			SGL::logMessage('rvdebug:target: ' . $desFile, PEAR_LOG_DEBUG);

			if (!is_file($soueceFile)) {
				return false;
			}

			require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
			$oCss = RV_CssParser::singleton(true);
			$staticLayout = SGL_WEB_ROOT . '/responsiveTemplates/stylesheets/static_layout.css';
			if (is_file($desFile)) {
				$aCssss = $oCss->merge_multiple_css(array($soueceFile, $desFile, $staticLayout));
			} else {
				$aCssss = $oCss->merge_multiple_css(array($soueceFile, $staticLayout));
				//$aCssss = $oCss->parse_file($soueceFile);
			}

			$oCss->setMultiValue($aCss);

			$oCss->build_css(false);
			$oCss->write_file($desFile);

			if ($noMediaQuery) {
				///write file nonMobileCompatible/layout.csse
				$noneMobilePath = preg_replace('/\/[^\/]*.css$/ims', '', $desFile);
				$noneMobilePath = $noneMobilePath . '/noneMobileCompatible';
				if (!is_dir($noneMobilePath)) {
					RvsLibs_System::mkDir(array('-p', '-m', 0755, $noneMobilePath));
				}
				$content = $oCss->getCssNoMedia();
				$oCss->write_file($noneMobilePath . '/layout.css', $content);
			}
			return true;
		}


		/**
		 *
		 * Enter description here ...
		 * @param $aCss = array(0 => array(
		 *			'min-screen-width'	=> null, //for @media
		 *			'max-screen-width'	=> null, //for @media
		 *			'prop'		=> 'body', //css class or id
		 *			'attr'		=> '', //css attibute (color, background-color, position ...)
		 *			'val'		=> '', // value(100%,100px,none,#ddf000 ...)
		 *		));
		 */
		public static function updateUikitCustomCss($soueceFile, $desFile, $aCss=array())
		{
			SGL::logMessage('rvdebug:' . $soueceFile, PEAR_LOG_DEBUG);

			if (!is_file($soueceFile)) {
				return false;
			}

			require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
			$oCss = RV_CssParser::singleton(true);

			$oCss->parse_file($soueceFile);

			$oCss->setMultiValue($aCss);

			$oCss->build_css(false);

			$oCss->write_file($desFile);

			return true;
		}

		public static function mergeCustomcss($desFile, $aFiles=array())
		{
			SGL::logMessage('destFile:' . $desFile, PEAR_LOG_DEBUG);

			if (!count($aFiles)) {
				return false;
			}

			require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
			$oCss = RV_CssParser::singleton(true);

			$aCssss = $oCss->merge_multiple_css($aFiles);

			///พยายาม unset login block css
			if (isset($aCssss['Mobile Landscape']['props']['.RVS_BlockLogin']['display'])) {
				unset($aCssss['Mobile Landscape']['props']['.RVS_BlockLogin']['display']);
			}
			if (isset($aCssss['Mobile Landscape']['props']['.m_block_login'])) {
				unset($aCssss['Mobile Landscape']['props']['.m_block_login']);
			}
			if (isset($aCssss['Mobile Portrait']['props']['.RVS_BlockLogin']['display'])) {
				unset($aCssss['Mobile Portrait']['props']['.RVS_BlockLogin']['display']);
			}
			if (isset($aCssss['Mobile Portrait']['props']['.m_block_login'])) {
				unset($aCssss['Mobile Portrait']['props']['.m_block_login']);
			}

			$oCss->build_css(false);
			$oCss->write_file($desFile);

			return true;
		}


		public static function UpdateTemplateVar($templateHTML)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			// IF $templateHTML = file(TEMPLATE/index.htm) = array then join array
			if (is_array($templateHTML)) {
				$templateHTML = implode($templateHTML);
			}
			// Find id="rv_top_adjust_width_?"
			if(empty($input)) {
				$input = new stdClass();
			}
			$regExpTopAdjustWidth = '/<\s*table.*?id\s*=\s*["|\']rv_top_adjust_width_([0-9]){1,}["|\'].*?>/i';
			$input->project_id = SGL_Session::get('rvs_project_id');
			$input->fileOptionTable = REAL_PROJECT_PATH . '/' . $input->project_id . '/setOptionTableTop.ini';
			if (file_exists($input->fileOptionTable)) {
				$aOptionTable = RvsLibs_Config::parse_ini_file($input->fileOptionTable, true);
			}

			if (preg_match($regExpTopAdjustWidth, $templateHTML, $tagTableTopAdjustWidth)) {
				$tagTable = $tagTableTopAdjustWidth[0];
				$regExpIdTopAdjustWidth = '/id\s*=\s*["|\']rv_top_adjust_width_[0-9]{1,}["|\']/i';
				if (preg_match($regExpIdTopAdjustWidth, $tagTable, $idTopAdjustWidth)) {

					$strTopAdjustWidth = $idTopAdjustWidth[0];
					if (preg_match('/[0-9]/i', $strTopAdjustWidth, $resultAdjustWidth)) {
						$topAdjustWidth = $resultAdjustWidth[0];
						// Replacement Value
						//Delete width=""
						$regExpWidth = '/\s*width\s*=\s*["|\'].*?["|\']/i';
						$replaceTagTable = RvsLibs_String::preg_replace($regExpWidth, '' , $tagTable);
						//Replace width=""
						if (file_exists($input->fileOptionTable) && (isset($aOptionTable['resolution']['width']))) {
							$replaceTopWidth =  RvsLibs_String::trim($aOptionTable['resolution']['width']);
						} else {
							$fileLayoutWidth = RVS_USER_HOME . '/.rvsitebuilder/rvsbTemplateLayoutWidth.txt';
							if (file_exists($fileLayoutWidth)) {
								$replaceTopWidth = 780 - $topAdjustWidth;
							} else {
								$replaceTopWidth = '100%';
							}
						}
						$topWidthReplace = ' width="' . $replaceTopWidth . '"';
						$positionReplace = (isset($aOptionTable['position']['align']) && $aOptionTable['position']['align']) ? $aOptionTable['position']['align'] : 'center';
						//default center
						$replaceTagTable = RvsLibs_String::str_replace('>', $topWidthReplace . ' align="' . $positionReplace . '" >' , $replaceTagTable);
						// Replace <table>
						$templateHTML = RvsLibs_String::str_replace($tagTable, $replaceTagTable, $templateHTML);
					}
				}
			}

			//replace id="rv_adjust_width_???" for width BODY
			if (isset($replaceTopWidth) && preg_match_all("/id\s*=\s*\"rv_adjust_width_(.*?)\"/", $templateHTML, $aMatchCenter)) {
				$vMatchRvWidth = RvsLibs_String::trim($aMatchCenter[1][0]);
				$valWidth = (preg_match("/\%$/", $replaceTopWidth)) ? '100%' : $replaceTopWidth - $vMatchRvWidth;
				$vReplace = 'id="rv_adjust_width_' . $vMatchRvWidth . '" width="' . $valWidth . '"';
				$templateHTML = RvsLibs_String::str_replace('id="rv_adjust_width_' . $vMatchRvWidth . '"', $vReplace, $templateHTML);
			}
			return $templateHTML;
		}

		/**
		 * Call In STEP 3 / Publish & Preview
		 *
		 * @param String $templateHTML
		 * @param Array $aRegMove use only STEP 3 When change style current object position.
		 * @return Array $templateHTML['template'] , $templateHTML['position']
		 */
		public static function SetPositionLogoCompanySlogan($templateHTML, $aRegMove = array())
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$aTemplateHTML = Array();
			$projectId = SGL_Session::get('rvs_project_id');
			if(empty($input)) {
				$input = new stdClass();
			}
			$input->fileDragAndDrop = REAL_PROJECT_PATH . '/' . $projectId . '/setDragAndDropItem.ini';

			$cache = &RvsLibs_File::rvsCache();
			$res = RvsLibs_File::isNotMd5Change('SetPositionLogoCompanySlogan', $input->fileDragAndDrop);
			if ($res === true && $data = $cache->get('SetPositionLogoCompanySlogan', 'cachedata')) {
				$input->aDefaultMove = unserialize($data);
				SGL::logMessage('=============== SetPositionLogoCompanySlogan from cache', PEAR_LOG_DEBUG);
			} else {
				if (count($aRegMove)) {
					//require by from field Step 3
					$input->aDefaultMove = $aRegMove;
				} else {
					$input->aDefaultMove = (is_file($input->fileDragAndDrop)) ?  RvsLibs_Config::parse_ini_file($input->fileDragAndDrop,true) : false;
				}
				$data = serialize($input->aDefaultMove);
				$cache->save($data, 'SetPositionLogoCompanySlogan', 'cachedata');
				SGL::logMessage('================ SetPositionLogoCompanySlogan from file', PEAR_LOG_DEBUG);
			}

			$defaultHiddenStyleLayer = array();
			if (preg_match("/Layer1/", $templateHTML)) {
				if (preg_match("/id=\"Layer1\"\s*style\s*=\s*\"position\s*:\s*(relative|absolute)\s*;\s*left\s*:\s*(.*)\s*px\s*;\s*top\s*:\s*(.*)\s*px\s*;/", $templateHTML, $aMatch)) {
					$resetX = RvsLibs_String::trim($aMatch[2]) . 'px';
					$resetY = RvsLibs_String::trim($aMatch[3]) . 'px';
					$aTemplateHTML['position']['layer1_x'] = RvsLibs_String::trim($aMatch[2]);
					$aTemplateHTML['position']['layer1_y'] = RvsLibs_String::trim($aMatch[3]);
					$aTemplateHTML['position']['layer1'] = 'left:' . $resetX . ';top:' . $resetY . ';';
					$layer1Pattern = (isset($aMatch[0])) ? RvsLibs_String::str_replace('"', '\"', $aMatch[0]) : false;
					$layer1Pattern = RvsLibs_Template::_registerPatturn($layer1Pattern);

					if ($layer1Pattern && (isset($input->aDefaultMove['logo']['x']) && $input->aDefaultMove['logo']['x'])
					&& (isset($input->aDefaultMove['logo']['y']) && $input->aDefaultMove['logo']['y'])) {
						$layer1Replace = 'id="Layer1" style="position:' . $aMatch[1] . '; left:' . $input->aDefaultMove['logo']['x'] . '; top:' . $input->aDefaultMove['logo']['y'] . ';';
						$templateHTML = RvsLibs_String::preg_replace("/" . $layer1Pattern . "/", $layer1Replace, $templateHTML);
					}
				}
			}
			if (preg_match("/Layer2/", $templateHTML)) {
				if (preg_match("/id=\"Layer2\"\s*style\s*=\s*\"position\s*:\s*(relative|absolute)\s*;\s*left\s*:\s*(.*)\s*px\s*;\s*top\s*:\s*(.*)\s*px\s*;/", $templateHTML, $aMatch)) {
					$resetX1 = RvsLibs_String::trim($aMatch[2]) . 'px';
					$resetY1 = RvsLibs_String::trim($aMatch[3]) . 'px';
					$aTemplateHTML['position']['layer2_x'] = RvsLibs_String::trim($aMatch[2]);
					$aTemplateHTML['position']['layer2_y'] = RvsLibs_String::trim($aMatch[3]);
					$aTemplateHTML['position']['layer2'] = 'left:' . $resetX1 . ';top:' . $resetY1 . ';';
					$layer2Pattern = (isset($aMatch[0])) ? RvsLibs_String::str_replace('"', '\"', $aMatch[0]) : false;
					$layer2Pattern = RvsLibs_Template::_registerPatturn($layer2Pattern);

					if ($layer2Pattern && (isset($input->aDefaultMove['company']['x']) && $input->aDefaultMove['company']['x'])
					&& (isset($input->aDefaultMove['company']['y']) && $input->aDefaultMove['company']['y'])) {
						$layer2Replace = 'id="Layer2" style="position:' . $aMatch[1] . '; left:' . $input->aDefaultMove['company']['x'] . '; top:' . $input->aDefaultMove['company']['y'] . ';';
						$templateHTML = RvsLibs_String::preg_replace("/" . $layer2Pattern . "/", $layer2Replace, $templateHTML);
					}
				}
			}

			if (preg_match("/Layer3/", $templateHTML)) {
				if (preg_match("/id=\"Layer3\"\s*style=\s*\"position\s*:\s*(relative|absolute)\s*;\s*left\s*:\s*(.*)\s*px\s*;\s*top\s*:\s*(.*)\s*px\s*;/", $templateHTML, $aMatch)) {
					$resetX2 = RvsLibs_String::trim($aMatch[2]) . 'px';
					$resetY2 = RvsLibs_String::trim($aMatch[3]) . 'px';
					$aTemplateHTML['position']['layer3_x'] = RvsLibs_String::trim($aMatch[2]);
					$aTemplateHTML['position']['layer3_y'] = RvsLibs_String::trim($aMatch[3]);
					$aTemplateHTML['position']['layer3'] = 'left:' . $resetX2 . ';top:' . $resetY2 . ';';
					$layer3Pattern = (isset($aMatch[0])) ? RvsLibs_String::str_replace('"', '\"', $aMatch[0]) : false;
					$layer3Pattern = RvsLibs_Template::_registerPatturn($layer3Pattern);

					if ($layer3Pattern && (isset($input->aDefaultMove['slogan']['x']) && $input->aDefaultMove['slogan']['x'])
					&& (isset($input->aDefaultMove['slogan']['y'])) && $input->aDefaultMove['slogan']['y']) {
						$layer3Replace = 'id="Layer3" style="position:' . $aMatch[1] . '; left:' . $input->aDefaultMove['slogan']['x'] . '; top:' . $input->aDefaultMove['slogan']['y'] . ';';
						$templateHTML = RvsLibs_String::preg_replace("/" . $layer3Pattern . "/", $layer3Replace, $templateHTML);
					}
				}
			}
			$aTemplateHTML['template'] = $templateHTML;
			return $aTemplateHTML;
		}

		//$isPublish (true : preview,publish ,false: other)
		public static function setPrositionAndReplaceCustom($projectId, $isPublish)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$aLayer = DaoFactory::Project()->findCustomLayerByProjectId($projectId, null, 'getassoc');
			$fileDragAndDrop = RvsLibs_File::buildPath(array(REAL_PROJECT_PATH, $projectId, 'setDragAndDropItem.ini'));

			$cache = &RvsLibs_File::rvsCache();
			$res = RvsLibs_File::isNotMd5Change('setPrositionAndReplaceCustom', $fileDragAndDrop);
			if ($res === true && $data = $cache->get('setPrositionAndReplaceCustom', 'cachedata')) {
				$aDefaultMove = unserialize($data);
				SGL::logMessage('=============== setPrositionAndReplaceCustom from cache', PEAR_LOG_DEBUG);
			} else {
				$aDefaultMove = (is_file($fileDragAndDrop)) ?  RvsLibs_Config::parse_ini_file($fileDragAndDrop,true) : false;
				$data = serialize($aDefaultMove);
				$cache->save($data, 'setPrositionAndReplaceCustom', 'cachedata');
				SGL::logMessage('================ setPrositionAndReplaceCustom from file', PEAR_LOG_DEBUG);
			}

			$replacePattenImage = '';
			if(count($aLayer) > 0) {
				foreach($aLayer as $keyId => $value) {
					$layerId = 'Layer'.$keyId;
					$posX = (isset($aDefaultMove[$layerId]['x']) && $aDefaultMove[$layerId]['x'] != '') ? $aDefaultMove[$layerId]['x'] : '20px';
					$posY = (isset($aDefaultMove[$layerId]['y']) && $aDefaultMove[$layerId]['y'] != '') ? $aDefaultMove[$layerId]['y'] : '20px';
					$zIndex = (isset($aDefaultMove[$layerId]['priority']) && $aDefaultMove[$layerId]['priority'] != '') ? $aDefaultMove[$layerId]['priority'] : '0';
					// case Image layer
					if (isset($value->is_image) && $value->is_image == 1) {
						if (preg_match('/^rvs_library/i', $value->layer_data)) {
							$pathImage = RvsLibs_File::buildPath(array(WEB_THEME_PATH, $value->layer_data));
							$urlImg = ($isPublish === true) ? $value->layer_data : RvsLibs_File::buildPath(array(WEB_THEME_URL, $value->layer_data));
						} else {
							$pathImage = RvsLibs_File::buildPath(array(PROJECT_PATH, $projectId, $value->layer_data));
							$urlImg = ($isPublish === true) ? $value->layer_data : RvsLibs_File::buildPath(array(PROJECT_URL, $projectId, $value->layer_data));
							$urlImg = $urlImg . '?' . uniqid();
						}
						$aLogoSize = RvsLibs_Image::getImageSizeLayer($pathImage);
						$aLink = '';
						$aEndLink = '';
						if (isset($value->layer_url) && $value->layer_url) {
							$aLink = '<a id="alink_'. $layerId . '" href="' . $value->layer_url . '" target="' . $value->layer_target . '">';
							$aEndLink = '</a>';
						}
						$replacePattenImage .= '<div class="custom_layer" style="position: absolute;">'."\n"
						. $aLink . '<div id="' . $layerId . '" class="moveHeader" style="z-index:' . $zIndex . ';width:' . $aLogoSize['width'] . 'px; height:' . $aLogoSize['height'] . 'px; left: ' . $posX . '; top: ' . $posY . '; overflow: visible; white-space: nowrap; position: absolute;">'."\n"
						.'<img id="img_' . $layerId . '" src="' . $urlImg . '" '
						. 'width="' . $aLogoSize['width'] . '" height="' . $aLogoSize['height'] . '" /></div> '. $aEndLink . '</div>';
					}
					//case Text Layer
					if (isset($value->is_image) && $value->is_image == 0) {
						$replacePattenImage .= '<div class="custom_layer" style="position: absolute;"><div id="' . $layerId . '" class="moveHeader" style="z-index:' . $zIndex . ';cursor: move; left: ' . $posX . '; top: ' . $posY . '; text-align: center; overflow: visible; white-space: nowrap; position: absolute;">' . $value->layer_data . '</div></div>';
					}

				}
			}
			return $replacePattenImage;
		}

		public static function setPrositionAndReplaceCustom2($projectId, $isPublish, $isResponsive=false)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$aLayer = DaoFactory::Project()->findCustomLayerByProjectId($projectId, null, 'getassoc');

			if ($isPublish == false || $isResponsive == false) {
				$fileDragAndDrop = RvsLibs_File::buildPath(array(REAL_PROJECT_PATH, $projectId, 'setDragAndDropItem.ini'));

				$cache = &RvsLibs_File::rvsCache();
				$res = RvsLibs_File::isNotMd5Change('setPrositionAndReplaceCustom', $fileDragAndDrop);
				if ($res === true && $data = $cache->get('setPrositionAndReplaceCustom', 'cachedata')) {
					$aDefaultMove = unserialize($data);
				} else {
					$aDefaultMove = (is_file($fileDragAndDrop)) ?  RvsLibs_Config::parse_ini_file($fileDragAndDrop,true) : false;
					$data = serialize($aDefaultMove);
					$cache->save($data, 'setPrositionAndReplaceCustom', 'cachedata');
				}
			}

			$replacePattenImage = '';
			if(count($aLayer) > 0) {
				foreach($aLayer as $keyId => $value) {
					$layerId = 'Layer'.$keyId;
					if ($isPublish == false || $isResponsive == false) {
						$posX = (isset($aDefaultMove[$layerId]['x']) && $aDefaultMove[$layerId]['x'] != '') ? $aDefaultMove[$layerId]['x'] : '20px';
						$posY = (isset($aDefaultMove[$layerId]['y']) && $aDefaultMove[$layerId]['y'] != '') ? $aDefaultMove[$layerId]['y'] : '20px';
						$zIndex = (isset($aDefaultMove[$layerId]['priority']) && $aDefaultMove[$layerId]['priority'] != '') ? $aDefaultMove[$layerId]['priority'] : '10';
					}
					// case Image layer
					if (isset($value->is_image) && $value->is_image == 1) {
						$value->layer_data = trim($value->layer_data);
						if (preg_match('/^rvs_library\//i', $value->layer_data)) {
							$pathImage = RvsLibs_File::buildPath(array(WEB_THEME_PATH, $value->layer_data));
							$urlImg = ($isPublish === true)
								? $value->layer_data
								: WEB_THEME_URL . '/' . $value->layer_data;
						} else {
							$pathImage = RvsLibs_File::buildPath(array(PROJECT_PATH, $projectId, $value->layer_data));
							$urlImg = ($isPublish === true)
								? $value->layer_data
								: PROJECT_URL . '/' . $projectId . '/' . $value->layer_data;
							$urlImg = $urlImg . '?' . uniqid();
						}
						$aLink = '';
						$aEndLink = '';
						if (isset($value->layer_url) && $value->layer_url) {
							$aLink = '<a id="alink_'. $layerId . '" href="' . $value->layer_url . '" target="' . $value->layer_target . '">';
							$aEndLink = '</a>';
						}
						if ($isPublish && $isResponsive == false) {
							$styleImg = '';
							$style = 'style="z-index:' . $zIndex . '; left: ' . $posX . '; top: ' . $posY . '; position: absolute;"';
						} elseif ($isPublish == false) {
							$aLogoSize = RvsLibs_Image::getImageSizeLayer($pathImage);
							$styleImg = 'width="' . $aLogoSize['width'] . '" height="' . $aLogoSize['height'] . '"';
							$style = 'style="z-index:' . $zIndex . ';width:' . $aLogoSize['width'] . 'px; height:' . $aLogoSize['height'] . 'px; overflow: visible; white-space: nowrap; position: absolute;"';
						} else {
							$styleImg = '';
							$style = '';
						}
						$replacePattenImage .= '<div class="custom_layer">'."\n"
							. $aLink . '<div id="' . $layerId . '" class="moveHeader" ' . $style . '>'."\n"
							.'<img id="img_' . $layerId . '" src="' . $urlImg . '" '
							. $styleImg . ' /></div> '. $aEndLink . '</div>';
					}
					//case Text Layer
					if (isset($value->is_image) && $value->is_image == 0) {
						if ($isPublish && $isResponsive == false) {
							$style = 'style="z-index:' . $zIndex . '; left: ' . $posX . '; top: ' . $posY . '; position: absolute;"';
						} elseif ($isPublish == false) {
							$style = 'style="z-index:' . $zIndex . ';cursor: move; position: absolute; left: ' . $posX . '; top: ' . $posY . '; text-align: center; overflow: visible; white-space: nowrap;"';
						} else {
							//$isPublish && $isResponsive == true
							$style = '';
						}
						$layerData = RvsLibs_Template::cleanDivLayer($value->layer_data);
						$replacePattenImage .= '<div class="custom_layer"><div id="' . $layerId . '" class="moveHeader" ' . $style . ' >' . $layerData . '</div></div>';
					}

				}
			}

			return $replacePattenImage;
		}

		/**
		 * fix add text layer clean with <div class="contextLayer">???</div>
		 * <div id="showEditImg">???</div>
		 * @param unknown $data
		 * @return mixed
		 */
		public  static function cleanDivLayer($data)
		{
			$data = preg_replace('/(<div\s*[^>]*id=)"showEditImg[^>]+"([^>]*>).*?<\/div>/ims', '', $data);
			$data = preg_replace('/(<div\s*[^>]*class=)"contextLayer[^>]+"([^>]*>)(.*?)<\/div>/ims', '', $data);
			SGL::logMessage('rvdebug: data:' . $data, PEAR_LOG_DEBUG);
			return $data;
		}

		public static function setdefaultPrositionCustom($projectId, $aLayer=array())
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			if (is_null($aLayer) || count($aLayer) <= 0) {
				$aLayer = DaoFactory::Project()->findCustomLayerByProjectId($projectId, null, 'getassoc');
			}
			$fileDragAndDrop = RvsLibs_File::buildPath(array(REAL_PROJECT_PATH, $projectId, 'setDragAndDropItem.ini'));
			$aDefaultMove = (is_file($fileDragAndDrop)) ?  RvsLibs_Config::parse_ini_file($fileDragAndDrop,true) : false;
            $aDefault = array();
			//Replace custom layer
			if(count($aLayer) > 0) {
					foreach($aLayer as $keyId => $value) {
						$layerId = 'Layer' . $keyId;

						if(isset($aDefaultMove[$layerId]['x']) && $aDefaultMove[$layerId]['x']
						&& (isset($aDefaultMove[$layerId]['y'])) && $aDefaultMove[$layerId]['y']) {
							// case Image layer
								$aDefault[$layerId]['x'] = $aDefaultMove[$layerId]['x'];
								$aDefault[$layerId]['y'] = $aDefaultMove[$layerId]['y'];
								$aDefault[$layerId]['priority'] = (isset($aDefaultMove[$layerId]['priority']) && $aDefaultMove[$layerId]['priority']) ? $aDefaultMove[$layerId]['priority'] : '0';
						}
					}
			}
				return $aDefault;

		}



		/**
		 * cleanCodeBody
		 *
		 * replace path ๏ฟฝ๏ฟฝ๏ฟฝวน๏ฟฝอง BODY ๏ฟฝ๏ฟฝอน๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ Publish ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ SitePreview
		 * ๏ฟฝ๏ฟฝ๏ฟฝ copy images ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ layout_template ไปด๏ฟฝ๏ฟฝ๏ฟฝ
		 */
		//fixed PHPMD scan 07/07/2554
		public static function cleanCodeBody($codeBody, $templatePath, $layoutTemplateId)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$oPublishReg = Publish_Registry::singleton();
			$project_id = $oPublishReg->get('project_id');
			$publishUrl = $oPublishReg->get('publishUrl');

			//replace rvs_library|images|media|rvs_media_library|documents for directAdmin
			if (RvsLibs_DirectAdmin::isDirectAdmin() === true) {
				//Start replace embed url
				$codeBody = preg_replace('%<\s*param(.*?)name\s*=\s*"movie"(.*?)value=".*?/media/%i', '<param$1name="movie"$2value="media/', $codeBody);
				$codeBody = preg_replace('%<\s*param(.*?)name\s*=\s*"movie"(.*?)value=".*?/images/%i', '<param$1name="movie"$2value="images/', $codeBody);
				$codeBody = preg_replace('%<\s*embed(.*?)src\s*=\s*".*?/media/%i', '<embed$1src="media/', $codeBody);
				$codeBody = preg_replace('%<\s*embed(.*?)flashvars\s*=\s*"file=.*?/media/%i', '<embed$1flashvars="file=media/', $codeBody);

                //Start replace embed url
                $aP = array("/'src'\s*,\s*'(.*)images\/tryout\/template\',/", "/'movie'\s*,\s*'(.*)images\/tryout\/template\'/");
                $aR = array("'src','images/tryout/template',", "'movie','images/tryout/template'");
                $codeBody = preg_replace($aP,$aR, $codeBody);
                $codeBody = preg_replace('/src\s*=\s*"(.*)images\/tryout/','src="' . $publishUrl . '/images/tryout', $codeBody);

   				$codeBody = str_replace('/CMD_PLUGINS/rvsitebuilder/images/themes/default/', $publishUrl . '/', $codeBody);
                $codeBody = str_replace('/CMD_PLUGINS/rvsitebuilder/images/wysiwyg/', $publishUrl . '/', $codeBody);
                $codeBody = str_replace('/CMD_PLUGINS/rvsitebuilder/images/', $publishUrl . '/', $codeBody);
                $codeBody = preg_replace('/http(s|):\/\/(.*)\/.rvsitebuilderHome\/projects\/[0-9a-z]+\//i', $publishUrl . '/', $codeBody);
                //$codeBody = preg_replace('/http(s|):\/\/(.*)\/.rvsitebuilder\/projects\/[0-9a-z]+\//i', $publishUrl . '/', $codeBody);

			}

			if (class_exists('LayoutInsertDataMgr') === false) {
				require_once SGL_MOD_DIR . '/sitebuilder/classes/LayoutInsertDataMgr.php';
			}
			$codeBody = LayoutInsertDataMgr::replaceHeadData($codeBody, $layoutTemplateId);
			$codeBody = LayoutInsertDataMgr::replaceLayoutData($codeBody, $layoutTemplateId);
			$codeBody = RvsLibs_String::str_replace('class="rvFrame" width="780">', 'class="rvFrame" width="100%">', $codeBody);
			$codeBody = RvsLibs_Image::replaceRvsImagesRandom($codeBody, $templatePath);
			SGL::logMessage('after replaceRvsImagesRandom', PEAR_LOG_DEBUG);
			//fix full url with port :2082:2083 :apiruk
			$codeBody = RvsLibs_String::preg_replace("/url\((.*?):208[2|3]/", "url(", $codeBody);
			$codeBody = self::_findBulletImagesLibaryToCopy($codeBody, $layoutTemplateId);
			if (preg_match_all('/themes\/default\/sitebuilder\/images\/([a-zA-Z0-9_-]+.gif|jpg|swf|png)\s*/i', $codeBody , $aMatch)) {
				foreach ($aMatch as $k => $v) {
					$aMatch[$k] = array_unique($aMatch[$k]);
				}

				foreach ($aMatch[1] as $k1 => $v1) {
					if (isset($aMatch[1][$k1]) && $aMatch[1][$k1] != '' ) {
						$imagesName =$aMatch[1][$k1];
					} else {
						continue;
					}
					/// load register
					/// get project_id ถ้า == null

					$sourcePath = WEB_THEME_PATH . '/themes/default/sitebuilder/images/' . $imagesName;
					if (file_exists($sourcePath) === true) {
						if (is_null($project_id) === true) {
							$targetPath = $templatePath . 'images/' . $imagesName;
							$res = RvsLibs_System::copy(array('-R', $sourcePath, $targetPath));
							if (SGL::isError($res) === true)
							return $res;

						} else {
							$targetPath = 'images/' . $imagesName;

							$res = Publish_CommonListFileTask::_builCopyFilesList($sourcePath, $targetPath);
							if (SGL::isError($res) === true)
							return $res;
						}
					}
				}
			}

			//For layout template
			if (preg_match_all('/(src\s*=\s*[\"|\']|url\()[a-z0-9_.:&?\/-]+(.*?)/i', $codeBody, $aElement)
			    && preg_match('/images\/layouttemplate/', $codeBody)) {
				foreach ($aElement[0] as $k=>$v) {
					if (preg_match("/^http|^src=\"http|^url\(http/i", $aElement[0][$k]) && RvsLibs_Template::_isNotCpanelLink($aElement[0][$k])) {
						continue;
					}
					$patternReplace = RvsLibs_String::preg_replace('/\//', '\/', $aElement[0][$k]);
					if (preg_match('/images/i', $aElement[0][$k], $aMatchOpject)) {
						$replaceValue = strstr($aElement[0][$k], 'images');
					}
					if (preg_match('/^url\(/i', $patternReplace)) {
						$patternReplace = RvsLibs_String::preg_replace('/\(/', '\(', $patternReplace);
						$codeBody = RvsLibs_String::preg_replace('/' . $patternReplace  . '/', 'url(' . $replaceValue , $codeBody);
					}
					$aLayout = RvsLibs_String::dbeExplode('/', strstr($aElement[0][$k], 'layouttemplate'));

					//$layoutId = (isset($aLayout[1])) ? $aLayout[1] : false;
					if (isset($aLayout[1])) {
						$layoutId = $aLayout[1] ;
					} else {
						continue;
					}
					//$layoutImages = (isset($aLayout[2])) ? $aLayout[2] : false;
					if (isset($aLayout[2])) {
						$layoutImages = $aLayout[2] ;
					} else {
						continue;
					}
					$layoutImagesPath = WEB_THEME_PATH . '/themes/default/sitebuilder/images/layouttemplate';
					if (!file_exists($templatePath . '/images/layouttemplate/' . $layoutId) && $layoutId) {
						$resMkdir = RvsLibs_System::mkDir(array('-p', $templatePath . '/images/layouttemplate/' . $layoutId));
						if (SGL::isError($resMkdir) === true)
						return $resMkdir;
					}

					$sourcePath = $layoutImagesPath . '/' . $layoutId . '/' . $layoutImages;
					if (is_null($project_id) === true) {
						$targetPath = $templatePath . '/images/layouttemplate/' . $layoutId . '/' . $layoutImages;
						if (file_exists($sourcePath) === true) {
							$res = RvsLibs_System::copy(array('-R', $sourcePath, $targetPath));
							if (SGL::isError($res) === true)
							return $res;
						}
					} else {
						$targetPath = 'images/layouttemplate/' . $layoutId . '/' . $layoutImages;
						if (file_exists($sourcePath) === true) {
							$res = Publish_CommonListFileTask::_builCopyFilesList($sourcePath, $targetPath);
							if (SGL::isError($res) === true)
							return $res;
						}
					}

				}
			}

			$codeBody = self::_findIconsLibaryTocopy($codeBody, $publishUrl);

			// replace ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝเฉพ๏ฟฝ๏ฟฝ images/$file_name ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ rvs_library/$file_name
			// ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ folder images user ๏ฟฝ๏ฟฝ๏ฟฝาง folder ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ replace ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ
			if (preg_match_all('/<[^(>|\/)].*?>/', $codeBody, $aHTMLElement)) {/*old reg <\w(.*?)> */
				foreach ($aHTMLElement[0] as $htmlLine) {
					if (preg_match_all('/<.*?(flashvars|value|src|href)\s*=\s*(.*?)\/(images|rvs_library|media|rvs_media_library|documents|wysiwygpro)\/.*?>/', $htmlLine, $aElement)) {
					    $aReplace = array();
						foreach ($aElement[0] as $k=>$v) {
							if (preg_match("/^\"http/i", $aElement[2][$k]) && RvsLibs_Template::_isNotCpanelLink($aElement[2][$k])) {
								continue;
							}
							$patternMatch0 = RvsLibs_Template::_registerPatturn($aElement[0][$k]);
							$patternMatch2 = RvsLibs_Template::_registerPatturn($aElement[2][$k] . '/');
							$aReplace[$k] = RvsLibs_String::preg_replace('/' . $patternMatch2  . '/', '"', $aElement[0][$k]);
							$aReplace[$k] = RvsLibs_Template::_replaceThisSrc($aReplace[$k]);
							$aReplace0 = RvsLibs_Template::_replaceFlashCode($aReplace[$k], $publishUrl);
							$codeBody = RvsLibs_String::preg_replace('/' . $patternMatch0  . '/', $aReplace0, $codeBody);
						}
					}
				}
			}

			// �ó� background
			if (preg_match_all('/background\s*=\s*[\"|\'][a-z0-9_.:&?\/-]+(images|rvs_library)\s*/', $codeBody, $aElement)) {
				foreach ($aElement[0] as $k=>$v) {
					if (preg_match("/^http|^background=\"http/i", $aElement[0][$k]) && RvsLibs_Template::_isNotCpanelLink($aElement[0][$k])) {
						continue;
					}
					$patternReplace = RvsLibs_String::preg_replace('/\//', '\/', $aElement[0][$k]);
					if (preg_match('/images/i', $aElement[0][$k], $aMatchOpject)) {
						$replaceValue = strstr($aElement[0][$k], 'images');
					} else {
						$replaceValue = strstr($aElement[0][$k], 'rvs_library');
					}
					$codeBody = RvsLibs_String::preg_replace('/' . $patternReplace  . '/', 'background="' . $replaceValue , $codeBody);
				}
			}

			// replace ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝเฉพ๏ฟฝ๏ฟฝ documents/$file_name
			// ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ folder document user ๏ฟฝ๏ฟฝ๏ฟฝาง folder ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ replace ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ
			if (preg_match_all('/href\s*=\s*[\"|\'][a-z0-9_.:&?\/-]+(documents)\s*/', $codeBody, $aElement)) {
				foreach ($aElement[0] as $k=>$v) {
					if (preg_match("/^http|^href=\"http/i", $aElement[0][$k]) && RvsLibs_Template::_isNotCpanelLink($aElement[0][$k])) {
						continue;
					}
					$patternReplace = RvsLibs_String::preg_replace('/\//', '\/', $aElement[0][$k]);
					$replaceValue = strstr($aElement[0][$k], 'documents');
					$codeBody = RvsLibs_String::preg_replace('/' . $patternReplace  . '/', 'href="' . $replaceValue , $codeBody);
				}
			}
			return $codeBody;
		}

		public static function _findIconsLibaryTocopy($codeBody, $publishUrl = "")
		{
			 if (preg_match_all('/<img(.*?)src\s*=\s*".*?\/wysiwygpro\/icons\/(.*?)\.gif"/', $codeBody, $aElement3)) {
				foreach ($aElement3[0] as $k => $v) {
					$fileName = $aElement3[2][$k] . '.gif';
					$targetPath = 'wysiwygpro/icons/' . $fileName;
					$sourcePath = SGL_WEB_ROOT . '/wysiwyg/themes/default/wysiwygpro/icons/' . $fileName;
					if (is_file($sourcePath) === true) {
						if (class_exists("Publish_CommonListFileTask") === false) {
							require_once SGL_MOD_DIR.'/sitebuilder/classes/Publish/CommonTask.php';
						}
                        SGL::logMessage("pharadol11_sourcePath ". $sourcePath, PEAR_LOG_DEBUG);
						SGL::logMessage("pharadol11_target ". $targetPath, PEAR_LOG_DEBUG);
						//pattern replace not work
						//$codeBody = preg_replace('%<img(.*?)src\s*=\s*".*?\/wysiwyg\/themes\/(.*?)\/' . $targetPath . '"%', '<img$1src="' . $publishUrl .'/' . $targetPath . '"', $codeBody);
						Publish_CommonListFileTask::_builCopyFilesList($sourcePath, $targetPath);
					}
				}
			}
			return $codeBody;
		}

		protected static function _findBulletImagesLibaryToCopy($codeBody, $layoutTemplateId)
		{
            //rvsitebuilder/themes/default/sitebuilder/images/bullet.gif
			if (preg_match_all('/<img(.*?)src\s*=\s*"(.*?)\/themes\/default\/sitebuilder\/images\/(.*?)"/', $codeBody, $match)) {
				foreach ($match[0] as $k => $v) {
					$targetPath = 'images/layouttemplate/' . $layoutTemplateId . '/' . $match[3][$k];
					$sourcePath = SGL_WEB_ROOT . '/themes/default/sitebuilder/' . $targetPath;
					if (is_file($sourcePath) === true) {
						if (class_exists("Publish_CommonListFileTask") === false) {
							require_once SGL_MOD_DIR.'/sitebuilder/classes/Publish/CommonTask.php';
						}
						$codeBody = preg_replace('/<img(.*?)src\s*=\s*".*?\/themes\/default\/sitebuilder\/images\/' . $match[3][$k] . '"/', '<img$1src="' . $targetPath . '"', $codeBody);
						Publish_CommonListFileTask::_builCopyFilesList($sourcePath, $targetPath);
					}
				}
			}
			return  $codeBody;
		}



		/**
		 * Enter description here...
		 *
		 * @param unknown_type $inPattern
		 * @return unknown
		 */
		public static $aPatt = array();
		public static $aRepl = array();
		public static function _registerPatturn($inPattern)
		{
			$aP = array(
                '#\^#i' => '\^',
                '#\$#i' => '\$',
                '#\(#i' => '\(',
                '#\)#i' => '\)',
                '#\{#i' => '\{',
                '#\}#i' => '\}',
                '#\|#i' => '\|',
                '#\/#i' => '\/',
                '#\+#i' => '\+',
                '#\-#i' => '\-',
                '#\.#i' => '\.',
                '#\?#i' => '\?',
                '#\*#i' => '\*',
                '#\[#i' => '\[',
                '#\]#i' => '\]',
                '#\<#i' => '\<',
                '#\>#i' => '\>',
			);
			$aPatt = isset(self::$aPatt) ? self::$aPatt : array();
			$aRepl = isset(self::$aRepl) ? self::$aRepl : array();
			if (count($aPatt) != count(array_keys($aP)) ) {
				foreach ($aP as $k => $v) {
					array_push($aPatt, $k);
					array_push($aRepl, $v);
				}
			}
			return RvsLibs_String::preg_replace($aPatt, $aRepl, $inPattern);
		}

		/**
		 * replac flash code
		 * @param unknown_type $htmlLine
		 * @return unknown_type
		 */
		public static function _replaceFlashCode($htmlLine, $publishUrl=null)
		{
			if (preg_match_all('/<.*?(flashvars=\"file)\s*=\s*(.*?)\/(images|rvs_library|media|rvs_media_library|documents)\/.*?>/', $htmlLine, $aElement)) {
				$aReplace = array();
				foreach ($aElement[0] as $k=>$v) {
					if (preg_match("/^\"http/i", $aElement[2][$k]) && RvsLibs_Template::_isNotCpanelLink($aElement[2][$k])) {
						continue;
					}
					$patternMatch0 = RvsLibs_Template::_registerPatturn($aElement[0][$k]);
					$patternMatch2 = RvsLibs_Template::_registerPatturn($aElement[2][$k] . '/');
					$aReplace[$k] = RvsLibs_String::preg_replace('/' . $patternMatch2  . '/', '', $aElement[0][$k]);
					$htmlLine = RvsLibs_String::preg_replace('/' . $patternMatch0  . '/', $aReplace[$k], $htmlLine);
/*
					// case file *.flv remove /media/file.flv to file.flv apiruk tanawat
					if (preg_match("/(.*?)\.flv/i",$htmlLine)){
						$htmlLine = RvsLibs_String::str_replace('flashvars="file=media/', 'flashvars="file='. $publishUrl . '/media/', $htmlLine);
					}
*/
				}
				// case file *.flv remove /media/file.flv to file.flv apiruk tanawat
				if (preg_match("/(.*?)\.flv|\.mp4/i",$htmlLine)){
					//$htmlLine = RvsLibs_String::preg_replace('/flashvars=".*?media\//', 'flashvars="file='. $publishUrl . '/media/', $htmlLine);
					$htmlLine = RvsLibs_String::preg_replace('/flashvars=\".*?(media|rvs_media_library)/', 'flashvars="file=' . $publishUrl . '/$1', $htmlLine);
				}

			} elseif (preg_match_all('/<.*?name=\"flashvars\".*?>/', $htmlLine, $aElement)) {
				$htmlLine = RvsLibs_String::preg_replace('/value=\".*?(media|rvs_media_library)/', 'value="file=' . $publishUrl . '/$1',  $htmlLine);
			}
			return $htmlLine;
		}

		/** replace url images in case censitive
		 * replace
		 <img alt="" src="/3rdparty/rvsitebuilder/project/{id}/images/masa1.jpg"
		 onmouseover="this.src='/3rdparty/rvsitebuilder/project/{id}/images/masa.jpg';"
		 onmouseout="this.src='/3rdparty/rvsitebuilder/project/{id}/images/masa1.jpg';" />
		 to
		 <img alt="" src="images/masa1.jpg"
         onmouseover="this.src='images/masa.jpg';"
         onmouseout="this.src='images/masa1.jpg';" />
		 * @param string $codeHtml
		 * @return string $codeHtml
		 */
		public static function _replaceThisSrc($codeHtml)
		{
			return preg_replace('/this\.src=(\'|\")(.*?)\/(images|rvs_library|media|rvs_media_library|documents)/', 'this.src=$1$3', $codeHtml);
		}

		/**
		 * validate html data is not cpanel link
		 * Ex.
		 * http://{domain}.com:2082/3rdparty/rvsitebuilder
		 * https://{domain}.com:2083/3rdparty/rvsitebuilder
		 * or with proxy
		 * http://cpanel.{domain}/3rdparty/rvsitebuilder
		 *@author apiruk boonruksa
		 *
		 * @param unknown_type $line
		 * @return unknown
		 */
		public static function _isNotCpanelLink($line)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			// optimize :nipaporn
			return (preg_match("/:208[2|3]\/3rdparty\/rvsitebuilder/", $line, $match) || preg_match("/(.*)\/\/cpanel\.(.*)\/3rdparty\/rvsitebuilder/", $line, $match))
				     ? false
			         : true;
		}

		public static function getPoweredByData($isResponsive = true, $isUikit = false)
		{
			SGL::logMessage('isResponsive: ' . $isResponsive, PEAR_LOG_DEBUG);
			SGL::logMessage('isUikit: ' . $isUikit, PEAR_LOG_DEBUG);
			
			$msg = RvsLibs_String::translate('POWERED BY');
			if ($isResponsive == true || $isUikit == true ) {
				return <<<EOF
				<!-- START POWERED BY BLOCK -->
				<div>$msg <a href="{HOSTLINK}" target="_blank">{HOSTTEXT}</a></div>
				<!-- END POWERED BY BLOCK -->
EOF;
			} else {
				return <<<EOF
				<!-- START POWERED BY BLOCK -->
				<table align="center" cellpadding="0" cellspacing="0" class="bgpowered">
					<tr><td class="bgpowered2">$msg</a></td>
						<td class="marginpw2"><a href="{HOSTLINK}" class="hostlink" target="_blank">{HOSTTEXT}</a></td>
						<td><img src="images/close.jpg" alt="" width="16" style="height:17px;" /></td>
                	</tr>
                </table>
				<!-- END POWERED BY BLOCK -->
EOF;
			}

		}

		public static function replaceCodeBaseSSLMODE($str){
			return (SSL_MODE == 1) ? RvsLibs_String::preg_replace("/(http:\/\/)(download\.macromedia\.com|www\.macromedia\.com)/i","https://$2", $str) : $str;
		}

		public static function replaceEncodeDataFail($codeBody) {
			$strPattern = '/(%25)([\w]{2})/';
			return RvsLibs_String::preg_replace($strPattern, '%$2', $codeBody);
		}

		//template
		public static function replaceDIYConfigPath($oldFileConf,$newFileConf, $key)
		{
			$isMatch = preg_match('/([0-9]{1,3})/i', $oldFileConf[$key], $match);
			$indexConfig = ($key == 'body')?$match[1] - 110:$match[1];
			$fileName = ($isMatch) ? $indexConfig:false;
			$modInt = 3 - RvsLibs_String::strlen($fileName);
			for ($i = 0; $i < $modInt; $i++) {
				$fileName = '0' . $fileName;
			}
            // optimize :nipaporn
			return sprintf('%s%s.ini.php' ,$newFileConf[$key], $fileName);
		}

		//template
		public static function genDIYconfig($confDiy, $aPatDIY)
		{
			// case 1: check if Ver01 Ver02 Ver03 use = $colorConfigPath = SGL_WEB_ROOT/DiyTemplate/diyconfigcolor/$fileName
			if (isset($confDiy['selectLayout'])) {//realLayout=Hor04

				if(preg_match('/Ver[0-3]{1,2}/i', $confDiy['selectLayout'])) {
					$targetConf = 'navigator';
					// case 2: check body is white use $colorConfigPath = SGL_WEB_ROOT/DiyTemplate/diyconfigcolor/$fileName
				} elseif (preg_match('/Hor/i', $confDiy['selectLayout'])) {
					// case 3: check body <> white use $colorConfigPath = SGL_WEB_ROOT/DiyTemplate/diyconfigcolor/$fileName
					//191 = color config white in body
					$targetConf = (preg_match('/191/i', $confDiy['body']))? 'header':'body';
				}
			} else if (isset($confDiy['realLayout'])) {

				if(preg_match('/Ver[0-3]{1,2}/i', $confDiy['realLayout'])) {
					$targetConf = 'navigator';
					// case 2: check body is white use $colorConfigPath = SGL_WEB_ROOT/DiyTemplate/diyconfigcolor/$fileName
				} elseif (preg_match('/Hor/i', $confDiy['realLayout'])) {
					// case 3: check body <> white use $colorConfigPath = SGL_WEB_ROOT/DiyTemplate/diyconfigcolor/$fileName
					//191 = color config white in body
					$targetConf = (preg_match('/191/i', $confDiy['body']))? 'header':'body';
				}
			}

			$fileName = RvsLibs_Template::replaceDIYConfigPath($confDiy, $aPatDIY, $targetConf);
			$colorConfigPath = SGL_WEB_ROOT .'/DiyTemplate/diyconfigcolor/' . $fileName;
			SGL::logMessage('ABC:' . $colorConfigPath, PEAR_LOG_DEBUG);
			return $colorConfigPath;
		}

		//template
		public static function loadStep()
		{
			$pathUrl = SGL_BASE_URL;
			$step = '<table border="1" align="center" width="500">
      <tr>
      <td valign="top"><a tooltiptext="&lt;div id="ToolTipTextWrap"&gt;Edit Site&lt;/div&gt;" rel="addToolTip" onclick="opener.location=\''. $pathUrl . '/index.php/sitebuilder/createproject/\';" href="#" class="enable"><br>STEP1</a></td>
      </tr>
      <tr>
      <td valign="top"><a tooltiptext="&lt;div id="ToolTipTextWrap"&gt;Design&lt;/div&gt;" rel="addToolTip" onclick="opener.location=\''. $pathUrl . '/index.php/sitebuilder/rvscategory/\';"  href="#" class="enable"><br>STEP2</a></td>
       </tr>
       <tr>
      <td valign="top"><a tooltiptext="&lt;div id="ToolTipTextWrap"&gt;Style&lt;/div&gt;" rel="addToolTip" onclick="opener.location=\''. $pathUrl . '/index.php/sitebuilder/selectstyles/\';"   href="#" class="enable"><br>STEP3</a></td>
      </tr>
      <tr>
      <td valign="top"><a tooltiptext="&lt;div id="ToolTipTextWrap"&gt;Page Structure&lt;/div&gt;"  onclick="opener.location=\''. $pathUrl . '/index.php/sitebuilder/pagestructure/\';" href="#" rel="addToolTip" class="active"><br>STEP4</a></td>
      </tr>
      <tr>
      <td valign="top"><a tooltiptext="&lt;div id="ToolTipTextWrap"&gt;Site Content&lt;/div&gt;" rel="addToolTip"  onclick="opener.location=\''. $pathUrl . '/index.php/sitebuilder/listpagestructure/\';"  href="#" class="enable"><br>STEP5</a></td>
      </tr>
      <tr>
      <td valign="top"><a tooltiptext="&lt;div id="ToolTipTextWrap"&gt;Extras&lt;/div&gt;" rel="addToolTip" onclick="opener.location=\''. $pathUrl . '/index.php/sitebuilder/extras/\';"  href="#" class="enable"><br>STEP6</a></td>
      </tr>
      <tr>
      <td valign="top"><a tooltiptext="&lt;div id="ToolTipTextWrap"&gt;Publish&lt;/div&gt;" rel="addToolTip" onclick="opener.location=\''. $pathUrl . '/index.php/sitebuilder/publishsite/action/list/\';"   href="#" class="enable"><br>STEP7</a></td>
      </tr></table>';
			return $step;
		}

		/** dumpFormTemplate()
		 *   Dump Online Form Template  to Online Form Table
		 *
		 */
		//template
		public static function dumpFormTemplate($formTemplateId, $projectId, $projectPageId = null)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$rvsOnlineformId = RvsLibs_String::genUniqueId();
            $aOnlineFormData = DaoFactory::OnlineForm()->findDumpFormTemplateByTemplateId($formTemplateId, 'getrow');
            $aOnlineFormData = array_merge($aOnlineFormData,
                                                                            array(
												                                       'projectPageId' => $projectPageId,
												                                       'rvsUsrId' => RvsLibs_User::getUserId(),
												                                       'rvsOnlineformId' => $rvsOnlineformId,
												                                       'projectId' => $projectId
                                                                                      )
                                                                        );

             //TODO chek res
             ///OPTIMIZE VARIABLE PASSING
             //fixed PHPMD scan 07/07/2554
             DaoFactory::OnlineForm()-> insertDumpFormTemplate($aOnlineFormData);
             return $rvsOnlineformId;
		}

		/**
		 * insertLayoutTemplateIfEmpty
		 *
		 * If the data in PREVIEW or PUBLISH
		 * that will insert into {BODY} is empty, insert layout template instead leave it blank
		 */
		//template
		public static function insertLayoutTemplateIfEmpty($aPageData,$layoutTemplateId, $templateItemFolder)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			foreach ($aPageData as $key=>$value) {
				$layoutTemplateId = (isset($aPageData[$key]->project_page_id) && $aPageData[$key]->project_page_id)
				                      ? RvsLibs_Template::getNewLayoutTemplateId($aPageData[$key]->project_page_id, $layoutTemplateId)
                                      : $layoutTemplateId;

				// แก้ไขปัญหา อักขระ $ หายเวลาสร้างเว็บเพจจริง
				$aPageData[$key]->page_data = RvsLibs_String::str_replace("\$", "\\\$", $aPageData[$key]->page_data);
				// เพิ่ม page data default layout template กรณีที่เลือกให้แสดง และ user ยังไม่ได้สร้างข้อมูลใด ๆ
				//fixed PHPMD scan 07/07/2554
				//$rvNoLayout = RVS_USER_HOME . '/.rvsitebuilder/rvsNoLayout.txt';
				if ($aPageData[$key]->page_data == '' ) {
					// Component Page
					if ($aPageData[$key]->rvs_component_id) {
						$aComponentData = RvsLibs_Component::getComponentData($aPageData[$key]->rvs_component_id);
						$aGetKey = array_keys($aComponentData);
						$componentKey = $aGetKey[0];
						$componentName = $aComponentData[$componentKey]->component_name;
						$projectPageId = $aPageData[$key]->project_page_id;
						// *** ONLINE FORM COMPONENT
						if ($componentName == 'Online_Form' ) {
							if ($aPageData[$key]->form_template_id == '' || $aPageData[$key]->form_template_id == 0) {
								// Create Online Form Template
								$defaultFormTemplateId = 1;
								$onlineFormId = RvsLibs_Template::dumpFormTemplate($defaultFormTemplateId, $aPageData[0]->project_id, $projectPageId);
								RvsLibs_Template::setFormTemplateId($onlineFormId, $projectPageId, $aPageData[$key]->project_id, $aPageData[$key]->rvs_usr_id);
							} else {
								$onlineFormId = $aPageData[$key]->form_template_id;
							}
							$aPageData[$key]->page_data = '<img width="234" height="60" border="1" alt="" id="onlineform_' . $onlineFormId . '" name="onlineform_' . $onlineFormId . '"';
							$aPageData[$key]->page_data .= ' class="onlineForm" src="' . PUBLIC_IMG_URL . '/spacer.gif" /><br />';
							$aPageData[$key]->page_data .= '<p>&nbsp;</p>';  /*/ END IF : Online Form     Component // END IF : Component Page */
						}
					} else {
						/*
						if (!file_exists($rvNoLayout)) {

							$aTemplateData = RvsLibs_Template::getTemplatesData($aPageData[0]->project_id);
							$layoutTemplate = RvsLibs_Template::GetLayoutData($layoutTemplateId, $templateItemFolder,$aTemplateData->templatePath);
							$layoutTemplate['body'] = RvsLibs_String::str_replace('src="' . PUBLIC_IMG_URL . "/" , 'src="images/', $layoutTemplate['body']);
							// เราไม่ตั้งค่า $aPageData[$key]->head = $LayoutTemplate['head'] เนื่องจาก
							// ต้องการให้ค่า $aPageData[$key]->page_data เหมือนกับ user submit เข้าไปใน
							// WYSIWYG (wysiwyg ไม่สามารถแยกส่วน head กับ data ออกจากกันได้)
							$aPageData[$key]->page_data = $layoutTemplate['head'] . $layoutTemplate['body'];
							$aPageData[$key]->page_data .= '<p>&nbsp;</p>';
						}*/

						if (!RvsLibs_Config::isNoLayoutTemplste()) {
							$aTemplateData = RvsLibs_Template::getTemplatesData($aPageData[0]->project_id, true);
							$layoutTemplate = RvsLibs_Template::GetLayoutData($layoutTemplateId, $templateItemFolder,$aTemplateData->templatePath);
							$layoutTemplate['body'] = RvsLibs_String::str_replace('src="' . PUBLIC_IMG_URL . "/" , 'src="images/', $layoutTemplate['body']);
							// เราไม่ตั้งค่า $aPageData[$key]->head = $LayoutTemplate['head'] เนื่องจาก
							// ต้องการให้ค่า $aPageData[$key]->page_data เหมือนกับ user submit เข้าไปใน
							// WYSIWYG (wysiwyg ไม่สามารถแยกส่วน head กับ data ออกจากกันได้)
							$aPageData[$key]->page_data = $layoutTemplate['head'] . $layoutTemplate['body'];
							$aPageData[$key]->page_data .= '<p>&nbsp;</p>';
						}
						/*  END  ELSE : component page //END IF : page_data = '' */
					}
				}
			} /* END FOR */
			return $aPageData;
		}

		public static function replaceValues($aValues, $projectUrl=PROJECT_URL, $publishPath=TEMPLATE_PATH, $publishUrl=TEMPLATE_URL, $action=0)
		{
			SGL::logMessage('project_url=' . $projectUrl . ', publishPath=' . $publishPath . ', publishUrl=' . $publishUrl, PEAR_LOG_DEBUG);
			$aData = array();
			// START is navigator template specific fix navigator_name_id = 999
			$oTempalteData = $aValues['aTemplateData'];
			$isResponsive = RvsLibs_Template::isResponsiveTemplate($oTempalteData->templatePath . '/' . $oTempalteData->template_item_folder);
			if ($aValues['aProjectInfoData']->navigator_name_id == 999) {
			  /*
			  fixed problem case url  import  template  specific  :: nipaporn
			  */
			    if (is_object($oTempalteData) && isset($oTempalteData->templateUrl)) {
			        $publishUrl = $oTempalteData->templateUrl;
			    }
			   $url = ($action != 0) ? $publishUrl : $publishUrl . '/' . $aValues['aProjectInfoData']->template_item_folder;
               $navigatorCssUrl = sprintf('%s/templatespecific.css?ABCSESS=%s', $url, md5(microtime()));
			} else {
				$navigatorCssUrl = RvsLibs_Navigator::getNavigatorUrl($aValues, $publishPath, $publishUrl, $action);
			}
			// END is navigator template specific fix navigator_name_id = 999


			$urlProject = PROJECT_URL . '/' . $aValues['aProjectInfoData']->project_id;
			$publishUrlCssUrl = ($action == 0) ? $urlProject . '/tmp/pathway.css' : $urlProject . '/pathway.css';
			$aData['xml_lang'] = ' xml:lang="' . $aValues['aCharsetData']->xml_lang . '" lang="' . $aValues['aCharsetData']->xml_lang . '"';
			$aData['HTMLDIR']  = $aData['xml_lang'];

			/* ๏ฟฝ๏ฟฝ๏ฟฝ meta*/
			$aData['charset']   = sprintf('<meta http-equiv="Content-Type" content="text/html; charset =%s" />', RvsLibs_Util::getCurrentCharset($aValues['aCharsetData']->charset_value));
			$aData['metadata']  = "<!--METAKEYWORD-->\n<!--METADESCRIPTION-->\n<!--CUSTOMMETATAG-->\n";
			$aData['file_css']  = "<!--FONTCSS-->\n<!--NAVIGATORCSS-->\n<!--PATHWAYCSS-->\n<!--CUSTOMPROJECTCSS-->\n";

			// check show created by
			if (isset($aValues['PoweredByData']) && count($aValues['PoweredByData']) > 0) {

				$aData['powered'] = $aValues['PoweredByData'];
			} else {

				$aData['powered'] = "";
			}
			if (isset($aValues['aTemplateFooter']->powered_by)
			&& $aValues['aTemplateFooter']->powered_by) {
				$aData['hostlink'] = $aValues['aTemplateFooter']->powered_url;
				$aData['hosttext'] = $aValues['aTemplateFooter']->powered_text;
			} else {
				$aData['hostlink'] = "#";
				$aData['hosttext'] = "";
			}
			if (isset($aValues['CreateByData']) && $aValues['CreateByData'] === true) {
				$aData['rvbanner'] = RvsLibs_Template::getCodeCreatedByData($action, $publishUrl, $isResponsive);
			} else {
				$aData['rvbanner'] = '';
			}

			$autoResizeLogo = '';
            $logoFile = RvsLibs_File::buildPath(array(REAL_PROJECT_PATH, $aValues['aProjectInfoData']->project_id, $aValues['aProjectInfoData']->project_logo));
            if (is_file($logoFile) == true) {
            	$aImg = RvsLibs_Image2::getImageSize($logoFile);
            	if (SGL::isError($aImg)) {
            		SGL_Error::pop();
            	} else {
            		if (isset($aImg[0]) && isset($aImg[1])) {
            			$autoResizeLogo = ' width="' . $aImg[0] . '" height="' . $aImg[1] . '" ';
            		}
            	}
            }

			if ($action && $action != 0) {
				// Logo Link To Home Page
				if ($aValues['aProjectInfoData']->project_logo && $aValues['aProjectInfoData']->project_logo != "NOPIC") {
					$aData['project_logo'] =  '<a href="' . $aValues['previewUrl']  . '/index.php" >';
					$aData['project_logo'] .= '<img src="' . $aValues['aProjectInfoData']->project_logo . '?' . $aValues['sessionID'] . '" ' . $autoResizeLogo . 'border="0" alt="Logo" />';
					$aData['project_logo'] .=  '</a>';
				} else {
					$aData['project_logo'] =  '';
				}
				$aData['font_css_url'] = $publishUrl;
				$aData['publishUrl'] = $publishUrl;
				$aData['publishPath'] = $publishPath;
				$fontPath = $publishPath;
			} else {
				if ($aValues['aProjectInfoData']->project_logo && $aValues['aProjectInfoData']->project_logo != "NOPIC") {
					$aData['project_logo'] = '<img src="' . $projectUrl . '/' . $aValues['aProjectInfoData']->project_id . '/' . $aValues['aProjectInfoData']->project_logo . '?' . $aValues['sessionID'] . '" ' . $autoResizeLogo . 'border="0" alt="Logo" />';
				} else {
					$aData['project_logo'] = '';
				}
				$aData['font_css_url'] = $publishUrl . "/font";
				$aData['publishUrl'] = $aValues['aTemplateData']->templateUrl . "/" . $aValues['aProjectInfoData']->template_item_folder;
				$aData['publishPath'] = $publishPath;
				$fontPath = $publishPath . '/font';
			}
			$aData['wwwusersUrl'] = SGL_USERDATA_URL . '/' . RVS_USER_NAME . '/upload';
			$aData['wwwusersPath'] = SGL_USERDATA_PATH . '/' . RVS_USER_NAME . '/upload';

			$aGoogleFonts = RvsLibs_Util::getGoogleFonts();
			if (isset($aGoogleFonts[$aValues['aProjectInfoData']->font_id])) {
				$aFont = $aGoogleFonts[$aValues['aProjectInfoData']->font_id];
				$fontName = RvsLibs_Util::getFontfile($aFont['name']);
				$cssFile = $fontPath . '/' . $fontName;
				RvsLibs_Util::compileGoogleFontCss($cssFile, $aFont);
			} else {
				$fontName = RvsLibs_Project::getFontData($aValues['aProjectInfoData']->font_id);
				$fontName = RvsLibs_Util::getFontfile($fontName);
			}
			$aData['font_css'] = '<link rel="stylesheet" href="' . $aData['font_css_url'] . '/' . $fontName . '.css" type="text/css" />';

			/* START add style magin customcss save มาจาก step2: nipaporn */
		    $customCssPath = RvsLibs_Project::validateCustomCssPath(
		    	$aValues['aProjectInfoData']->project_id,
		    	$aValues['aProjectInfoData']->template_item_folder
		    );

			$fileDefaultCss = $isResponsive ? '' : 'style.css';
		    $fileCustomPath =  RvsLibs_File::buildPath(array(
		    	$customCssPath, $fileDefaultCss
		    ));
			$aData['publish'] = PROJECT_URL;
            if (is_file($fileCustomPath) === true) {
            	$customCssUrl = str_replace(REAL_PROJECT_PATH, PROJECT_URL, $customCssPath);
            	$fileCustomPath =  RvsLibs_File::buildPath(array(
            		$customCssUrl, $fileDefaultCss
            	));
                $aData['customproject_css'] = '<link rel="stylesheet" href="' . $fileCustomPath . '" type="text/css" />';
            } else {
            	$aData['customproject_css'] = '';
            }
            /*END add style magin customcss save มาจาก step2: nipaporn*/

			$aData['navigator_css'] = '<link rel="stylesheet" href="' . $navigatorCssUrl  . '" type="text/css" />';
			$aData['pathway_css'] = '<link rel="stylesheet" href="' . $publishUrlCssUrl . '" type="text/css" />';

			//เพราะว่าในฝั่ง phpsuexec ไม่มี template
			/*$oMainComponent = MainComponent::singleton();
			if (CPMODE == 'tryout' && $oMainComponent->detectPhpSuexec()) {
			$aData['navigator_css'] = RvsLibs_String::preg_replace('/\/template\//','/phpsuexec/template/',$aData['navigator_css']);
			}*/

			$aData['action'] = $action;
			$aData['template_path'] = $aValues['aTemplateData']->templatePath;
			$aData['aValues'] = $aValues;

			// TODO: remove this line after completed
			/*if (!isset($aData['aValues']['rvs_owner_id'])) {
			$aData['aValues']['rvs_owner_id'] = $aData['aValues']['aPageData'][0]->rvs_owner_id;
			}*/

			//START write project config CompoDB
			$aVal = array();
			$aVal['template']['xml_lang'] = $aValues['aCharsetData']->xml_lang;
			$aVal['template']['charset_name'] = $aValues['aCharsetData']->charset_name;
			$aVal['template']['charset'] = (RvsLibs_DB::isDatabaseUtf8() === true)
                                             ? 'utf-8'
                                             : $aValues['aCharsetData']->charset_value;
			$aVal['template']['project_logo'] = $aValues['aProjectInfoData']->project_logo;
			$aVal['template']['font_css'] = $fontName . '.css';
			$aVal['template']['navigator_css_url'] = $navigatorCssUrl;
			RvsLibs_Project::makeProjectConfigFile($aValues['aProjectInfoData']->project_id, $aVal);
			//END CompoDB
			// optimize :nipaporn
			return  RvsLibs_Template::complierSource($aData);
		}

		/**
		 * return mix
		 *            string: for complier WYSIWYG ($aData['action'] == 0)
		 *            array: for complier page publish or preview ($aData['action'] != 0)
		 */
		//ไว้ก่อน
		public static function complierSource($aData)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$oPublishReg = Publish_Registry::singleton();
			$isUikit = $oPublishReg->get('isUikit');
			//Start check template blank : by duangdao.k
			$aCodePreview = array();
			$projectId = $aData['aValues']['aProjectInfoData']->project_id;
            $projectPageIdId = (isset($aData['aValues']['aPageData'][0]->project_page_id) && $aData['aValues']['aPageData'][0]->project_page_id)
                                     ? $aData['aValues']['aPageData'][0]->project_page_id : '';
			$aProject = DaoFactory::ProjectPage()->findProjectPageDataByProjectPageId($projectPageIdId, 'getrow', $aResultFields=array('project_page_id', 'blank_page'));
			if (isset($aProject['blank_page']) && $aProject['blank_page'] == '1') {
			   $aCodePreview = RvsLibs_File::file(RvsLibs_File::buildPath(array(SGL_MOD_DIR, 'sitebuilder', 'templates', 'rvs_template_blank.html')));
			} else {
			    $aCodePreview = RvsLibs_File::file($aData['template_path'] . "/" . $aData['aValues']['aProjectInfoData']->template_item_folder . '/index.htm');
			}
			//End check template blank : by duangdao.k
			if (!$aCodePreview) {
				////////// siwakorn directadmin /////////
				SGL_HTTP::redirect(INDEX_PHPSU . "/sitebuilder");
			}
			//New Object Class
			if (class_exists('IconPathway') === false) {
				require_once SGL_MOD_DIR . '/sitebuilder/classes/IconPathway.php';
			}
			$oIconPathway = new IconPathway();

			//validate noCompanyName , noSlogan
			$companyName = RvsLibs_Project::noCompanyName($aData['aValues']['aProjectInfoData']->no_company_name,$aData['aValues']['aProjectInfoData']->project_company);
			$slogan = RvsLibs_Project::noSlogan($aData['aValues']['aProjectInfoData']->no_slogan, $aData['aValues']['aProjectInfoData']->project_slogan);
			//get code
			$codeOpenCustomSize = RvsLibs_Scripts::appendCodeOpenCustomSize();
			//include file js custom open window
			$includeFilePath = ($aData['action'] != 0) ? $aData['publishPath'] : $aData['wwwusersPath'];
			$includeFileUrl = ($aData['action'] != 0) ? $aData['publishUrl'] : $aData['wwwusersUrl'];
			$codeOpenCustomSize = RvsLibs_Project::projectIncludeFile($aData['action'], $codeOpenCustomSize, $includeFilePath, $includeFileUrl, 'rvscustomopenwindow', 'js');

			//$projectCodeComment = $this->getProjectCodeComment($aData['action'], $aData['aValues']['aProjectInfoData']->project_name, $aData['aValues']['aProjectInfoData']->template_item_folder, $aData['aValues']['aProjectInfoData']->project_id);
			if (class_exists('PreviewMgr') === false) {
				require_once SGL_MOD_DIR . '/sitebuilder/classes/PreviewMgr.php';
			}

			if ($aData['action'] == 0) {
				$step = 'wysi';
			} else {
				$step = 'step3';
			}
			SGL::logMessage('Witoon check step===>' . $step . ' === action ===>' . $aData['action'], PEAR_LOG_DEBUG);
			$topDataBlog = PreviewMgr::getSideDataBlog("TOP", $projectId,false,$step);
			$bottomDataBlog = PreviewMgr::getSideDataBlog("BOTTOM", $projectId,false,$step);
			$side1DataBlog = PreviewMgr::getSideDataBlog("SIDE1", $projectId,false,$step);
			$side2DataBlog = PreviewMgr::getSideDataBlog("SIDE2", $projectId,false,$step);

			//Publish/Preview Display Ads News TOP, SIDE1, SIDE2, BUTTOM
			if ($aData['action'] != 0) {
				$aExtra = RvsLibs_Template::cleanCodeSide($projectId, $aExtra, $aData['publishPath'], $aData['aValues']['aProjectInfoData']->layout_template_id, $aData['aValues']['aPageData']);
			}

			if (class_exists('GeneralAPI') === false) {
				include_once SGL_MOD_DIR . '/sitebuilder/classes/GeneralAPI.php';
			}

			$oAPI = new GeneralAPI();
			$oAPI->publishPath = $aData['publishPath'];
			$oAPI->publishUrl = $aData['publishUrl'];
			//START LOOP replace valiable
			foreach ($aData['aValues']['aPageData'] as $k=>$v) {
				$oAPI->isCompoDB = (isset($aData['aValues']['aPageData'][$k]->use_db)) ? $aData['aValues']['aPageData'][$k]->use_db : false;
				$componentName = (isset($aData['aValues']['aPageData'][$k]->component_name)) ? $aData['aValues']['aPageData'][$k]->component_name : '';
                //fixed PHPMD scan 07/07/2554
				//$aCodeData = "";
				$oAPI->getSourceMode = $aData['action'];
				$xmlCharSet = RvsLibs_Template::getXMLTagReplace($aData['action'], $aData['aValues']['aCharsetData']->charset_value, $aData['aValues']['aPageData'][$k]->rvs_component_id, $aData['aValues']['aPageData'][$k]->page_data);
				$oAPI->register('<\?xml version="1.0" encoding="{XMLCHARSET}"\?>', $xmlCharSet);
				$oAPI->register('{HTMLDIR}' , $aData['HTMLDIR']);

				$oAPI->register('href="style.css"', 'href="' . $oAPI->publishUrl . '/style.css"');
				$oAPI->register('<script src="AC_RunActiveContent.js"', '<script src="' . $oAPI->publishUrl . '/AC_RunActiveContent.js"');
				$oAPI->register('<script src="Scripts/AC_RunActiveContent.js"', '<script src="' . $oAPI->publishUrl . '/Scripts/AC_RunActiveContent.js"');
				$oAPI->register('<link\s*rel="stylesheet"\s*href="templatespecific.css"\s*type="text/css"\s*/>', '');

				if ($aData['aValues']['aPageData'][$k]->page_title) {
					$oAPI->register("{TITLE}", $aData['aValues']['aPageData'][$k]->page_title);
				} elseif ($aData['aValues']['aProjectInfoData']->project_title) {
					$oAPI->register("{TITLE}", $aData['aValues']['aProjectInfoData']->project_title);
				} else {
					$oAPI->register("{TITLE}", $aData['aValues']['aProjectInfoData']->project_name);
				}

				$oAPI->register("<!--\W{0,}CHARSET\W{0,}-->", $aData['aValues']['aPageData'][$k]->meta_page_effect . "\n" . $aData['charset'] . "\n"  . $aData['metadata']);

				if ($aData['aValues']['aPageData'][$k]->meta_keyword == '') {
					$oAPI->register("<!--METAKEYWORD-->", '<meta name="keywords" content="' . $aData['aValues']['aProjectInfoData']->project_keyword . '" />');
				} else {
					$oAPI->register("<!--METAKEYWORD-->", '<meta name="keywords" content="' . $aData['aValues']['aPageData'][$k]->meta_keyword . '" />');
				}
				if ($aData['aValues']['aPageData'][$k]->meta_description == '') {
					$oAPI->register("<!--METADESCRIPTION-->", '<meta name="description" content="' . $aData['aValues']['aProjectInfoData']->project_description . '" />');
				} else {
					$oAPI->register("<!--METADESCRIPTION-->", '<meta name="description" content="' . $aData['aValues']['aPageData'][$k]->meta_description . '" />');
				}

				///Start replace custom matatag :: Witoon
				if (isset($aData['aValues']['aCustomMetatag']) && count($aData['aValues']['aCustomMetatag']) > 0) {
					$aCustomPageMetatag = RvsLibs_Project::getCustomMetatagByProjectPage(
					$aData['aValues']['aPageData'][$k]->project_real_page_id
					, $aData['aValues']['aPageData'][$k]->rvs_usr_id
					);
					$aCustomPageMetatag = array_merge($aData['aValues']['aCustomMetatag'], $aCustomPageMetatag);

					$metatag = '';
					foreach ($aCustomPageMetatag as $ketMeta => $valMeta) {
						$metatag .= '<meta ' . $valMeta->metatag_type . '="' . $valMeta->metatag_name . '" content="' . $valMeta->metatag_content . '" />' . "\n";
					}
					$oAPI->register("<!--CUSTOMMETATAG-->", $metatag);
				}
				///End replace custom matatag

				$oAPI->register("<!--\W{0,}CSS\W{0,}-->", $aData['file_css']);
				$oAPI->register("<!--FONTCSS-->", $aData['font_css']);
				$oAPI->register("<!--NAVIGATORCSS-->", $aData['navigator_css']);
				$oAPI->register("<!--PATHWAYCSS-->", $aData['pathway_css']);
				$oAPI->register("<!--CUSTOMPROJECTCSS-->", $aData['customproject_css']);
				//START replace margin
				  $topMargin = <<<EOF
<tr><td align="center" class="content_margin_top"></td></tr>
<!-- Begin TOP -->
EOF;
            $oAPI->register("<!-- Begin TOP -->", $topMargin);
            $bottonMargin = <<<EOF
<!-- End BOTTOM -->
<tr><td align="center" class="content_margin_bottom"></td></tr>
EOF;
            $oAPI->register("<!-- End BOTTOM -->", $bottonMargin);
            if ($isUikit == false) {
            	$bodymargin = '<div class="content_margin_left_right">{BODY}</div>';
            	$oAPI->register("{BODY}", $bodymargin);
            }
				//END replace margin
				$oAPI->register("{LOGO}", $aData['project_logo']);
				$oAPI->register("{COMPANY_NAME}", $companyName);
				$oAPI->register("{SLOGAN}", $slogan);
				// Rewrite Navigator code to show the active page status for the navigator link
				if ($aData['action'] && ($aData['action'] == 1 || $aData['action'] == 2)) {
					// $nav_action =0 ๏ฟฝ๏ฟฝ๏ฟฝยถึง generateNavigator ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝับหน๏ฟฝ๏ฟฝ WYSIWYG
					// $nav_action =1 ๏ฟฝ๏ฟฝ๏ฟฝยถึง generateNavigator ๏ฟฝรณีก๏ฟฝ SitePreview ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ Publish
					$navAction = 1;
					$currentPageId = (isset($aData['aValues']['aPageData'][$k]->parent_project_page_id)) ? $aData['aValues']['aPageData'][$k]->parent_project_page_id : $aData['aValues']['aPageData'][$k]->project_page_id;
					$aDataNavigatorData = RvsLibs_Navigator::generateNavigator(null, $aData['aValues']['rvs_owner_id'], $aData['aValues']['aPageStructure'] , $currentPageId, $navAction, $aData['aValues']['aProjectInfoData']->menustyle_id, $aData['aValues']['aPageData'][$k]->project_real_page_id, $aData['aValues']['previewUrl']);
					$aData['aValues']['navigatorData'] = $aDataNavigatorData[1] . "\n" . $aDataNavigatorData[2];
					$aData['aValues']['aPageData'][$k]->head = $aData['aValues']['aPageData'][$k]->head . "\n\n" . $aDataNavigatorData[0];
				}

				// is navigator hide reset {NAVIGATOR} empty
				if (RvsLibs_Navigator::isNavigatorHide($projectId)) {
					$aData['aValues']['navigatorData'] = '';
				}

				// generate ComponentInsideHead Code on Preview and Publish
				$codeComponentInsideHead = '';
				if ($aData['action'] && ($aData['action'] == 1 || $aData['action'] == 2) && $aData['aValues']['aPageData'][$k]->rvs_component_id) {
					$codeComponentInsideHead = RvsLibs_Component::publishHtmlInsideHead($aData['aValues']['aPageData'][$k]->rvs_component_id, $aData['aValues']['aPageData'][$k]->project_real_page_id);
				}

				$includeFilePath = ($aData['action'] != 0) ? $aData['publishPath'] : $aData['wwwusersPath'];
				$includeFileUrl = ($aData['action'] != 0) ? $aData['publishUrl'] : $aData['wwwusersUrl'];
				$scriptHeadInclude = RvsLibs_Project::projectIncludeFile($aData['action'], $aData['aValues']['aPageData'][$k]->head . "\n", $includeFilePath, $includeFileUrl, 'rvsnavigator', 'js');

				$oAPI->register("<!--\W{0,}HEAD\W{0,}-->",  $scriptHeadInclude . "\n" . $codeComponentInsideHead . "\n" . $codeOpenCustomSize . "\n");
				$oAPI->register("{NAVIGATOR}", $aData['aValues']['navigatorData']);
				$oAPI->register("{POWERED}", $aData['powered']);
				$oAPI->register("{HOSTLINK}", $aData['hostlink']);
				$oAPI->register("{HOSTTEXT}", $aData['hosttext']);
				$oAPI->register('background="', 'background="' . $oAPI->publishUrl . '/');
				if (is_array($aCodePreview)) {
					$aCodePreview = implode('',$aCodePreview);
					$aCodePreview = RvsLibs_Template::replaceHeaderBanner($aCodePreview, $oAPI->publishUrl);
				}
				if (!$aData['action'] || $aData['action'] == 0) {
					$oAPI->register('<param name="movie" value="', '<param name="movie" value="' . $oAPI->publishUrl . '/');
					///จะมีปัญหากับ images ที่ ใส่ full url(http:// หรือ https://)
					//$oAPI->register('src="', 'src="' . $oAPI->publishUrl . '/');
					$oAPI->register('src="/', 'src="' . $oAPI->publishUrl . '/');
					$oAPI->register('src="images/', 'src="' . $oAPI->publishUrl . '/images/');

					$oAPI->register('src="' . $oAPI->publishUrl . '/' . WEB_THEME_URL, 'src="' . WEB_THEME_URL);
					$oAPI->register('src="' . $oAPI->publishUrl . '/images/down-arrow.gif', 'src="' . WEB_THEME_URL . '/themes/default/sitebuilder/images/down-arrow.gif');
					$oAPI->register('src="' . $oAPI->publishUrl . '/images/forward-arrow.gif', 'src="' . WEB_THEME_URL . '/themes/default/sitebuilder/images/forward-arrow.gif');
					$oAPI->register('src="' . $oAPI->publishUrl . '/images/close.jpg', 'src="' . TEMPLATE_URL . '/font/images/close.jpg');
					$oAPI->register('src="' . $oAPI->publishUrl . '/images/headerbanner', 'src="' . PROJECT_URL . '/' . $projectId . '/images/headerbanner');
					//Preview flash AC_FL_RunContent()
					$oAPI->register('<script src="' . $oAPI->publishUrl . '/' . $oAPI->publishUrl . '/AC_RunActiveContent.js', '<script src="' . $oAPI->publishUrl . '/AC_RunActiveContent.js');
					$oAPI->register('<script src="' . $oAPI->publishUrl . '/' . $oAPI->publishUrl . '/Scripts/AC_RunActiveContent.js', '<script src="' . $oAPI->publishUrl . '/Scripts/AC_RunActiveContent.js');
					$oAPI->register("'src','images/", "'src','" . $oAPI->publishUrl . "/images/");
					$oAPI->register("'movie','images/", "'movie','" . $oAPI->publishUrl . "/images/");
					$oAPI->register('src="' . $oAPI->publishUrl . '/' . PROJECT_URL, 'src="' . PROJECT_URL);

					///for responsive web
					$template_item_path = $aData['template_path'] . '/' . end(explode('/', $aData['publishUrl']));
					if (is_file($template_item_path . '/base.css')) {
						$oAPI->register('href="base.css"', 'href="' . $aData['publishUrl'] . '/base.css"');
					}
					if (is_file($template_item_path . '/skeleton.css')) {
						$oAPI->register('href="skeleton.css"', 'href="' . WEB_THEME_URL . '/responsiveTemplates/stylesheets/wys_skeleton.css"');
					}

					if (is_file($template_item_path . '/layout.css')) {
						if ($aData['action'] == 0) {
							$layoutCss = RvsLibs_Template::getLayoutCss();
							$oAPI->register('href="layout.css"', 'href="' . $layoutCss['scriptUrl'] . '"');
						} else {
							$oAPI->register('href="layout.css"', 'href="' . $aData['publishUrl'] . '/layout.css"');
						}
					}

					/*
					if (is_file($template_item_path . '/rvsb_common.css')) {
						$oAPI->register('href="rvsb_common.css"', 'href="' . $aData['publishUrl'] . '/rvsb_common.css"');
					}
					*/
				}

				$oAPI->register("{RVBANNER}", $aData['rvbanner']);
				$includeFilePath = ($aData['action'] != 0) ? $aData['publishPath'] : $aData['wwwusersPath'];
				$includeFileUrl = ($aData['action'] != 0) ? $aData['publishUrl'] : $aData['wwwusersUrl'];
				$iconPathwayCode = $oIconPathway->generateIconPathway($aData['aValues']['aProjectInfoData'], $aData['aValues']['aPageData'][$k], $includeFilePath, $includeFileUrl ,$aData['action']);
				$aExtra['footer'] = '';

				// path way config adjustMgr By project v.5 11/11/2011
				$styleDisplay = ($aData['aValues']['aProjectInfoData']->i_pathway == '1') ? 'style="display:block;"' : 'style="display:none;"';
				$pathwayHTML = '<span id="zone_pathway" '.$styleDisplay.'>'.$iconPathwayCode['pathway'].'</span>';
				$oAPI->register("{PATHWAY}", $pathwayHTML);
				$oAPI->register("{ICON}", '<input type="button" class="btnpathway" value="' . RvsLibs_String::translate('Breadcrumb Navigation') . '" name="bu_pathway" onclick="jQuery.sitebuilder.sitebuilder.openDialogShowHidePathway();">');
				//$oAPI->register("{ICON}", $iconPathwayCode['icon']);

				$oAPI->register("{FOOTER}", $aExtra['footer']);

				//tet modify side width
				$oAPI->register('<td width="160" align="center" valign="top" class="magin"', '<td align="left" valign="top" class="magin"');
				$oAPI->register('<td width="160" valign="top" align="center" class="magin"', '<td align="left" valign="top" class="magin"');

				if ($aData['action'] != 0) {
					$oAPI->register("{TOP}", $aExtra['top']);
					$oAPI->register("{BOTTOM}", $aExtra['bottom']);
					//RVS CompoDB don't replace side value
					if (!$oAPI->isCompoDB) {
						//for guestbook only cannot add side from framework pear die:apiruk
						$side1 = ($componentName != 'GuestBook') ? $aExtra['side1'] : $aExtra['nonframework_side1'];
						$side2 = ($componentName != 'GuestBook') ? $aExtra['side2'] : $aExtra['nonframework_side2'];
						$oAPI->register("{SIDE1}", $side1);
						$oAPI->register("{SIDE2}", $side2);
					}
					//RVS CompoDB
				} else {
					$oAPI->register("{TOP}", $topDataBlog);
					$oAPI->register("{BOTTOM}", $bottomDataBlog);
					$oAPI->register("{SIDE1}", $side1DataBlog);
					$oAPI->register("{SIDE2}", $side2DataBlog);
				}

				//set MasterPage for Online_form
				$oAPI->setMasterPage($aCodePreview);
				if ($aData['action'] && $aData['action'] != 0) {
					// copy images from rvs_library to project/$projectId/rvs_library
					//  $this->copyRvsLibraryImages($aData['aValues']['aPageData'][$k]->project_id , $aData['aValues']['aPageData'][$k]->page_data, $oAPI->publishPath);

					// ===== START GEN wysi Zone  add by darawan 19/01/2553 ======
					$bodyPageZoneData = RvsLibs_Project::bodyPageDataZone($aData['aValues']['aPageData'][$k]);
					// ===== END GEN wysi Zone  add by darawan 19/01/2553 =====

					// replace path ๏ฟฝอก๏ฟฝ๏ฟฝอน๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝแทนลง๏ฟฝ๏ฟฝ๏ฟฝวน๏ฟฝอง {BODY}
					//fixed PHPMD scan 07/07/2554
					$codeBody = RvsLibs_Template::cleanCodeBody($bodyPageZoneData, $oAPI->publishPath, $aData['aValues']['aProjectInfoData']->layout_template_id);
					//***************************************************************************
					if (isset($aData['aValues']['createauto']) && $aData['aValues']['createauto']) {
						$codeBody = RvsLibs_Template::loadStep();
					}
					//***************************************************************************
					//RVS CompoDB
					if (isset($aData['aValues']['aPageData'][$k]->use_db) && $aData['aValues']['aPageData'][$k]->use_db) {
						if ($aData['action'] == 1) {
							$oAPI->register("{BODY}", "<div align=center><font color=red>Sorry, This component cannot display on preview website.</font></div>");
						}
					} else {
						$oAPI->register("{BODY}", $codeBody);
					}

					//RVS CompoDB
				}
				$oAPI->register_template($aCodePreview);
				$oAPI->unregister();
				$pageCodeData = $oAPI->fetch();
				$oAPI->unregister_all();

				if ($aData['action'] && $aData['action'] != 0) {
					$aData1[$aData['aValues']['aPageData'][$k]->project_page_id]['PageId'] = $aData['aValues']['aPageData'][$k]->project_page_id;
					$aData1[$aData['aValues']['aPageData'][$k]->project_page_id]['RealPageId'] = $aData['aValues']['aPageData'][$k]->project_real_page_id;
					$aData1[$aData['aValues']['aPageData'][$k]->project_page_id]['ComponentId'] = $aData['aValues']['aPageData'][$k]->rvs_component_id;
					$aData1[$aData['aValues']['aPageData'][$k]->project_page_id]['CodeHtml'] = $pageCodeData . $projectCodeComment;
				}
			}
			//END LOOP replace valiable
			if ($aData['action'] && $aData['action'] != 0) {
				ksort($aData1);
				/// return array
				return $aData1;
			} else {
				/// return string code HTML
				$pageCodeData = RvsLibs_Template::replaceCodeBaseSSLMODE($pageCodeData);
				return $pageCodeData;
			}
		}

		/**
		 * validate get <?xml code for html or php extension
		 *
		 * @param string $action
		 * @param string $charset
		 * @param string $pageData
		 * @return string $xmlData
		 */
		///ไว้ก่อน
		public static function getXMLTagReplace($action, $projectCharset, $rvsComponentId, $pageData)
		{
			$oMgr = new SGL_Manager();
			if ($rvsComponentId) {
				// Component Page
				if ($action == 0) {
					$xmlData = '<?xml version="1.0" encoding="' . $projectCharset . '" ?>' . "\r\n";
				} else {
					$xmlData = '<?php echo ' . "'" . '<?xml version="1.0" encoding="'  . $projectCharset . '" ?>' . "'" . '; ?>'  . "\r\n";
				}
			} else {
				// Normal Page $action = 0 (WYSIWYG)
				if ($action == 0) {
					$xmlData = '<?xml version="1.0" encoding="' . $projectCharset . '" ?>' . "\r\n";
				} else {
					// PREVIEW & PUBLISH
					if ($oMgr->conf['wysiwyg']['allowPhp'] == 1 || RvsLibs_Project::isPublishCompoDB() || preg_match_all("/id\s*=\s*\"onlineform_/", $pageData)) {
						$xmlData = '<?php echo ' . "'" . '<?xml version="1.0" encoding="'  . $projectCharset . '" ?>' . "'" . '; ?>'  . "\r\n";
					} else {
						$xmlData = '<?xml version="1.0" encoding="' . $projectCharset . '" ?>' . "\r\n";
					}
				}
			}
			return $xmlData;
		}

		public static function _getOldWidth($projectId)
		{
		    $oldWidth = '100%';
		    $fileOptionTable = RvsLibs_File::buildPath(array(REAL_PROJECT_PATH, $projectId, 'setOptionTableTop.ini'));
		    if (file_exists($fileOptionTable)) {
		        $aOptionTable = RvsLibs_Config::parse_ini_file($fileOptionTable, true);
		        $oldWidth = (isset($aOptionTable['resolution']['width']) && $aOptionTable['resolution']['width'])? $aOptionTable['resolution']['width'] : '100%';
		    }
		    return $oldWidth;
		}

		public static function getTemplateWidth($projectId, $oldWidth = null, $templateItemId = null)
		{
		    SGL::logMessage(null, PEAR_LOG_DEBUG);
		    //case preview /publish
		    $oPublishReg = Publish_Registry::singleton();
		    $templateFolder1= $oPublishReg->get('templateItemData','template_item_folder', $projectId);
		    $templatePath1= $oPublishReg->get('templatePath');
		    // echo $oldWidth;
		    $oldWidth = (is_null($oldWidth) === false) ? $oldWidth : RvsLibs_Template::_getOldWidth($projectId);

		    //case STEP 3
		    $aDefTemplateData = RvsLibs_Template::getTemplatesData($projectId, true);

		    if(empty($aDefTemplateData)) {
		    	$aDefTemplateData = new stdClass();
		    }
		    //  echo "path-->" . $templatePath . '--folder--->' . $templateFolder;exit;
		    $aDefTemplateData->templatePath = (isset($aDefTemplateData->templatePath))? $aDefTemplateData->templatePath : null;
		    $aDefTemplateData->template_item_folder = (isset($aDefTemplateData->template_item_folder))? $aDefTemplateData->template_item_folder : null;
		    $templatePath1 = (isset($templatePath) && $templatePath)? $templatePath : $aDefTemplateData->templatePath;
		    $templateFolder1 = (isset($templateFolder) && $templateFolder)? $templateFolder : $aDefTemplateData->template_item_folder;

		    //case STEP 2
		    //case คลิก preview ครั้งแรก ไม่มี $templatePath, $templateFolder ที่ set ไว้ หาค่า ใหม่
		    if (is_null($templateItemId) === false) {
		        // echo "111";
		        $aTemplateItem = DaoFactory::Template()->findTemplateItemAndTemplateByTemplateItemId($templateItemId, 'getrowobj');
		        $aTemplateItem->template_item_folder = (isset($aTemplateItem->template_item_folder) && $aTemplateItem->template_item_folder)
		                                                ? $aTemplateItem->template_item_folder
		                                                : null;
		        $aPath = RvsLibs_Template::getTemplatePathUrl(null, $aTemplateItem->template_item_folder, 'view');

		        $aPath['path'] = (isset($aPath['path']) && $aPath['path'])? $aPath['path'] : null;
		        $templatePath = (isset($templatePath) && $templatePath)? $templatePath : $aPath['path'];
		        $templateFolder = (isset($templateFolder) && $templateFolder)? $templateFolder : $aTemplateItem->template_item_folder;
		    } elseif ($templateFolder1 && $templatePath1) {
		        $templatePath = $templatePath1;
		        $templateFolder = $templateFolder1;
		    } else {
		    	$templatePath = $aDefTemplateData->templatePath;
		    	$templateFolder = $aDefTemplateData->template_item_folder;
		    }
		    $pathStyleConfig = RvsLibs_File::buildPath(array($templatePath, $templateFolder, 'styleconfig.ini.php'));

		    $aStyleConfig = (is_file($pathStyleConfig)) ? RvsLibs_Config::parse_ini_file($pathStyleConfig , true) : false;
		    $aWidth = (isset($aStyleConfig['config']['width']))
            		    ? RvsLibs_String::dbeExplode('x',RvsLibs_String::strtolower($aStyleConfig['config']['width']))
            		    : false;
		    $width = (isset($aWidth[0])) ? $aWidth[0] : false;
		    if ($width != false && $oldWidth != $width) {
		        return $width;
		    }
		    return $oldWidth;
		}

		public static function getBlockCode($sideConfig, $sideValue, $thisStep, $width=0)
		{
			$bgBlogColor = ($sideValue) ? '#f3e5a8' : '#CCCCCC';
			switch (RvsLibs_String::strtolower($sideConfig)) {
				case 'side1' :
				case 'side2' :
					$width = '160px';
					if ($sideValue != '') {
						$classPreviewNormal = 'EditPreviewCurrent';
						$classPreviewHover = 'EditSideHover';
					} else {
						$classPreviewNormal = 'EditSideNormal';
						$classPreviewHover = 'EditSideHover';
					}
					$sideConfigTran = RvsLibs_String::translate($sideConfig);
					$side = RvsLibs_String::translate('EMBED CODE section', 'vprintf', array('sectionname' => $sideConfigTran));
					break;
				case 'top' :
				case 'bottom' :
					$width = '94%';
					// top , footer
					if ($sideValue != '') {
						$classPreviewNormal = 'EditPreviewCurrent';
						$classPreviewHover = 'EditSideHover';
					} else {
						$classPreviewNormal = 'EditSideNormal';
						$classPreviewHover = 'EditSideHover';
					}
					$sideConfigTran = RvsLibs_String::translate($sideConfig);
					$side = RvsLibs_String::translate('EMBED CODE section', 'vprintf', array('sectionname' => $sideConfigTran));
					break;
				case 'left' :
				case 'right' :
				default:
					if ($sideValue != '') {
						$classPreviewNormal = 'EditPreviewCurrent';
						$classPreviewHover = 'EditSideHover';
					} else {
						$classPreviewNormal = 'EditSideNormal';
						$classPreviewHover = 'EditSideHover';
					}
					$side = $sideValue;
					break;
			}

			#step3,wysi,previewdiy
			if ($thisStep == 'step3') {
				$sideUrl = SGL_BASE_URL . '/' . INDEX_PHPSU . '/sitebuilder/side/side_config/' . $sideConfig;
				$side1Code = '<div class="' . $classPreviewNormal . ' " id="side_' . RvsLibs_String::strtolower($sideConfig) .'" idside="side_' . RvsLibs_String::strtolower($sideConfig) .'" url='. $sideUrl.'
                onmouseover="edfaultBorderIf(this.id,\'' . $classPreviewHover . '\');parent.jQuery.sitebuilder.editside.SwitchClassOver(parent.jQuery(this));"
                onmouseout="edfaultBorderIf(this.id,\'' . $classPreviewNormal . '\');parent.jQuery.sitebuilder.editside.SwitchClassOut(parent.jQuery(this));"
            style="width:' . $width . ';cursor:pointer;" onclick="parent.jQuery.sitebuilder.editside.OpenSide(parent.jQuery(this));">
                            ' . $side . '
                            <div align="right">' . RvsLibs_String::translate('Edit') . '</div>
                        </div>';

			} elseif ($thisStep == 'wysi') {
				if ($sideValue != '') {
					$side1Code = '<div class="' . $classPreviewNormal . '" id="side_' . RvsLibs_String::strtolower($sideConfig) . '" style="width:' . $width . ';">' . $side . '</div>';
				} else {
					$side1Code ='';
				}
			} else {
				$side1Code = '<link href="' . SGL_BASE_URL . '/themes/default/sitebuilder/css/style.php" rel="stylesheet" type="text/css">';
				$side1Code .= '<div class="' . $classPreviewNormal . '" id="side_' . RvsLibs_String::strtolower($sideConfig) . '" style="width:' . $width . ';">' . $side . '</div>';
			}
			return $side1Code; //EMBED CODE TOP Section edit
		}

		/**
		 * Type = Trydemoonline คือ page Try Demo Online action = user/login/action/list
		 * Type = Templates คือ page Template Category action = tryout/RvsCategory
		 * Type = PDF Catalog คือ page Template Download PDF action = tryout/Pdfcatalog
		 *
		 * @param unknown_type $url
		 * @param unknown_type $type
		 * @return Returns
		 */
		public static function gettryoutPageDataCode($type)
		{
			$gotoAction = "";
			switch ($type) {
				case 'Trydemoonline':
					$gotoAction = 'user/login/action/list/setCurrent/1';
				break;
				case 'Templates':
					$gotoAction = 'tryout/rvscategory/select_category_id/1/templatestyle/0/picture_style/0/getNumPage/12/';
                break;
                case 'PDF Catalog':
                	$gotoAction = 'tryout/Pdfcatalog/setCurrent/1';
                break;
			}
			$index = '" . RVSGLWrapper::getFrontscriptname(0) . "';
			$code = RvsLibs_String::sprintf('
        <?php
        $_SESSION["urlRefer"] = (($_SERVER["HTTPS"]) ? "htts://" : "http://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
        header( "HTTP/1.1 301 Moved Permanently" );
        header("Location: %s/%s");
        ?>', $index, $gotoAction);
			return $code;
		}

        /***********************************
        * @param string $pageData
        * return sting
        *
        * example : result match
        *   $aDialog[1][0]='url'
        *   $aDialog[2][0] = script:openDialogOption({'autoOpen':true,'width': 400'});
        ***********************************/
		public static function checkAndGenScriptAutoDialog($pageData)
		{
			if (preg_match_all("/<a\s*href\s*=\s*\"(.*?)\".*?onclick\s*=\s*\"(openDialogOption.*?[\'\"]autoOpen[\'\"]\:true.*)\".*?>/i", $pageData, $aDialog))
			{
				$scriptAutoopen = '';
				if (isset($aDialog[0])) {
					foreach ($aDialog[0] as $k => $v){
						$scriptAutoopen .= RvsLibs_String::preg_replace("/this/i", '\'' . $aDialog[1][$k] . '\'', $aDialog[2][$k]) . "\n";
					}
					return <<<EOF
<script>
//<![CDATA[
{$scriptAutoopen}
</script>
//]]>
EOF;
				}
			}
			return '';
		}

		/*update template specific by:Witoon*/
		protected static function _updateClassCssToSupMenu2Level($css)
		{
			$aPattern = array(
				'/#navigator/im',
				'/#current/im'
			);
			$aReplace = array(
				'ul.rvnavigator',
				'.current'
			);
			$css = preg_replace($aPattern, $aReplace, $css);
			return $css;
		}

		public static function updateTemplateSpecificCssToLastest($templateSpecificCss)
		{
			if (empty($templateSpecificCss)) {
				return '';
			}
			$newSpecificCss = '';
			$navType = self::_getOldImportTemplateNavType($templateSpecificCss);
			$oldNavCss = self::_getOldClassNavigator($templateSpecificCss);
			$oldNavLiCss = self::_getOldClassNavigatorLi($templateSpecificCss);
			$newLinkNav = self::_updateClassCssToSupMenu2Level(self::_CopyOldCss($templateSpecificCss));
			$newSpecificCss .= self::_getOldBgNavDIY($templateSpecificCss);
			if (!empty($newSpecificCss)) {
				$newSpecificCss .= "\n";
			}
			$newSpecificCss .= self::_getOldBgNavImgDIY($templateSpecificCss);
			if (!empty($newSpecificCss)) {
				$newSpecificCss .= "\n";
			}
			$newSpecificCss .= "ul.rvnavigator {{$oldNavCss}position: relative;\n}\n";
			$newSpecificCss .= "ul.rvnavigator li {{$oldNavLiCss}text-align: left;\nposition: relative;\n}\n";
			$newSpecificCss .= "{$newLinkNav}\n";

			$pattern = array('/**TOP**/', '/**LEFT**/', '/**BORDER**/',	'/**BACKGROUND_COLOR**/',
				'/**BORDER_BOTTOM**/', '/**LINK_COLOR**/', '/**HOVER_COLOR**/', '/**HOVER_BG_COLOR**/'
			);
			$cssTop = ($navType == 2) ? 'top: 100%;' : 'top: 0px;';
			$cssLeft = ($navType == 2) ? 'left: 0px;' : 'left: 100%;';
			$border = self::_getOldNavBorder($templateSpecificCss);
			$background = self::_getOldNavBackground($templateSpecificCss);
			$borderBottom = self::_getOldNavBorderBottom($templateSpecificCss);
			$linkColor = self::_getOldLinkColor($templateSpecificCss);
			$hoverColor = self::_getOldHoverColor($templateSpecificCss);
			$hoverBackground = self::_getOldHoverBackgroundColor($templateSpecificCss);
			$replace = array($cssTop, $cssLeft, $border, $background, $borderBottom, $linkColor,
				$hoverColor, $hoverBackground
			);
			$baseCode = self::getBaseCss2Level();
			$newSpecificCss .= str_replace($pattern, $replace, $baseCode);
			return $newSpecificCss;
		}
		/*update template specific by:Witoon*/

		/**
		 * Insert layout template user
		 * Enter description here ...
		 * @param $projectId
		 * @param $projectPageId
		 * @param $layoutTemplateUserId
		 * @param $layoutTemplateUserName
		 * @param $layoutName
		 */
		public static function insertLayoutTemplateUser($projectId, $projectPageId, $layoutTemplateUserId, $layoutTemplateUserName, $layoutName)
		{
			$res = DaoFactory::ProjectLayoutPage()->insertLayoutTemplateUser(
	    		$layoutTemplateUserId,
	    		$layoutTemplateUserName,
	    		$layoutName
    		);
    		if (SGL::isError($res)) {
    			SGL_Error::pop();
    			return false;
    		} else {
    			$res = DaoFactory::ProjectLayoutPage()->insertProjectPageToLayout(
	    			$projectPageId,
	    			$projectId,
	    			$layoutTemplateUserId
    			);
    			if (SGL::isError($res)) {
    				///delete LayoutTemplateUser if insert not complete
    				DaoFactory::ProjectLayoutPage()->deleteLayoutTemplateUser($layoutTemplateUserId);
    				SGL_Error::pop();
    				return false;
    			}
    		}
    		return true;
		}

		public static function selectLayoutTemplateAuto($projectId, &$aPageData, $aSideConfig, $updatePageData=false)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			//Only the first time, backup old page rvsPageData.sql.
			$backUpFile = PROJECT_PATH . '/' . $projectId . '/rvsPageData.sql';
    		if (!is_file($backUpFile)) {
    			$usrId = RvsLibs_User::getUserId();
    			$aSql = DaoFactory::ProjectPage()->backupsql($projectId, $usrId);
    			
    			//file_put_contents($backUpFile, $aSql);
    			$handle = RvsLibs_File::fopen($backUpFile,'w+');
    			if (SGL::isError($handle) === true) {
    				return $handle;
    			}
    			RvsLibs_File::fwrite($handle, $aSql);
    			RvsLibs_File::fclose($handle);
    		}

    		$pageLayoutTemplateUser = DaoFactory::ProjectLayoutPage()->findLayoutTemplateUser(
	    		$projectId,
	    		$aPageData['project_page_id']
    		);

    		if (count($pageLayoutTemplateUser) || SGL_Output::isV6Session() == false) {
    			SGL::logMessage("isV6 or have go selectLayoutTemplateAuto == false ", PEAR_LOG_DEBUG);
    			return true;
    		}
			//SGL::logMessage("not find witoon=======>" . $aPageData['page_name'], PEAR_LOG_DEBUG);
    		$pageData = $aPageData['page_data'] . $aPageData['page_data_zone_2']
    			. $aPageData['page_data_zone_3'] . $aPageData['page_data_zone_4'];

    		$layoutTemplateUserId = md5(time().$aPageData['project_page_id']);
    		$side1Data = (isset($aSideConfig['side1'])) ? $aSideConfig['side1'] : '';
    		$side2Data = (isset($aSideConfig['side2'])) ? $aSideConfig['side2'] : '';

			$componentName = '';
    		if (isset($aPageData['rvs_component_id']) && !empty($aPageData['rvs_component_id'])) {
    			$oComponent = RvsLibs_Component::getComponentName($aPageData['rvs_component_id']);
    			$componentName = isset($oComponent->component_name) ? $oComponent->component_name : '';
    		}
    		if (!empty($componentName) && $componentName != 'Online_Form') {
    			$layoutName = '16_0';
    			$aUpdate = array();
    		} elseif (!empty($side1Data) && !empty($side2Data)) {
    			$layoutName = '4-8-4_0';
    			$aUpdate = array(
	    			'page_data' => '',
	    			'page_data_zone_2' => $pageData,
	    			'page_data_zone_3' => '',
	    			'page_data_zone_4' => ''
    			);
    		} elseif (!empty($side1Data) && empty($side2Data)) {
    			$layoutName = 'one-two_0';
    			$aUpdate = array(
	    			'page_data' => '',
	    			'page_data_zone_2' => $pageData,
	    			'page_data_zone_3' => '',
	    			'page_data_zone_4' => ''
    			);
    		} elseif (empty($side1Data) && !empty($side2Data)) {
    			$layoutName = 'two-one_0';
    			$aUpdate = array(
	    			'page_data' => $pageData,
	    			'page_data_zone_2' => '',
	    			'page_data_zone_3' => '',
	    			'page_data_zone_4' => ''
    			);
    		} elseif (empty($side1Data) && empty($side2Data)) {
    			$layoutName = '16_0';
    			$aUpdate = array(
	    			'page_data' => $pageData,
	    			'page_data_zone_2' => '',
	    			'page_data_zone_3' => '',
	    			'page_data_zone_4' => ''
    			);
    		}

    		if ($updatePageData === true && count($aUpdate)) {
	    		DaoFactory::ProjectPage()->updateProjectPageDataByProjectPageId(
	    			$aPageData['project_page_id'], $aUpdate
	    		);
    		}
    		if (count($aUpdate)) {
    			$aPageData = array_merge($aPageData, $aUpdate);
    		}
    		$errorException = RvsLibs_Template::insertLayoutTemplateUser(
    			$projectId,
    			$aPageData['project_page_id'],
    			$layoutTemplateUserId,
    			$aPageData['page_name'],
    			$layoutName
    		);
    		return $errorException;
	}

	public static function mapingWidthLayout($aWidthLayoutConfig, $numGrid)
	{
		switch ($numGrid) {
			case 'one-third':
			case 'one':
				$widthLayout = $aWidthLayoutConfig['one-third'];
				break;
			case 'two-third':
			case 'two':
				$widthLayout = $aWidthLayoutConfig['two-thirds'];
				break;
			case '3':
			case 'three':
				$widthLayout = $aWidthLayoutConfig['three'];
				break;
			case '4':
			case 'four':
				$widthLayout = $aWidthLayoutConfig['four'];
				break;
			case '8':
			case 'eight':
				$widthLayout = $aWidthLayoutConfig['eight'];
				break;
			case '12':
			case 'twelve':
				$widthLayout = $aWidthLayoutConfig['twelve'];
				break;
			case '16':
			case 'sixteen':
				$widthLayout = $aWidthLayoutConfig['sixteen'];
				break;
		}
		return $widthLayout;
	}

	public static function getResponsiveSampleContent($layoutTemplateUsername)
    {
    	$aContent = array();
    	$aLayoutConfig = array();
    	$config = SGL_Config::singleton();
    	$layoutTemplateUsername = preg_replace('/third/i','two',$layoutTemplateUsername);
    //	echo $layoutTemplateUsername;exit;
    	$layOutName = preg_replace('/_[\d]*$/i', '', $layoutTemplateUsername);
    	$configWidthLayout = SGL_WEB_ROOT . '/responsiveTemplates/responsive.ini';
    	if (is_file($configWidthLayout)) {
    		$aWidthLayoutConfig = $config->load($configWidthLayout);
    		$aWidthLayoutConfig = $aWidthLayoutConfig[980];
    	}

    	$aLayout = explode('-', $layOutName);
    	if (count($aLayout) == 1) {
    		$configFile = SGL_WEB_ROOT . '/responsiveTemplates/1column.ini';
    		if (is_file($configFile)) {
    			$aLayoutConfig = $config->load($configFile);
    		}
    		$aContentConfig = isset ($aLayoutConfig[$layoutTemplateUsername])
    			? $aLayoutConfig[$layoutTemplateUsername] : array();
    		$aContent['zone1'] = isset($aContentConfig[1])
    			? RvsLibs_Template::_getBlockContent($aLayout[0], $aContentConfig[1]) : '';

    		$editorWidth['editorZone1'] = 940;
    	} elseif (count($aLayout) == 2) {
    		$configFile = SGL_WEB_ROOT . '/responsiveTemplates/2columns.ini';

    		if (is_file($configFile)) {
    			$aLayoutConfig = $config->load($configFile);
    		}

    		$aContentConfig = isset ($aLayoutConfig[$layoutTemplateUsername])
    			? $aLayoutConfig[$layoutTemplateUsername] : array();

    		$aContent['zone1'] = isset($aContentConfig[1])
    			? RvsLibs_Template::_getBlockContent($aLayout[0], $aContentConfig[1]) : '';
    		$aContent['zone2'] = isset($aContentConfig[2])
    			? RvsLibs_Template::_getBlockContent($aLayout[1], $aContentConfig[2]) : '';
    		$editorWidth['editorZone1'] = RvsLibs_Template::mapingWidthLayout($aWidthLayoutConfig, $aLayout[0]);
		    $editorWidth['editorZone2'] = RvsLibs_Template::mapingWidthLayout($aWidthLayoutConfig, $aLayout[1]);
    	} elseif (count($aLayout) == 3) {
    		$configFile = SGL_WEB_ROOT . '/responsiveTemplates/3columns.ini';
    		if (is_file($configFile)) {
    			$aLayoutConfig = $config->load($configFile);
    		}
    		$aContentConfig = isset ($aLayoutConfig[$layoutTemplateUsername])
    			? $aLayoutConfig[$layoutTemplateUsername] : array();
    		$aContent['zone1'] = isset($aContentConfig[1])
    			? RvsLibs_Template::_getBlockContent($aLayout[0], $aContentConfig[1]) : '';
    		$aContent['zone2'] = isset($aContentConfig[2])
    			? RvsLibs_Template::_getBlockContent($aLayout[1], $aContentConfig[2]) : '';
    		$aContent['zone3'] = isset($aContentConfig[3])
    			? RvsLibs_Template::_getBlockContent($aLayout[2], $aContentConfig[3]) : '';
    		$editorWidth['editorZone1'] = RvsLibs_Template::mapingWidthLayout($aWidthLayoutConfig, $aLayout[0]);
		    $editorWidth['editorZone2'] = RvsLibs_Template::mapingWidthLayout($aWidthLayoutConfig, $aLayout[1]);
		    $editorWidth['editorZone3'] = RvsLibs_Template::mapingWidthLayout($aWidthLayoutConfig, $aLayout[2]);
    	}
    	$aContent['layoutWidth'] = $editorWidth;

    	return $aContent;
    }

    public static function _getBlockContent($blockContentType, $contentConfig, $showDefaultText=false)
    {
    	$contentConfig = trim($contentConfig);
    	if (empty($contentConfig)) {
    		return $showDefaultText ? 'Insert your data here.' : '';
    	}
    	$fileBlockContent = SGL_WEB_ROOT . '/responsiveTemplates/' . $blockContentType . '.html';
    	$blockContent = file_get_contents($fileBlockContent);
    	$blockDataId = explode(',', $contentConfig);
    	$pageData = '';
    	foreach ($blockDataId as $val) {
    		$pattern = '/<\!--\s*=*\s*Block\s*' . $val . '\s*=*\s*-->(.*?)<\!--\s*=*\s*End Block\s*' . $val . '\s*=*\s*-->/ims';
    		if (preg_match($pattern, $blockContent, $aMatch)) {
    			$pageData .= $aMatch[1];
    			$oPublishReg = &Publish_Registry::singleton();
    			$categoryId = $oPublishReg->get('aProjectInfo','rvs_category_id');
    			$categoryId = !empty($categoryId) ? $categoryId : '17';
    			$pageData = RvsLibs_Template::replacePreDesignImagesLibrary($pageData, $categoryId);
    		}
    	}
    	return $pageData;
    }


    public static function replacePreDesignImagesLibrary($htmlData, $categoryId)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	$rvsLibraryDir = SGL_WEB_ROOT . '/rvs_library/';
    	$cateShotName = DaoFactory::Category()->findCategoryNameByCategoryId(
    		$categoryId, 'getOne', array('category_sh_name')
    	);
    	$filePattern = $categoryId . $cateShotName . '_';
    	if (preg_match_all('#src\s*=\s*[\"|\'][^>|\{LIBRARY_URL\}|\{IMAGE_URL\}]*?images\/([\dx]*)\.[^>]*?[\"|\']#ims', $htmlData, $aMatch)) {
    		$aBuff = array();
    		foreach ($aMatch[0] as $key => $val) {
    			if (in_array($val, $aBuff)) continue;
    			$filePattern = $filePattern . $aMatch[1][$key] . '_*';
    			$searchPattern = $rvsLibraryDir . $aMatch[1][$key] . '/' . $filePattern;//folder name
    			$aFile = glob($searchPattern, GLOB_BRACE);
    			if (count($aFile)) {
    				$randFile = $aFile[array_rand($aFile)];
    			} else {
    				///if not random all file
    				$filePattern = '*_' . $aMatch[1][$key] . '_*';
    				$searchPattern = $rvsLibraryDir . $aMatch[1][$key] . '/' . $filePattern;//folder name
    				$aFile = glob($searchPattern, GLOB_BRACE);
    				if (count($aFile) <= 0 || !is_array($aFile))
    					continue;
    				$randFile = $aFile[array_rand($aFile)];
    			}
    			$randFile = str_replace($rvsLibraryDir, '', $randFile);
    			$replaceStr = 'src="{LIBRARY_URL}/' . $randFile . '"';
    			//SGL::logMessage('== wi test = search' . $val, PEAR_LOG_DEBUG);
    			//SGL::logMessage('== wi test = replace' . $replaceStr, PEAR_LOG_DEBUG);
    			$htmlData = str_replace($val, $replaceStr, $htmlData);
    			array_push($aBuff, $val);
    		}
    	}
    	return $htmlData;
    }

    /**
     * detect is run Carousel มากกว่า 1 รูป
     * @return string|string|string
     */
    public static function isRunCarousel()
    {
    	$oPublishReg = Publish_Registry::singleton();
        if ($oPublishReg->get('isTemplateRunCarousel')) {
        	SGL::logMessage('SB== isRunCarousel register= 1', PEAR_LOG_DEBUG);
            return true;
        }
        $projectId = $oPublishReg->get('project_id');
        $projectId = ($projectId) ? $projectId : SGL_Session::get('rvs_project_id');
        $oTempalteData = RvsLibs_Template::getTemplatesData($projectId, true);
        $customCssPath = RvsLibs_Project::validateCustomCssPath($projectId, $oTempalteData->template_item_folder);
        $headerbannnerPath =  RvsLibs_File::buildPath(array(
        	$customCssPath, 'headerbannner.ini.php'
        ));
        $aHbData = RvsLibs_File::getHeaderBannerData($headerbannnerPath);
        if (count($aHbData) > 1) {
        	unset($aHbData);
        	return true;
        }
        SGL::logMessage('SB== isRunCarousel = 0', PEAR_LOG_DEBUG);
        return false;
    }

    public static function getUikitSlide($aHbData,$publishUrl){
    	$height = isset($aHbData['height']) && $aHbData['height']
    	? $aHbData['height'] : 350;
    	SGL::logMessage('test: height:' . $height, PEAR_LOG_DEBUG);
    	$duration = isset($aHbData['duration']) && $aHbData['duration']
    	? $aHbData['duration']*1000 : 7000;
    	$autoplay = isset($aHbData['autoplay'])
    	? $aHbData['autoplay'] : 'true';
    	$kenburns = isset($aHbData['kenburns']) && $aHbData['kenburns']
    	? 'true' : 'false';
    	$fullWidth = isset($aHbData['width']) && $aHbData['width'] == 'full_width'
    			? 'rv-block-full' : '';
    	$animation = isset($aHbData['animation'])
    	? $aHbData['animation'] : 'fade';
    	if (count($aHbData['slide_item']) <= 0)
    		return RvsLibs_Template::getEmptyUikitSlide($aHbData,$publishUrl);
    	$html =<<<EOF
    <!-- Start Header Banner -->
    <div id="selected_headerbanner">
    <!-- {literal} -->
    <script>
    var rvslideshow = {};
    $(document).ready(function(){
    	rvslideshow = UIkit.slideshow('#rvs-uk-slide', {
	        animation : '$animation',
	        duration : $duration,
	        autoplay : true,
	        height : 'auto',
	        autoplayInterval : 1000,
	        pauseOnHover: true,
	        kenburns : false,
	        kenburnsanimations: ['uk-animation-middle-left', 'uk-animation-top-right',
				'uk-animation-bottom-left', 'uk-animation-top-center',
				'uk-animation-bottom-right'],
	        slices : 15,
    	});
    	var s_width = '{$aHbData['width']}';
    	if (s_width == 'full_width') {
			$('#selected_headerblock').find('div.uk-container').addClass('rv-block-full');
			$('#selected_headerbanner').find('div.uk-container').addClass('rv-block-full');
		}else{
			$('#selected_headerblock').find('div.uk-container').removeClass('rv-block-full');
			$('#selected_headerbanner').find('div.uk-container').removeClass('rv-block-full');
		}
		try{
			if(parent.jQuery.sitebuilder.AdjustStyle){
				parent.jQuery.sitebuilder.AdjustStyle.setContainer();
				parent.jQuery.sitebuilder.AdjustStyle.showBackgroundImage();
				parent.jQuery.sitebuilder.AdjustStyleHeader.setDefaultHeaderBannerHtml();
	    	}
    	}catch(e){
    		console.log(e);
        }

    });

    </script>
    <!-- {/literal} -->
	<div class="uk-container uk-container-center {$fullWidth}">
    <div id="rvs-uk-slide" class="uk-slidenav-position">
    <ul class="uk-slideshow uk-overlay-active" data-uk-slideshow>
EOF;
    	$nav = '';
    	$i = 0;
    	foreach ($aHbData['slide_item'] as $key => $val) {
    		//$val['layers']['animation'] uk-width-1-3
    		$nav .= '<li data-uk-slideshow-item="'.$i.'"><span href></span></li>';
    		$text = RvsLibs_Template::getCation(
    				$val['layers']['data'],
    				$val['layers']['position_h'],
    				$val['layers']['position_v']
    		);
    		/*
    		 $layerPosition = RvsLibs_Template::getFlexPosition($val['layers']['position_h'], $val['layers']['position_v']);
    		$text = '<div class="uk-overlay-panel uk-overlay-background ' . $layerPosition . '">'
    		. $val['layers']['data'].'</div>';
    		*/
    		/*
    		 if (isset($val['text_option']) && $val['text_option'] == 'overlay') {
    		$ohver = $val['overlay']['show_onhover'];
    		$text = '<div class="uk-overlay-panel uk-flex '.$val['overlay']['position'].' uk-overlay-background '.$val['overlay']['animation'].'">'.$val['overlay']['data'].'</div>';
    		} elseif (isset($val['text_option']) && $val['text_option'] == 'caption') {
    		$text = '<div class="uk-overlay-panel uk-flex '.$val['layers']['animation'].'">'.$val['layers']['data'].'</div>';
    		}
    		*/
    		$html .=<<<EOF
	   <li id="{$val['img_id']}" class="{$val['layers']['show_onhover']} {$val['img_filter']}">
	    <img class="{$val['img_filter']}" src="{$publishUrl}/images/headerbanner/{$val['img_name']}" alt="" height="{$height}"  style="width: 100%;">
	   </li>
EOF;
    		$i++;
    	}
    	if ($i > 1) {

    		$html .=<<<EOF
    	</ul>
    	<!-- navigation buttons -->
    	<ul class="uk-dotnav uk-position-bottom uk-flex-center">
    	{$nav}
    	</ul>
    	<!-- navigation arrows -->
    	<span  class="uk-slidenav uk-slidenav-previous" data-uk-slideshow-item="previous"></span>
    	<span  class="uk-slidenav uk-slidenav-next" data-uk-slideshow-item="next"></span>
    	</div></div></div><!-- End Header Banner -->
EOF;
    	} else {
    		$html .= '</ul></div></div></div><!-- End Header Banner -->';
    	}

    	return $html;
    }

    public static function getEmptyUikitSlide($aHbData,$publishUrl){
    	$height = isset($aHbData['height']) && $aHbData['height']
    	? $aHbData['height'] : 350;
    	$duration = isset($aHbData['duration']) && $aHbData['duration']
    	? $aHbData['duration']*1000 : 7000;
    	$autoplay = isset($aHbData['autoplay'])
    	? $aHbData['autoplay'] : 'true';
    	$kenburns = isset($aHbData['kenburns']) && $aHbData['kenburns']
    	? 'true' : 'false';
    	$fullWidth = isset($aHbData['width']) && $aHbData['width'] == 'full_width'
    			? 'rv-block-full' : '';
    	$animation = isset($aHbData['animation'])
    	? $aHbData['animation'] : 'fade';
    	$html =<<<EOF
    <!-- Start Header Banner -->
    <div id="selected_headerbanner">
    <!-- {literal} -->
    <script>
    var rvslideshow = {};
	        /*height : $height,*/
    $(document).ready(function(){
    	rvslideshow = UIkit.slideshow('#rvs-uk-slide', {
	        animation : '$animation',
	        duration : $duration,
	        autoplay : true,
	        height : $height,
	        autoplayInterval : 1000,
	        pauseOnHover: true,
	        kenburns : false,
	        kenburnsanimations: ['uk-animation-middle-left', 'uk-animation-top-right',
				'uk-animation-bottom-left', 'uk-animation-top-center',
				'uk-animation-bottom-right'],
	        slices : 15,
    	});
    	var s_width = '{$aHbData['width']}';
    	if (s_width == 'full_width') {
			$('#selected_headerblock').find('div.uk-container').addClass('rv-block-full');
			$('#selected_headerbanner').find('div.uk-container').addClass('rv-block-full');
		}else{
			$('#selected_headerblock').find('div.uk-container').removeClass('rv-block-full');
			$('#selected_headerbanner').find('div.uk-container').removeClass('rv-block-full');
		}
		try{
			if(parent.jQuery.sitebuilder.AdjustStyle){
				parent.jQuery.sitebuilder.AdjustStyle.setContainer();
				parent.jQuery.sitebuilder.AdjustStyle.showBackgroundImage();
				parent.jQuery.sitebuilder.AdjustStyleHeader.setDefaultHeaderBannerHtml();
    		}
    	}catch(e){

    	}

    });
    </script>
    <!-- {/literal} -->
	<div class="uk-container uk-container-center {$fullWidth}">
    <div id="rvs-uk-slide" class="uk-slidenav-position" style="display:none">
    <ul class="uk-slideshow uk-overlay-active uk-img-preserve" data-uk-slideshow>
    	<li id="noSlideImage" class="noSlideImage">
	    <img class="noSlideImage" src="{$publishUrl}/images/headerbanner/header_banner.jpg" alt="" height="0"  style="0">
	   </li>
    </ul></div></div></div><!-- End Header Banner -->
EOF;

    	return $html;
    }

    function getCation($data, $positionH, $positionV)
    {
    	$position = RvsLibs_Template::getOverlayPosition($positionV);
    	$html =<<<EOF
<figcaption class="uk-overlay-panel {$position}">
{$data}
</figcaption>
EOF;
		return $html;
    }

    function getFlexPosition($positionH, $positionV)
    {
    	$class = "uk-text-{$positionV} uk-text-{$positionH} ";
    	//$class .= RvsLibs_Template::getOverlayPosition($positionV);
    	return $class ;
    }
    function getOverlayPosition($positionV)
    {
    	switch ($positionV) {
    		case 'top':
    			$class = 'uk-overlay-top';
    			break;
    		case 'bottom':
    			$class = 'uk-overlay-bottom';
    			break;
    		case 'middle':
    		default:
    			$class = 'uk-flex uk-flex-center uk-flex-middle';
    	}
    	return $class;
    }

    /**
     * <div class="carousel"><ul>
     * <li><img1></li>
     * <li><img2></li>
     * <li><img2></li>
     * </ul></div>
     */
    public static function replaceHeaderBanner($originalCode, $publishUrl, $isUikit=false)
    {
        SGL::logMessage("SB== isUikit:" . $isUikit, PEAR_LOG_DEBUG);
        $oPublishReg = Publish_Registry::singleton();
        if ($isUikit == false) {
        	$isUikit = $oPublishReg->get('isUikit');
        }
        $projectId = ($oPublishReg->get('project_id')) ? $oPublishReg->get('project_id') : SGL_Session::get('rvs_project_id');
        $oTempalteData = RvsLibs_Template::getTemplatesData($projectId, true);
        $customCssPath = RvsLibs_Project::validateCustomCssPath($projectId, $oTempalteData->template_item_folder);
        $headerbannnerPath =  RvsLibs_File::buildPath(array($customCssPath, 'headerbannner.ini.php'));

        SGL::logMessage("SB== headerbannnerPath:" . $headerbannnerPath, PEAR_LOG_DEBUG);
        $aHbData = RvsLibs_File::getHeaderBannerData($headerbannnerPath, $isUikit);
        $headerCode = '';
        $publishUrl = preg_match('/[^\/]$/im', $publishUrl) ? $publishUrl . '/' : $publishUrl;

        if($isUikit == true) {
        	$headerCode = RvsLibs_Template::getUikitSlide($aHbData, $publishUrl);
        	if (!empty($headerCode)) {
        		$originalCode = preg_replace('/<\!--\s*Start\s*Header\s*Banner\s*-->([\w\W\b\B\d\D]*?)<\!--\s*End\s*Header\s*Banner\s*-->/ims', $headerCode, $originalCode);
        	} else {
        		//มี banner รูปเดียว
        		//RvsLibs_Config::logMessageInfo($oTempalteData);
        		$templateUrl = $oTempalteData->templateUrl . '/' . $oTempalteData->template_item_folder;
        		$originalCode = RvsLibs_String::preg_replace('/url\(images\/header_banner\.jpg\)/im', 'url('. $templateUrl . '/images/header_banner.jpg)', $originalCode);
        		$originalCode = RvsLibs_String::preg_replace('/src="images\/header_banner\.jpg"/im', 'src="' . $templateUrl . '/images/header_banner.jpg"', $originalCode);
        	}

        } else {
        	if (count($aHbData) > 0) {
        		foreach ($aHbData as $k => $v) {
        			$uid = uniqid(time());
        			$headerCode .= "\n" . '<li><img src="' . $publishUrl . 'images/headerbanner/' . $v['name'] . '?' . $uid . '" alt=""></li>';
        		}
        		SGL::logMessage("_responsive== Goto generate". $headerCode, PEAR_LOG_DEBUG);
        	}
        	$headerCode = <<< EOF
<!-- Header Banner -->
<div class="rs_header_banner rslides_container">
    <ul class="rslides" id="rslides">
		{$headerCode}
    </ul>
</div>
<!-- End Header Banner -->
EOF;

        $originalCode = preg_replace('/<\!-- Header Banner -->([\w\W\b\B\d\D]*?)<\!-- End Header Banner -->/ims', $headerCode, $originalCode);
        }

        return $originalCode;
    }

    /**
     * ======================= On-Demand Template ===========================
     */

    /**
     * validate template up to date
     * validate template file structer success
     *
     * @param unknown $templateitemfolder
     * @return number
     */
    public static function validateDownload($templateitemfolder)
    {
    	SGL::logMessage('ondemand: templateitemfolder='.$templateitemfolder, PEAR_LOG_DEBUG);
    	$isStructerOk = RvsLibs_Template::isStructureTemplateItemFolder($templateitemfolder);
    	SGL::logMessage('ondemand: isStructerOk=' . $isStructerOk, PEAR_LOG_DEBUG);
    	//Case today is update
    	if(RvsLibs_Template::isUpdateTemplateToday($templateitemfolder) && $isStructerOk){
    		SGL::logMessage('ondemand: validateDownload(' . $templateitemfolder .'): isUpdateTemplateToday and isStructerOk', PEAR_LOG_DEBUG);
    		return 0;
    	}

    	SGL::logMessage('on-demand: validateDownload: passs', PEAR_LOG_DEBUG);

    	$md5FileProvider = RvsLibs_Template::getMd5TemplateFromProvider($templateitemfolder);
    	$md5FileTemplate = RvsLibs_Template::getMd5ByTemplateItemFolder($templateitemfolder);
    	//Case must update template
    	SGL::logMessage('ondemand: validateDownload: ' . "$templateitemfolder ---> $md5FileProvider != $md5FileTemplate", PEAR_LOG_DEBUG);
    	if( ($isStructerOk == false) || ($md5FileProvider != $md5FileTemplate) ) {
    		return 1;
    	}
    	SGL::logMessage('ondemand: validateDownload: 000', PEAR_LOG_DEBUG);
    	return 0;
    }

    /**
     *
     * @param unknown $templateitemfolder
     * @return Ambigous <Ambigous, string>
     */
    public static function getMd5TemplateFromProvider($templateitemfolder)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	//if template cache return cache
    	if (RvsLibs_Template::isCacheMd5TemplateToday()) {
    		return RvsLibs_Template::getCacheMd5TemplateItemFolder($templateitemfolder);
    	} else {
    		RvsLibs_Template::updateMd5FromProvider();
    		return RvsLibs_Template::getCacheMd5TemplateItemFolder($templateitemfolder);
    	}
    }

    public static function isCacheMd5TemplateToday()
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	$cacheTemplateName =  SGL_PATH . '/www/userdata/securervsite/templateinfo.ini';
    	if (is_file($cacheTemplateName) === true) {
    		$iniTemplate = parse_ini_file($cacheTemplateName);
    		$today = date("Ymd");
    		if(isset($iniTemplate['updateDate']) && $iniTemplate['updateDate'] == $today){
    			return 1;
    		}
    	}
    	return 0;
    }

    public static function isUpdateTemplateToday($templateitemfolder)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	$cacheTemplateName =  SGL_PATH . '/www/userdata/securervsite/templateinfo.ini';
    	if (is_file($cacheTemplateName) === true) {
    		$iniTemplate = parse_ini_file($cacheTemplateName);
    		$today = date("Ymd");
    		$fileTemplateName = $templateitemfolder . '.tar.bz2';
    		$updateDate = (isset($iniTemplate['updateDate']) && $iniTemplate['updateDate'])
    						? $iniTemplate['updateDate']
    						: '';
    		SGL::logMessage(' update=' . $updateDate . ' today=' . $today, PEAR_LOG_DEBUG);
    		if( $updateDate == $today &&
    				isset($iniTemplate["$fileTemplateName"]) && $iniTemplate["$fileTemplateName"] != ''){

    			SGL::logMessage(' return 1', PEAR_LOG_DEBUG);
    			return 1;
    		}
    	}
    	SGL::logMessage(' return 0', PEAR_LOG_DEBUG);
    	return 0;
    }

    /**
     * run process
     * download file template_item_folder
     * download template md5
     *
     * @return number
     */
    public static function updateMd5FromProvider()
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	$res = RvsLibs_System::secureCommand('downloadmd5template');
    	return 1;
    }

    /**
     *
     * @param unknown $templateitemfolder
     * @return Ambigous <>|string
     */
    public static function getCacheMd5TemplateItemFolder($templateitemfolder)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	$cacheTemplateName =  SGL_PATH . '/www/userdata/securervsite/templatefullmd5.md5';
    	if (is_file($cacheTemplateName) === true) {
    		$iniTemplate = parse_ini_file($cacheTemplateName);
    		$keyName = $templateitemfolder . '.tar.bz2';
    		if( isset($iniTemplate["$keyName"])) {
    			return $iniTemplate["$keyName"];
    		}
    	}
    	return '';
    }

    /**
     * IF Error ,Please delete cache directory in home user ($homeUser/.rvsitebuilder/cache/TemplateItemFolder)
     *
     * @param unknown $templateItemFolder
     * @return Ambigous <string, resource, object>
     */
    public static function getMd5ByTemplateItemFolder($templateItemFolder)
    {
    	SGL::logMessage($templateItemFolder, PEAR_LOG_DEBUG);

    	if($templateItemFolder == ''){
    		return 0;
    	}

    	$fileTar = TEMPLATE_PATH . '/' . $templateItemFolder;
    	$aTemplateCacheDir = RvsLibs_File::buildPath(
    			array(SGL_CACHE_DIR, 'templateItemFolder')
    	);
    	$aTemplateCache = RvsLibs_File::buildPath(
    			array(SGL_CACHE_DIR, 'templateItemFolder',$templateItemFolder)
    	);

    	if(is_dir($aTemplateCacheDir)){
	    	RvsLibs_System::exec('which chmod', $outputs);
	    	if(is_array($outputs) && count($outputs) > 0){
	    		$commandChmod = array_pop($outputs);
	    	} else {
	    		$commandChmod = 'chmod';
	    	}
	    	$cmd = "$commandChmod -R 755 $aTemplateCacheDir";
	    	$res = RvsLibs_System::exec($cmd);
    	}

    	SGL::logMessage('rm -rf '. $aTemplateCacheDir, PEAR_LOG_DEBUG);
    	@System::rm(array('-rf', $aTemplateCacheDir ));

    	RvsLibs_System::mkDir(array('-p', $aTemplateCacheDir));
    	RvsLibs_System::mkDir(array('-p', $aTemplateCache));
    	SGL::logMessage("cp -af $fileTar $aTemplateCacheDir", PEAR_LOG_DEBUG);
    	@system("cp -af $fileTar $aTemplateCacheDir");

    	$templateFile = RvsLibs_File::buildPath(array($aTemplateCacheDir, $templateItemFolder . '.tar.bz2'));
    	$result = RvsLibs_Archive_Tar::create($aTemplateCacheDir, $templateItemFolder, 'bz2');

    	if (is_file($templateFile) == false) {
    		SGL::logMessage('Cannot create file: ' . $templateFile, PEAR_LOG_ERR);
    	}
    	$md5Template = RvsLibs_File::getMd5File($templateFile);
    	@System::rm(array('-rf', $aTemplateCacheDir . '/' . $templateItemFolder ));
    	@System::rm(array('-f', $aTemplateCacheDir . '/' . $templateItemFolder . '.tar.bz2'));
    	return $md5Template;
    }


    public static function getUikitSourceCss($sourceFile, $file)
    {
    	$source = UIKIT_LIB_PATH . '/rvsb-css/' . $file;

    	//SGL::logMessage(' test: ' . $sourceFile, PEAR_LOG_DEBUG);
    	//SGL::logMessage(' test: ' . $source, PEAR_LOG_DEBUG);

    	$sourceMd5 = RvsLibs_File::getMd5File($sourceFile);
    	$desMd5 = RvsLibs_File::getMd5File($source);
    	if ($desMd5 == $sourceMd5) {
    		SGL::logMessage(' return test: ' . $sourceFile, PEAR_LOG_DEBUG);
    		return $sourceFile;
    	}
    	SGL::logMessage(' return test: ' . $source, PEAR_LOG_DEBUG);
    	return $source;
    }

    /**
     * type: reponsive
     * layout.css, skeleton.css, index.htm
     *
     * type: normal
     * images, style.css, index.htm
     *
     * @param unknown $templateItemFolder
     * @return number
     */
    public static function isStructureTemplateItemFolder($templateItemFolder)
    {
    	if($templateItemFolder == ''){
    		SGL::logMessage(' templateItemFolder is null', PEAR_LOG_DEBUG);
    		return 0;
    	}
    	$templateItemFolderPath = TEMPLATE_PATH . '/' . $templateItemFolder;
    	SGL::logMessage(' path: ' . $templateItemFolderPath, PEAR_LOG_DEBUG);
    	$fileNameCheckRec = array(
    			"images" 	=> "dirs",
    			"index.htm" 	=> "files",
    			"style.css" 	=> "files",
    	);
    	//case responsive
    	if (RvsLibs_Template::isResponsiveTemplate($templateItemFolderPath) == true) {
    		$fileNameCheckRec = array(
    				"layout.css" 	=> "files",
    				"index.htm" 	=> "files",
    				"skeleton.css" 	=> "files",
    		);
    	}
    	//case uikit
    	if (RvsLibs_Template::isUikitTemplate($templateItemFolderPath) == true) {
    		$fileNameCheckRec = array(
    				"images" 	=> "dirs",
    				"rvsb-css" 	=> "dirs",
    				"index.htm" 	=> "files",
    				"templateData.txt" 	=> "files",
    		);
    	}

    	$ListDir = RvsLibs_System::ls($templateItemFolderPath);
    	$checkIndex = 0;
    	foreach ($ListDir as $aIndex => $aName) {
    		foreach ($aName as $bIndex => $bName) {
    			$bName = trim(end(explode('/', $bName)));
    			//SGL::logMessage('name:' . $bName . '|aIndex:' . $aIndex, PEAR_LOG_DEBUG);
    			if(isset($fileNameCheckRec[$bName]) || ($aIndex == 'files' && ($bName == 's_preview.jpg' || $bName == 's_preview.gif'))){
    				$checkIndex++;
    			}
    		}
    	}

    	if($checkIndex > 3){
    		SGL::logMessage('checkTotal:' . $checkIndex . ' > 3', PEAR_LOG_DEBUG);
    		return 1;
    	}
    	SGL::logMessage('checkTotal:' . $checkIndex . ' < 3', PEAR_LOG_DEBUG);
    	return 0;
    }

    /**
     *
     * @param unknown $templateItemFolder
     * @return number
     */
    public static function downloadTemplateItemFolder($templateItemFolder)
    {
    	SGL::logMessage("templateItemFolder: " . $templateItemFolder, PEAR_LOG_DEBUG);

    	//#TODO
    	//User :: securervsite
    	//$res = RvsLibs_System::secureCommand('downloadtemplate', array('templateitemfolder' => $templateItemFolder));

    	// make download path
    	$cacheTemplatePath =  USER_HOME_USERDATA_PATH . '/upload';
    	$oCp = CpHandle::factory();
    	$tmpPath = $oCp->getTmpPath();

    	if (is_dir($tmpPath) === false) {
    		RvsLibs_System::mkDir(array('-p', $tmpPath));
    	}

    	RvsLibs_System::mkDir(array('-p', $cacheTemplatePath));

    	RvsLibs_System::exec('which chmod', $outputs);
    	if(is_array($outputs) && count($outputs) > 0){
    		$commandChmod = array_pop($outputs);
    	} else {
    		$commandChmod = 'chmod';
    	}

    	$cmd = "$commandChmod -R 755 $cacheTemplatePath";
    	$res = RvsLibs_System::exec($cmd);

    	$fileTemplateDownload = $cacheTemplatePath . '/' . $templateItemFolder . '.tar.bz2' ;
    	SGL::logMessage(' fileTemplateDownload : ' . $fileTemplateDownload, PEAR_LOG_DEBUG);
    	/*--------- Clean Data---------*/

    	if(is_file($fileTemplateDownload)){
    		@System::rm(array('-f', $fileTemplateDownload));
    	}
    	if(is_dir($cacheTemplatePath . '/' . $templateItemFolder)){
    		@System::rm(array('-rf', $cacheTemplatePath . '/' . $templateItemFolder));
    	}

    	//Get File full template
    	$site = RvsLibs_Config::getDownloadTemplateUrl() . '/download.php';
    	$request = (self::isLalestVersion() == true) ? '/getversion/latest' : '';
    	$request .= '/download/rvsitebuilder-templatefull/file/' . $templateItemFolder . '.tar.bz2';

    	//================ Download File ===============================
    	//--------------Download case #1 curl------------------
    	$ContentRef = RvsLibs_Url::urlConnectWithoutReplaceHeader($site, $request, 80,  null,  false,30);
    	if (SGL::isError($ContentRef) || (isset($ContentRef['CONNECT_ERROR']) && $ContentRef['CONNECT_ERROR'])) {
    		RvsLibs_System::exec('which wget', $outputs);
    		if(is_array($outputs) && count($outputs) > 0){
    			$commandWget = array_pop($outputs);
    		} else {
    			$commandWget = 'wget';
    		}
	    	$cmdDownload = "{$commandWget} " . $site . $request . " -O {$fileTemplateDownload}";
	    	SGL::logMessage('=== ondemand wget: ' . $cmdDownload , PEAR_LOG_DEBUG);
	    	$res = RvsLibs_System::exec($cmdDownload);
    	} else {
	    	SGL::logMessage('=== ondemand url '. $site . $request , PEAR_LOG_DEBUG);
	    	$fp = fopen($fileTemplateDownload, 'w');
	    	fwrite($fp, $ContentRef['data']);
	    	fclose($fp);
    	}

    	//extract file
    	SGL::logMessage(' chmod '. $fileTemplateDownload, PEAR_LOG_DEBUG);
    	$resChmod = RvsLibs_System::chmod($fileTemplateDownload, '0755');
    	//    .rvsitebuilder/upload/{templatefolder}.tar.gz
    	// to .rvsitebuilder/upload/{templatefolder}
    	RvsLibs_Archive_Tar::extract($fileTemplateDownload, $cacheTemplatePath);

        SGL::logMessage('RvsLibs_System::chmod '. $cacheTemplatePath, PEAR_LOG_DEBUG);
    	$resChmod = RvsLibs_System::chmod($cacheTemplatePath, '0775');

    	SGL::logMessage("$commandChmod -R 775 $cacheTemplatePath", PEAR_LOG_DEBUG);
    	$cmd = "$commandChmod -R 775 $cacheTemplatePath";
    	$res = RvsLibs_System::exec($cmd);

    	SGL::logMessage("1 copytemplate('templateitemfolder'==>$templateItemFolder)" . $templateItemFolder, PEAR_LOG_DEBUG);
    	$res = RvsLibs_System::secureCommand('copytemplate', array('templateitemfolder' => $templateItemFolder));
    	@System::rm(array('-rf', $fileTemplateDownload));
    	@System::rm(array('-rf', $cacheTemplatePath . '/' . $templateItemFolder));
    	return 1;
    }

    public static function isLalestVersion()
    {
    	$latestFile = RVS_ROOT_HOME . '/.rvsitebuilder/.getlatestversion';
    	SGL::logMessage(' latestFile: '. $latestFile , PEAR_LOG_DEBUG);
    	if (is_file($latestFile)) {
    		return true;
    	}
    	return false;
    }

	public static function compileComponentCss()
    {
        SGL::logMessage('compile component css', PEAR_LOG_DEBUG);
        $oPublishReg = Publish_Registry::singleton();
        $aModules = $oPublishReg->get('componentUseDB', 'component_name');
        $isCompoDB = $oPublishReg->get('isComponentDB');
        $isUikit = $oPublishReg->get('isUikit');
        if (count($aModules) <= 0 || !$isCompoDB) {
            return true;
        }
        $publishPath = $oPublishReg->get('publishPath');
        $projectId = $oPublishReg->get('project_id');
        $TemplatePath = $oPublishReg->get('templatePath');
        $template_item_folder = $oPublishReg->get('aProjectInfo', 'template_item_folder');
        $color_id = $oPublishReg->get('aProjectInfo', 'color_id');
        $rvsUsrId = RvsLibs_User::getUserId();

        $path = $publishPath . '/themes/rvtheme';
        RvsLibs_Template::updateTemplateStyleCss($projectId, $rvsUsrId, $publishPath, $path);

        ///get default color config
        $aColoConfig = RvsLibs_Template::getColorConfig($TemplatePath, $template_item_folder, $color_id);
        RvsLibs_Template::updateComponentDynamicCss($projectId, $rvsUsrId, $aColoConfig, $path);
        RvsLibs_Template::updateComponentStatic($projectId, $rvsUsrId, $path);
        $cssData = '';
        if ($oPublishReg->get('isResponsiveTemplate')) {
            $defaultCss = 'layout.css';
        } else {
            $defaultCss = 'style.css';
        }

        //from template path
        $cssTmpPath = $TemplatePath . '/' . $template_item_folder . '/'. $defaultCss;
        //from customcss
        $cssCustomPath = RvsLibs_File::buildPath(array(PROJECT_PATH, $projectId, 'customcss', $template_item_folder, $defaultCss));
        $cssPath = (is_file($cssCustomPath)) ? $cssCustomPath : $cssTmpPath;
        //get content css
        SGL::logMessage('get content css: ' . $cssPath, PEAR_LOG_DEBUG);
        if (is_file($cssPath)) {
            $cssData = file_get_contents($cssPath);
        }
        // $defaultCss + component_static.css + component_dynamic.css
        if (!$isUikit) {
        	$cssData = $cssData . "\n" . RvsLibs_Template::getComponentStaticCss($path)
        				. "\n" . RvsLibs_Template::getComponentDynamicCss($path);
        }

        $cssUpdate = $publishPath . '/' . $defaultCss;
        $fp = RvsLibs_File::fopen($cssUpdate , 'w+');
        if (SGL::isError($fp) === true) {
            SGL::logMessage('cannot open file. ' . $fp->getMessage() , PEAR_LOG_ERR);
            SGL_Error::pop();
            return;
        }
        RvsLibs_File::fwrite($fp , $cssData);
        RvsLibs_File::fclose($fp);
    }

	    /**
     * update template style css all
     * replace colorconfig [c]
     *
     * @param unknown_type $projectId
     * @param unknown_type $rvsUsrId
     * @param string $userThemePath = {publishPath}/theme/rvthemes
     */
    public static function updateTemplateStyleCss($projectId, $rvsUsrId, $publishPath, $userThemePath)
    {
        SGL::logMessage('updateTemplateStyleCss theme: ' . $userThemePath, PEAR_LOG_DEBUG);
        $rvsProjectsIdPathVar = RvsLibs_File::buildPath(array(RVS_USER_HOME, '.rvsitebuilder', 'websitepublish', $projectId, 'var'));
        $aConfPattern = array("SGL_PATH", "RVS_PUBLISH_PATH", "RVS_PROJECTSID_VAR");
        $aConfReplace = array(SGL_PATH, $publishPath, $rvsProjectsIdPathVar);

        $aDataConf = array();
        // see for copy css file to publish path
        $fileconf = RvsLibs_File::buildPath(array(SGL_PATH, 'scripts', 'rvscomponentcssconf.ini'));
        if (is_file($fileconf)) {
            $aDataConf = RvsLibs_Config::parse_ini_file($fileconf,true);
        }
        //fixed PHPMD scan 07/07/2554
        $aColorConfig = RvsLibs_Template::getTemplateColorConfig($rvsUsrId, $projectId);
        if (isset($aDataConf['cssTemplate'])) {
            foreach ($aDataConf['cssTemplate'] as $cssTemplatePath) {
                $cssTemplatePath =  RvsLibs_String::str_replace($aConfPattern, $aConfReplace, $cssTemplatePath);
                RvsLibs_File::writeFileCssCenter($aColorConfig, $cssTemplatePath, $cssTemplatePath);
            }
        }
    }

	public static function getColorConfig($templatePath, $template_item_folder, $color_id)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
        $fileConfigName = 'colorConfig.ini.php';
        $coloConfigPath =  RvsLibs_File::buildPath(array($templatePath, $template_item_folder, $fileConfigName));
        $folderColorGroup = RvsLibs_Template::getFolderColorGroup($color_id);
        $defaultColorConfigPath = RvsLibs_File::buildPath(array(SGL_PATH, 'scripts', 'seagull_mod', 'public_html', 'themes', 'rvtheme', 'defaultColorConf', $folderColorGroup, $fileConfigName));

        $aColoConfig = (is_file($coloConfigPath))
                        ? RvsLibs_Config::parse_ini_file($coloConfigPath, true)
                        : RvsLibs_Config::parse_ini_file($defaultColorConfigPath, true);
        $aBlock = array('c'=>'','l'=>'','r'=>'');
        foreach($aBlock as $k => $v) {
            foreach($aColoConfig as $k2 => $v2){
                if(RvsLibs_String::dbeSubStrCount($k2,$k) > 0) {
                    $aBlock[$k] = $aColoConfig[$k2];
                }
            }
        }
        foreach($aBlock as $k => $v) {
            if($k != 'c') {
                $aBlock[$k] = array_merge($aBlock['c'],$aBlock[$k]);
            }
        }
        return $aBlock;
    }

    /**
     * update block Left SIDE1 / Right SIDE2 style css
     *
     * @param unknown_type $projectId
     * @param unknown_type $rvsUsrId
     * @param string $userThemePath = xxxxxx
     */
    public static function updateComponentDynamicCss($projectId, $rvsUsrId, $aColoConfig=array(), $userThemePath="")
    {
        SGL::logMessage(null, PEAR_LOG_DEBUG);
        if (is_array($aColoConfig) && count($aColoConfig)) {
            $scriptsPath = SGL_PATH . '/scripts/seagull_mod/public_html/themes/rvtheme/css/component_dynamic.css';
            $aCode = (is_file($scriptsPath)) ? file($scriptsPath) : array();
            $strLeft = "";
            $strRight = "";

            if ($aCode) {
                foreach ($aCode as $line) {

                    if (preg_match_all('/div\#(.*?)/', $line, $aMatchSide)) {
                        $lineLeft = '#RVS_leftside ' . $line;
                        $lineRight = '#RVS_rightside ' . $line;
                    } else {
                        $lineLeft = $line;
                        $lineRight = $line;
                    }

                    if (preg_match_all('/\/\s*\*\s*\*\s*\$\s*(.*?)\s*\$\s*\*\s*\*\s*\//', $lineLeft, $aMatch) ) {
                        $patternLeft = trim($aMatch[0][0]);
                        $replaceLeft = trim($aColoConfig['l'][$aMatch[1][0]]);
                        $lineLeft = str_replace($patternLeft, $replaceLeft, $lineLeft);
                    }
                    if (preg_match_all('/\/\s*\*\s*\*\s*\$\s*(.*?)\s*\$\s*\*\s*\*\s*\//', $lineRight, $aMatch) ) {
                        $patternRight = trim($aMatch[0][0]);
                        $replaceRight = trim($aColoConfig['r'][$aMatch[1][0]]);
                        $lineRight = str_replace($patternRight, $replaceRight, $lineRight);
                    }
                    $strLeft .= $lineLeft;
                    $strRight .= $lineRight;
                }

                //rewrite file
                if ($userThemePath) {
                    $cssPathFile = $userThemePath . '/css/component_dynamic.css';
                    $handle = RvsLibs_File::fopen($cssPathFile, 'w+');
                    if (SGL::isError($handle) === true) {
                        SGL::logMessage('cannot open file. ' . $handle->getMessage() , PEAR_LOG_ERR);
                        SGL_Error::pop();
                        return;
                    }
                    RvsLibs_File::fwrite($handle, $strLeft . "\n" . $strRight);
                    RvsLibs_File::fclose($handle);
                } else {
                    return $strLeft . "\n" . $strRight;
                }
            }
        }
    }

	public static function updateComponentStatic($projectId, $rvsUsrId, $userThemePath = "")
    {
        $scriptsPath = SGL_PATH . '/scripts/seagull_mod/public_html/themes/rvtheme/css/component_static.css';
        $aCode = (is_file($scriptsPath)) ? file($scriptsPath) : array();
        $strLineFinal = "";
        if (count($aCode)) {
            $strLeft = '#RVS_leftside { padding:5px 0; margin:0; }' . "\n";
            $strRight = '#RVS_rightside { padding:5px 0; margin:0; }' . "\n";
            foreach ($aCode as $line) {

                if (preg_match_all('/div\#(.*?)|input/', $line, $aMatchSide)) {
                    $strLine = '#RVS_leftside ' . $line;
                    $strLine2 = '#RVS_rightside ' . $line;
                } else {
                    $strLine = $line;
                    $strLine2 =  $line;
                }
                $strLineFinal .=  $strLine . $strLine2;
            }

            //rewrite file
            if ($userThemePath) {
                $cssPathFile = $userThemePath . '/css/component_static.css';
                $handle = fopen($cssPathFile, 'w+');
                if (SGL::isError($handle) === true) {
                    SGL::logMessage('cannot open file. ' . $handle->getMessage() , PEAR_LOG_ERR);
                    SGL_Error::pop();
                    return;
                }
                RvsLibs_File::fwrite($handle, $strLeft . "\n" . $strRight . "\n" . $strLineFinal);
                RvsLibs_File::fclose($handle);
            } else {
                return $strLeft . "\n" . $strRight . "\n" . $strLineFinal;
            }
        }
    }

	public static function getComponentStaticCss($userThemePath)
    {
        $cssCompoPathFile = $userThemePath . '/css/component_static.css';
        $aCodeCompo = (is_file($cssCompoPathFile)) ? file($cssCompoPathFile) : array();
        $strCompoLine = "";
        foreach ($aCodeCompo as $lineCompo) {
            $strCompoLine .= $lineCompo;
        }
        return $strCompoLine;
    }

	public static function getComponentDynamicCss($userThemePath)
    {
        $cssCompoPathFile = $userThemePath . '/css/component_dynamic.css';
        $aCodeCompo = (is_file($cssCompoPathFile)) ? file($cssCompoPathFile) : array();
        $strCompoLine = "";
        foreach ($aCodeCompo as $lineCompo) {
            $strCompoLine .= $lineCompo;
        }
        return $strCompoLine;
    }


    public static function getTemplateurlpath($templateUserId, $templateItemFolder)
    {

    	$aTemplatePath = array();
    	if ($templateUserId == RvsLibs_User::getRootId()) {
    		//$homePath = RVS_ROOT_HOME;
    		$homePath = ROOT_HOME_USERDATA_PATH;
    		$homeUrl = ROOT_HOME_USERDATA_URL;
    	} elseif ($templateUserId == RvsLibs_User::getOwnerId()) {
    		//$homePath = RVS_OWNER_HOME;
    		$homePath = OWNER_HOME_USERDATA_PATH;
    		$homeUrl = OWNER_HOME_USERDATA_URL;
    	} elseif ($templateUserId == RvsLibs_User::getUserId()) {
    		//$homePath = RVS_USER_HOME;
    		$homePath = USER_HOME_USERDATA_PATH;
    		$homeUrl = USER_HOME_USERDATA_URL;
    	}

    	$templatePath = RvsLibs_File::buildPath(array($homePath,'upload','template'));
    	$templateUrl = RvsLibs_File::buildPath(array($homeUrl,'upload','template'));

    	if (is_dir($templatePath . '/' . $templateItemFolder)) {
    		$aTemplatePath['path'] =  $templatePath;
    		$aTemplatePath['url'] = $templateUrl;
    	} else {
    		$aTemplatePath['path'] = TEMPLATE_PATH;
    		$aTemplatePath['url'] = TEMPLATE_URL;
    	}
    	return $aTemplatePath;
    }

    public static function getLayoutCss($oTemplateData=null)
    {
    	$project_id = RvsLibs_Project::getProjectId();
    	if (is_null($oTemplateData))
    		$oTemplateData = RvsLibs_Template::getTemplatesData($project_id, true);
    	/*$oTemplateData->templatePath;
    	$oTemplateData->templateUrl;
    	$oTemplateData->template_item_folder;*/
    	$layoutPath = PROJECT_PATH . '/' . $project_id . '/customcss/' . $oTemplateData->template_item_folder . '/layout.css';
    	if (is_file($layoutPath)) {
    		$customCssUrl = str_replace(PROJECT_PATH, PROJECT_URL, $layoutPath);
    		$customCssUrl .= '?si=' . md5(time());
    	} else {
    		$layoutPath = $oTemplateData->templatePath . '/' . $oTemplateData->template_item_folder . '/layout.css';
    		$customCssUrl = $oTemplateData->templateUrl . '/' . $oTemplateData->template_item_folder . '/layout.css?si=' . md5(time());
    	}
    	$aLayoutInfo = array(
    		'scriptPath'	=> $layoutPath,
    		'scriptUrl'		=> $customCssUrl,
    		'includeScript'	=> ''
    	);
    	return $aLayoutInfo;
    }

    public static function addNewPictureName($picture_name)
    {
    	$uniqueId = RvsLibs_String::genUniqueId();
    	$res = DaoFactory::Picture()->insertNewPictureName($uniqueId, $picture_name);
    	//optimize : siwakorn
    	return ($res) ? $uniqueId : false;
    }

    /**
     * Update Uikit rvsb-css
     * www/UikitTemplate/MasterTemplateUIKit/rvsb-css/*
     * to
     * /home/{user}/.rvsitebuilder/projects/{project_id}/customcss/{template_folder_user}/rvsb-css/*
     *
     * @param unknown $source
     * @param unknown $dest
     */
    public static function updateUikitCss($source, $dest)
    {
    	SGL::logMessage('source: ' . $source, PEAR_LOG_DEBUG);
    	SGL::logMessage('dest: ' . $dest, PEAR_LOG_DEBUG);

    	if (class_exists('RV_CssParser') == false) {
    		require_once SGL_MOD_DIR . '/sitebuilder/classes/RV_CssParser.php';
    	}
    	$oCss = RV_CssParser::singleton(true);
    	$path = RvsLibs_System::ls(array('-R', $source));

    	foreach ($path['files'] as $file) {

    		$fileName = end(explode('/', $file));
    		$sourceFile = $source . '/' . $fileName;
    		$destFile = $dest . '/' . $fileName;

    		if (is_file($sourceFile) == true
    			&& is_file($destFile) == true) {

    			$oCss->merge_multiple_css(array($sourceFile, $destFile));
    			$oCss->build_css();
    			$oCss->write_file($destFile);
    		}

    	}

    }

	}//End Class
}
?>