Your IP : 216.73.216.87


Current Path : /home/bitrix/vorobey-clubru/bitrix/modules/aspro.mshop/
Upload File :
Current File : /home/bitrix/vorobey-clubru/bitrix/modules/aspro.mshop/_include.php.back1.2.10

<?
IncludeModuleLangFile(__FILE__);

CModule::AddAutoloadClasses(
	'aspro.mshop',
	array(
		'CMshopCache' => 'classes/general/CMshopCache.php',
	)
);

// include common aspro functions
//include_once __DIR__ .'/classes/general/CMshopCache.php';

class CMShop{
    const partnerName	= "aspro";
    const solutionName	= "mshop";
	const moduleID		= "aspro.mshop";
    const wizardID		= "aspro:mshop";
	const devMode 		= false;

    function ShowPanel(){
        if($GLOBALS["USER"]->IsAdmin() && COption::GetOptionString("main", "wizard_solution", "", SITE_ID) == self::solutionName){
            $GLOBALS["APPLICATION"]->SetAdditionalCSS("/bitrix/wizards/".self::partnerName."/".self::solutionName."/css/panel.css");
            $arMenu = array(
                array(
                    "ACTION" => "jsUtils.Redirect([], '".CUtil::JSEscape("/bitrix/admin/wizard_install.php?lang=".LANGUAGE_ID."&wizardSiteID=".SITE_ID."&wizardName=".self::wizardID."&".bitrix_sessid_get())."')",
                    "ICON" => "bx-popup-item-wizard-icon",
                    "TITLE" => GetMessage("STOM_BUTTON_TITLE_W1"),
                    "TEXT" => GetMessage("STOM_BUTTON_NAME_W1"),
                ),
            );
            $GLOBALS["APPLICATION"]->AddPanelButton(array(
                "HREF" => "/bitrix/admin/wizard_install.php?lang=".LANGUAGE_ID."&wizardName=".self::wizardID."&wizardSiteID=".SITE_ID."&".bitrix_sessid_get(),
                "ID" => self::solutionName."_wizard",
                "ICON" => "bx-panel-site-wizard-icon",
                "MAIN_SORT" => 2500,
                "TYPE" => "BIG",
                "SORT" => 10,
                "ALT" => GetMessage("SCOM_BUTTON_DESCRIPTION"),
                "TEXT" => GetMessage("SCOM_BUTTON_NAME"),
                "MENU" => $arMenu,
            ));
        }
    }

    function BeforeSendEvent(\Bitrix\Main\Event $event){
		if(isset($_REQUEST["ONE_CLICK_BUY"]) && method_exists('\Bitrix\Sale\Compatible\EventCompatibility', 'setDisableMailSend')){
			\Bitrix\Sale\Compatible\EventCompatibility::setDisableMailSend(true);
			if(method_exists('\Bitrix\Sale\Notify', 'setNotifyDisable'))
				\Bitrix\Sale\Notify::setNotifyDisable(true);
		}
	}

	function Check(){
	}

	function Start($siteID){
		global  $APPLICATION, $SITE_THEME, $TEMPLATE_OPTIONS, $THEME_SWITCHER, $STARTTIME;
		$STARTTIME = time() * 1000;
		$SITE_THEME = COption::GetOptionString(self::moduleID, "COLOR_THEME", 'BLUE', $siteID);
		$TEMPLATE_OPTIONS = self::GetTemplateOptions($siteID);
		$THEME_SWITCHER = COption::GetOptionString(self::moduleID, 'THEME_SWITCHER', 'N', $siteID);

		if($TEMPLATE_OPTIONS && is_array($TEMPLATE_OPTIONS)){
			// reset theme
			if($_REQUEST["theme"] == "default"){
				foreach($TEMPLATE_OPTIONS as $templateOptionKey => $templateOptionValue){
					if(isset($templateOptionValue["DEFAULT"])){
						$default = $templateOptionValue["DEFAULT"];
						$TEMPLATE_OPTIONS[$templateOptionKey]["CURRENT_VALUE"] = strToUpper($default);
						$_SESSION[SITE_ID][strToUpper($templateOptionKey)] = strToUpper($default);
					}
				}
				COption::SetOptionString(self::moduleID, "NeedGenerateCustomTheme", 'Y', '', $siteID);
			}
			else{
				foreach($TEMPLATE_OPTIONS as $templateOptionKey => $templateOptionValue){
					// read theme from $_SESSION if $THEME_SWITCHER == Y
					$arOptionValues = array();
					if($templateOptionValue["VALUES"] && is_array($templateOptionValue["VALUES"])){
						foreach($templateOptionValue["VALUES"] as  $i => $j){
							$arOptionValues[] = $j["VALUE"];
						}
					}
					if(($THEME_SWITCHER == "Y") && $_SESSION[$siteID] && is_array($_SESSION[$siteID])){
						foreach($_SESSION[SITE_ID] as $sessionKey => $sessionValue){
							if($sessionKey == $templateOptionValue["ID"] && ($templateOptionValue["ID"] == "CUSTOM_COLOR_THEME" || in_array($sessionValue, $arOptionValues))){
								$TEMPLATE_OPTIONS[$templateOptionKey]["CURRENT_VALUE"] = $sessionValue;
							}
						}
					}

					// save theme changes in $_SESSION if $THEME_SWITCHER == Y
					if($_REQUEST && is_array($_REQUEST)){
						foreach($_REQUEST as $requestKey => $requestValue){
							if(strToUpper($requestKey) == $templateOptionValue["ID"] && ($templateOptionValue["ID"] == "CUSTOM_COLOR_THEME" || in_array(strToUpper($requestValue), $arOptionValues))){
								if($templateOptionValue["ID"] == "CUSTOM_COLOR_THEME"){
									$requestValue = str_replace('#', '', $requestValue);
									$requestValue = (strlen($requestValue) ? $requestValue : $templateOptionValue['DEFAULT']);
								}

								if($templateOptionValue["ID"] == "COLOR_THEME" && $requestValue == 'CUSTOM'){
									COption::SetOptionString(self::moduleID, "NeedGenerateCustomTheme", 'Y', '', $siteID);
								}

								if($THEME_SWITCHER == "Y"){
									$_SESSION[$siteID][strToUpper($requestKey)] = strToUpper($requestValue);
									$TEMPLATE_OPTIONS[$templateOptionKey]["CURRENT_VALUE"] = strToUpper($requestValue);
								}
							}
						}
					}
				}
			}

			if($THEME_SWITCHER == "Y" && $TEMPLATE_OPTIONS["HEAD"]["VALUES"] && is_array($TEMPLATE_OPTIONS["HEAD"]["VALUES"])){
				foreach($TEMPLATE_OPTIONS["HEAD"]["VALUES"] as $arValue){
					if($arValue["VALUE"] === $TEMPLATE_OPTIONS["HEAD"]["CURRENT_VALUE"]){
						$TEMPLATE_OPTIONS["LOGO_IMAGE"]["CURRENT_IMG"] = ($TEMPLATE_OPTIONS["LOGO_IMAGE"]["CURRENT_VALUE"] !== serialize(array())) ? $TEMPLATE_OPTIONS["LOGO_IMAGE"]["CURRENT_IMG"] : str_replace('//', '/', SITE_DIR.$arValue["IMG"]);
						$TEMPLATE_OPTIONS["LOGO_IMAGE"]["IMG_PRINT"] = ($TEMPLATE_OPTIONS["LOGO_IMAGE"]["CURRENT_VALUE"] !== serialize(array())) ? $TEMPLATE_OPTIONS["LOGO_IMAGE"]["CURRENT_IMG"] : SITE_DIR."include/logo_color.png";
						$TEMPLATE_OPTIONS["HEAD"]["CURRENT_MENU"] = $arValue["MENU_TYPE"];
						$TEMPLATE_OPTIONS["HEAD"]["CURRENT_HEAD_COLOR"] = $arValue["HEAD_COLOR"];
						$TEMPLATE_OPTIONS["HEAD"]["CURRENT_MENU_COLOR"] = ($arValue["MENU_COLOR"] ? $arValue["MENU_COLOR"] : "none");
						break;
					}
				}
			}
		}

		if(isset($_REQUEST["color_theme"]) && $_REQUEST["color_theme"]){
			LocalRedirect($_SERVER["HTTP_REFERER"]);
		}

		$SITE_THEME = $TEMPLATE_OPTIONS["COLOR_THEME"]["CURRENT_VALUE"];
		$SITE_THEME_PATH = SITE_TEMPLATE_PATH.'/themes/'.strToLower($SITE_THEME.($SITE_THEME !== 'CUSTOM' ? '' : '_'.$siteID));
		$APPLICATION->SetAdditionalCSS($SITE_THEME_PATH.'/theme.css', true);
		CMShop::GenerateThemes($siteID);

		if(CModule::IncludeModuleEx(self::moduleID) == 1){
			$APPLICATION->SetPageProperty("viewport", "user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=device-width");
			$APPLICATION->SetPageProperty("HandheldFriendly", "true");
			$APPLICATION->SetPageProperty("apple-mobile-web-app-capable", "yes");
			$APPLICATION->SetPageProperty("apple-mobile-web-app-status-bar-style", "black");
			$APPLICATION->SetPageProperty("SKYPE_TOOLBAR", "SKYPE_TOOLBAR_PARSER_COMPATIBLE");
			$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH.'/css/jquery.fancybox.css');
			$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH.'/css/styles.css');
			$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH.'/css/colors.css');
			if($_REQUEST && isset($_REQUEST['print'])){
				$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH.'/css/print.css', true);
			}else{
				$APPLICATION->SetAdditionalCSS(((COption::GetOptionString('main', 'use_minified_assets', 'N', $siteID) === 'Y') && file_exists($_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/css/media.min.css')) ? SITE_TEMPLATE_PATH.'/css/media.min.css' : SITE_TEMPLATE_PATH.'/css/media.css', true);
			}
			$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH.'/css/custom.css', true);
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.actual.min.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jqModal.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.fancybox.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.history.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.flexslider.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.validate.min.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.inputmask.bundle.min.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.easing.1.3.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/equalize.min.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.alphanumeric.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.cookie.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.plugin.min.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.countdown.min.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.countdown-ru.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.ikSelect.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/sly.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/equalize_ext.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/main.js');
			$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/custom.js', true);

			if(strlen($TEMPLATE_OPTIONS['FAVICON_IMAGE']['CURRENT_IMG'])){
				$APPLICATION->AddHeadString('<link rel="shortcut icon" href="'.$TEMPLATE_OPTIONS['FAVICON_IMAGE']['CURRENT_IMG'].'" type="image/x-icon" />', true);
			}
			if(strlen($TEMPLATE_OPTIONS['APPLE_TOUCH_ICON_57_IMAGE']['CURRENT_IMG'])){
				$APPLICATION->AddHeadString('<link rel="apple-touch-icon" sizes="57x57" href="'.$TEMPLATE_OPTIONS['APPLE_TOUCH_ICON_57_IMAGE']['CURRENT_IMG'].'" />', true);
			}
			if(strlen($TEMPLATE_OPTIONS['APPLE_TOUCH_ICON_72_IMAGE']['CURRENT_IMG'])){
				$APPLICATION->AddHeadString('<link rel="apple-touch-icon" sizes="72x72" href="'.$TEMPLATE_OPTIONS['APPLE_TOUCH_ICON_72_IMAGE']['CURRENT_IMG'].'" />', true);
			}

			CJSCore::Init(array("jquery"));
			CAjax::Init();
			\Bitrix\Main\Loader::includeModule('sale');
			\Bitrix\Main\Loader::includeModule('catalog');
			return true;
		}
		else{
			$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH.'/css/styles.css');
			$APPLICATION->SetTitle(GetMessage("ERROR_INCLUDE_MODULE"));
			$APPLICATION->IncludeFile(SITE_DIR."include/error_include_module.php", Array(), Array()); die();
		}
	}

	function ShowLogo(){
		global $arSite, $TEMPLATE_OPTIONS;
		?>
		<a href="<?=SITE_DIR?>"><img src="<?=$TEMPLATE_OPTIONS["LOGO_IMAGE"]["CURRENT_IMG"]?>" alt="<?=$arSite["SITE_NAME"]?>" title="<?=$arSite["SITE_NAME"]?>" /></a>
		<a href="<?=SITE_DIR?>" class="print_img"><img src="<?=$TEMPLATE_OPTIONS["LOGO_IMAGE"]["IMG_PRINT"]?>" alt="<?=$arSite["SITE_NAME"]?>" title="<?=$arSite["SITE_NAME"]?>" /></a>
		<?
	}

	function getViewedProducts($userID = false, $siteID = false){
		global $TEMPLATE_OPTIONS, $STARTTIME;
		$arResult = array();
		$siteID = $siteID ? $siteID : SITE_ID;
		$localKey = 'MARKET_VIEWED_ITEMS_'.$siteID;

		if($IsViewedTypeLocal = ($TEMPLATE_OPTIONS['VIEWED_TYPE']['CURRENT_VALUE'] === 'LOCAL')){
			$arViewed = (isset($_COOKIE[$localKey]) && strlen($_COOKIE[$localKey])) ? json_decode($_COOKIE[$localKey], true) : array();

			if($arViewed && is_array($arViewed)){
				$viewedDays = COption::GetOptionString("sale", "viewed_time", "5");
				$viewedCntMax = COption::GetOptionString("sale", "viewed_count", "10");
				$DIETIME = $STARTTIME - $viewedDays * 86400000;

				// delete old items
				foreach($arViewed as $ID => $arItem){
					if($arItem[0] < $DIETIME){
						unset($arViewed[$ID]);
						continue;
					}

					$arResult[$ID] = $arItem[0];
				}

				// sort by ACTIVE_FROM
				arsort($arResult);

				// make IDs array
				$arResult = array_keys($arResult);

				// only $viewedCntMax items
				$arResult = array_slice($arResult, 0, $viewedCntMax);
			}
		}
		else{
			\Bitrix\Main\Loader::includeModule('sale');
			\Bitrix\Main\Loader::includeModule('catalog');
			$userID = $userID ? $userID : (int)CSaleBasket::GetBasketUserID(false);

			$viewedIterator = \Bitrix\Catalog\CatalogViewedProductTable::GetList(array(
				'select' => array('PRODUCT_ID', 'ELEMENT_ID'),
				'filter' => array('=FUSER_ID' => $userID, '=SITE_ID' => $siteID),
				'order' => array('DATE_VISIT' => 'DESC'),
				'limit' => 10
			));
			while($viewedProduct = $viewedIterator->fetch()){
				$viewedProduct['ELEMENT_ID'] = (int)$viewedProduct['ELEMENT_ID'];
				$viewedProduct['PRODUCT_ID'] = (int)$viewedProduct['PRODUCT_ID'];
				$arResult[$viewedProduct['PRODUCT_ID']] = $viewedProduct['ELEMENT_ID'];
			}
		}

		return $arResult;
	}

	function GenerateMinCss($file){
		if(file_exists($file)){
			$content = @file_get_contents($file);
			if($content !== false){
				$content = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $content);
				$content = str_replace(array("\r\n", "\r", "\n", "\t"), '', $content);
				$content = preg_replace('/ {2,}/', ' ', $content);
				$content = str_replace(array(' : ', ': ', ' :',), ':', $content);
				$content = str_replace(array(' ; ', '; ', ' ;'), ';', $content);
				$content = str_replace(array(' > ', '> ', ' >'), '>', $content);
				$content = str_replace(array(' + ', '+ ', ' +'), '+', $content);
				$content = str_replace(array(' { ', '{ ', ' {'), '{', $content);
				$content = str_replace(array(' } ', '} ', ' }'), '}', $content);
				$content = str_replace(array(' ( ', '( ', ' ('), '(', $content);
				$content = str_replace(array(' ) ', ') ', ' )'), ')', $content);
				$content = str_replace('and(', 'and (', $content);
				$content = str_replace(')li', ') li', $content);
				@file_put_contents(dirname($file).'/'.basename($file, '.css').'.min.css', $content);
			}
		}

		return false;
	}

	function GenerateThemes($siteID){
		global $SITE_THEME, $TEMPLATE_OPTIONS, $THEME_SWITCHER;
		$arBaseColors = $TEMPLATE_OPTIONS['COLOR_THEME']['VALUES'];
		$isCustomTheme = $TEMPLATE_OPTIONS['COLOR_THEME']['CURRENT_VALUE'] === 'CUSTOM';

		$bNeedGenerateAllThemes = COption::GetOptionString(self::moduleID, 'NeedGenerateThemes', 'N', $siteID) === 'Y';
		$bNeedGenerateCustomTheme = COption::GetOptionString(self::moduleID, 'NeedGenerateCustomTheme', 'N', $siteID) === 'Y';

		$baseColorCustom = $baseColorBGCustom = '';
		$lastGeneratedBaseColorCustom = COption::GetOptionString(self::moduleID, 'LastGeneratedBaseColorCustom', '', $siteID);
		if(isset($TEMPLATE_OPTIONS['CUSTOM_COLOR_THEME'])){
			$baseColorCustom = str_replace('#', '', $TEMPLATE_OPTIONS['CUSTOM_COLOR_THEME']['CURRENT_VALUE']);
			$baseColorCustom = '#'.(strlen($baseColorCustom) ? $baseColorCustom : $TEMPLATE_OPTIONS['CUSTOM_COLOR_THEME']['DEFAULT']);
		}

		$bGenerateAll = self::devMode || $bNeedGenerateAllThemes;
		$bGenerateCustom = $bGenerateAll || $bNeedGenerateCustomTheme || ($THEME_SWITCHER === 'Y' && $isCustomTheme && strlen($baseColorCustom) && $baseColorCustom != $lastGeneratedBaseColorCustom);
		if($arBaseColors && is_array($arBaseColors) && ($bGenerateAll || $bGenerateCustom)){
			if(!class_exists('lessc')){
				include_once 'lessc.inc.php';
			}
			$less = new lessc;
			try{
				foreach($arBaseColors as $arColor){
					if(($bCustom = ($arColor['VALUE'] == 'CUSTOM')) && $bGenerateCustom){
						if(strlen($baseColorCustom)){
							$less->setVariables(array('bcolor' => $baseColorCustom));
						}
					}
					elseif($bGenerateAll){
						$less->setVariables(array('bcolor' => $arColor['COMPONENT_VALUE']));
					}

					if($bGenerateAll || ($bCustom && $bGenerateCustom)){
						if(defined('SITE_TEMPLATE_PATH')){
							$themeDirPath = $_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/themes/'.strToLower($arColor['VALUE'].($arColor['VALUE'] !== 'CUSTOM' ? '' : '_'.$siteID)).'/';
							if(!is_dir($themeDirPath)) mkdir($themeDirPath, 0755, true);
							$output = $less->compileFile(__DIR__.'/css/theme.less', $themeDirPath.'theme.css');
							if($output){
								if($bCustom){
									COption::SetOptionString(self::moduleID, 'LastGeneratedBaseColorCustom', $baseColorCustom, '', $siteID);
								}
								self::GenerateMinCss($themeDirPath.'theme.css');
							}
						}
					}
				}
			}
			catch(exception $e){
				echo 'Fatal error: '.$e->getMessage();
				die();
			}

			if($bNeedGenerateAllThemes){
				COption::SetOptionString(self::moduleID, "NeedGenerateThemes", 'N', '', $siteID);
			}
			if($bNeedGenerateCustomTheme){
				COption::SetOptionString(self::moduleID, "NeedGenerateCustomTheme", 'N', '', $siteID);
			}
		}
	}

	function getChilds($input, &$start = 0, $level = 0){
		$childs = array();

		if(!$level){
			$lastDepthLevel = 1;
			if(is_array($input)){
				foreach($input as $i => $arItem){
					if($arItem["DEPTH_LEVEL"] > $lastDepthLevel){
						if($i > 0){
							$input[$i - 1]["IS_PARENT"] = 1;
						}
					}
					$lastDepthLevel = $arItem["DEPTH_LEVEL"];
				}
			}
		}

		for($i = $start, $count = count($input); $i < $count; ++$i){
			$item = $input[$i];
			if($level > $item['DEPTH_LEVEL'] - 1){
				break;
			}
			elseif(!empty($item['IS_PARENT'])){
				++$i;
				$item['CHILD'] = self::getChilds($input, $i, $level + 1);
				--$i;
			}
			$childs[] = $item;
		}

		$start = $i;
		return $childs;
	}

	static function cmpByID($a, $b){
		return ($b['ID'] - $a['ID']);
	}

	static function cmpBySort($a, $b){
		return ($a['SORT'] - $b['SORT']);
	}

	static function cmpByIDFilter($a, $b){
		global $IDFilter;
		$ak = array_search($a['ID'], $IDFilter);
		$bk = array_search($b['ID'], $IDFilter);
		if($ak === $bk){
			return 0;
		}
		else{
			return ($ak > $bk ? 1 : -1);
		}
	}

	function getChainNeighbors($curSectionID, $chainPath){
		static $arSections, $arSectionsIDs, $arSubSections;
		$arResult = array();

		if($arSections === NULL){
			$arSections = $arSectionsIDs = $arSubSections = array();
			$IBLOCK_ID = false;
			$nav = CIBlockSection::GetNavChain(false, $curSectionID, array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "SECTION_PAGE_URL"));
			while($ar = $nav->GetNext()){
				$arSections[] = $ar;
				$arSectionsIDs[] = ($ar["IBLOCK_SECTION_ID"] ? $ar["IBLOCK_SECTION_ID"] : 0);
				$IBLOCK_ID = $ar["IBLOCK_ID"];
			}

			if($arSectionsIDs){
				$resSubSection = CIBlockSection::GetList(array('SORT' => 'ASC'), array("ACTIVE" => "Y", "GLOBAL_ACTIVE" => "Y", "IBLOCK_ID" => $IBLOCK_ID, "SECTION_ID" => $arSectionsIDs), false, array("ID", "NAME", "IBLOCK_SECTION_ID", "SECTION_PAGE_URL"));
				while($arSubSection = $resSubSection->GetNext()){
					$arSubSection["IBLOCK_SECTION_ID"] = ($arSubSection["IBLOCK_SECTION_ID"] ? $arSubSection["IBLOCK_SECTION_ID"] : 0);
					$arSubSections[$arSubSection["IBLOCK_SECTION_ID"]][] = $arSubSection;
				}

				if(in_array(0, $arSectionsIDs)){
					$resSubSection = CIBlockSection::GetList(array('SORT' => 'ASC'), array("ACTIVE" => "Y", "GLOBAL_ACTIVE" => "Y", "IBLOCK_ID" => $IBLOCK_ID, "SECTION_ID" => false), false, array("ID", "NAME", "IBLOCK_SECTION_ID", "SECTION_PAGE_URL"));
					while($arSubSection = $resSubSection->GetNext()){
						$arSubSections[$arSubSection["IBLOCK_SECTION_ID"]][] = $arSubSection;
					}
				}
			}
		}

		if($arSections && strlen($chainPath)){
			foreach($arSections as $arSection){
				if($arSection["SECTION_PAGE_URL"] == $chainPath){
					if($arSubSections[$arSection["IBLOCK_SECTION_ID"]]){
						foreach($arSubSections[$arSection["IBLOCK_SECTION_ID"]] as $arSubSection){
							if($curSectionID !== $arSubSection["ID"]){
								$arResult[] = array("NAME" => $arSubSection["NAME"], "LINK" => $arSubSection["SECTION_PAGE_URL"]);
							}
						}
					}
					break;
				}
			}
		}

		return $arResult;
	}

	function drawFormField($FIELD_SID, $arQuestion){
		?>
		<?$arQuestion["HTML_CODE"] = str_replace('name=', 'data-sid="'.$FIELD_SID.'" name=', $arQuestion["HTML_CODE"]);?>
		<?if($arQuestion['STRUCTURE'][0]['FIELD_TYPE'] == 'hidden'):?>
			<?=$arQuestion["HTML_CODE"];?>
		<?else:?>
			<div class="form-control">
				<label><span><?=$arQuestion["CAPTION"]?><?=($arQuestion["REQUIRED"] == "Y" ? '&nbsp;<span class="star">*</span>' : '')?></span></label>
				<?
				if(is_array($arResult["FORM_ERRORS"]) && array_key_exists($FIELD_SID, $arResult['FORM_ERRORS'])){
					$arQuestion["HTML_CODE"] = str_replace('class="', 'class="error ', $arQuestion["HTML_CODE"]);
				}
				if($arQuestion["REQUIRED"] == "Y"){
					$arQuestion["HTML_CODE"] = str_replace('name=', 'required name=', $arQuestion["HTML_CODE"]);
				}
				if($arQuestion["STRUCTURE"][0]["FIELD_TYPE"] == "email"){
					$arQuestion["HTML_CODE"] = str_replace('type="text"', 'type="email" placeholder="mail@domen.com"', $arQuestion["HTML_CODE"]);
				}
				?>
				<?=$arQuestion["HTML_CODE"]?>
			</div>
		<?endif;?>
		<?
	}

	function GetValidFormIDForSite(&$form_id){
		if(!is_numeric($form_id) && !in_array($form_id, array('auth', 'one_click_buy'))){
			CModule::IncludeModule('form');
			$rsForm = CForm::GetList($by = "id", $order = "asc", array("ACTIVE" => "Y", "SID" => $form_id, "SITE" => array(SITE_ID)), $is_filtered);
			if($item = $rsForm->Fetch()){
				$form_id = $item["ID"];
			}
		}

		return $form_id;
	}

	function CheckTypeCount($totalCount){
		if(is_float($totalCount)){
			return floatval($totalCount);
		}
		else{
			return intval($totalCount);
		}
	}

	function GetTotalCount(&$arItem){
		$totalCount = 0;
		if($arItem["OFFERS"]){
			foreach($arItem["OFFERS"] as $arOffer){
				$totalCount += $arOffer["CATALOG_QUANTITY"];
			}
		}elseif($arItem["PRICES"]){
			$totalCount = ( $arItem["~CATALOG_QUANTITY"] != $arItem["CATALOG_QUANTITY"] ? $arItem["~CATALOG_QUANTITY"] : $arItem["CATALOG_QUANTITY"] );
		}else{
			$totalCount = ( $arItem["~CATALOG_QUANTITY"] != $arItem["CATALOG_QUANTITY"] ? $arItem["~CATALOG_QUANTITY"] : $arItem["CATALOG_QUANTITY"] );
		}
		return self::CheckTypeCount($totalCount);
	}

	function GetQuantityArray($totalCount, $arItemIDs = array(), $useStoreClick="N"){
		static $arQuantityOptions, $arQuantityRights;
		if($arQuantityOptions === NULL){
			$arQuantityOptions = array(
				"USE_WORD_EXPRESSION" => COption::GetOptionString("aspro.mshop", "USE_WORD_EXPRESSION", "Y", SITE_ID),
				"MAX_AMOUNT" => COption::GetOptionString("aspro.mshop", "MAX_AMOUNT", "10", SITE_ID),
				"MIN_AMOUNT" => COption::GetOptionString("aspro.mshop", "MIN_AMOUNT", "2", SITE_ID),
				"EXPRESSION_FOR_MIN" => COption::GetOptionString("aspro.mshop", "EXPRESSION_FOR_MIN", GetMessage("EXPRESSION_FOR_MIN_DEFAULT"), SITE_ID),
				"EXPRESSION_FOR_MID" => COption::GetOptionString("aspro.mshop", "EXPRESSION_FOR_MID", GetMessage("EXPRESSION_FOR_MID_DEFAULT"), SITE_ID),
				"EXPRESSION_FOR_MAX" => COption::GetOptionString("aspro.mshop", "EXPRESSION_FOR_MAX", GetMessage("EXPRESSION_FOR_MAX_DEFAULT"), SITE_ID),
				"EXPRESSION_FOR_EXISTS" => COption::GetOptionString("aspro.mshop", "EXPRESSION_FOR_EXISTS", GetMessage("EXPRESSION_FOR_EXISTS_DEFAULT"), SITE_ID),
				"EXPRESSION_FOR_NOTEXISTS" => COption::GetOptionString("aspro.mshop", "EXPRESSION_FOR_NOTEXISTS", GetMessage("EXPRESSION_FOR_NOTEXISTS_DEFAULT"), SITE_ID),
				"SHOW_QUANTITY_FOR_GROUPS" => (($tmp = COption::GetOptionString("aspro.mshop", "SHOW_QUANTITY_FOR_GROUPS", "", SITE_ID)) ? explode(",", $tmp) : array()),
				"SHOW_QUANTITY_COUNT_FOR_GROUPS" => (($tmp = COption::GetOptionString("aspro.mshop", "SHOW_QUANTITY_COUNT_FOR_GROUPS", "", SITE_ID)) ? explode(",", $tmp) : array()),
			);

			$arQuantityRights = array(
				"SHOW_QUANTITY" => false,
				"SHOW_QUANTITY_COUNT" => false,
			);

			global $USER;
			$res = CUser::GetUserGroupList($USER->GetID());
			while ($arGroup = $res->Fetch()){
				if(in_array($arGroup["GROUP_ID"], $arQuantityOptions["SHOW_QUANTITY_FOR_GROUPS"])){
					$arQuantityRights["SHOW_QUANTITY"] = true;
				}
				if(in_array($arGroup["GROUP_ID"], $arQuantityOptions["SHOW_QUANTITY_COUNT_FOR_GROUPS"])){
					$arQuantityRights["SHOW_QUANTITY_COUNT"] = true;
				}
			}
		}

		$indicators = 0;
		$totalAmount = $totalText = $totalHTML = $totalHTMLs = '';

		if($arQuantityRights["SHOW_QUANTITY"]){
			if($totalCount > $arQuantityOptions["MAX_AMOUNT"]){
				$indicators = 3;
				$totalAmount = $arQuantityOptions["EXPRESSION_FOR_MAX"];
			}
			elseif($totalCount < $arQuantityOptions["MIN_AMOUNT"] && $totalCount > 0){
				$indicators = 1;
				$totalAmount = $arQuantityOptions["EXPRESSION_FOR_MIN"];
			}
			else{
				$indicators = 2;
				$totalAmount = $arQuantityOptions["EXPRESSION_FOR_MID"];
			}

			if($totalCount > 0){
				if($arQuantityRights["SHOW_QUANTITY_COUNT"]){
					$totalHTML = '<span class="first'.($indicators >= 1 ? ' r' : '').'"></span><span class="'.($indicators >= 2 ? ' r' : '').'"></span><span class="last'.($indicators >= 3 ? ' r' : '').'"></span>';
				}
				else{
					$totalHTML = '<span class="first r"></span>';
				}
			}
			else{
				$totalHTML = '<span class="null"></span>';
			}

			//$totalText = ($totalCount > 0 ? $arQuantityOptions["EXPRESSION_FOR_EXISTS"] : $arQuantityOptions["EXPRESSION_FOR_NOTEXISTS"]);
			if($totalCount > 0){
				$totalText = $arQuantityOptions["EXPRESSION_FOR_EXISTS"];
			}else{
				if($useStoreClick=="Y"){
					$totalText = "<span class='store_view'>".$arQuantityOptions["EXPRESSION_FOR_NOTEXISTS"]."</span>";
				}else{
					$totalText = $arQuantityOptions["EXPRESSION_FOR_NOTEXISTS"];
				}
			}

			if($arQuantityRights["SHOW_QUANTITY_COUNT"] && $totalCount > 0){
				if($arQuantityOptions["USE_WORD_EXPRESSION"] == "Y"){
					if(strlen($totalAmount)){
						if($useStoreClick=="Y"){
							$totalText = "<span class='store_view'>".$totalAmount."</span>";
						}else{
							$totalText = $totalAmount;
						}
					}
				}
				else{
					if($useStoreClick=="Y"){
						$totalText .= (strlen($totalText) ? " <span class='store_view'>(".$totalCount.")</span>" : "<span class='store_view'>".$totalCount."</span>");
					}else{
						$totalText .= (strlen($totalText) ? " (".$totalCount.")" : $totalCount);
					}
				}
			}
			$totalHTMLs ='<div class="item-stock" '.($arItemIDs["STORE_QUANTITY"] ? "id=".$arItemIDs["STORE_QUANTITY"] : "").'>';
			$totalHTMLs .= '<span class="icon '.$arClass[1].($totalCount > 0 ? 'stock' : ' order').'"></span><span class="value">'.$totalText.'</span>';
			$totalHTMLs .='</div>';
		}
		return array("OPTIONS" => $arQuantityOptions, "RIGHTS" => $arQuantityRights, "TEXT" => $totalText, "HTML" => $totalHTMLs);
	}

	function GetAvailiableStore($totalCount = 0, $arItemIDs=array(), $detail=false){
		static $arQuantityOptions;
		if($arQuantityOptions === NULL){
			$arQuantityOptions = array(
				"EXPRESSION_FOR_EXISTS" => COption::GetOptionString("aspro.mshop", "EXPRESSION_FOR_EXISTS", GetMessage("EXPRESSION_FOR_EXISTS_DEFAULT"), SITE_ID),
				"EXPRESSION_FOR_NOTEXISTS" => COption::GetOptionString("aspro.mshop", "EXPRESSION_FOR_NOTEXISTS", GetMessage("EXPRESSION_FOR_NOTEXISTS_DEFAULT"), SITE_ID),
			);
		}
		$totalHTML='<div class="item-stock" '.($arItemIDs["STORE_QUANTITY"] ? "id=".$arItemIDs["STORE_QUANTITY"] : "").'>';
		if($totalCount){
			$totalHTML.='<span class="icon stock"></span><span>'.$arQuantityOptions["EXPRESSION_FOR_EXISTS"];
			if($detail=="Y"){
				$totalHTML.='<span class="store_link"> ('.$totalCount.')</span>';
			}else{
				$totalHTML.=' ('.$totalCount.')';
			}
			$totalHTML.='</span>';
		}else{
			$totalHTML.='<span class="icon order"></span><span>'.$arQuantityOptions["EXPRESSION_FOR_NOTEXISTS"].'</span>';
		}
		$totalHTML.='</div>';

		return array( "OPTIONS" => $arQuantityOptions, "HTML" => $totalHTML );
	}

	function GetPropertyViewType($IBLOCK_ID){
		global $DB;
		$IBLOCK_ID = intval($IBLOCK_ID);
		$SECTION_ID=64;
		// $IBLOCK_ID = 15;
        $result = array();
		/*$rs = $DB->Query($s = "
			SELECT
				B.SECTION_PROPERTY,
				BP.ID PROPERTY_ID,
				BSP.SECTION_ID LINK_ID,
				BSP.SMART_FILTER,
				BSP.DISPLAY_TYPE,
				BSP.DISPLAY_EXPANDED,
				BSP.FILTER_HINT,
				BP.SORT,
				BP.PROPERTY_TYPE,
				BP.USER_TYPE
			FROM
				b_iblock B
				INNER JOIN b_iblock_property BP ON BP.IBLOCK_ID = B.ID
				INNER JOIN b_iblock_section_property BSP ON  BSP.PROPERTY_ID = BP.ID
			WHERE
				B.ID = ".$IBLOCK_ID."
			ORDER BY
				BP.SORT ASC, BP.ID ASC
		");*/
		$rs = $DB->Query($s = "
			SELECT
                    B.SECTION_PROPERTY,
                    BP.ID PROPERTY_ID,
                    BSP.SECTION_ID LINK_ID,
                    BSP.SMART_FILTER,
                    BSP.DISPLAY_TYPE,
                    BSP.DISPLAY_EXPANDED,
                    BSP.FILTER_HINT,
                    BP.SORT,
                    BS.LEFT_MARGIN,
                    BS.NAME LINK_TITLE,
                    BP.PROPERTY_TYPE,
                    BP.USER_TYPE
                FROM
                    b_iblock B
                    INNER JOIN b_iblock_property BP ON BP.IBLOCK_ID = B.ID
                    INNER JOIN b_iblock_section M ON M.ID = ".$SECTION_ID."
                    INNER JOIN b_iblock_section BS ON BS.IBLOCK_ID = M.IBLOCK_ID
                        AND M.LEFT_MARGIN >= BS.LEFT_MARGIN
                        AND M.RIGHT_MARGIN <= BS.RIGHT_MARGIN
                    INNER JOIN b_iblock_section_property BSP ON BSP.IBLOCK_ID = BS.IBLOCK_ID AND BSP.SECTION_ID = BS.ID AND BSP.PROPERTY_ID = BP.ID
                WHERE
                    B.ID = ".$IBLOCK_ID."
                ORDER BY
                    BP.SORT ASC, BP.ID ASC, BS.LEFT_MARGIN DESC
		");
		while ($ar = $rs->Fetch()){
			$result[$ar["PROPERTY_ID"]] = array(
				"PROPERTY_ID" => $ar["PROPERTY_ID"],
				"SMART_FILTER" => $ar["SMART_FILTER"],
				"DISPLAY_TYPE" => $ar["DISPLAY_TYPE"],
				"DISPLAY_EXPANDED" => $ar["DISPLAY_EXPANDED"],
				"FILTER_HINT" => $ar["FILTER_HINT"],
				"INHERITED_FROM" => $ar["LINK_ID"],
				"SORT" => $ar["SORT"],
				"PROPERTY_TYPE" => $ar["PROPERTY_TYPE"],
			);
		}
		return $result;
	}

	function GetSKUPropsArray(&$arSkuProps, $iblock_id=0, $type_view="list", $hide_title_props="N"){
		$arSkuTemplate = array();
		$class_title=($hide_title_props=="Y" ? "hide_class" : "show_class");
		$class_title.=' bx_item_section_name';
		if($iblock_id){
			//$arPropsSku=CMShop::GetPropertyViewType($iblock_id);
			$arPropsSku=CIBlockSectionPropertyLink::GetArray($iblock_id, 64);
			if($arPropsSku){
				foreach ($arSkuProps as $key=>$arProp){
					if($arPropsSku[$arProp["ID"]]){
						$arSkuProps[$key]["DISPLAY_TYPE"]=$arPropsSku[$arProp["ID"]]["DISPLAY_TYPE"];
					}
				}
			}
		}
		foreach ($arSkuProps as $key=>&$arProp){
			$templateRow = '';
			if(($arProp["DISPLAY_TYPE"]=="P" || $arProp["DISPLAY_TYPE"]=="R" ) && $type_view!= 'block' ){
				$templateRow .= '<div class="bx_item_detail_size" id="#ITEM#_prop_'.$arProp['ID'].'_cont">'.
'<span class="'.$class_title.'">'.htmlspecialcharsex($arProp['NAME']).'</span>'.
'<div class="bx_size_scroller_container form-control bg"><div class="bx_size"><select id="#ITEM#_prop_'.$arProp['ID'].'_list">';
				foreach ($arProp['VALUES'] as $arOneValue){
					if($arOneValue['ID']>0){
						$arOneValue['NAME'] = htmlspecialcharsbx($arOneValue['NAME']);
						$templateRow .= '<option data-treevalue="'.$arProp['ID'].'_'.$arOneValue['ID'].'" data-showtype="select" data-onevalue="'.$arOneValue['ID'].'" ';
						if($arProp["DISPLAY_TYPE"]=="R"){
							$templateRow .= 'data-img_src="'.$arOneValue["PICT"]["SRC"].'" ';
						}
						$templateRow .= 'title="'.$arProp['NAME'].': '.$arOneValue['NAME'].'">';
						$templateRow .= '<span class="cnt">'.$arOneValue['NAME'].'</span>';
						$templateRow .= '</option>';
					}
				}
				$templateRow .= '</select></div>'.
'</div></div>';
			}elseif ('TEXT' == $arProp['SHOW_MODE']){
				$templateRow .= '<div class="bx_item_detail_size" id="#ITEM#_prop_'.$arProp['ID'].'_cont">'.
'<span class="'.$class_title.'">'.htmlspecialcharsex($arProp['NAME']).'</span>'.
'<div class="bx_size_scroller_container"><div class="bx_size"><ul id="#ITEM#_prop_'.$arProp['ID'].'_list">';
				foreach ($arProp['VALUES'] as $arOneValue){
					if($arOneValue['ID']>0){
						$arOneValue['NAME'] = htmlspecialcharsbx($arOneValue['NAME']);
						$templateRow .= '<li data-treevalue="'.$arProp['ID'].'_'.$arOneValue['ID'].'" data-showtype="li" data-onevalue="'.$arOneValue['ID'].'" title="'.$arProp['NAME'].': '.$arOneValue['NAME'].'" style=""><i></i><span class="cnt">'.$arOneValue['NAME'].'</span></li>';
					}
				}
				$templateRow .= '</ul></div>'.
'</div></div>';
			}elseif ('PICT' == $arProp['SHOW_MODE']){
				$templateRow .= '<div class="bx_item_detail_scu" id="#ITEM#_prop_'.$arProp['ID'].'_cont">'.
'<span class="'.$class_title.'">'.htmlspecialcharsex($arProp['NAME']).'</span>'.
'<div class="bx_scu_scroller_container"><div class="bx_scu"><ul id="#ITEM#_prop_'.$arProp['ID'].'_list">';
				foreach ($arProp['VALUES'] as $arOneValue){
					if($arOneValue['ID']>0){
						$arOneValue['NAME'] = htmlspecialcharsbx($arOneValue['NAME']);
						$templateRow .= '<li data-treevalue="'.$arProp['ID'].'_'.$arOneValue['ID'].'" data-showtype="li" data-onevalue="'.$arOneValue['ID'].'" style=""><i title="'.$arProp['NAME'].': '.$arOneValue['NAME'].'"></i>'.
'<span class="cnt"><span class="cnt_item" style="background-image:url(\''.$arOneValue['PICT']['SRC'].'\');" title="'.$arProp['NAME'].': '.$arOneValue['NAME'].'"></span></span></li>';
					}
				}
				$templateRow .= '</ul></div>'.
'</div></div>';
			}
			$arSkuTemplate[$arProp['CODE']] = $templateRow;
		}
		unset($templateRow, $arProp);
		return $arSkuTemplate;
	}

	function GetItemsIDs($arItem, $detail="N"){
		$arAllIDs=array();
		$arAllIDs["strMainID"] = $arItem['strMainID'];
		$arAllIDs["strObName"] = 'ob'.preg_replace("/[^a-zA-Z0-9_]/", "x", $arAllIDs["strMainID"]);

		if($detail=="Y"){
			$arAllIDs["ALL_ITEM_IDS"] = array(
				'ID' => $arAllIDs["strMainID"],
				'PICT' => $arAllIDs["strMainID"].'_pict',
				'DISCOUNT_PICT_ID' => $arAllIDs["strMainID"].'_dsc_pict',
				'STICKER_ID' => $arAllIDs["strMainID"].'_sticker',
				'BIG_SLIDER_ID' => $arAllIDs["strMainID"].'_big_slider',
				'BIG_IMG_CONT_ID' => $arAllIDs["strMainID"].'_bigimg_cont',
				'SLIDER_CONT_ID' => $arAllIDs["strMainID"].'_slider_cont',
				'SLIDER_LIST' => $arAllIDs["strMainID"].'_slider_list',
				'SLIDER_LEFT' => $arAllIDs["strMainID"].'_slider_left',
				'SLIDER_RIGHT' => $arAllIDs["strMainID"].'_slider_right',
				'OLD_PRICE' => $arAllIDs["strMainID"].'_old_price',
				'PRICE' => $arAllIDs["strMainID"].'_price',
				'DISCOUNT_PRICE' => $arAllIDs["strMainID"].'_price_discount',
				'SLIDER_CONT_OF_ID' => $arAllIDs["strMainID"].'_slider_cont_',
				'SLIDER_LIST_OF_ID' => $arAllIDs["strMainID"].'_slider_list_',
				'SLIDER_LEFT_OF_ID' => $arAllIDs["strMainID"].'_slider_left_',
				'SLIDER_RIGHT_OF_ID' => $arAllIDs["strMainID"].'_slider_right_',
				'SLIDER_CONT_OFM_ID' => $arAllIDs["strMainID"].'_sliderm_cont_',
				'SLIDER_LIST_OFM_ID' => $arAllIDs["strMainID"].'_sliderm_list_',
				'SLIDER_LEFT_OFM_ID' => $arAllIDs["strMainID"].'_sliderm_left_',
				'SLIDER_RIGHT_OFM_ID' => $arAllIDs["strMainID"].'_sliderm_right_',
				'QUANTITY' => $arAllIDs["strMainID"].'_quantity',
				'QUANTITY_DOWN' => $arAllIDs["strMainID"].'_quant_down',
				'QUANTITY_UP' => $arAllIDs["strMainID"].'_quant_up',
				'QUANTITY_MEASURE' => $arAllIDs["strMainID"].'_quant_measure',
				'QUANTITY_LIMIT' => $arAllIDs["strMainID"].'_quant_limit',
				'BASIS_PRICE' => $arAllIDs["strMainID"].'_basis_price',
				'BUY_LINK' => $arAllIDs["strMainID"].'_buy_link',
				'BASKET_LINK' => $arAllIDs["strMainID"].'_basket_link',
				'ADD_BASKET_LINK' => $arAllIDs["strMainID"].'_add_basket_link',
				'BASKET_ACTIONS' => $arAllIDs["strMainID"].'_basket_actions',
				'NOT_AVAILABLE_MESS' => $arAllIDs["strMainID"].'_not_avail',
				'COMPARE_LINK' => $arAllIDs["strMainID"].'_compare_link',
				'PROP' => $arAllIDs["strMainID"].'_prop_',
				'PROP_DIV' => $arAllIDs["strMainID"].'_skudiv',
				'DISPLAY_PROP_DIV' => $arAllIDs["strMainID"].'_sku_prop',
				'DISPLAY_PROP_ARTICLE_DIV' => $arAllIDs["strMainID"].'_sku_article_prop',
				'OFFER_GROUP' => $arAllIDs["strMainID"].'_set_group_',
				'BASKET_PROP_DIV' => $arAllIDs["strMainID"].'_basket_prop',
				'SUBSCRIBE_DIV' => $arAllIDs["strMainID"].'_subscribe_div',
				'SUBSCRIBED_DIV' => $arAllIDs["strMainID"].'_subscribed_div',
				'STORE_QUANTITY' => $arAllIDs["strMainID"].'_store_quantity',
			);
		}else{
			$arAllIDs["ALL_ITEM_IDS"] = array(
				'ID' => $arAllIDs["strMainID"],
				'PICT' => $arAllIDs["strMainID"].'_pict',
				'SECOND_PICT' => $arAllIDs["strMainID"].'_secondpict',
				'STICKER_ID' => $arAllIDs["strMainID"].'_sticker',
				'SECOND_STICKER_ID' => $arAllIDs["strMainID"].'_secondsticker',
				'QUANTITY' => $arAllIDs["strMainID"].'_quantity',
				'QUANTITY_DOWN' => $arAllIDs["strMainID"].'_quant_down',
				'QUANTITY_UP' => $arAllIDs["strMainID"].'_quant_up',
				'QUANTITY_MEASURE' => $arAllIDs["strMainID"].'_quant_measure',
				'BUY_LINK' => $arAllIDs["strMainID"].'_buy_link',
				'BASKET_LINK' => $arAllIDs["strMainID"].'_basket_link',
				'BASKET_ACTIONS' => $arAllIDs["strMainID"].'_basket_actions',
				'NOT_AVAILABLE_MESS' => $arAllIDs["strMainID"].'_not_avail',
				'SUBSCRIBE_LINK' => $arAllIDs["strMainID"].'_subscribe',
				'COMPARE_LINK' => $arAllIDs["strMainID"].'_compare_link',
				'STORE_QUANTITY' => $arAllIDs["strMainID"].'_store_quantity',
				'PRICE' => $arAllIDs["strMainID"].'_price',
				'PRICE_OLD' => $arAllIDs["strMainID"].'_price_old',
				'DSC_PERC' => $arAllIDs["strMainID"].'_dsc_perc',
				'SECOND_DSC_PERC' => $arAllIDs["strMainID"].'_second_dsc_perc',
				'PROP_DIV' => $arAllIDs["strMainID"].'_sku_tree',
				'PROP' => $arAllIDs["strMainID"].'_prop_',
				'DISPLAY_PROP_DIV' => $arAllIDs["strMainID"].'_sku_prop',
				'BASKET_PROP_DIV' => $arAllIDs["strMainID"].'_basket_prop',
				'SUBSCRIBE_DIV' => $arAllIDs["strMainID"].'subscribe_div',
				'SUBSCRIBED_DIV' => $arAllIDs["strMainID"].'subscribed_div',
			);
		}

		$arAllIDs["TITLE_ITEM"] = (
			isset($arItem['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE'])&& $arItem['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE'] != ''
			? $arItem['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE']
			: $arItem['NAME']
		);
		return $arAllIDs;
	}

	function GetSKUJSParams($arResult, $arParams, $arItem, $detail="N"){
		$arSkuProps = array();
		foreach ($arResult['SKU_PROPS'] as $arOneProp){
			if (!isset($arItem['OFFERS_PROP'][$arOneProp['CODE']]))
				continue;
			$arSkuProps[] = array(
				'ID' => $arOneProp['ID'],
				'SHOW_MODE' => $arOneProp['SHOW_MODE'],
				'VALUES_COUNT' => $arOneProp['VALUES_COUNT'],
				'DISPLAY_TYPE' => ((($arOneProp['DISPLAY_TYPE'] == "P" || $arOneProp['DISPLAY_TYPE'] == "R") && $arParams["DISPLAY_TYPE"] != 'block' ) ? "SELECT" : "LI" ),
			);
		}
		foreach ($arItem['JS_OFFERS'] as &$arOneJs){
			if (0 < $arOneJs['PRICE']['DISCOUNT_DIFF_PERCENT'])
			{
				$arOneJs['PRICE']['DISCOUNT_DIFF_PERCENT'] = '-'.$arOneJs['PRICE']['DISCOUNT_DIFF_PERCENT'].'%';
				$arOneJs['BASIS_PRICE']['DISCOUNT_DIFF_PERCENT'] = '-'.$arOneJs['BASIS_PRICE']['DISCOUNT_DIFF_PERCENT'].'%';
			}
		}
		unset($arOneJs);
		if ($arItem['OFFERS_PROPS_DISPLAY']){
			foreach ($arItem['JS_OFFERS'] as $keyOffer => $arJSOffer){
				$strProps = '';
				if (!empty($arJSOffer['DISPLAY_PROPERTIES'])){
					foreach ($arJSOffer['DISPLAY_PROPERTIES'] as $arOneProp){
						$strProps .= '<tr><td><span>'.$arOneProp['NAME'].'</span></td><td><span>'.(
							is_array($arOneProp['VALUE'])
							? implode(' / ', $arOneProp['VALUE'])
							: $arOneProp['VALUE']
						).'</span></td></tr>';
					}
				}
				$arItem['JS_OFFERS'][$keyOffer]['DISPLAY_PROPERTIES'] = $strProps;
			}
		}
		if ($arItem['SHOW_OFFERS_PROPS']){
			foreach ($arItem['JS_OFFERS'] as $keyOffer => $arJSOffer){
				$strProps = '';
				if (!empty($arJSOffer['DISPLAY_PROPERTIES'])){
					foreach ($arJSOffer['DISPLAY_PROPERTIES'] as $arOneProp){
						if($arOneProp['VALUE']){
							$arOneProp['VALUE_FORMAT']='<span class="block_title">'.$arOneProp['NAME'].'</span><span class="value">'.$arOneProp['VALUE'].'</span>';
						}
						$arItem['JS_OFFERS'][$keyOffer]['DISPLAY_PROPERTIES_CODE'][$arOneProp["CODE"]] = $arOneProp;
					}
				}
			}
		}
		$arItemIDs=CMShop::GetItemsIDs($arItem);
		if($detail=="Y"){
			$arJSParams = array(
				'CONFIG' => array(
					'USE_CATALOG' => $arResult['CATALOG'],
					'SHOW_QUANTITY' => $arParams['USE_PRODUCT_QUANTITY'],
					'SHOW_PRICE' => true,
					'SHOW_DISCOUNT_PERCENT' => ($arParams['SHOW_DISCOUNT_PERCENT'] == 'Y'),
					'SHOW_OLD_PRICE' => ($arParams['SHOW_OLD_PRICE'] == 'Y'),
					'DISPLAY_COMPARE' => $arParams['DISPLAY_COMPARE'],
					'SHOW_SKU_PROPS' => $arItem['SHOW_OFFERS_PROPS'],
					'OFFER_GROUP' => $arItem['OFFER_GROUP'],
					'MAIN_PICTURE_MODE' => $arParams['DETAIL_PICTURE_MODE'],
					'SHOW_BASIS_PRICE' => ($arParams['SHOW_BASIS_PRICE'] == 'Y'),
					'ADD_TO_BASKET_ACTION' => $arParams['ADD_TO_BASKET_ACTION'],
					'SHOW_CLOSE_POPUP' => ($arParams['SHOW_CLOSE_POPUP'] == 'Y')
				),
				'PRODUCT_TYPE' => $arResult['CATALOG_TYPE'],
				'VISUAL' => array(
					'ID' => $arItemIDs["ALL_ITEM_IDS"]['ID'],
				),
				'DEFAULT_COUNT' => $arParams['DEFAULT_COUNT'],
				'DEFAULT_PICTURE' => array(
					'PREVIEW_PICTURE' => $arResult['DEFAULT_PICTURE'],
					'DETAIL_PICTURE' => $arResult['DEFAULT_PICTURE']
				),
				'STORE_QUANTITY' => $arItemIDs["ALL_ITEM_IDS"]['STORE_QUANTITY'],
				'PRODUCT' => array(
					'ID' => $arResult['ID'],
					'NAME' => $arResult['~NAME']
				),
				'BASKET' => array(
					'QUANTITY' => $arParams['PRODUCT_QUANTITY_VARIABLE'],
					'BASKET_URL' => $arParams['BASKET_URL'],
					'SKU_PROPS' => $arItem['OFFERS_PROP_CODES'],
					'ADD_URL_TEMPLATE' => $arResult['~ADD_URL_TEMPLATE'],
					'BUY_URL_TEMPLATE' => $arResult['~BUY_URL_TEMPLATE']
				),
				'OFFERS' => $arItem['JS_OFFERS'],
				'OFFER_SELECTED' => $arItem['OFFERS_SELECTED'],
				'SKU_DETAIL_ID' => $arParams['SKU_DETAIL_ID'],
				'TREE_PROPS' => $arSkuProps
			);
		}else{
			$arJSParams = array(
				'PRODUCT_TYPE' => $arItem['CATALOG_TYPE'],
				'SHOW_QUANTITY' => ($arParams['USE_PRODUCT_QUANTITY'] == 'Y'),
				'DEFAULT_COUNT' => $arParams['DEFAULT_COUNT'],
				'SHOW_ADD_BASKET_BTN' => false,
				'SHOW_BUY_BTN' => true,
				'SHOW_ABSENT' => true,
				'SHOW_SKU_PROPS' => $arItem['OFFERS_PROPS_DISPLAY'],
				'SECOND_PICT' => $arItem['SECOND_PICT'],
				'SHOW_OLD_PRICE' => ('Y' == $arParams['SHOW_OLD_PRICE']),
				'SHOW_DISCOUNT_PERCENT' => ('Y' == $arParams['SHOW_DISCOUNT_PERCENT']),
				'ADD_TO_BASKET_ACTION' => $arParams['ADD_TO_BASKET_ACTION'],
				'SHOW_CLOSE_POPUP' => ($arParams['SHOW_CLOSE_POPUP'] == 'Y'),
				'DISPLAY_COMPARE' => $arParams['DISPLAY_COMPARE'],
				'BASKET_URL' => $arParams['BASKET_URL'],
				'DEFAULT_PICTURE' => array(
					'PICTURE' => $arItem['PRODUCT_PREVIEW'],
					'PICTURE_SECOND' => $arItem['PRODUCT_PREVIEW_SECOND']
				),
				'VISUAL' => array(
					'ID' => $arItemIDs["ALL_ITEM_IDS"]['ID'],
					'PICT_ID' => $arItemIDs["ALL_ITEM_IDS"]['PICT'],
					'SECOND_PICT_ID' => $arItemIDs["ALL_ITEM_IDS"]['SECOND_PICT'],
					'QUANTITY_ID' => $arItemIDs["ALL_ITEM_IDS"]['QUANTITY'],
					'QUANTITY_UP_ID' => $arItemIDs["ALL_ITEM_IDS"]['QUANTITY_UP'],
					'QUANTITY_DOWN_ID' => $arItemIDs["ALL_ITEM_IDS"]['QUANTITY_DOWN'],
					'QUANTITY_MEASURE' => $arItemIDs["ALL_ITEM_IDS"]['QUANTITY_MEASURE'],
					'STORE_QUANTITY' => $arItemIDs["ALL_ITEM_IDS"]['STORE_QUANTITY'],
					'PRICE_ID' => $arItemIDs["ALL_ITEM_IDS"]['PRICE'],
					'PRICE_OLD_ID' => $arItemIDs["ALL_ITEM_IDS"]['PRICE_OLD'],
					'TREE_ID' => $arItemIDs["ALL_ITEM_IDS"]['PROP_DIV'],
					'TREE_ITEM_ID' => $arItemIDs["ALL_ITEM_IDS"]['PROP'],
					'BUY_ID' => $arItemIDs["ALL_ITEM_IDS"]['BUY_LINK'],
					'BASKET_LINK' => $arItemIDs["ALL_ITEM_IDS"]['BASKET_LINK'],
					'ADD_BASKET_ID' => $arItemIDs["ALL_ITEM_IDS"]['ADD_BASKET_ID'],
					'DSC_PERC' => $arItemIDs["ALL_ITEM_IDS"]['DSC_PERC'],
					'SECOND_DSC_PERC' => $arItemIDs["ALL_ITEM_IDS"]['SECOND_DSC_PERC'],
					'DISPLAY_PROP_DIV' => $arItemIDs["ALL_ITEM_IDS"]['DISPLAY_PROP_DIV'],
					'BASKET_ACTIONS_ID' => $arItemIDs["ALL_ITEM_IDS"]['BASKET_ACTIONS'],
					'NOT_AVAILABLE_MESS' => $arItemIDs["ALL_ITEM_IDS"]['NOT_AVAILABLE_MESS'],
					'COMPARE_LINK_ID' => $arItemIDs["ALL_ITEM_IDS"]['COMPARE_LINK'],
					'SUBSCRIBE_ID' => $arItemIDs["ALL_ITEM_IDS"]['SUBSCRIBE_DIV'],
					'SUBSCRIBED_ID' => $arItemIDs["ALL_ITEM_IDS"]['SUBSCRIBED_DIV'],
				),
				'BASKET' => array(
					'QUANTITY' => $arParams['PRODUCT_QUANTITY_VARIABLE'],
					'PROPS' => $arParams['PRODUCT_PROPS_VARIABLE'],
					'SKU_PROPS' => $arItem['OFFERS_PROP_CODES'],
					'ADD_URL_TEMPLATE' => $arResult['~ADD_URL_TEMPLATE'],
					'BUY_URL_TEMPLATE' => $arResult['~BUY_URL_TEMPLATE']
				),
				'PRODUCT' => array(
					'ID' => $arItem['ID'],
					'NAME' => $arItemIDs["TITLE_ITEM"]
				),
				'OFFERS' => $arItem['JS_OFFERS'],
				'OFFER_SELECTED' => $arItem['OFFERS_SELECTED'],
				'TREE_PROPS' => $arSkuProps,
				'LAST_ELEMENT' => $arItem['LAST_ELEMENT']
			);
		}
		if ($arParams['DISPLAY_COMPARE']){
			$arJSParams['COMPARE'] = array(
				'COMPARE_URL_TEMPLATE' => $arResult['~COMPARE_URL_TEMPLATE'],
				'COMPARE_URL_TEMPLATE_DEL' => str_replace("ADD_TO_COMPARE_LIST", "DELETE_FROM_COMPARE_LIST", $arResult['~COMPARE_URL_TEMPLATE']),
				'COMPARE_PATH' => $arParams['COMPARE_PATH']
			);
		}
		return $arJSParams;
	}

	function GetAddToBasketArray(&$arItem, $totalCount = 0, $defaultCount = 1, $basketUrl = '', $bDetail = false, $arItemIDs = array(), $class_btn = "small", $arParams=array()){
		static $arAddToBasketOptions, $bUserAuthorized;
		if($arAddToBasketOptions === NULL){
			$arAddToBasketOptions = array(
				"SHOW_BASKET_ONADDTOCART" => COption::GetOptionString("aspro.mshop", "SHOW_BASKET_ONADDTOCART", "Y", SITE_ID) == "Y",
				"USE_PRODUCT_QUANTITY_LIST" => COption::GetOptionString("aspro.mshop", "USE_PRODUCT_QUANTITY_LIST", "Y", SITE_ID) == "Y",
				"USE_PRODUCT_QUANTITY_DETAIL" => COption::GetOptionString("aspro.mshop", "USE_PRODUCT_QUANTITY_DETAIL", "Y", SITE_ID) == "Y",
				"BUYNOPRICEGGOODS" => COption::GetOptionString("aspro.mshop", "BUYNOPRICEGGOODS", "NOTHING", SITE_ID),
				"BUYMISSINGGOODS" => COption::GetOptionString("aspro.mshop", "BUYMISSINGGOODS", "ADD", SITE_ID),
				"EXPRESSION_ORDER_BUTTON" => COption::GetOptionString("aspro.mshop", "EXPRESSION_ORDER_BUTTON", GetMessage("EXPRESSION_ORDER_BUTTON_DEFAULT"), SITE_ID),
				"EXPRESSION_ORDER_TEXT" => COption::GetOptionString("aspro.mshop", "EXPRESSION_ORDER_TEXT", GetMessage("EXPRESSION_ORDER_TEXT_DEFAULT"), SITE_ID),
				"EXPRESSION_SUBSCRIBE_BUTTON" => COption::GetOptionString("aspro.mshop", "EXPRESSION_SUBSCRIBE_BUTTON", GetMessage("EXPRESSION_SUBSCRIBE_BUTTON_DEFAULT"), SITE_ID),
				"EXPRESSION_SUBSCRIBED_BUTTON" => COption::GetOptionString("aspro.mshop", "EXPRESSION_SUBSCRIBED_BUTTON", GetMessage("EXPRESSION_SUBSCRIBED_BUTTON_DEFAULT"), SITE_ID),
			);

			global $USER;
			$bUserAuthorized = $USER->IsAuthorized();
		}

		$buttonText = $buttonHTML = $buttonACTION = '';
		$quantity=$ratio=1;
		$max_quantity=0;
		$float_ratio=is_double($arItem["CATALOG_MEASURE_RATIO"]);

		if($arItem["CATALOG_MEASURE_RATIO"]){
			$quantity=$arItem["CATALOG_MEASURE_RATIO"];
			$ratio=$arItem["CATALOG_MEASURE_RATIO"];
		}else{
			$quantity=$defaultCount;
		}
		if($arItem["CATALOG_QUANTITY_TRACE"]=="Y"){
			if($totalCount < $quantity){
				$quantity=($totalCount>$arItem["CATALOG_MEASURE_RATIO"] ? $totalCount : $arItem["CATALOG_MEASURE_RATIO"] );
			}
			$max_quantity=$totalCount;
		}

		$arItemProps = (($arParams['PRODUCT_PROPERTIES']) ? implode(';', $arParams['PRODUCT_PROPERTIES']) : "");
		$partProp=($arParams["PARTIAL_PRODUCT_PROPERTIES"] ? $arParams["PARTIAL_PRODUCT_PROPERTIES"] : "" );
		$addProp=($arParams["ADD_PROPERTIES_TO_BASKET"] ? $arParams["ADD_PROPERTIES_TO_BASKET"] : "" );
		$emptyProp=$arItem["EMPTY_PROPS_JS"];

		global $TEMPLATE_OPTIONS;
		if($arItem["OFFERS"]){
			if(!$bDetail && $arItem["OFFERS_MORE"] != "Y" && $TEMPLATE_OPTIONS["TYPE_SKU"]["CURRENT_VALUE"] != "TYPE_2"){
				$buttonACTION = 'ADD';
				$buttonText = array(GetMessage('EXPRESSION_ADDTOBASKET_BUTTON_DEFAULT'), GetMessage('EXPRESSION_ADDEDTOBASKET_BUTTON_DEFAULT'));
				$buttonHTML = '<span class="button '.$class_btn.' read_more to-cart" id="'.$arItemIDs['BUY_LINK'].'" data-offers="Y" data-iblockID="'.$arItem["IBLOCK_ID"].'" data-item="'.$arItem["ID"].'"><i></i><span>'.$buttonText[0].'</span></span><a rel="nofollow" href="'.$basketUrl.'" id="'.$arItemIDs['BASKET_LINK'].'" class="'.$class_btn.' in-cart button" data-item="'.$arItem["ID"].'"  style="display:none;"><i></i><span>'.$buttonText[1].'</span></a>';
			}
			elseif(($bDetail && $arItem["FRONT_CATALOG"] == "Y") || $arItem["OFFERS_MORE"]=="Y" || $TEMPLATE_OPTIONS["TYPE_SKU"]["CURRENT_VALUE"] == "TYPE_2"){
				$buttonACTION = 'MORE';
				$buttonText = array(GetMessage('EXPRESSION_READ_MORE_OFFERS_DEFAULT'));
				$buttonHTML = '<a class="button basket read_more" rel="nofollow" href="'.$arItem["DETAIL_PAGE_URL"].'" data-item="'.$arItem["ID"].'">'.$buttonText[0].'</a>';
			}
		}
		else{
			if($bPriceExists = isset($arItem["MIN_PRICE"]) && $arItem["MIN_PRICE"]["VALUE"] > 0){
				// price exists
				if($totalCount > 0){
					// rest exists
					if((isset($arItem["CAN_BUY"]) && $arItem["CAN_BUY"]) || (isset($arItem["MIN_PRICE"]) && $arItem["MIN_PRICE"]["CAN_BUY"] == "Y")){
						if($bDetail && $arItem["FRONT_CATALOG"] == "Y"){
							$buttonACTION = 'MORE';
							$buttonText = array(GetMessage('EXPRESSION_READ_MORE_OFFERS_DEFAULT'));
							$rid=($arItem["RID"] ? "?RID=".$arItem["RID"] : "");
							$buttonHTML = '<a class="button basket read_more" rel="nofollow" href="'.$arItem["DETAIL_PAGE_URL"].$rid.'" data-item="'.$arItem["ID"].'">'.$buttonText[0].'</a>';
						}
						else{

							$arItem["CAN_BUY"] = 1;
							$buttonACTION = 'ADD';
							$buttonText = array(GetMessage('EXPRESSION_ADDTOBASKET_BUTTON_DEFAULT'), GetMessage('EXPRESSION_ADDEDTOBASKET_BUTTON_DEFAULT'));
							$buttonHTML = '<span class="'.$class_btn.' to-cart button" data-item="'.$arItem["ID"].'" data-float_ratio="'.$float_ratio.'" data-ratio="'.$ratio.'" data-bakset_div="bx_basket_div_'.$arItem["ID"].'" data-props="'.$arItemProps.'" data-part_props="'.$partProp.'" data-add_props="'.$addProp.'"  data-empty_props="'.$emptyProp.'" data-offers="'.$arItem["IS_OFFER"].'" data-iblockID="'.$arItem["IBLOCK_ID"].'"  data-quantity="'.$quantity.'"><i></i><span>'.$buttonText[0].'</span></span><a rel="nofollow" href="'.$basketUrl.'" class="'.$class_btn.' in-cart button" data-item="'.$arItem["ID"].'"  style="display:none;"><i></i><span>'.$buttonText[1].'</span></a>';
						}
					}
					elseif($arItem["CATALOG_SUBSCRIBE"] == "Y"){
						$buttonACTION = 'SUBSCRIBE';
						$buttonText = array($arAddToBasketOptions['EXPRESSION_SUBSCRIBE_BUTTON'], $arAddToBasketOptions['EXPRESSION_SUBSCRIBED_BUTTON']);
						$buttonHTML = '<span class="'.$class_btn.' transparent to-subscribe'.(!$bUserAuthorized ? ' auth' : '').' button" rel="nofollow" href="'.$arItem["SUBSCRIBE_URL"].'" data-item="'.$arItem["ID"].'"  alt="'.$arItem["NAME"].'"><i></i><span>'.$buttonText[0].'</span></span><span class="'.$class_btn.' transparent in-subscribe button" rel="nofollow" style="display:none;" data-item="'.$arItem["ID"].'" alt="'.$arItem["NAME"].'"><i></i><span>'.$buttonText[1].'</span></span>';
					}
				}
				else{
					if(!strlen($arAddToBasketOptions['EXPRESSION_ORDER_BUTTON'])){
						$arAddToBasketOptions['EXPRESSION_ORDER_BUTTON']=GetMessage("EXPRESSION_ORDER_BUTTON_DEFAULT");
					}
					// no rest
					if($bDetail && $arItem["FRONT_CATALOG"] == "Y"){
						$buttonACTION = 'MORE';
						$buttonText = array(GetMessage('EXPRESSION_READ_MORE_OFFERS_DEFAULT'));
						$rid=($arItem["RID"] ? "?RID=".$arItem["RID"] : "");
						$buttonHTML = '<a class="button basket read_more" rel="nofollow" href="'.$arItem["DETAIL_PAGE_URL"].$rid.'" data-item="'.$arItem["ID"].'">'.$buttonText[0].'</a>';
					}
					else{
						$buttonACTION = $arAddToBasketOptions["BUYMISSINGGOODS"];
						if($arAddToBasketOptions["BUYMISSINGGOODS"] == "ADD" /*|| $arItem["CAN_BUY"]*/){
							if($arItem["CAN_BUY"]){
								$buttonText = array(GetMessage('EXPRESSION_ADDTOBASKET_BUTTON_DEFAULT'), GetMessage('EXPRESSION_ADDEDTOBASKET_BUTTON_DEFAULT'));
								$buttonHTML = '<span class="'.$class_btn.' to-cart button" data-item="'.$arItem["ID"].'" data-float_ratio="'.$float_ratio.'" data-ratio="'.$ratio.'" data-bakset_div="bx_basket_div_'.$arItem["ID"].'" data-props="'.$arItemProps.'" data-part_props="'.$partProp.'" data-add_props="'.$addProp.'"  data-empty_props="'.$emptyProp.'" data-offers="'.$arItem["IS_OFFER"].'" data-iblockID="'.$arItem["IBLOCK_ID"].'" data-quantity="'.$quantity.'"><i></i><span>'.$buttonText[0].'</span></span><a rel="nofollow" href="'.$basketUrl.'" class="'.$class_btn.' in-cart button" data-item="'.$arItem["ID"].'"  style="display:none;"><i></i><span>'.$buttonText[1].'</span></a>';
							}else{
								if($arAddToBasketOptions["BUYMISSINGGOODS"] == "SUBSCRIBE" && $arItem["CATALOG_SUBSCRIBE"] == "Y"){
									$buttonText = array($arAddToBasketOptions['EXPRESSION_SUBSCRIBE_BUTTON'], $arAddToBasketOptions['EXPRESSION_SUBSCRIBED_BUTTON']);
									$buttonHTML = '<span class="'.$class_btn.' transparent to-subscribe'.(!$bUserAuthorized ? ' auth' : '').' button" rel="nofollow" href="'.$arItem["SUBSCRIBE_URL"].'" data-item="'.$arItem["ID"].'"  alt="'.$arItem["NAME"].'"><i></i><span>'.$buttonText[0].'</span></span><span class="'.$class_btn.' transparent in-subscribe button" rel="nofollow" style="display:none;" data-item="'.$arItem["ID"].'" alt="'.$arItem["NAME"].'"><i></i><span>'.$buttonText[1].'</span></span>';
								}else{
									$buttonText = array($arAddToBasketOptions['EXPRESSION_ORDER_BUTTON']);
									$buttonHTML = '<span class="'.$class_btn.' to-order button transparent" data-name="'.$arItem["NAME"].'" data-item="'.$arItem["ID"].'"><i></i><span>'.$buttonText[0].'</span></span>';
									if($arAddToBasketOptions['EXPRESSION_ORDER_TEXT']){
										$buttonHTML .='<div class="more_text">'.$arAddToBasketOptions['EXPRESSION_ORDER_TEXT'].'</div>';
									}
								}
							}

						}
						elseif($arAddToBasketOptions["BUYMISSINGGOODS"] == "SUBSCRIBE" && $arItem["CATALOG_SUBSCRIBE"] == "Y"){
							$buttonText = array($arAddToBasketOptions['EXPRESSION_SUBSCRIBE_BUTTON'], $arAddToBasketOptions['EXPRESSION_SUBSCRIBED_BUTTON']);
							$buttonHTML = '<span class="'.$class_btn.' transparent to-subscribe'.(!$bUserAuthorized ? ' auth' : '').' button" rel="nofollow" href="'.$arItem["SUBSCRIBE_URL"].'" data-item="'.$arItem["ID"].'"  alt="'.$arItem["NAME"].'"><i></i><span>'.$buttonText[0].'</span></span><span class="'.$class_btn.' transparent in-subscribe button" rel="nofollow" style="display:none;" data-item="'.$arItem["ID"].'" alt="'.$arItem["NAME"].'"><i></i><span>'.$buttonText[1].'</span></span>';
						}
						elseif($arAddToBasketOptions["BUYMISSINGGOODS"] == "ORDER"){
							$buttonText = array($arAddToBasketOptions['EXPRESSION_ORDER_BUTTON']);
							$buttonHTML = '<span class="'.$class_btn.' to-order button transparent" data-name="'.$arItem["NAME"].'" data-item="'.$arItem["ID"].'"><i></i><span>'.$buttonText[0].'</span></span>';
							if($arAddToBasketOptions['EXPRESSION_ORDER_TEXT']){
								$buttonHTML .='<div class="more_text">'.$arAddToBasketOptions['EXPRESSION_ORDER_TEXT'].'</div>';
							}
						}
					}
				}
			}
			else{
				// no price or price <= 0
				if($bDetail && $arItem["FRONT_CATALOG"] == "Y"){
					$buttonACTION = 'MORE';
					$buttonText = array(GetMessage('EXPRESSION_READ_MORE_OFFERS_DEFAULT'));
					$buttonHTML = '<a class="button basket read_more" rel="nofollow" href="'.$arItem["DETAIL_PAGE_URL"].'" data-item="'.$arItem["ID"].'">'.$buttonText[0].'</a>';
				}
				else{
					$buttonACTION = $arAddToBasketOptions["BUYNOPRICEGGOODS"];
					if($arAddToBasketOptions["BUYNOPRICEGGOODS"] == "ORDER"){
						$buttonText = array($arAddToBasketOptions['EXPRESSION_ORDER_BUTTON']);
						$buttonHTML = '<span class="'.$class_btn.' to-order button transparent" data-name="'.$arItem["NAME"].'" data-item="'.$arItem["ID"].'"><i></i><span>'.$buttonText[0].'</span></span>';
						if($arAddToBasketOptions['EXPRESSION_ORDER_TEXT']){
							$buttonHTML .='<div class="more_text">'.$arAddToBasketOptions['EXPRESSION_ORDER_TEXT'].'</div>';
						}
					}
				}
			}
		}

		return array("OPTIONS" => $arAddToBasketOptions, "TEXT" => $buttonText, "HTML" => $buttonHTML, "ACTION" => $buttonACTION, "RATIO_ITEM" => $ratio, "MIN_QUANTITY_BUY" => $quantity, "MAX_QUANTITY_BUY" => $max_quantity);
	}

	function GetFileInfo($arItem){
		$arTmpItem = CFile::GetFileArray($arItem);
		switch($arTmpItem["CONTENT_TYPE"]){
			case 'application/pdf': $type="pdf"; break;
			case 'application/vnd.ms-excel': $type="excel"; break;
			case 'application/xls': $type="excel"; break;
			case 'application/octet-stream': $type="word"; break;
			case 'application/msword': $type="word"; break;
			case 'image/jpeg': $type="jpg"; break;
			case 'image/tiff': $type="tiff"; break;
			//case 'image/png': $type="png"; break;
			default: $type="default"; break;
		}
		$filesize = $arTmpItem["FILE_SIZE"];
		if($filesize > 1024){
			$filesize = ($filesize / 1024);
			if($filesize > 1024){
				$filesize = ($filesize / 1024);
				if($filesize > 1024){
					$filesize = ($filesize / 1024);
					$filesize = round($filesize, 1);
					$filesize_format=str_replace(".", ",", $filesize).GetMessage('CT_NAME_GB');
				}
				else{
					$filesize = round($filesize, 1);
					$filesize_format=str_replace(".", ",", $filesize).GetMessage('CT_NAME_MB');
				}
			}
			else{
				$filesize = round($filesize, 1);
				$filesize_format=str_replace(".", ",", $filesize).GetMessage('CT_NAME_KB');
			}
		}
		else{
			$filesize = round($filesize, 1);
			$filesize_format=str_replace(".", ",", $filesize).GetMessage('CT_NAME_b');
		}
		$fileName = substr($arTmpItem["ORIGINAL_NAME"], 0, strrpos($arTmpItem["ORIGINAL_NAME"], '.'));
		return array("TYPE" => $type, "FILE_SIZE" => $filesize, "FILE_SIZE_FORMAT" => $filesize_format, "DESCRIPTION" => ( $arTmpItem["DESCRIPTION"] ? $arTmpItem["DESCRIPTION"] : $fileName), "SRC" => $arTmpItem["SRC"]);
	}

	function getMinPriceFromOffersExt(&$offers, $currency, $replaceMinPrice = true){
		$replaceMinPrice = ($replaceMinPrice === true);
		$result = false;
		$minPrice = 0;
		if (!empty($offers) && is_array($offers))
		{
			$doubles = array();
			foreach ($offers as $oneOffer)
			{
				if(!$oneOffer["MIN_PRICE"])
					continue;
				$oneOffer['ID'] = (int)$oneOffer['ID'];
				if (isset($doubles[$oneOffer['ID']]))
					continue;
				/*if (!$oneOffer['CAN_BUY'])
					continue;*/

				CIBlockPriceTools::setRatioMinPrice($oneOffer, $replaceMinPrice);

				$oneOffer['MIN_PRICE']['CATALOG_MEASURE_RATIO'] = $oneOffer['CATALOG_MEASURE_RATIO'];
				$oneOffer['MIN_PRICE']['CATALOG_MEASURE'] = $oneOffer['CATALOG_MEASURE'];
				$oneOffer['MIN_PRICE']['CATALOG_MEASURE_NAME'] = $oneOffer['CATALOG_MEASURE_NAME'];
				$oneOffer['MIN_PRICE']['~CATALOG_MEASURE_NAME'] = $oneOffer['~CATALOG_MEASURE_NAME'];

				if (empty($result))
				{
					$minPrice = ($oneOffer['MIN_PRICE']['CURRENCY'] == $currency
						? $oneOffer['MIN_PRICE']['DISCOUNT_VALUE']
						: CCurrencyRates::ConvertCurrency($oneOffer['MIN_PRICE']['DISCOUNT_VALUE'], $oneOffer['MIN_PRICE']['CURRENCY'], $currency)
					);
					$result = $oneOffer['MIN_PRICE'];
				}
				else
				{
					$comparePrice = ($oneOffer['MIN_PRICE']['CURRENCY'] == $currency
						? $oneOffer['MIN_PRICE']['DISCOUNT_VALUE']
						: CCurrencyRates::ConvertCurrency($oneOffer['MIN_PRICE']['DISCOUNT_VALUE'], $oneOffer['MIN_PRICE']['CURRENCY'], $currency)
					);
					if ($minPrice > $comparePrice)
					{
						$minPrice = $comparePrice;
						$result = $oneOffer['MIN_PRICE'];
					}
				}
				$doubles[$oneOffer['ID']] = true;
			}
		}
		return $result;
	}

	function getSliderForItemExt(&$item, $propertyCode, $addDetailToSlider, $encode = true)
    {
        $encode = ($encode === true);
        $result = array();

        if (!empty($item) && is_array($item))
        {
            if (
                '' != $propertyCode &&
                isset($item['PROPERTIES'][$propertyCode]) &&
                'F' == $item['PROPERTIES'][$propertyCode]['PROPERTY_TYPE']
            )
            {
                if ('MORE_PHOTO' == $propertyCode && isset($item['MORE_PHOTO']) && !empty($item['MORE_PHOTO']))
                {

                    foreach ($item['MORE_PHOTO'] as &$onePhoto)
                    {
                        $result[] = array(
                            'ID' => (int)$onePhoto['ID'],
                            'SRC' => ($encode ? CHTTP::urnEncode($onePhoto['SRC'], 'utf-8') : $onePhoto['SRC']),
                            'WIDTH' => (int)$onePhoto['WIDTH'],
                            'HEIGHT' => (int)$onePhoto['HEIGHT'],
                            'ALT' => ($onePhoto["DESCRIPTION"] ? $onePhoto["DESCRIPTION"] : ($item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_ALT'] ? $item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_ALT'] : $item["NAME"])),
                            'TITLE' => ($onePhoto["DESCRIPTION"] ? $onePhoto["DESCRIPTION"] : ($item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_TITLE'] ? $item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_TITLE'] : $item["NAME"]))
                        );
                    }
                    unset($onePhoto);
                }
                else
                {
                    if (
                        isset($item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']) &&
                        !empty($item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE'])
                    )
                    {
                        $fileValues = (
                        isset($item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']['ID']) ?
                            array(0 => $item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']) :
                            $item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']
                        );
                        foreach ($fileValues as &$oneFileValue)
                        {
                            $result[] = array(
                                'ID' => (int)$oneFileValue['ID'],
                                'SRC' => ($encode ? CHTTP::urnEncode($oneFileValue['SRC'], 'utf-8') : $oneFileValue['SRC']),
                                'WIDTH' => (int)$oneFileValue['WIDTH'],
                                'HEIGHT' => (int)$oneFileValue['HEIGHT'],
                                'ALT' => ($oneFileValue["DESCRIPTION"] ? $oneFileValue["DESCRIPTION"] : ($item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_ALT'] ? $item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_ALT'] : $item["NAME"])),
                          		'TITLE' => ($oneFileValue["DESCRIPTION"] ? $oneFileValue["DESCRIPTION"] : ($item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_TITLE'] ? $item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_TITLE'] : $item["NAME"]))
                            );
                        }
                        if (isset($oneFileValue))
                            unset($oneFileValue);
                    }
                    else
                    {
                        $propValues = $item['PROPERTIES'][$propertyCode]['VALUE'];
                        if (!is_array($propValues))
                            $propValues = array($propValues);
                        foreach ($propValues as &$oneValue)
                        {
                            $oneFileValue = CFile::GetFileArray($oneValue);
                            if (isset($oneFileValue['ID']))
                            {
                                $result[] = array(
                                    'ID' => (int)$oneFileValue['ID'],
                                    'SRC' => ($encode ? CHTTP::urnEncode($oneFileValue['SRC'], 'utf-8') : $oneFileValue['SRC']),
                                    'WIDTH' => (int)$oneFileValue['WIDTH'],
                                    'HEIGHT' => (int)$oneFileValue['HEIGHT'],
                                    'ALT' => ($oneFileValue["DESCRIPTION"] ? $oneFileValue["DESCRIPTION"] : ($item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_ALT'] ? $item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_ALT'] : $item["NAME"])),
                          			'TITLE' => ($oneFileValue["DESCRIPTION"] ? $oneFileValue["DESCRIPTION"] : ($item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_TITLE'] ? $item['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_TITLE'] : $item["NAME"]))
                                );
                            }
                        }
                        if (isset($oneValue))
                            unset($oneValue);
                    }
                }
            }
            if ($addDetailToSlider || empty($result))
            {
                if (!empty($item['DETAIL_PICTURE']))
                {
                    if (!is_array($item['DETAIL_PICTURE']))
                        $item['DETAIL_PICTURE'] = CFile::GetFileArray($item['DETAIL_PICTURE']);
                    if (isset($item['DETAIL_PICTURE']['ID']))
                    {
                        array_unshift(
                            $result,
                            array(
                                'ID' => (int)$item['DETAIL_PICTURE']['ID'],
                                'SRC' => ($encode ? CHTTP::urnEncode($item['DETAIL_PICTURE']['SRC'], 'utf-8') : $item['DETAIL_PICTURE']['SRC']),
                                'WIDTH' => (int)$item['DETAIL_PICTURE']['WIDTH'],
                                'HEIGHT' => (int)$item['DETAIL_PICTURE']['HEIGHT'],
                                'ALT' => ($item['DETAIL_PICTURE']['DESCRIPTION'] ? $item['DETAIL_PICTURE']['DESCRIPTION'] : ($item['DETAIL_PICTURE']['ALT'] ? $item['DETAIL_PICTURE']['ALT'] : $item['NAME'] )),
                                'TITLE' => ($item['DETAIL_PICTURE']['DESCRIPTION'] ? $item['DETAIL_PICTURE']['DESCRIPTION'] : ($item['DETAIL_PICTURE']['TITLE'] ? $item['DETAIL_PICTURE']['TITLE'] : $item['NAME'] ))
                            )
                        );
                    }
                }
            }
        }
        return $result;
    }

	function GetTemplateOptions($siteID){
		// check stores
		static $bStores;
		if ($bStores === null){
			$bStores = false;
			if(CModule::IncludeModule('catalog')){
				if(class_exists('CCatalogStore')){
					$dbRes = CCatalogStore::GetList(array(), array(), false, false, array());
					if($c = $dbRes->SelectedRowsCount()){
						$bStores = true;
					}
				}
			}
		}

		$res = self::getModuleOptionsList();
		$arComponentOptions = $res["TEMPLATE_OPTIONS"];
		$arTemplateOptions = array();

		foreach($arComponentOptions as $value){
			$arTemplateOptions[$value["ID"]] = $value;
			if ($value['ID'] === 'STORES_SOURCE' && !$bStores) {
				$arTemplateOptions[$value["ID"]]["CURRENT_VALUE"] = 'IBLOCK';
			}
			elseif($value['ID'] === 'LOGO_IMAGE' || $value['ID'] === 'FAVICON_IMAGE' || $value['ID'] === 'APPLE_TOUCH_ICON_57_IMAGE' || $value['ID'] === 'APPLE_TOUCH_ICON_72_IMAGE'){
				$arTemplateOptions[$value["ID"]]["CURRENT_VALUE"] = COption::GetOptionString(self::moduleID, $value["ID"], $value["DEFAULT"], $siteID);
				$arValue = unserialize($arTemplateOptions[$value["ID"]]["CURRENT_VALUE"]);
				$arValue = (array)$arValue;
				$fileID = $arValue ? current($arValue) : false;
				if($fileID){
					if($value['ID'] === 'FAVICON_IMAGE'){
						$arTemplateOptions[$value["ID"]]["CURRENT_IMG"] = str_replace('//', '/', SITE_DIR.'/favicon.ico');
					}else{
						$arTemplateOptions[$value["ID"]]["CURRENT_IMG"] = CFIle::GetPath($fileID);
					}
				}
				else{
					if($value['ID'] === 'LOGO_IMAGE'){

					}
					elseif($value['ID'] === 'FAVICON_IMAGE'){
						$arTemplateOptions[$value["ID"]]["CURRENT_IMG"] = str_replace('//', '/', SITE_DIR.'/include/favicon.ico');
					}
					elseif($value['ID'] === 'APPLE_TOUCH_ICON_57_IMAGE'){
						$arTemplateOptions[$value["ID"]]["CURRENT_IMG"] = str_replace('//', '/', SITE_DIR.'/include/favicon_57.png');
					}
					elseif($value['ID'] === 'APPLE_TOUCH_ICON_72_IMAGE'){
						$arTemplateOptions[$value["ID"]]["CURRENT_IMG"] = str_replace('//', '/', SITE_DIR.'/include/favicon_72.png');
					}
				}

				if(!file_exists(str_replace('//', '/', $_SERVER['DOCUMENT_ROOT'].$arTemplateOptions[$value["ID"]]["CURRENT_IMG"]))){
					$arTemplateOptions[$value["ID"]]["CURRENT_IMG"] = '';
				}
				else{
					if($value['ID'] === 'FAVICON_IMAGE'){
						$arTemplateOptions[$value["ID"]]["CURRENT_IMG"] .= '?'.filemtime(str_replace('//', '/', $_SERVER['DOCUMENT_ROOT'].$arTemplateOptions[$value["ID"]]["CURRENT_IMG"]));
					}
				}
			}
			else{
				$arTemplateOptions[$value["ID"]]["CURRENT_VALUE"] = COption::GetOptionString(self::moduleID, $value["ID"], $value["DEFAULT"], $siteID);
				if($value['ID'] === 'HEAD'){
					if($value["VALUES"] && is_array($value["VALUES"])){
						foreach($value["VALUES"] as $arValue){
							if($arValue["VALUE"] === $arTemplateOptions['HEAD']["CURRENT_VALUE"]){
								$arTemplateOptions["LOGO_IMAGE"]["CURRENT_IMG"] = ($arTemplateOptions["LOGO_IMAGE"]["CURRENT_VALUE"] !== serialize(array())) ? $arTemplateOptions["LOGO_IMAGE"]["CURRENT_IMG"] : str_replace('//', '/', SITE_DIR.$arValue["IMG"]);
								$arTemplateOptions["HEAD"]["CURRENT_MENU"] = $arValue["MENU_TYPE"];
								$arTemplateOptions["HEAD"]["CURRENT_HEAD_COLOR"] = $arValue["HEAD_COLOR"];
								$arTemplateOptions["HEAD"]["CURRENT_MENU_COLOR"] = ($arValue["MENU_COLOR"] ? $arValue["MENU_COLOR"] : "none");
								break;
							}
						}
					}
				}
			}
		}
		return $arTemplateOptions;
	}

	function getModuleOptionsList($onlyTemplate = false){
		// check stores
		static $arIsSiteWithStores;
		$by = "id"; $sort = "asc"; $arSites = array();
		$db_res = CSite::GetList($by , $sort ,array("ACTIVE"=>"Y"));
		while($res = $db_res->GetNext()){
			$arSites[] = $res;
		}
		foreach($arSites as $key => $arSite){
			if(COption::GetOptionString(self::moduleID, "SITE_INSTALLED", false, $arSite["ID"]) != "Y"){
				unset($arSites[$key]);
			}
			else{
				if ($arIsSiteWithStores[$arSite["ID"]] === null){
					$arIsSiteWithStores[$arSite["ID"]] = false;
					if(CModule::IncludeModule('catalog')){
						if(class_exists('CCatalogStore')){
							$dbRes = CCatalogStore::GetList(array(), array('ACTIVE' => 'Y', 'SITE_ID' => $arSite["ID"]), false, false, array());
							if($c = $dbRes->SelectedRowsCount()){
								$arIsSiteWithStores[$arSite["ID"]] = true;
							}
						}
					}
				}
			}
		}

		// template options
		$arTemplateOptions = array(
			array(
				"ID" => "COLOR_THEME",
				"NAME" => GetMessage("COLOR_THEME"),
				"TYPES" => array("COMPONENT"=>"COLOR", "MODULE" => "SELECTBOX"),
				"VALUES" => array(
					array("VALUE" => "YELLOW", "COMPONENT_VALUE" => "#ffad00", "NAME" => GetMessage("COLOR_THEME_YELLOW")),
					array("VALUE" => "ORANGE", "COMPONENT_VALUE" => "#ff6d00", "NAME" => GetMessage("COLOR_THEME_ORANGE")),
					array("VALUE" => "RED", "COMPONENT_VALUE" => "#de002b", "NAME" => GetMessage("COLOR_THEME_RED")),
					array("VALUE" => "MAGENTA", "COMPONENT_VALUE" => "#b82945", "NAME" => GetMessage("COLOR_THEME_MAGENTA")),
					array("VALUE" => "ORCHID", "COMPONENT_VALUE" => "#d75cb6", "NAME" => GetMessage("COLOR_THEME_ORCHID")),
					array("VALUE" => "NAVY", "COMPONENT_VALUE" => "#006dca", "NAME" => GetMessage("COLOR_THEME_NAVY")),
					array("VALUE" => "BLUE", "COMPONENT_VALUE" => "#01aae3", "NAME" => GetMessage("COLOR_THEME_BLUE")), //#00aed7
					array("VALUE" => "GREEN_SEA", "COMPONENT_VALUE" => "#01b1af", "NAME" => GetMessage("COLOR_THEME_GREEN_SEA")),
					array("VALUE" => "GREEN", "COMPONENT_VALUE" => "#009f4f", "NAME" => GetMessage("COLOR_THEME_GREEN")),
					array("VALUE" => "IRISH_GREEN", "COMPONENT_VALUE" => "#6db900", "NAME" => GetMessage("COLOR_THEME_IRISH_GREEN")),
					array("VALUE" => "CUSTOM", "COMPONENT_VALUE" => "", "NAME" => GetMessage("COLOR_THEME_CUSTOM")),
				),
				"DEFAULT" => "BLUE",
			),
			array(
				"ID" => "CUSTOM_COLOR_THEME",
				"NAME" => GetMessage("CUSTOM_COLOR_THEME"),
				"TYPES" => array("COMPONENT"=>"COLOR", "MODULE" => "text"),
				"DEFAULT" => "01aae3",
			)
		);

		$arTemplateOptions[] = array(
			"ID" => "BANNER_WIDTH",
			"NAME" => GetMessage("BANNER_WIDTH"),
			"TYPES" => array("COMPONENT"=>"TEXT", "MODULE" => "SELECTBOX"),
			"VALUES" => array(
				array("VALUE" => "NARROW", "COMPONENT_VALUE" => "", "NAME" => GetMessage("BANNER_WIDTH_NARROW")),
				array("VALUE" => "AVERAGE", "COMPONENT_VALUE" => "", "NAME" => GetMessage("BANNER_WIDTH_MIDDLE")),
				array("VALUE" => "AUTO", "COMPONENT_VALUE" => "", "NAME" => GetMessage("BANNER_WIDTH_AUTO")),
			),
			"DEFAULT" => "AUTO",
		);

		if(!$onlyTemplate){
			$arTemplateOptions[] = array(
				"ID" => "LOGO_IMAGE",
				"NAME" => GetMessage("LOGO_IMAGE"),
				"TYPES" => array("COMPONENT" => "TEXT", "MODULE" => "file"),
				"DEFAULT" => serialize(array()),
			);
			$arTemplateOptions[] = array(
				"ID" => "FAVICON_IMAGE",
				"NAME" => GetMessage("FAVICON_IMAGE"),
				"TYPES" => array("COMPONENT" => "TEXT", "MODULE" => "file"),
				"DEFAULT" => serialize(array()),
			);
			$arTemplateOptions[] = array(
				"ID" => "APPLE_TOUCH_ICON_57_IMAGE",
				"NAME" => GetMessage("APPLE_TOUCH_ICON_57_IMAGE"),
				"TYPES" => array("COMPONENT" => "TEXT", "MODULE" => "file"),
				"DEFAULT" => serialize(array()),
			);
			$arTemplateOptions[] = array(
				"ID" => "APPLE_TOUCH_ICON_72_IMAGE",
				"NAME" => GetMessage("APPLE_TOUCH_ICON_72_IMAGE"),
				"TYPES" => array("COMPONENT" => "TEXT", "MODULE" => "file"),
				"DEFAULT" => serialize(array()),
			);
		}

		$arTemplateOptions = array_merge($arTemplateOptions, array(
				array(
					"ID" => "HEAD",
					"NAME" => GetMessage("HEAD"),
					"TYPES" => array("COMPONENT"=>"TEXT", "MODULE" => "SELECTBOX"),
					"VALUES" => array(
						array("VALUE" => "TYPE_1", "COMPONENT_VALUE" => "", "NAME" => GetMessage("TYPE_1"), "IMG" => "include/logo_color.png", "MENU_TYPE" => "type_1", "HEAD_COLOR" => "white", "MENU_COLOR" => ""),
						array("VALUE" => "TYPE_2", "COMPONENT_VALUE" => "", "NAME" => GetMessage("TYPE_2"), "IMG" => "include/logo_white.png", "MENU_TYPE" => "type_1", "HEAD_COLOR" => "colored", "MENU_COLOR" => ""),
						array("VALUE" => "TYPE_3", "COMPONENT_VALUE" => "", "NAME" => GetMessage("TYPE_3"), "IMG" => "include/logo_color.png", "MENU_TYPE" => "type_2", "HEAD_COLOR" => "white", "MENU_COLOR" => "white"),
						array("VALUE" => "TYPE_4", "COMPONENT_VALUE" => "", "NAME" => GetMessage("TYPE_4"), "IMG" => "include/logo_color.png", "MENU_TYPE" => "type_2", "HEAD_COLOR" => "white", "MENU_COLOR" => "dark"),
						array("VALUE" => "TYPE_5", "COMPONENT_VALUE" => "", "NAME" => GetMessage("TYPE_5"), "IMG" => "include/logo_color.png", "MENU_TYPE" => "type_2", "HEAD_COLOR" => "white", "MENU_COLOR" => "colored"),
						array("VALUE" => "TYPE_6", "COMPONENT_VALUE" => "", "NAME" => GetMessage("TYPE_6"), "IMG" => "include/logo_white.png", "MENU_TYPE" => "type_2", "HEAD_COLOR" => "colored", "MENU_COLOR" => "white"),
						array("VALUE" => "TYPE_7", "COMPONENT_VALUE" => "", "NAME" => GetMessage("TYPE_7"), "IMG" => "include/logo_white.png", "MENU_TYPE" => "type_2", "HEAD_COLOR" => "colored", "MENU_COLOR" => "dark"),
						array("VALUE" => "TYPE_8", "COMPONENT_VALUE" => "", "NAME" => GetMessage("TYPE_8"), "IMG" => "include/logo_white.png", "MENU_TYPE" => "type_2", "HEAD_COLOR" => "colored", "MENU_COLOR" => "colored"),
					),
					"DEFAULT" => "TYPE_1",
				),
				array(
					"ID" => "BASKET",
					"NAME" => GetMessage("BASKET"),
					"TYPES" => array("COMPONENT"=>"TEXT", "MODULE" => "SELECTBOX"),
					"VALUES" => array(
						array("VALUE" => "NORMAL", "COMPONENT_VALUE" => "", "NAME" => GetMessage("BASKET_NORMAL")),
						array("VALUE" => "FLY", "COMPONENT_VALUE" => "", "NAME" => GetMessage("BASKET_FLY")),
					),
					"DEFAULT" => "NORMAL",
				)
			)
		);

		$arTemplateOptions = array_merge($arTemplateOptions, array(
				array(
					"ID" => "TYPE_SKU",
					"NAME" => GetMessage("TYPE_SKU"),
					"TYPES" => array("COMPONENT"=>"TEXT", "MODULE" => "SELECTBOX"),
					"VALUES" => array(
						array("VALUE" => "TYPE_1", "COMPONENT_VALUE" => "", "NAME" => GetMessage("TYPE_1")),
						array("VALUE" => "TYPE_2", "COMPONENT_VALUE" => "", "NAME" => GetMessage("TYPE_2")),
					),
					"DEFAULT" => "TYPE_1",
				),
				array(
					"ID" => "VIEWED_TYPE",
					"NAME" => GetMessage("VIEWED_TYPE"),
					"TYPES" => array("COMPONENT" => "TEXT", "MODULE" => "SELECTBOX"),
					"VALUES" => array(
						array("VALUE" => "LOCAL", "COMPONENT_VALUE" => "", "NAME" => GetMessage("VIEWED_TYPE_LOCAL")),
						array("VALUE" => "BX", "COMPONENT_VALUE" => "", "NAME" => GetMessage("VIEWED_TYPE_BX")),
					),
					"DEFAULT" => "BX",
				),
				array(
					"ID" => "TYPE_VIEW_FILTER",
					"NAME" => GetMessage("TYPE_VIEW_FILTER"),
					"TYPES" => array("COMPONENT"=>"TEXT", "MODULE" => "SELECTBOX"),
					"VALUES" => array(
						array("VALUE" => "VERTICAL", "COMPONENT_VALUE" => "", "NAME" => GetMessage("VERTICAL")),
						array("VALUE" => "HORIZONTAL", "COMPONENT_VALUE" => "", "NAME" => GetMessage("HORIZONTAL")),
					),
					"DEFAULT" => "VERTICAL",
				),
				array(
					"ID" => "STORES",
					"NAME" => GetMessage("STORES"),
					"TYPES" => array("COMPONENT"=>"TEXT", "MODULE" => "SELECTBOX"),
					"VALUES" => array(
						array("VALUE" => "NO", "COMPONENT_VALUE" => "", "NAME" => GetMessage("NO")),
						array("VALUE" => "LIGHT", "COMPONENT_VALUE" => "", "NAME" => GetMessage("LIGHT_STORES")),
						array("VALUE" => "DARK", "COMPONENT_VALUE" => "", "NAME" => GetMessage("DARK_STORES")),
					),
					"DEFAULT" => "LIGHT",
				),
				array(
					"ID" => "STORES_SOURCE",
					"NAME" => GetMessage("STORES_SOURCE"),
					"TYPES" => array("COMPONENT"=>"TEXT", "MODULE" => "SELECTBOX"),
					"VALUES" => (
						$arIsSiteWithStores[$arSite["ID"]] ?
							array(
								array("VALUE" => "STORES", "COMPONENT_VALUE" => "", "NAME" => GetMessage("STORES_SOURCE_STORES")),
								array("VALUE" => "IBLOCK", "COMPONENT_VALUE" => "", "NAME" => GetMessage("STORES_SOURCE_STORES_IBLOCK")),
							) :
							array(
								array("VALUE" => "IBLOCK", "COMPONENT_VALUE" => "", "NAME" => GetMessage("STORES_SOURCE_STORES_IBLOCK")),
							)
						),
					"DEFAULT" => "IBLOCK",
				),
			)
		);

		$arComponentOptions = array();
		$arModuleOptions = array(GetMessage("TEMPLATE_OPTIONS"));
		$arModuleOptions[] = array("THEME_SWITCHER", GetMessage("THEME_SWITCHER"), 'N', array('checkbox'));

		foreach($arTemplateOptions as $key => $arTemplateOption){
			$arModuleValues = array(strToLower($arTemplateOption["TYPES"]["MODULE"]), array());
			if($arTemplateOption["VALUES"] && is_array($arTemplateOption["VALUES"])){
				foreach($arTemplateOption["VALUES"] as $key => $value){
					$arModuleValues[1][$value["VALUE"]] = $value["NAME"];
				}
			}
			$arComponentValues = array();
			if($arTemplateOption["VALUES"] && is_array($arTemplateOption["VALUES"])){
				$arComponentValues = $arTemplateOption["VALUES"];
			}
			if($arTemplateOption["ID"] !== 'BANNER_WIDTH' && $arTemplateOption["ID"] !== 'STORES'){
				$arModuleOptions[] = array($arTemplateOption["ID"], $arTemplateOption["NAME"], $arTemplateOption["DEFAULT"], $arModuleValues);
			}
			$arComponentOptions[] = array("ID" => $arTemplateOption["ID"], "NAME" => $arTemplateOption["NAME"], "TYPE" => $arTemplateOption["TYPES"]["COMPONENT"], "VALUES" => $arComponentValues, "DEFAULT" => $arTemplateOption["DEFAULT"]);
		}
		$arModuleOptions[] = array("PHONE_MASK", GetMessage("PHONE_MASK"), "+7 (999) 999-99-99", array("text", 15));
		$arModuleOptions[] = array("VALIDATE_PHONE_MASK", GetMessage("VALIDATE_PHONE_MASK"), "^[+][7] [(][0-9]{3}[)] [0-9]{3}[-][0-9]{2}[-][0-9]{2}$", array("text", 50));
		$arModuleOptions[] = array("SHOW_BREADCRUMBS_CATALOG_SUBSECTIONS", GetMessage("SHOW_BREADCRUMBS_CATALOG_SUBSECTIONS"), "Y", array("checkbox"));
		$arModuleOptions[] = array("SHOW_BASKET_PRINT", GetMessage("SHOW_BASKET_PRINT"), "N", array("checkbox"));
		$arModuleOptions[] = array("SHOW_SECTION_DESCRIPTION", GetMessage("SHOW_SECTION_DESCRIPTION"), "BOTTOM", array("selectbox", array('TOP' => GetMessage('TOP_SECTION'), 'BOTTOM' => GetMessage('BOTTOM_SECTION'))));
		$arModuleOptions[] = array("SHOW_MORE_ITEM_MENU_LINK", GetMessage("SHOW_MORE_ITEM_MENU_LINK"), "Y", array("checkbox"));
		// $arModuleOptions[] = array("HIDE_SITE_NAME_TITLE", GetMessage("HIDE_SITE_NAME_TITLE"), "N", array("checkbox"));

		if(!$onlyTemplate){
			// scroll to top button options
			$arModuleOptions[] = GetMessage("SCROLLTOTOP_OPTIONS");
			$arModuleOptions[] = array(
				"SCROLLTOTOP_TYPE",
				GetMessage("SCROLLTOTOP_TYPE"),
				"ROUND_COLOR",
				array(
					"selectbox",
					array(
						'NONE' => GetMessage('SCROLLTOTOP_TYPE_NONE'),
						'ROUND_COLOR' => GetMessage('SCROLLTOTOP_TYPE_ROUND_COLOR'),
						'ROUND_GREY' => GetMessage('SCROLLTOTOP_TYPE_ROUND_GREY'),
						'ROUND_WHITE' => GetMessage('SCROLLTOTOP_TYPE_ROUND_WHITE'),
						'RECT_COLOR' => GetMessage('SCROLLTOTOP_TYPE_RECT_COLOR'),
						'RECT_GREY' => GetMessage('SCROLLTOTOP_TYPE_RECT_GREY'),
						'RECT_WHITE' => GetMessage('SCROLLTOTOP_TYPE_RECT_WHITE'),
					),
				),
			);
			$arModuleOptions[] = array(
				"SCROLLTOTOP_POSITION",
				GetMessage("SCROLLTOTOP_POSITION"),
				"PADDING",
				array(
					"selectbox",
					array(
						'TOUCH' => GetMessage('SCROLLTOTOP_POSITION_TOUCH'),
						'PADDING' => GetMessage('SCROLLTOTOP_POSITION_PADDING'),
					),
				),
			);

			// main index page options
			$arModuleOptions[] = GetMessage("INDEXPAGE_OPTIONS");
			$arModuleOptions[] = array(
				"BANNER_WIDTH",
				GetMessage("BANNER_WIDTH"),
				"AUTO",
				array(
					"selectbox",
					array(
						"NARROW" => GetMessage("BANNER_WIDTH_NARROW"),
						"AVERAGE" => GetMessage("BANNER_WIDTH_MIDDLE"),
						"AUTO" => GetMessage("BANNER_WIDTH_AUTO"),
					),
				),
			);
			$arModuleOptions[] = array(
				"STORES",
				GetMessage("STORES"),
				"AUTO",
				array(
					"selectbox",
					array(
						"NO" => GetMessage("NO"),
						"LIGHT" => GetMessage("LIGHT_STORES"),
						"DARK" => GetMessage("DARK_STORES"),
					),
				),
			);
			$arModuleOptions[] = array(
				"BANNER_ANIMATIONTYPE",
				GetMessage("BANNER_ANIMATIONTYPE"),
				"SLIDE_HORIZONTAL",
				array(
					"selectbox",
					array(
						"SLIDE_HORIZONTAL" => GetMessage("ANIMATION_SLIDE_HORIZONTAL"),
						"SLIDE_VERTICAL" => GetMessage("ANIMATION_SLIDE_VERTICAL"),
						"FADE" => GetMessage("ANIMATION_FADE"),
					),
				),
			);
			$arModuleOptions[] = array("BANNER_SLIDESSHOWSPEED", GetMessage("BANNER_SLIDESSHOWSPEED"), "5000", array("text", "5"));
			$arModuleOptions[] = array("BANNER_ANIMATIONSPEED", GetMessage("BANNER_ANIMATIONSPEED"), "600", array("text", "5"));

			// add to basket options
			$arModuleOptions[] = GetMessage("ADDTOBASKET_OPTIONS");
			$arModuleOptions[] = array("SHOW_BASKET_ONADDTOCART", GetMessage("SHOW_BASKET_ONADDTOCART"), "Y", array("checkbox"));
			$arModuleOptions[] = array("USE_PRODUCT_QUANTITY_LIST", GetMessage("USE_PRODUCT_QUANTITY_LIST"), "Y", array("checkbox"));
			$arModuleOptions[] = array("USE_PRODUCT_QUANTITY_DETAIL", GetMessage("USE_PRODUCT_QUANTITY_DETAIL"), "Y", array("checkbox"));
			$arModuleOptions[] = array(
				"BUYNOPRICEGGOODS",
				GetMessage("BUYNOPRICEGGOODS"),
				"NOTHING",
				array(
					"selectbox",
					array(
						"ORDER" => GetMessage("BUYNOPRICEGGOODS_ORDER"),
						"NOTHING" => GetMessage("BUYNOPRICEGGOODS_NOTHING"),
					),
				),
			);
			$arModuleOptions[] = array(
				"BUYMISSINGGOODS",
				GetMessage("BUYMISSINGGOODS"),
				"ADD",
				array(
					"selectbox",
					array(
						"ADD" => GetMessage("BUYMISSINGGOODS_ADD"),
						"ORDER" => GetMessage("BUYMISSINGGOODS_ORDER"),
						"SUBSCRIBE" => GetMessage("BUYMISSINGGOODS_SUBSCRIBE"),
						"NOTHING" => GetMessage("BUYMISSINGGOODS_NOTHING"),
					),
				),
			);

			// oneClick Buy

			$arModuleOptions[] = GetMessage("ONECLICKBUY_OPTIONS");
			$arModuleOptions[] = array("ONECLICKBUY_PERSON_TYPE", GetMessage("ONECLICKBUY_PERSON_TYPE"), "1", array("selectbox", array()));
			$arModuleOptions[] = array("ONECLICKBUY_DELIVERY", GetMessage("ONECLICKBUY_DELIVERY"), "2", array("selectbox", array()));
			$arModuleOptions[] = array("ONECLICKBUY_PAYMENT", GetMessage("ONECLICKBUY_PAYMENT"), "1", array("selectbox", array()));
			$arModuleOptions[] = array("ONECLICKBUY_CURRENCY", GetMessage("ONECLICKBUY_CURRENCY"), "RUB", array("selectbox", array()));
			$arModuleOptions[] = array("ONECLICKBUY_PROPERTIES", GetMessage("ONECLICKBUY_PROPERTIES"), "FIO,PHONE,EMAIL,COMMENT", array("multiselectbox", array(), 10));
			$arModuleOptions[] = array("ONECLICKBUY_REQUIRED_PROPERTIES", GetMessage("ONECLICKBUY_REQUIRED_PROPERTIES"), "FIO,PHONE", array("multiselectbox", array(), 10));

			// show quantity options
			$arModuleOptions[] = GetMessage("QUANTITY_OPTIONS");
			$arGroups = array();
			$DefaultGroupID = 0;
			$rsGroups = CGroup::GetList($by = "id", $order = "asc", array("ACTIVE" => "Y"));
			while($arItem = $rsGroups->Fetch()){
				$arGroups[$arItem["ID"]] = $arItem["NAME"];
				if($arItem["ANONYMOUS"] == "Y"){
					$DefaultGroupID = $arItem["ID"];
				}
			}
			$arGroupMultiselect = array("multiselectbox", $arGroups);
			$arModuleOptions[] = array("SHOW_QUANTITY_FOR_GROUPS", GetMessage("SHOW_QUANTITY_FOR_GROUPS"), $DefaultGroupID, $arGroupMultiselect);
			$arModuleOptions[] = array("SHOW_QUANTITY_COUNT_FOR_GROUPS", GetMessage("SHOW_QUANTITY_COUNT_FOR_GROUPS"), $DefaultGroupID, $arGroupMultiselect);
			$arModuleOptions[] = array("note" => GetMessage("SHOW_QUANTITY_NOTE"));
			$arModuleOptions[] = array("USE_WORD_EXPRESSION", GetMessage("USE_WORD_EXPRESSION"), "Y", array("checkbox"));
			$arModuleOptions[] = array("MAX_AMOUNT", GetMessage("MAX_AMOUNT"), "10", array("text", "4"));
			$arModuleOptions[] = array("MIN_AMOUNT", GetMessage("MIN_AMOUNT"), "2", array("text", "4"));

			// expression options
			$arModuleOptions[] = GetMessage("EXPRESSIONS_OPTIONS");
			$arModuleOptions[] = array("EXPRESSION_SUBSCRIBE_BUTTON", GetMessage("EXPRESSION_SUBSCRIBE_BUTTON"), GetMessage("EXPRESSION_SUBSCRIBE_BUTTON_DEFAULT"), array("text", "20"));
			$arModuleOptions[] = array("EXPRESSION_SUBSCRIBED_BUTTON", GetMessage("EXPRESSION_SUBSCRIBED_BUTTON"), GetMessage("EXPRESSION_SUBSCRIBED_BUTTON_DEFAULT"), array("text", "20"));
			$arModuleOptions[] = array("EXPRESSION_ORDER_BUTTON", GetMessage("EXPRESSION_ORDER_BUTTON"), GetMessage("EXPRESSION_ORDER_BUTTON_DEFAULT"), array("text", "20"));
			$arModuleOptions[] = array("EXPRESSION_ORDER_TEXT", GetMessage("EXPRESSION_ORDER_TEXT"), GetMessage("EXPRESSION_ORDER_TEXT_DEFAULT"), array("textarea", "2", "50"));
			$arModuleOptions[] = array("EXPRESSION_FOR_EXISTS", GetMessage("EXPRESSION_FOR_EXISTS"), GetMessage("EXPRESSION_FOR_EXISTS_DEFAULT"), array("text", "20"));
			$arModuleOptions[] = array("EXPRESSION_FOR_NOTEXISTS", GetMessage("EXPRESSION_FOR_NOTEXISTS"), GetMessage("EXPRESSION_FOR_NOTEXISTS_DEFAULT"), array("text", "20"));
			$arModuleOptions[] = array("EXPRESSION_FOR_MIN", GetMessage("EXPRESSION_FOR_MIN"), GetMessage("EXPRESSION_FOR_MIN_DEFAULT"), array("text", "20"));
			$arModuleOptions[] = array("EXPRESSION_FOR_MID", GetMessage("EXPRESSION_FOR_MID"), GetMessage("EXPRESSION_FOR_MID_DEFAULT"), array("text", "20"));
			$arModuleOptions[] = array("EXPRESSION_FOR_MAX", GetMessage("EXPRESSION_FOR_MAX"), GetMessage("EXPRESSION_FOR_MAX_DEFAULT"), array("text", "20"));
			$arModuleOptions[] = array("EXPRESSION_FOR_FREE_DELIVERY", GetMessage("EXPRESSION_FOR_FREE_DELIVERY"), GetMessage("EXPRESSION_FOR_FREE_DELIVERY_DEFAULT"), array("text", "20"));

			// show min prices order
			$arModuleOptions[] = GetMessage("MIN_ORDER_PRICES");
			$arModuleOptions[] = array("MIN_ORDER_PRICE", GetMessage("MIN_ORDER_PRICE"), 1000, array("text", "20"));
			$arModuleOptions[] = array("MIN_ORDER_PRICE_TEXT", GetMessage("MIN_ORDER_PRICE_TEXT"), GetMessage("MIN_ORDER_PRICE_TEXT_EXAMPLE"), array("textarea", "2", "50"));

			// show yandex counter
			$arModuleOptions[] = GetMessage("YANDEX_GOOGLE_COUNTER_BLOCK");
			$arModuleOptions[] = array("YANDEX_COUNTER", GetMessage("YANDEX_COUNTER_TITLE"), '', array("textarea", "10", "50"));
			$arModuleOptions[] = array("YANDEX_ECOMERCE", GetMessage("YANDEX_ECOMERCE_TITLE"), 'N', array("checkbox"));
			$arModuleOptions[] = array("GOOGLE_COUNTER", GetMessage("GOOGLE_COUNTER_TITLE"), '', array("textarea", "10", "50"));
			$arModuleOptions[] = array("GOOGLE_ECOMERCE", GetMessage("GOOGLE_ECOMERCE_TITLE"), 'N', array("checkbox"));
			$arModuleOptions[] = array("BASKET_ADD_EVENT", GetMessage("BASKET_ADD_EVENT_TITLE"), "addToCart", array("text", "20"));
			$arModuleOptions[] = array("BASKET_REMOVE_EVENT", GetMessage("BASKET_REMOVE_EVENT_TITLE"), "removeFromCart", array("text", "20"));
			$arModuleOptions[] = array("CHECKOUT_ORDER_EVENT", GetMessage("CHECKOUT_ORDER_EVENT_TITLE"), "checkout", array("text", "20"));

			// show search options
			//$arModuleOptions[] = GetMessage("SEARCH_OPTIONS");

			$arTabs = array();
			foreach($arSites as $key => $arSite){
				$arTabs[] = array(
					"DIV" => "edit".($key+1),
					"TAB" => GetMessage("MAIN_OPTIONS", array("#SITE_NAME#" => $arSite["NAME"], "#SITE_ID#" => $arSite["ID"])),
					"ICON" => "settings",
					"TITLE" => GetMessage("MAIN_OPTIONS_TITLE"),
					"PAGE_TYPE" => "site_settings",
					"SITE_ID" => $arSite["ID"],
					"OPTIONS" => $arModuleOptions,
				);
			}
		}

		return array("TABS" => $arTabs, "TEMPLATE_OPTIONS" => $arComponentOptions);
	}

	function SetJSOptions(){
		global $APPLICATION, $TEMPLATE_OPTIONS, $THEME_SWITCHER, $STARTTIME;
		$MESS["MIN_ORDER_PRICE_TEXT"]=COption::GetOptionString(self::moduleID, "MIN_ORDER_PRICE_TEXT", GetMessage("MIN_ORDER_PRICE_TEXT_EXAMPLE"), SITE_ID);
		// get actual ready|delayed|subscribed|compared items
		$arBasketAspro = self::getBasketAspro();
		?>
		<script type="text/javascript">
		var arMShopOptions = {};
		
		jQuery.extend(jQuery.validator.messages,{
			required: '<?=GetMessage("VALIDATOR_REQUIRED")?>',
			email: '<?=GetMessage("VALIDATOR_EMAIL")?>',
			minlength: '<?=GetMessage("VALIDATOR_MINLENGTH")?>',
			equalTo: '<?=GetMessage("VALIDATOR_EQUALTO")?>',
			captcha: '<?=GetMessage("VALIDATOR_CAPTCHA")?>',
		});
		BX.message(<?=CUtil::PhpToJSObject( $MESS, false )?>);
		</script>
		<?Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("options-block");?>
		<script>
			var arBasketAspro = <?=CUtil::PhpToJSObject($arBasketAspro, false, true)?>;
			$(document).ready(function() {
				setBasketAspro();
			});
		</script>
		<?Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("options-block", "");?>

		<script type="text/javascript">

		var arMShopOptions = ({
			"SITE_ID" : "<?=SITE_ID?>",
			"SITE_DIR" : "<?=SITE_DIR?>",
			"FORM" : ({
				"ASK_FORM_ID" : "ASK",
				"SERVICES_FORM_ID" : "SERVICES",
				"FEEDBACK_FORM_ID" : "FEEDBACK",
				"CALLBACK_FORM_ID" : "CALLBACK",
				"RESUME_FORM_ID" : "RESUME",
				"TOORDER_FORM_ID" : "TOORDER"
			}),
			"PAGES" : ({
				"FRONT_PAGE" : "<?=self::IsMainPage()?>",
				"BASKET_PAGE" : "<?=self::IsBasketPage()?>",
				"ORDER_PAGE" : "<?=self::IsOrderPage()?>",
				"PERSONAL_PAGE" : "<?=self::IsPersonalPage()?>",
				"CATALOG_PAGE" : "<?=self::IsCatalogPage()?>"
			}),
			"PRICES" : ({
				"MIN_PRICE" : "<?=trim(COption::GetOptionString(self::moduleID, "MIN_ORDER_PRICE", "1000", SITE_ID));?>",
			}),
			"THEME" : ({
				"THEME_SWITCHER" : "<?=strToLower(trim($THEME_SWITCHER))?>",
				"COLOR_THEME" : "<?=strToLower(trim($TEMPLATE_OPTIONS["COLOR_THEME"]["CURRENT_VALUE"]))?>",
				"CUSTOM_COLOR_THEME" : "<?=strToLower(trim($TEMPLATE_OPTIONS["CUSTOM_COLOR_THEME"]["CURRENT_VALUE"]))?>",
				"LOGO_IMAGE" : "<?=trim($TEMPLATE_OPTIONS["LOGO_IMAGE"]["CURRENT_IMG"])?>",
				"FAVICON_IMAGE" : "<?=trim($TEMPLATE_OPTIONS["FAVICON_IMAGE"]["CURRENT_IMG"])?>",
				"APPLE_TOUCH_ICON_57_IMAGE" : "<?=trim($TEMPLATE_OPTIONS["APPLE_TOUCH_ICON_57_IMAGE"]["CURRENT_IMG"])?>",
				"APPLE_TOUCH_ICON_72_IMAGE" : "<?=trim($TEMPLATE_OPTIONS["APPLE_TOUCH_ICON_72_IMAGE"]["CURRENT_IMG"])?>",
				"BANNER_WIDTH" : "<?=strToLower(trim($TEMPLATE_OPTIONS["BANNER_WIDTH"]["CURRENT_VALUE"]))?>",
				"BANNER_ANIMATIONTYPE" : "<?=trim(COption::GetOptionString(self::moduleID, "BANNER_ANIMATIONTYPE", "SLIDE_HORIZONTAL", SITE_ID));?>",
				"BANNER_SLIDESSHOWSPEED" : "<?=trim(COption::GetOptionString(self::moduleID, "BANNER_SLIDESSHOWSPEED", "5000", SITE_ID));?>",
				"BANNER_ANIMATIONSPEED" : "<?=trim(COption::GetOptionString(self::moduleID, "BANNER_ANIMATIONSPEED", "600", SITE_ID));?>",
				"HEAD" : ({
					"VALUE" : "<?=strToLower(trim($TEMPLATE_OPTIONS["HEAD"]["CURRENT_VALUE"]))?>",
					"MENU" : "<?=strToLower(trim($TEMPLATE_OPTIONS["HEAD"]["CURRENT_MENU"]))?>",
					"MENU_COLOR" : "<?=strToLower(trim($TEMPLATE_OPTIONS["HEAD"]["CURRENT_MENU_COLOR"]))?>",
					"HEAD_COLOR" : "<?=strToLower(trim($TEMPLATE_OPTIONS["HEAD"]["CURRENT_HEAD_COLOR"]))?>",
				}),
				"BASKET" : "<?=strToLower(trim($TEMPLATE_OPTIONS["BASKET"]["CURRENT_VALUE"]))?>",
				"STORES" : "<?=strToLower(trim($TEMPLATE_OPTIONS["STORES"]["CURRENT_VALUE"]))?>",
				"STORES_SOURCE" : "<?=strToLower(trim($TEMPLATE_OPTIONS["STORES_SOURCE"]["CURRENT_VALUE"]))?>",
				"TYPE_SKU" : "<?=strToLower(trim($TEMPLATE_OPTIONS["TYPE_SKU"]["CURRENT_VALUE"]))?>",
				"TYPE_VIEW_FILTER" : "<?=strToLower(trim($TEMPLATE_OPTIONS["TYPE_VIEW_FILTER"]["CURRENT_VALUE"]))?>",
				"SHOW_BASKET_ONADDTOCART" : "<?=trim(COption::GetOptionString(self::moduleID, "SHOW_BASKET_ONADDTOCART", "Y", SITE_ID))?>",
				"SHOW_BASKET_PRINT" : "<?=trim(COption::GetOptionString(self::moduleID, "SHOW_BASKET_PRINT", "N", SITE_ID))?>",
				"PHONE_MASK" : "<?=trim(COption::GetOptionString(self::moduleID, "PHONE_MASK", "+9 (999) 999-99-99", SITE_ID));?>",
				"VALIDATE_PHONE_MASK" : "<?=trim(COption::GetOptionString(self::moduleID, "VALIDATE_PHONE_MASK", "^[+][0-9] [(][0-9]{3}[)] [0-9]{3}[-][0-9]{2}[-][0-9]{2}$", SITE_ID));?>",
				"SCROLLTOTOP_TYPE" : "<?=trim(COption::GetOptionString(self::moduleID, "SCROLLTOTOP_TYPE", "ROUND_COLOR", SITE_ID))?>",
				"SCROLLTOTOP_POSITION" : "<?=trim(COption::GetOptionString(self::moduleID, "SCROLLTOTOP_POSITION", "PADDING", SITE_ID))?>",
			}),
			"COUNTERS":({
				"YANDEX_COUNTER" : "<?=strlen(trim(COption::GetOptionString(self::moduleID, "YANDEX_COUNTER", false, SITE_ID)))?>",
				"GOOGLE_COUNTER" : "<?=strlen(trim(COption::GetOptionString(self::moduleID, "GOOGLE_COUNTER", false, SITE_ID)))?>",
				"YANDEX_ECOMERCE" : "<?=trim(COption::GetOptionString(self::moduleID, "YANDEX_ECOMERCE", false, SITE_ID))?>",
				"GOOGLE_ECOMERCE" : "<?=trim(COption::GetOptionString(self::moduleID, "GOOGLE_ECOMERCE", false, SITE_ID))?>",
				"TYPE":{
					"ONE_CLICK":"<?=GetMessage("ONE_CLICK_BUY");?>",
					"QUICK_ORDER":"<?=GetMessage("QUICK_ORDER");?>",
				},
				"GOOGLE_EVENTS":{
					"ADD2BASKET": "<?=trim(COption::GetOptionString(self::moduleID, "BASKET_ADD_EVENT", "addToCart", SITE_ID))?>",
					"REMOVE_BASKET": "<?=trim(COption::GetOptionString(self::moduleID, "BASKET_REMOVE_EVENT", "removeFromCart", SITE_ID))?>",
					"CHECKOUT_ORDER": "<?=trim(COption::GetOptionString(self::moduleID, "CHECKOUT_ORDER_EVENT", "checkout", SITE_ID))?>",
				}
				/*
				"GOALS" : {
					"TO_BASKET": "<?=trim(COption::GetOptionString(self::moduleID, "TO_BASKET", "TO_BASKET", SITE_ID))?>",
					"ORDER_START": "<?=trim(COption::GetOptionString(self::moduleID, "ORDER_START", "ORDER_START", SITE_ID))?>",
					"ORDER_SUCCESS": "<?=trim(COption::GetOptionString(self::moduleID, "ORDER_SUCCESS", "ORDER_SUCCESS", SITE_ID))?>",
					"QUICK_ORDER_SUCCESS": "<?=trim(COption::GetOptionString(self::moduleID, "QUICK_ORDER_SUCCESS", "QUICK_ORDER_SUCCESS", SITE_ID))?>",
					"ONE_CLICK_BUY_SUCCESS": "<?=trim(COption::GetOptionString(self::moduleID, "ONE_CLICK_BUY_SUCCESS", "ONE_CLICK_BUY_SUCCESS", SITE_ID))?>",
				}
				*/
			}),
			"JS_ITEM_CLICK":({
				"precision" : 6,
				"precisionFactor" : Math.pow(10,6)
			})
		});
		
		$(document).ready(function(){
			$.extend( $.validator.messages, {
				required: BX.message('JS_REQUIRED'),
				email: BX.message('JS_FORMAT'),
				equalTo: BX.message('JS_PASSWORD_COPY'),
				minlength: BX.message('JS_PASSWORD_LENGTH'),
				remote: BX.message('JS_ERROR')
			});

			$.validator.addMethod(
				'regexp', function( value, element, regexp ){
					var re = new RegExp( regexp );
					return this.optional( element ) || re.test( value );
				},
				BX.message('JS_FORMAT')
			);

			$.validator.addMethod(
				'filesize', function( value, element, param ){
					return this.optional( element ) || ( element.files[0].size <= param )
				},
				BX.message('JS_FILE_SIZE')
			);

			$.validator.addMethod(
				'date', function( value, element, param ) {
					var status = false;
					if(!value || value.length <= 0){
						status = false;
					}
					else{
						// html5 date allways yyyy-mm-dd
						var re = new RegExp('^([0-9]{4})(.)([0-9]{2})(.)([0-9]{2})$');
						var matches = re.exec(value);
						if(matches){
							var composedDate = new Date(matches[1], (matches[3] - 1), matches[5]);
							status = ((composedDate.getMonth() == (matches[3] - 1)) && (composedDate.getDate() == matches[5]) && (composedDate.getFullYear() == matches[1]));
						}
						else{
							// firefox
							var re = new RegExp('^([0-9]{2})(.)([0-9]{2})(.)([0-9]{4})$');
							var matches = re.exec(value);
							if(matches){
								var composedDate = new Date(matches[5], (matches[3] - 1), matches[1]);
								status = ((composedDate.getMonth() == (matches[3] - 1)) && (composedDate.getDate() == matches[1]) && (composedDate.getFullYear() == matches[5]));
							}
						}
					}
					return status;
				}, BX.message('JS_DATE')
			);

			$.validator.addMethod(
				'extension', function(value, element, param){
					param = typeof param === 'string' ? param.replace(/,/g, '|') : 'png|jpe?g|gif';
					return this.optional(element) || value.match(new RegExp('.(' + param + ')$', 'i'));
				}, BX.message('JS_FILE_EXT')
			);

			$.validator.addMethod(
				'captcha', function( value, element, params ){
					return $.validator.methods.remote.call(this, value, element,{
						url: arMShopOptions['SITE_DIR'] + 'ajax/check-captcha.php',
						type: 'post',
						data:{
							captcha_word: value,
							captcha_sid: function(){
								return $(element).closest('form').find('input[name="captcha_sid"]').val();
							}
						}
					});
				},
				BX.message('JS_ERROR')
			);

			$.validator.addClassRules({
				'phone':{
					regexp: arMShopOptions['THEME']['VALIDATE_PHONE_MASK']
				},
				'confirm_password':{
					equalTo: 'input[name="REGISTER\[PASSWORD\]"]',
					minlength: 6
				},
				'password':{
					minlength: 6
				},
				'inputfile':{
					extension: arMShopOptions['THEME']['VALIDATE_FILE_EXT'],
					filesize: 5000000
				},
				'captcha':{
					captcha: ''
				}
			});

			if(arMShopOptions['THEME']['PHONE_MASK']){
				$('input.phone').inputmask('mask', {'mask': arMShopOptions['THEME']['PHONE_MASK']});
			}

			jqmEd('feedback', arMShopOptions['FORM']['FEEDBACK_FORM_ID']);
			jqmEd('ask', arMShopOptions['FORM']['ASK_FORM_ID'], '.ask_btn');
			jqmEd('services', arMShopOptions['FORM']['SERVICES_FORM_ID'], '.services_btn','','.services_btn');
			if($('.resume_send').length){
				$('.resume_send').live('click', function(e){
					$("body").append("<span class='resume_send_wr' style='display:none;'></span>");
					jqmEd('resume', arMShopOptions['FORM']['RESUME_FORM_ID'], '.resume_send_wr','', this);
					$("body .resume_send_wr").click();
					$("body .resume_send_wr").remove();
				})
			}
			jqmEd('callback', arMShopOptions['FORM']['CALLBACK_FORM_ID'], '.callback_btn');
		});
		</script>
		
		<?if(CModule::IncludeModule('currency')):?>
			<?CJSCore::Init(array('currency'));?>
			<?$currencyFormat = CCurrencyLang::GetFormatDescription(CSaleLang::GetLangCurrency(SITE_ID));?>
			<?if(is_array($currencyFormat)):?>
				<script type="text/javascript">
				function jsPriceFormat(_number){
					BX.Currency.setCurrencyFormat('<?=CSaleLang::GetLangCurrency(SITE_ID);?>', <?=CUtil::PhpToJSObject($currencyFormat, false, true)?>);
					return BX.Currency.currencyFormat(_number, '<?=CSaleLang::GetLangCurrency(SITE_ID);?>', true);
				}
				</script>
			<?endif;?>
		<?endif;?>

		<?/*fix reset POST*/
		if($_SERVER["REQUEST_METHOD"]=="POST" && $_POST["color_theme"]){
			LocalRedirect($_SERVER["HTTP_REFERER"]);
		}?>
		<?
	}

	function checkAllowDelivery($summ, $currency){
		$ERROR = false;
		$min_price = \Bitrix\Main\Config\Option::get(self::moduleID, "MIN_ORDER_PRICE", 1000, SITE_ID);
		$error_text = "";
		if( $summ < $min_price ){
			$ERROR = true;
			$error_text = \Bitrix\Main\Config\Option::get(self::moduleID, "MIN_ORDER_PRICE_TEXT", GetMessage("MIN_ORDER_PRICE_TEXT_EXAMPLE") );
			$error_text = str_replace( '#PRICE#', SaleFormatCurrency($min_price,$currency), $error_text );
			if($currency)
				$error_text = str_replace( '#PRICE#', SaleFormatCurrency($min_price,$currency), $error_text );
			else
				$error_text = str_replace( '#PRICE#', $min_price, $error_text );
		}
		return $arError=array( "ERROR" => $ERROR, "TEXT" => $error_text );
	}

	function showMoreText( $text ){
		$arText = explode( "#MORE_TEXT#", $text);
		if( $arText[1] ){
			$str = $arText[0];
			$str .= '<div class="wrap_more_item">';
				$str .= '<div class="more_text_item">';
				$str .= $arText[1];
				$str .= '</div>';
				$str .= '<div class="open_more"><span class="text"><i class="arrow"></i><span class="pseudo">'.GetMessage("EXPAND_BLOCK").'</span></span></div>';
			$str .= '</div>';
		}else{
			$str = $text;
		}
		return $str;
	}

	function IsCompositeEnabled(){
		if(class_exists('CHTMLPagesCache')){
			if(method_exists('CHTMLPagesCache', 'GetOptions')){
				if($arHTMLCacheOptions = CHTMLPagesCache::GetOptions()){
					if(method_exists('CHTMLPagesCache', 'isOn')){
						if (CHTMLPagesCache::isOn()){
							if(isset($arHTMLCacheOptions['AUTO_COMPOSITE']) && $arHTMLCacheOptions['AUTO_COMPOSITE'] === 'Y'){
								return 'AUTO_COMPOSITE';
							}
							else{
								return 'COMPOSITE';
							}
						}
					}
					else{
						if($arHTMLCacheOptions['COMPOSITE'] === 'Y'){
							return 'COMPOSITE';
						}
					}
				}
			}
		}

		return false;
	}

	function EnableComposite($auto = false){
		if(class_exists('CHTMLPagesCache')){
			if(method_exists('CHTMLPagesCache', 'GetOptions')){
				if($arHTMLCacheOptions = CHTMLPagesCache::GetOptions()){
					$arHTMLCacheOptions['COMPOSITE'] = 'Y';
					$arHTMLCacheOptions['AUTO_UPDATE'] = 'Y'; // standart mode
					$arHTMLCacheOptions['AUTO_UPDATE_TTL'] = '0'; // no ttl delay
					$arHTMLCacheOptions['AUTO_COMPOSITE'] = ($auto ? 'Y' : 'N'); // auto composite mode
					CHTMLPagesCache::SetEnabled(true);
					CHTMLPagesCache::SetOptions($arHTMLCacheOptions);
					bx_accelerator_reset();
				}
			}
		}
	}

	function __AdmSettingsSaveOption_EX($module_id, $arOption){
		if(!is_array($arOption)){
			return false;
		}

		$arControllerOption = CControllerClient::GetInstalledOptions($module_id);
		if(isset($arControllerOption[$arOption[0]])){
			return false;
		}

		$name = $arOption[0];
		$val = $_REQUEST[$name];
		$siteID = end(explode("_", $arOption[0]));
		$name = substr($name, 0, (strlen($name)-strlen($siteID)-1));

		if(array_key_exists(4, $arOption) && $arOption[4] == 'Y'){
			if($arOption[3][0] == 'checkbox'){
				$val = 'N';
			}
			else{
				return false;
			}
		}

		if($arOption[3][0] == "checkbox" && $val != "Y"){
			$val = "N";
		}
		elseif($arOption[3][0] == "multiselectbox"){
			$val = @implode(",", $val);
		}
		elseif($arOption[3][0] == "file"){
			$val = $arValueDefault = serialize(array());
			if(isset($_REQUEST[$name.'_'.$siteID.'_del']) || (isset($_FILES[$arOption[0]]) && strlen($_FILES[$arOption[0]]['tmp_name']['0']))){
				$arValues = unserialize(COption::GetOptionString($module_id, $name, $arValueDefault, $siteID));
				$arValues = (array)$arValues;
				foreach($arValues as $fileID){
					CFile::Delete($fileID);
				}
			}

			if(isset($_FILES[$arOption[0]]) && (strlen($_FILES[$arOption[0]]['tmp_name']['n0']) || strlen($_FILES[$arOption[0]]['tmp_name']['0']))){
				$arValues = array();
				$absFilePath = (strlen($_FILES[$arOption[0]]['tmp_name']['n0']) ? $_FILES[$arOption[0]]['tmp_name']['n0'] : $_FILES[$arOption[0]]['tmp_name']['0']);
				$arOriginalName = (strlen($_FILES[$arOption[0]]['name']['n0']) ? $_FILES[$arOption[0]]['name']['n0'] : $_FILES[$arOption[0]]['name']['0']);
				if(file_exists($absFilePath)){
					$arFile = CFile::MakeFileArray($absFilePath);
					$arFile['name'] = $arOriginalName; // for original file extension

					if($bIsIco = strpos($arOriginalName, '.ico') !== false){
						$script_files = COption::GetOptionString("fileman", "~script_files", "php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht,py,psp,var");
						$arScriptFiles = explode(',', $script_files);
						if(($p = array_search('ico', $arScriptFiles)) !== false){
							unset($arScriptFiles[$p]);
						}
						$tmp = implode(',', $arScriptFiles);
						COption::SetOptionString("fileman", "~script_files", $tmp);
					}

					if($fileID = CFile::SaveFile($arFile, self::moduleID)){
						$arValues[] = $fileID;
					}

					if($bIsIco){
						COption::SetOptionString("fileman", "~script_files", $script_files);
					}
				}
				$val = serialize($arValues);
			}

			if(!isset($_FILES[$arOption[0]]) || (!strlen($_FILES[$arOption[0]]['tmp_name']['n0']) && !strlen($_FILES[$arOption[0]]['tmp_name']['0']) && !isset($_REQUEST[$name.'_'.$siteID.'_del']))){
				return;
			}
		}

		if($name === 'FAVICON_IMAGE'){
			self::CopyFaviconToSiteDir($val, $siteID); //copy favicon for search bots
		}

		if(strpos($name, 'CUSTOM_COLOR_THEME') !== false){
			$val = str_replace('#', '', $val);
			$val = strlen($val) ? $val : $arOption[2];
		}

		COption::SetOptionString($module_id, $name, $val, $arOption[1], $siteID);
	}

	static function CopyFaviconToSiteDir($arValue, $siteID = ''){
		if(($siteID)){
			$arValue=unserialize($arValue);
			if($arValue[0]){
				$imageSrc = $_SERVER['DOCUMENT_ROOT'].CFile::GetPath($arValue[0]);
			}
			else{
				if($arTemplate = self::GetSiteTemplate($siteID)){
					$imageSrc = str_replace('//', '/', $arTemplate['PATH'].'/images/favicon.ico');
				}
			}
			$arSite = CSite::GetByID($siteID)->Fetch();

			@unlink($imageDest = $arSite['ABS_DOC_ROOT'].'/'.$arSite['DIR'].'/favicon.ico');
			if(file_exists($imageSrc)){
				@copy($imageSrc, $arSite['ABS_DOC_ROOT'].'/'.$arSite['DIR'].'/favicon.ico');
			}else{
				@copy($arSite['ABS_DOC_ROOT'].'/'.$arSite['DIR'].'/include/favicon.ico', $arSite['ABS_DOC_ROOT'].'/'.$arSite['DIR'].'/favicon.ico');
			}
		}
	}

	static function GetSiteTemplate($siteID = ''){
		$arTemplate = array();

		if(strlen($siteID)){
			$dbRes = CSite::GetTemplateList($siteID);
			while($arTemplate = $dbRes->Fetch()){
				if(!strlen($arTemplate['CONDITION'])){
					if(file_exists(($arTemplate['PATH'] = $_SERVER['DOCUMENT_ROOT'].'/bitrix/templates/'.$arTemplate['TEMPLATE']))){
						break;
					}
					elseif(file_exists(($arTemplate['PATH'] = $_SERVER['DOCUMENT_ROOT'].'/local/templates/'.$arTemplate['TEMPLATE']))){
						break;
					}
				}
			}
		}

		return $arTemplate;
	}

	function __AdmSettingsDrawRow_EX($module_id, $Option, $siteID){
		$arControllerOption = CControllerClient::GetInstalledOptions($module_id);
		if(!is_array($Option)):?><tr class="heading"><td colspan="2"><?=$Option?></td></tr><?
		elseif(isset($Option["note"])):
		?>
			<tr>
				<td colspan="2" align="center">
					<?echo BeginNote('align="center"');?>
					<?=$Option["note"]?>
					<?echo EndNote();?>
				</td>
			</tr>
		<?
		else:
			$name  = substr($Option[0], 0, (strlen($Option[0])-strlen($siteID)-1));
			$val = COption::GetOptionString($module_id, $name, $Option[2], $siteID);
			$type = $Option[3];
			$disabled = array_key_exists(4, $Option) && $Option[4] == 'Y' ? ' disabled' : '';
			$sup_text = array_key_exists(5, $Option) ? $Option[5] : '';
		?>
			<?if($name === "ONECLICKBUY_PROPERTIES"):?>
				<tr>
					<td colspan="2" align="center">
						<div class="adm-info-message"><?=GetMessage("APPLY_PERSON_TYPE")?></div><div style="clear:both;"></div>
					</td>
				</tr>
			<?endif;?>
			<tr>
				<td<?if($type[0]=="multiselectbox" || $type[0]=="textarea" || $type[0]=="statictext" || $type[0]=="statichtml") echo ' class="adm-detail-valign-top"'?> width="50%"><?
					if($type[0]=="checkbox") echo "<label for='".htmlspecialcharsbx($Option[0])."'>".$Option[1]."</label>";
					else echo $Option[1];
					if (strlen($sup_text) > 0) { ?><span class="required"><sup><?=$sup_text?></sup></span><? }
				?></td>
				<td width="50%"><?
				if($type[0]=="checkbox"): ?><input type="checkbox" <?if(isset($arControllerOption[$Option[0]]))echo ' disabled title="'.GetMessage("MAIN_ADMIN_SET_CONTROLLER_ALT").'"';?> id="<?echo htmlspecialcharsbx($Option[0])?>" name="<?echo htmlspecialcharsbx($Option[0])?>" value="Y"<?if($val=="Y")echo" checked";?><?=$disabled?><?if($type[2]<>'') echo " ".$type[2]?>><?
				elseif($type[0]=="text" || $type[0]=="password"): ?><input type="<?echo $type[0]?>"<?if(isset($arControllerOption[$Option[0]]))echo ' disabled title="'.GetMessage("MAIN_ADMIN_SET_CONTROLLER_ALT").'"';?> size="<?echo $type[1]?>" maxlength="255" value="<?echo htmlspecialcharsbx($val)?>" name="<?echo htmlspecialcharsbx($Option[0])?>"<?=$disabled?><?=($type[0]=="password"? ' autocomplete="off"':'')?>><?
				elseif($type[0]=="selectbox"):
					$arr = $type[1];
					if(!is_array($arr))
						$arr = array();
					$arr_keys = array_keys($arr);
					?><select name="<?echo htmlspecialcharsbx($Option[0])?>" <?if(isset($arControllerOption[$Option[0]]))echo ' disabled title="'.GetMessage("MAIN_ADMIN_SET_CONTROLLER_ALT").'"';?> <?=$disabled?>><?
						$count = count($arr_keys);
						for($j=0; $j<$count; $j++): ?><option value="<?echo $arr_keys[$j]?>"<?if($val==$arr_keys[$j])echo" selected"?>><?echo htmlspecialcharsbx($arr[$arr_keys[$j]])?></option><? endfor;
						?></select><?
				elseif($type[0]=="multiselectbox"):
					$arr = $type[1];
					if(!is_array($arr)) $arr = array();
					$arr_keys = array_keys($arr);
					$arr_val = explode(",",$val);

					?>
					<select size="<?=($type[2] ? $type[2] :5);?>" <?if(isset($arControllerOption[$Option[0]]))echo ' disabled title="'.GetMessage("MAIN_ADMIN_SET_CONTROLLER_ALT").'"';?> multiple name="<?echo htmlspecialcharsbx($Option[0])?>[]"<?=$disabled?>><?
						$count = count($arr_keys);
						for($j=0; $j<$count; $j++): ?><option value="<?echo $arr_keys[$j]?>"<?if(in_array($arr_keys[$j],$arr_val)) echo " selected"?>><?echo htmlspecialcharsbx($arr[$arr_keys[$j]])?></option><? endfor;
					?></select><?
				elseif($type[0]=="textarea"):?><textarea <?if(isset($arControllerOption[$Option[0]]))echo ' disabled title="'.GetMessage("MAIN_ADMIN_SET_CONTROLLER_ALT").'"';?> rows="<?echo $type[1]?>" cols="<?echo $type[2]?>" name="<?echo htmlspecialcharsbx($Option[0])?>"<?=$disabled?>><?echo htmlspecialcharsbx($val)?></textarea><?
				elseif($type[0]=='file'):
					$val = unserialize($val);
					$Option['MULTIPLE'] = 'N';
					if(strpos($Option[0], 'LOGO_IMAGE') !== false) {
						$arOption['WIDTH'] = 163;
						$arOption['HEIGHT'] = 36;
					}
					elseif(strpos($Option[0], 'FAVICON_IMAGE') !== false) {
						$arOption['WIDTH'] = 16;
						$arOption['HEIGHT'] = 16;
					}
					elseif(strpos($Option[0], 'APPLE_TOUCH_ICON_57_IMAGE') !== false) {
						$arOption['WIDTH'] = 57;
						$arOption['HEIGHT'] = 57;
					}
					elseif(strpos($Option[0], 'APPLE_TOUCH_ICON_72_IMAGE') !== false) {
						$arOption['WIDTH'] = 72;
						$arOption['HEIGHT'] = 72;
					}
					self::__ShowFilePropertyField($Option[0], $Option, $val);
				elseif($type[0]=="statictext"): echo htmlspecialcharsbx($val);
				elseif($type[0]=="statichtml"): echo $val;
				endif;
				?></td>
			</tr>
		<?
		endif;
	}

	function __AdmSettingsDrawCustomRow($html){
		echo '<tr><td colspan="2">'.$html.'</td></tr>';
	}

	protected function __ShowFilePropertyField($name, $arOption, $values){
		global $bCopy, $historyId;

		if(!is_array($values)){
			$values = array($values);
		}

		if($bCopy || empty($values)){
			$values = array('n0' => 0);
		}

		$optionWidth = $arOption['WIDTH'] ? $arOption['WIDTH'] : 200;
		$optionHeight = $arOption['HEIGHT'] ? $arOption['HEIGHT'] : 100;

		if($arOption['MULTIPLE'] == 'N'){
			foreach($values as $key => $val){
				if(is_array($val)){
					$file_id = $val['VALUE'];
				}
				else{
					$file_id = $val;
				}
				if($historyId > 0){
					echo CFileInput::Show($name.'['.$key.']', $file_id,
						array(
							'IMAGE' => $arOption['IMAGE'],
							'PATH' => 'Y',
							'FILE_SIZE' => 'Y',
							'DIMENSIONS' => 'Y',
							'IMAGE_POPUP' => 'Y',
							'MAX_SIZE' => array(
								'W' => $optionWidth,
								'H' => $optionHeight,
							),
						)
					);
				}
				else{
					echo CFileInput::Show($name.'['.$key.']', $file_id,
						array(
							'IMAGE' => $arOption['IMAGE'],
							'PATH' => 'Y',
							'FILE_SIZE' => 'Y',
							'DIMENSIONS' => 'Y',
							'IMAGE_POPUP' => 'Y',
							'MAX_SIZE' => array(
							'W' => $optionWidth,
							'H' => $optionHeight,
							),
						),
						array(
							'upload' => true,
							'medialib' => true,
							'file_dialog' => true,
							'cloud' => true,
							'del' => true,
							'description' => $arOption['WITH_DESCRIPTION'] == 'Y',
						)
					);
				}
				break;
			}
		}
		else{
			$inputName = array();
			foreach($values as $key => $val){
				if(is_array($val)){
					$inputName[$name.'['.$key.']'] = $val['VALUE'];
				}
				else{
					$inputName[$name.'['.$key.']'] = $val;
				}
			}
			if($historyId > 0){
				echo CFileInput::ShowMultiple($inputName, $name.'[n#IND#]',
					array(
						'IMAGE' => $arOption['IMAGE'],
						'PATH' => 'Y',
						'FILE_SIZE' => 'Y',
						'DIMENSIONS' => 'Y',
						'IMAGE_POPUP' => 'Y',
						'MAX_SIZE' => array(
							'W' => $optionWidth,
							'H' => $optionHeight,
						),
					),
				false);
			}
			else{
				echo CFileInput::ShowMultiple($inputName, $name.'[n#IND#]',
					array(
						'IMAGE' => $arOption['IMAGE'],
						'PATH' => 'Y',
						'FILE_SIZE' => 'Y',
						'DIMENSIONS' => 'Y',
						'IMAGE_POPUP' => 'Y',
						'MAX_SIZE' => array(
							'W' => $optionWidth,
							'H' => $optionHeight,
						),
					),
				false,
					array(
						'upload' => true,
						'medialib' => true,
						'file_dialog' => true,
						'cloud' => true,
						'del' => true,
						'description' => $arOption['WITH_DESCRIPTION'] == 'Y',
					)
				);
			}
		}
	}

	function InsertCounters(&$html){
		global $APPLICATION;
		if(defined("ADMIN_SECTION")/* || $_SERVER["HTTP_BX_CACHE_MODE"] == "HTMLCACHE"*/){
			return;
		}

		define("LOAD_COUNTERS", true);

		if(defined("LOAD_COUNTERS")  && (strpos($APPLICATION->GetCurPage(),'personal')===false || strpos($APPLICATION->GetCurPage(),'auth')===false)){
			$counter = '';
			$yandex_counter = \Bitrix\Main\Config\Option::get(self::moduleID, "YANDEX_COUNTER", false, SITE_ID);
			if($yandex_counter){
				$counter .= '
<script>
	var yandexEvents = new function(){
		var myWatchers = new Array();
		this.addEventListener = function( watcher ){
			myWatchers.push( watcher );
		};

		this.raiseEvents = function( eventId ){
			for( var thisEventIndex in myWatchers ){
				myWatchers[thisEventIndex]( eventId );
			}
		};
	};
	window.onload=function(){
		window.dataLayer = window.dataLayer || [];
	}
</script>
';
				$counter .= $yandex_counter;
			}

			$google_counter = \Bitrix\Main\Config\Option::get(self::moduleID, "GOOGLE_COUNTER", false, SITE_ID);
			if( $google_counter && $google_ecomerce=="Y" ){
				$counter1 .=$google_counter;
				$html = str_replace( '<body id="main">', '<body id="main">'.$counter1, $html );
			}
			if($google_counter){
				$counter .= $google_counter;
			}

			if(strlen($counter)){
				$html = str_replace('</body>', $counter.'</body>', $html);
			}
		}
	}

	function OnSaleComponentOrderOneStepPersonTypeHandler($arResult, &$arUserResult, $arParams){
		if(!$arUserResult["DELIVERY_LOCATION"]){
			$arFilter = array("PERSON_TYPE_ID" => $arUserResult["PERSON_TYPE_ID"], "ACTIVE" => "Y", "UTIL" => "N", "RELATED" => false);
			$arFilter["TYPE"] = "LOCATION";

			$dbProperties = CSaleOrderProps::GetList(
				array(
					"GROUP_SORT" => "ASC",
					"PROPS_GROUP_ID" => "ASC",
					"USER_PROPS" => "ASC",
					"SORT" => "ASC",
					"NAME" => "ASC"
				),
				$arFilter,
				false,
				false,
				array(
					"ID", "NAME", "TYPE", "REQUIED", "DEFAULT_VALUE", "IS_LOCATION", "PROPS_GROUP_ID", "SIZE1", "SIZE2", "DESCRIPTION",
					"IS_EMAIL", "IS_PROFILE_NAME", "IS_PAYER", "IS_LOCATION4TAX", "DELIVERY_ID", "PAYSYSTEM_ID", "MULTIPLE",
					"CODE", "GROUP_NAME", "GROUP_SORT", "SORT", "USER_PROPS", "IS_ZIP", "INPUT_FIELD_LOCATION"
				)
			);

			$propIndex = array();

			if(is_array($_REQUEST['LOCATION_ALT_PROP_DISPLAY_MANUAL']))
			{
				foreach($_REQUEST['LOCATION_ALT_PROP_DISPLAY_MANUAL'] as $propId => $switch)
				{
					if(intval($propId))
						$arResult['LOCATION_ALT_PROP_DISPLAY_MANUAL'][intval($propId)] = !!$switch;
				}
			}

			while ($arProperties = $dbProperties->GetNext())
			{
				$arUserResult["DELIVERY_LOCATION"]=$arProperties["DEFAULT_VALUE"];
			}
		}
	}

	function OnBeforeUserUpdateHandler(&$arFields){
		if(strlen($arFields["NAME"]))
			$arFields["NAME"] = trim($arFields["NAME"]);
		if(strlen($arFields["NAME"]) && !strlen($arFields["LAST_NAME"]) && !strlen($arFields["SECOND_NAME"])){
			$arName = explode(' ', $arFields["NAME"]);
			if($arName){
				$arFields["NAME"] = "";
				$arFields["SECOND_NAME"] = "";
				foreach($arName as $i => $name){
					if(!$i){
						$arFields["LAST_NAME"] = $name;
					}
					else{
						if(!strlen($arFields["NAME"])){
							$arFields["NAME"] = $name;
						}
						elseif(!strlen($arFields["SECOND_NAME"])){
							$arFields["SECOND_NAME"] = $name;
						}
					}
				}
			}
		}
		if($_REQUEST["confirmorder"]=="Y"  && !strlen($arFields["SECOND_NAME"]) && $_REQUEST["ORDER_PROP_1"]){
			$arNames = explode(' ', $_REQUEST["ORDER_PROP_1"]);
			if($arNames[2]){
				$arFields["SECOND_NAME"]=$arNames[2];
			}
		}
		if(strlen($arFields["EMAIL"])){
			$bEmailError = false;

			$rsUser = CUser::GetList($by = "ID", $order = "ASC", array("=EMAIL" => $arFields["EMAIL"], "!ID" => $arFields["ID"]));
			if(!$bEmailError = intval($rsUser->SelectedRowsCount()) > 0){
				$rsUser = CUser::GetList($by = "ID", $order = "ASC", array("LOGIN" => $arFields["EMAIL"], "!ID" => $arFields["ID"]));
				$bEmailError = intval($rsUser->SelectedRowsCount()) > 0;
			}

			if($bEmailError){
				global $APPLICATION;
				$APPLICATION->throwException(GetMessage('EMAIL_IS_ALREADY_EXISTS', array('#EMAIL#' => $arFields["EMAIL"])));
				return false;
			}
			else{
				// !admin
				global $USER;
				if(!$USER->IsAdmin()){
					$arFields["LOGIN"] = $arFields["EMAIL"];
				}
			}
		}
		return $arFields;
	}

	function GetYearsItems($iblock_id){
		$arYears=array();
		$rsItems=CIBlockElement::GetList(array(), array("IBLOCK_ID" => $iblock_id, "ACTIVE" => "Y", "GLOBAL_ACTIVE" => "Y"), false, false, array("ID", "DATE_ACTIVE_FROM"));
		while($arItem=$rsItems->Fetch()){
			if($arItem["DATE_ACTIVE_FROM"]){
				$date = explode(' ', $arItem["DATE_ACTIVE_FROM"]);
				$date = $date[0];
				$date = explode('.', $date);
				$arYears[$date[2]] = $date[2];
			}
		}
		return $arYears;
	}

	function removeDirectory($dir){
		if($objs = glob($dir."/*")){
			foreach($objs as $obj){
				if(is_dir($obj)){
					self::removeDirectory($obj);
				}
				else{
					if(!unlink($obj)){
						if(chmod($obj, 0777)){
							unlink($obj);
						}
					}
				}
			}
		}
		if(!rmdir($dir)){
			if(chmod($dir, 0777)){
				rmdir($dir);
			}
		}
	}

    function inputClean($input, $sql = false){
       /* $input = htmlentities($input, ENT_QUOTES, LANG_CHARSET);
        if(get_magic_quotes_gpc ())
        {
            $input = stripslashes ($input);
        }
        if ($sql)
        {
            $input = mysql_real_escape_string ($input);
        }
        $input = strip_tags($input);
        $input=str_replace ("\n"," ", $input);
        $input=str_replace ("\r","", $input); */
        return $input;
    }


	function correctInstall(){
		if(COption::GetOptionString(self::moduleID, "WIZARD_DEMO_INSTALLED") == "Y"){
			if(CModule::IncludeModule("main")){
				require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/classes/general/wizard.php");
				@set_time_limit(0);
				if(!CWizardUtil::DeleteWizard(self::wizardID)){if(!DeleteDirFilesEx($_SERVER["DOCUMENT_ROOT"]."/bitrix/wizards/".self::partnerName."/".self::solutionName."/")){self::removeDirectory($_SERVER["DOCUMENT_ROOT"]."/bitrix/wizards/".self::partnerName."/".self::solutionName."/");}}
				UnRegisterModuleDependences("main", "OnBeforeProlog", self::moduleID, get_class(), "correctInstall");
				COption::SetOptionString(self::moduleID, "WIZARD_DEMO_INSTALLED", "N");
			}
		}
	}

	function newAction($action = "unknown"){
		$socket = fsockopen('bi.aspro.ru', 80, $errno, $errstr, 10);
		if($socket){
			if(CModule::IncludeModule("main")){
				global $APPLICATION;
				require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/update_client.php");
				$errorMessage = "";
				$serverIP = ($_SERVER["HTTP_X_REAL_IP"] ? $_SERVER["HTTP_X_REAL_IP"] : $_SERVER["SERVER_ADDR"]);
				$arUpdateList = CUpdateClient::GetUpdatesList($errorMessage, "ru", "Y");
				if(array_key_exists("CLIENT", $arUpdateList) && $arUpdateList["CLIENT"][0]["@"]["LICENSE"]){
					$edition = $arUpdateList["CLIENT"][0]["@"]["LICENSE"];
				}
				else{
					$edition = "UNKNOWN";
				}
				$data = json_encode(
					array(
						"client" => "aspro",
						"install_date" => date("Y-m-d H:i:s"),
						"solution_code" => self::moduleID,
						"ip" => $serverIP,
						"http_host" => $_SERVER["HTTP_HOST"],
						"bitrix_version" => SM_VERSION,
						"bitrix_edition" => $APPLICATION->ConvertCharset($edition, SITE_CHARSET, "utf-8"),
						"bitrix_key_hash" => md5(CUpdateClient::GetLicenseKey()),
						"site_name" => $APPLICATION->ConvertCharset(COption::GetOptionString("main", "site_name"), SITE_CHARSET, "utf-8"),
						"site_url" => $APPLICATION->ConvertCharset(COption::GetOptionString("main", "server_name"), SITE_CHARSET, "utf-8"),
						"email_default" => $APPLICATION->ConvertCharset(COption::GetOptionString("main", "email_from"), SITE_CHARSET, "utf-8"),
						"action" => $action,
					)
				);
				fwrite($socket, "POST /rest/bitrix/installs HTTP/1.1\r\n");
				fwrite($socket, "Host: bi.aspro.ru\r\n");
				fwrite($socket, "Content-type: application/x-www-form-urlencoded\r\n");
				fwrite($socket, "Content-length:".strlen($data)."\r\n");
				fwrite($socket, "Accept:*/*\r\n");
				fwrite($socket, "User-agent:Bitrix Installer\r\n");
				fwrite($socket, "Connection:Close\r\n");
				fwrite($socket, "\r\n");
				fwrite($socket, "$data\r\n");
				fwrite($socket, "\r\n");
				$answer = '';
				while(!feof($socket)){
					$answer.= fgets($socket, 4096);
				}
				fclose($socket);
			}
		}
	}

	function DoIBlockAfterSave($arg1, $arg2 = false){
		$ELEMENT_ID = false;
		$IBLOCK_ID = false;
		$OFFERS_IBLOCK_ID = false;
		$OFFERS_PROPERTY_ID = false;
		if (CModule::IncludeModule('currency'))
			$strDefaultCurrency = CCurrency::GetBaseCurrency();

		//Check for catalog event
		if(is_array($arg2) && $arg2["PRODUCT_ID"] > 0){
			//Get iblock element
			$rsPriceElement = CIBlockElement::GetList(
				array(),
				array(
					"ID" => $arg2["PRODUCT_ID"],
				),
				false,
				false,
				array("ID", "IBLOCK_ID")
			);
			if($arPriceElement = $rsPriceElement->Fetch()){
				$arCatalog = CCatalog::GetByID($arPriceElement["IBLOCK_ID"]);
				if(is_array($arCatalog)){
					//Check if it is offers iblock
					if($arCatalog["OFFERS"] == "Y"){
						//Find product element
						$rsElement = CIBlockElement::GetProperty(
							$arPriceElement["IBLOCK_ID"],
							$arPriceElement["ID"],
							"sort",
							"asc",
							array("ID" => $arCatalog["SKU_PROPERTY_ID"])
						);
						$arElement = $rsElement->Fetch();
						if($arElement && $arElement["VALUE"] > 0)
						{
							$ELEMENT_ID = $arElement["VALUE"];
							$IBLOCK_ID = $arCatalog["PRODUCT_IBLOCK_ID"];
							$OFFERS_IBLOCK_ID = $arCatalog["IBLOCK_ID"];
							$OFFERS_PROPERTY_ID = $arCatalog["SKU_PROPERTY_ID"];
						}
					}
					//or iblock which has offers
					elseif($arCatalog["OFFERS_IBLOCK_ID"] > 0){
						$ELEMENT_ID = $arPriceElement["ID"];
						$IBLOCK_ID = $arPriceElement["IBLOCK_ID"];
						$OFFERS_IBLOCK_ID = $arCatalog["OFFERS_IBLOCK_ID"];
						$OFFERS_PROPERTY_ID = $arCatalog["OFFERS_PROPERTY_ID"];
					}
					//or it's regular catalog
					else{
						$ELEMENT_ID = $arPriceElement["ID"];
						$IBLOCK_ID = $arPriceElement["IBLOCK_ID"];
						$OFFERS_IBLOCK_ID = false;
						$OFFERS_PROPERTY_ID = false;
					}
				}
			}
		}
		//Check for iblock event
		elseif(is_array($arg1) && $arg1["ID"] > 0 && $arg1["IBLOCK_ID"] > 0){
			//Check if iblock has offers
			$arOffers = CIBlockPriceTools::GetOffersIBlock($arg1["IBLOCK_ID"]);
			if(is_array($arOffers)){
				$ELEMENT_ID = $arg1["ID"];
				$IBLOCK_ID = $arg1["IBLOCK_ID"];
				$OFFERS_IBLOCK_ID = $arOffers["OFFERS_IBLOCK_ID"];
				$OFFERS_PROPERTY_ID = $arOffers["OFFERS_PROPERTY_ID"];
			}
		}

		if($ELEMENT_ID){
			static $arPropCache = array();
			static $arPropArray=array();

			if(!array_key_exists($IBLOCK_ID, $arPropCache)){
				//Check for MINIMAL_PRICE property
				$rsProperty = CIBlockProperty::GetByID("MINIMUM_PRICE", $IBLOCK_ID);
				$arProperty = $rsProperty->Fetch();
				if($arProperty){
					$arPropCache[$IBLOCK_ID] = $arProperty["ID"];
					$arPropArray["MINIMUM_PRICE"]=$arProperty["ID"];
				}else{
					$arPropCache[$IBLOCK_ID] = false;
				}
				$rsProperty = CIBlockProperty::GetByID("IN_STOCK", $IBLOCK_ID);
				$arProperty = $rsProperty->Fetch();
				if($arProperty){
					$arPropCache[$IBLOCK_ID] = $arProperty["ID"];
					$arPropArray["IN_STOCK"]=$arProperty["ID"];
				}else{
					if(!$arPropCache[$IBLOCK_ID])
						$arPropCache[$IBLOCK_ID] = false;
				}
			}

			if($arPropCache[$IBLOCK_ID]){
				//Compose elements filter
				if($OFFERS_IBLOCK_ID){
					$rsOffers = CIBlockElement::GetList(
						array(),
						array(
							"IBLOCK_ID" => $OFFERS_IBLOCK_ID,
							"PROPERTY_".$OFFERS_PROPERTY_ID => $ELEMENT_ID,
							"ACTIVE" => "Y"
						),
						false,
						false,
						array("ID")
					);
					while($arOffer = $rsOffers->Fetch())
						$arProductID[] = $arOffer["ID"];

					if (!is_array($arProductID))
						$arProductID = array($ELEMENT_ID);
				}
				else
					$arProductID = array($ELEMENT_ID);

				if($arPropArray["MINIMUM_PRICE"]){
					$minPrice = false;
					$maxPrice = false;
					//Get prices
					$rsPrices = CPrice::GetList(
						array(),
						array(
							"PRODUCT_ID" => $arProductID,
						)
					);
					while($arPrice = $rsPrices->Fetch()){
						if (CModule::IncludeModule('currency') && $strDefaultCurrency != $arPrice['CURRENCY'])
							$arPrice["PRICE"] = CCurrencyRates::ConvertCurrency($arPrice["PRICE"], $arPrice["CURRENCY"], $strDefaultCurrency);

						$PRICE = $arPrice["PRICE"];

						if($minPrice === false || $minPrice > $PRICE)
							$minPrice = $PRICE;

						if($maxPrice === false || $maxPrice < $PRICE)
							$maxPrice = $PRICE;
					}

					//Save found minimal price into property
					if($minPrice !== false){
						CIBlockElement::SetPropertyValuesEx(
							$ELEMENT_ID,
							$IBLOCK_ID,
							array(
								"MINIMUM_PRICE" => $minPrice,
								"MAXIMUM_PRICE" => $maxPrice,
							)
						);
					}
				}
				if($arPropArray["IN_STOCK"]){
					$quantity=0;
					$rsQuantity = CCatalogProduct::GetList(
				        array("QUANTITY" => "DESC"),
				        array("ID" => $arProductID),
				        false,
				        false,
				        array("QUANTITY")
				    );
					while($arQuantity = $rsQuantity->Fetch()){
						if($arQuantity["QUANTITY"]>0)
							$quantity+=$arQuantity["QUANTITY"];
					}
					if($quantity>0){
						$rsPropStock = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>$IBLOCK_ID, "CODE"=>"IN_STOCK"));
						if($arPropStock=$rsPropStock->Fetch()){
							$idProp=$arPropStock["ID"];
						}

						CIBlockElement::SetPropertyValuesEx(
							$ELEMENT_ID,
							$IBLOCK_ID,
							array(
								"IN_STOCK" => $idProp,
							)
						);
					}else{
						CIBlockElement::SetPropertyValuesEx(
							$ELEMENT_ID,
							$IBLOCK_ID,
							array(
								"IN_STOCK" => "",
							)
						);
					}
					if(class_exists('\Bitrix\Iblock\PropertyIndex\Manager')){
						\Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($IBLOCK_ID, $ELEMENT_ID);
					}
				}
			}
		}
	}

	function setStockProduct($ID, $arFields){
		//Get iblock element
		$rsPriceElement = CIBlockElement::GetList(
			array(),
			array(
				"ID" => $ID,
			),
			false,
			false,
			array("ID", "IBLOCK_ID")
		);
		if($arPriceElement = $rsPriceElement->Fetch()){
			$arCatalog = CCatalog::GetByID($arPriceElement["IBLOCK_ID"]);
			if(is_array($arCatalog)){
				//Check if it is offers iblock
				if($arCatalog["OFFERS"] == "Y"){
					//Find product element
					$rsElement = CIBlockElement::GetProperty(
						$arPriceElement["IBLOCK_ID"],
						$arPriceElement["ID"],
						"sort",
						"asc",
						array("ID" => $arCatalog["SKU_PROPERTY_ID"])
					);
					$arElement = $rsElement->Fetch();
					if($arElement && $arElement["VALUE"] > 0)
					{
						$ELEMENT_ID = $arElement["VALUE"];
						$IBLOCK_ID = $arCatalog["PRODUCT_IBLOCK_ID"];
						$OFFERS_IBLOCK_ID = $arCatalog["IBLOCK_ID"];
						$OFFERS_PROPERTY_ID = $arCatalog["SKU_PROPERTY_ID"];
					}
				}
				//or iblock which has offers
				elseif($arCatalog["OFFERS_IBLOCK_ID"] > 0){
					$ELEMENT_ID = $arPriceElement["ID"];
					$IBLOCK_ID = $arPriceElement["IBLOCK_ID"];
					$OFFERS_IBLOCK_ID = $arCatalog["OFFERS_IBLOCK_ID"];
					$OFFERS_PROPERTY_ID = $arCatalog["OFFERS_PROPERTY_ID"];
				}
				//or it's regular catalog
				else{
					$ELEMENT_ID = $arPriceElement["ID"];
					$IBLOCK_ID = $arPriceElement["IBLOCK_ID"];
					$OFFERS_IBLOCK_ID = false;
					$OFFERS_PROPERTY_ID = false;
				}
			}
		}
		if($ELEMENT_ID){
			static $arPropCache = array();
			static $arPropArray=array();

			if(!array_key_exists($IBLOCK_ID, $arPropCache)){
				//Check for IN_STOCK property
				$rsProperty = CIBlockProperty::GetByID("IN_STOCK", $IBLOCK_ID);
				$arProperty = $rsProperty->Fetch();
				if($arProperty){
					$arPropCache[$IBLOCK_ID] = $arProperty["ID"];
					$arPropArray["IN_STOCK"]=$arProperty["ID"];
				}else{
					if(!$arPropCache[$IBLOCK_ID])
						$arPropCache[$IBLOCK_ID] = false;
				}
			}
			if($arPropCache[$IBLOCK_ID]){
				//Compose elements filter
				if($OFFERS_IBLOCK_ID){
					$rsOffers = CIBlockElement::GetList(
						array(),
						array(
							"IBLOCK_ID" => $OFFERS_IBLOCK_ID,
							"PROPERTY_".$OFFERS_PROPERTY_ID => $ELEMENT_ID,
							"ACTIVE" => "Y"
						),
						false,
						false,
						array("ID")
					);
					while($arOffer = $rsOffers->Fetch())
						$arProductID[] = $arOffer["ID"];

					if (!is_array($arProductID))
						$arProductID = array($ELEMENT_ID);
				}
				else
					$arProductID = array($ELEMENT_ID);
				if($arPropArray["IN_STOCK"]){
					$quantity=0;
					$rsQuantity = CCatalogProduct::GetList(
				        array("QUANTITY" => "DESC"),
				        array("ID" => $arProductID),
				        false,
				        false,
				        array("QUANTITY")
				    );
					while($arQuantity = $rsQuantity->Fetch()){
						if($arQuantity["QUANTITY"]>0)
							$quantity+=$arQuantity["QUANTITY"];
					}
					if($quantity>0){
						$rsPropStock = CIBlockPropertyEnum::GetList(Array("DEF"=>"DESC", "SORT"=>"ASC"), Array("IBLOCK_ID"=>$IBLOCK_ID, "CODE"=>"IN_STOCK"));
						if($arPropStock=$rsPropStock->Fetch()){
							$idProp=$arPropStock["ID"];
						}

						CIBlockElement::SetPropertyValuesEx(
							$ELEMENT_ID,
							$IBLOCK_ID,
							array(
								"IN_STOCK" => $idProp,
							)
						);
					}else{
						CIBlockElement::SetPropertyValuesEx(
							$ELEMENT_ID,
							$IBLOCK_ID,
							array(
								"IN_STOCK" => "",
							)
						);
					}
					if(class_exists('\Bitrix\Iblock\PropertyIndex\Manager')){
						\Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($IBLOCK_ID, $ELEMENT_ID);
					}
				}
			}
		}
	}

	function prepareShopListArray($arShops){
		$arFormatShops=array();

		$arPlacemarks = array();
		if(is_array($arShops)){
			foreach($arShops as $i => $arShop){
				if(isset($arShop['IBLOCK_ID'])){
					$arShop['TITLE'] = ($arShop['FIELDS']['NAME'] ? $arShop['NAME'] : '');
					$imageID = (($arShop['FIELDS']['PREVIEW_PICTURE'] && $arShop["PREVIEW_PICTURE"]['ID']) ? $arShop["PREVIEW_PICTURE"]['ID'] : (($arShop['FIELD_CODE']['DETAIL_PICTURE'] && $arShop["DETAIL_PICTURE"]['ID']) ? $arShop["DETAIL_PICTURE"]['ID'] : false));
					$arShop['IMAGE'] = ($imageID ? CFile::ResizeImageGet($imageID, array('width' => 100, 'height' => 69), BX_RESIZE_IMAGE_EXACT) : '');
					$arShop['ADDRESS'] = $arShop['DISPLAY_PROPERTIES']['ADDRESS']['VALUE'];
					$arShop['ADDRESS'] = $arShop['TITLE'].((strlen($arShop['TITLE']) && strlen($arShop['ADDRESS'])) ? ', ' : '').$arShop['ADDRESS'];
					$arShop['PHONE'] = $arShop['DISPLAY_PROPERTIES']['PHONE']['VALUE'];
					$arShop['EMAIL'] = $arShop['DISPLAY_PROPERTIES']['EMAIL']['VALUE'];
					if(strtolower($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TYPE']) == 'html'){
						$arShop['SCHEDULE'] = htmlspecialchars_decode($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TEXT']);
					}
					else{
						$arShop['SCHEDULE'] = nl2br($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TEXT']);
					}
					$arShop['URL'] = $arShop['DETAIL_PAGE_URL'];
					$arShop['METRO_PLACEMARK_HTML'] = '';
					if($arShop['METRO'] = $arShop['DISPLAY_PROPERTIES']['METRO']['VALUE']){
						if(!is_array($arShop['METRO'])){
							$arShop['METRO'] = array($arShop['METRO']);
						}
						foreach($arShop['METRO'] as $metro){
							$arShop['METRO_PLACEMARK_HTML'] .= '<div class="metro"><i></i>'.$metro.'</div>';
						}
					}
					$arShop['DESCRIPTION'] = $arShop['DETAIL_TEXT'];
					$arShop['GPS_S'] = false;
					$arShop['GPS_N'] = false;
					if($arStoreMap = explode(',', $arShop['DISPLAY_PROPERTIES']['MAP']['VALUE'])){
						$arShop['GPS_S'] = $arStoreMap[0];
						$arShop['GPS_N'] = $arStoreMap[1];
					}

					if($arShop['GPS_S'] && $arShop['GPS_N']){
						$mapLAT += $arShop['GPS_S'];
						$mapLON += $arShop['GPS_N'];
						$arPlacemarks[] = array(
							"ID" => $arShop["ID"],
							"LAT" => $arShop['GPS_S'],
							"LON" => $arShop['GPS_N'],
							"TEXT" => $arShop["TITLE"],
							"HTML" => '<div class="title">'.(strlen($arShop["URL"]) ? '<a href="'.$arShop["URL"].'">' : '').$arShop["ADDRESS"].(strlen($arShop["URL"]) ? '</a>' : '').'</div><div class="info-content">'.($arShop['METRO'] ? $arShop['METRO_PLACEMARK_HTML'] : '').(strlen($arShop['SCHEDULE']) ? '<div class="schedule">'.$arShop['SCHEDULE'].'</div>' : '').(strlen($arShop['PHONE']) ? '<div class="phone"><a rel="nofollow" href="tel:'.$arShop["PHONE"].'">'.$arShop['PHONE'].'</a></div>' : '').(strlen($arShop['EMAIL']) ? '<div class="email"><a rel="nofollow" href="mailto:'.$arShop['EMAIL'].'">'.$arShop['EMAIL'].'</a></div>' : '').'</div>'.(strlen($arShop['URL']) ? '<a rel="nofollow" class="button" href="'.$arShop["URL"].'"><span>'.GetMessage('DETAIL').'</span></a>' : '')
						);
					}
				}
				else{
					if($arShop['GPS_S'] && $arShop['GPS_N']){
						$mapLAT += $arShop['GPS_S'];
						$mapLON += $arShop['GPS_N'];
						$arPlacemarks[] = array(
							"ID" => $arShop["ID"],
							"LON" => $arShop['GPS_S'],
							"LAT" => $arShop['GPS_N'],
							"TEXT" => $arShop["TITLE"],
							"HTML" => '<div class="title">'.(strlen($arShop["URL"]) ? '<a href="'.$arShop["URL"].'">' : '').$arShop["ADDRESS"].(strlen($arShop["URL"]) ? '</a>' : '').'</div><div class="info-content">'.($arShop['METRO'] ? $arShop['METRO_PLACEMARK_HTML'] : '').(strlen($arShop['SCHEDULE']) ? '<div class="schedule">'.$arShop['SCHEDULE'].'</div>' : '').(strlen($arShop['PHONE']) ? '<div class="phone"><a rel="nofollow" href="tel:'.$arShop["PHONE"].'">'.$arShop['PHONE'].'</a></div>' : '').(strlen($arShop['EMAIL']) ? '<div class="email"><a rel="nofollow" href="mailto:'.$arShop['EMAIL'].'">'.$arShop['EMAIL'].'</a></div>' : '').'</div>'.(strlen($arShop['URL']) ? '<a rel="nofollow" class="button" href="'.$arShop["URL"].'"><span>'.GetMessage('DETAIL').'</span></a>' : '')
						);
					}
				}
				$arShops[$i] = $arShop;
			}
		}
		$arFormatShops["SHOPS"]=$arShops;
		$arFormatShops["PLACEMARKS"]=$arPlacemarks;
		$arFormatShops["POINTS"]=array(
			"LAT" => $mapLAT,
			"LON" => $mapLON,
		);

		return $arFormatShops;
	}

	function prepareShopDetailArray($arShop, $arParams){
		$mapLAT = $mapLON = 0;
		$arPlacemarks = array();
		$arPhotos = array();
		$arFormatShops=array();

		if(is_array($arShop)){
			if(isset($arShop['IBLOCK_ID'])){
				$arShop['LIST_URL'] = $arShop['LIST_PAGE_URL'];
				$arShop['TITLE'] = (in_array('NAME', $arParams['FIELD_CODE']) ? $arShop['NAME'] : '');
				$arShop['ADDRESS'] = $arShop['DISPLAY_PROPERTIES']['ADDRESS']['VALUE'];
				$arShop['ADDRESS'] = $arShop['TITLE'].((strlen($arShop['TITLE']) && strlen($arShop['ADDRESS'])) ? ', ' : '').$arShop['ADDRESS'];
				$arShop['PHONE'] = $arShop['DISPLAY_PROPERTIES']['PHONE']['VALUE'];
				$arShop['EMAIL'] = $arShop['DISPLAY_PROPERTIES']['EMAIL']['VALUE'];
				if(strtolower($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TYPE']) == 'html'){
					$arShop['SCHEDULE'] = htmlspecialchars_decode($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TEXT']);
				}
				else{
					$arShop['SCHEDULE'] = nl2br($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TEXT']);
				}
				$arShop['URL'] = $arShop['DETAIL_PAGE_URL'];
				$arShop['METRO_PLACEMARK_HTML'] = '';
				if($arShop['METRO'] = $arShop['DISPLAY_PROPERTIES']['METRO']['VALUE']){
					if(!is_array($arShop['METRO'])){
						$arShop['METRO'] = array($arShop['METRO']);
					}
					foreach($arShop['METRO'] as $metro){
						$arShop['METRO_PLACEMARK_HTML'] .= '<div class="metro"><i></i>'.$metro.'</div>';
					}
				}
				$arShop['GPS_S'] = false;
				$arShop['GPS_N'] = false;
				if($arStoreMap = explode(',', $arShop['DISPLAY_PROPERTIES']['MAP']['VALUE'])){
					$arShop['GPS_S'] = $arStoreMap[0];
					$arShop['GPS_N'] = $arStoreMap[1];
				}

				if($arShop['GPS_S'] && $arShop['GPS_N']){
					$mapLAT += $arShop['GPS_S'];
					$mapLON += $arShop['GPS_N'];
					$arPlacemarks[] = array(
						"ID" => $arShop["ID"],
						"LAT" => $arShop['GPS_S'],
						"LON" => $arShop['GPS_N'],
						"TEXT" => $arShop["TITLE"],
						"HTML" => '<div class="title">'.(strlen($arShop["URL"]) ? '<a href="'.$arShop["URL"].'">' : '').$arShop["ADDRESS"].(strlen($arShop["URL"]) ? '</a>' : '').'</div><div class="info-content">'.($arShop['METRO'] ? $arShop['METRO_PLACEMARK_HTML'] : '').(strlen($arShop['SCHEDULE']) ? '<div class="schedule">'.$arShop['SCHEDULE'].'</div>' : '').(strlen($arShop['PHONE']) ? '<div class="phone"><a rel="nofollow" href="tel:'.$arShop["PHONE"].'">'.$arShop['PHONE'].'</a></div>' : '').(strlen($arShop['EMAIL']) ? '<div class="email"><a rel="nofollow" href="mailto:'.$arShop['EMAIL'].'">'.$arShop['EMAIL'].'</a></div>' : '').'</div>'.(strlen($arShop['URL']) ? '<a rel="nofollow" class="button" href="'.$arShop["URL"].'"><span>'.GetMessage('DETAIL').'</span></a>' : '')
					);
				}
			}
			else{
				$arShop["TITLE"] = htmlspecialchars_decode($arShop["TITLE"]);
				$arShop["ADDRESS"] = htmlspecialchars_decode($arShop["ADDRESS"]);
				$arShop["ADDRESS"] = (strlen($arShop["TITLE"]) ? $arShop["TITLE"].', ' : '').$arShop["ADDRESS"];
				$arShop["DESCRIPTION"] = htmlspecialchars_decode($arShop['DESCRIPTION']);
				$arShop['SCHEDULE'] = htmlspecialchars_decode($arShop['SCHEDULE']);

				if($arShop['GPS_S'] && $arShop['GPS_N']){
					$mapLAT += $arShop['GPS_N'];
					$mapLON += $arShop['GPS_S'];
					$arPlacemarks[] = array(
						"ID" => $arShop["ID"],
						"LON" => $arShop['GPS_S'],
						"LAT" => $arShop['GPS_N'],
						"TEXT" => $arShop["TITLE"],
						"HTML" => '<div class="title">'.(strlen($arShop["URL"]) ? '<a href="'.$arShop["URL"].'">' : '').$arShop["ADDRESS"].(strlen($arShop["URL"]) ? '</a>' : '').'</div><div class="info-content">'.($arShop['METRO'] ? $arShop['METRO_PLACEMARK_HTML'] : '').(strlen($arShop['SCHEDULE']) ? '<div class="schedule">'.$arShop['SCHEDULE'].'</div>' : '').(strlen($arShop['PHONE']) ? '<div class="phone"><a rel="nofollow" href="tel:'.$arShop["PHONE"].'">'.$arShop['PHONE'].'</a></div>' : '').(strlen($arShop['EMAIL']) ? '<div class="email"><a rel="nofollow" href="mailto:'.$arShop['EMAIL'].'">'.$arShop['EMAIL'].'</a></div>' : '').'</div>'.(strlen($arShop['URL']) ? '<a rel="nofollow" class="button" href="'.$arShop["URL"].'"><span>'.GetMessage('DETAIL').'</span></a>' : '')
					);
				}
			}
		}
		$arFormatShops["SHOP"]=$arShop;
		$arFormatShops["PLACEMARKS"]=$arPlacemarks;
		$arFormatShops["POINTS"]=array(
			"LAT" => $mapLAT,
			"LON" => $mapLON,
		);

		return $arFormatShops;

	}

	function drawShopsList($arShops, $arParams, $showMap="Y"){
		global $APPLICATION;
		$mapLAT = $mapLON = 0;
		$arPlacemarks = array();

		if(is_array($arShops)){
			foreach($arShops as $i => $arShop){
				if(isset($arShop['IBLOCK_ID'])){
					$arShop['TITLE'] = (in_array('NAME', $arParams['FIELD_CODE']) ? $arShop['NAME'] : '');
					$imageID = ((in_array('PREVIEW_PICTURE', $arParams['FIELD_CODE']) && $arShop["PREVIEW_PICTURE"]['ID']) ? $arShop["PREVIEW_PICTURE"]['ID'] : ((in_array('DETAIL_PICTURE', $arParams['FIELD_CODE']) && $arShop["DETAIL_PICTURE"]['ID']) ? $arShop["DETAIL_PICTURE"]['ID'] : false));
					$arShop['IMAGE'] = ($imageID ? CFile::ResizeImageGet($imageID, array('width' => 100, 'height' => 69), BX_RESIZE_IMAGE_EXACT) : '');
					$arShop['ADDRESS'] = $arShop['DISPLAY_PROPERTIES']['ADDRESS']['VALUE'];
					$arShop['ADDRESS'] = $arShop['TITLE'].((strlen($arShop['TITLE']) && strlen($arShop['ADDRESS'])) ? ', ' : '').$arShop['ADDRESS'];
					$arShop['PHONE'] = $arShop['DISPLAY_PROPERTIES']['PHONE']['VALUE'];
					$arShop['EMAIL'] = $arShop['DISPLAY_PROPERTIES']['EMAIL']['VALUE'];
					if(strtolower($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TYPE']) == 'html'){
						$arShop['SCHEDULE'] = htmlspecialchars_decode($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TEXT']);
					}
					else{
						$arShop['SCHEDULE'] = nl2br($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TEXT']);
					}
					$arShop['URL'] = $arShop['DETAIL_PAGE_URL'];
					$arShop['METRO_PLACEMARK_HTML'] = '';
					if($arShop['METRO'] = $arShop['DISPLAY_PROPERTIES']['METRO']['VALUE']){
						if(!is_array($arShop['METRO'])){
							$arShop['METRO'] = array($arShop['METRO']);
						}
						foreach($arShop['METRO'] as $metro){
							$arShop['METRO_PLACEMARK_HTML'] .= '<div class="metro"><i></i>'.$metro.'</div>';
						}
					}
					$arShop['DESCRIPTION'] = $arShop['DETAIL_TEXT'];
					$arShop['GPS_S'] = false;
					$arShop['GPS_N'] = false;
					if($arStoreMap = explode(',', $arShop['DISPLAY_PROPERTIES']['MAP']['VALUE'])){
						$arShop['GPS_S'] = $arStoreMap[0];
						$arShop['GPS_N'] = $arStoreMap[1];
					}

					if($arShop['GPS_S'] && $arShop['GPS_N']){
						$mapLAT += $arShop['GPS_S'];
						$mapLON += $arShop['GPS_N'];
						$arPlacemarks[] = array(
							"ID" => $arShop["ID"],
							"LAT" => $arShop['GPS_S'],
							"LON" => $arShop['GPS_N'],
							"TEXT" => $arShop["TITLE"],
							"HTML" => '<div class="title">'.(strlen($arShop["URL"]) ? '<a href="'.$arShop["URL"].'">' : '').$arShop["ADDRESS"].(strlen($arShop["URL"]) ? '</a>' : '').'</div><div class="info-content">'.($arShop['METRO'] ? $arShop['METRO_PLACEMARK_HTML'] : '').(strlen($arShop['SCHEDULE']) ? '<div class="schedule">'.$arShop['SCHEDULE'].'</div>' : '').(strlen($arShop['PHONE']) ? '<div class="phone"><a rel="nofollow" href="tel:'.$arShop["PHONE"].'">'.$arShop['PHONE'].'</a></div>' : '').(strlen($arShop['EMAIL']) ? '<div class="email"><a rel="nofollow" href="mailto:'.$arShop['EMAIL'].'">'.$arShop['EMAIL'].'</a></div>' : '').'</div>'.(strlen($arShop['URL']) ? '<a rel="nofollow" class="button" href="'.$arShop["URL"].'"><span>'.GetMessage('DETAIL').'</span></a>' : '')
						);
					}
				}
				else{
					if($arShop['GPS_S'] && $arShop['GPS_N']){
						$mapLAT += $arShop['GPS_N'];
						$mapLON += $arShop['GPS_S'];
						$arPlacemarks[] = array(
							"ID" => $arShop["ID"],
							"LON" => $arShop['GPS_S'],
							"LAT" => $arShop['GPS_N'],
							"TEXT" => $arShop["TITLE"],
							"HTML" => '<div class="title">'.(strlen($arShop["URL"]) ? '<a href="'.$arShop["URL"].'">' : '').$arShop["ADDRESS"].(strlen($arShop["URL"]) ? '</a>' : '').'</div><div class="info-content">'.($arShop['METRO'] ? $arShop['METRO_PLACEMARK_HTML'] : '').(strlen($arShop['SCHEDULE']) ? '<div class="schedule">'.$arShop['SCHEDULE'].'</div>' : '').(strlen($arShop['PHONE']) ? '<div class="phone"><a rel="nofollow" href="tel:'.$arShop["PHONE"].'">'.$arShop['PHONE'].'</a></div>' : '').(strlen($arShop['EMAIL']) ? '<div class="email"><a rel="nofollow" href="mailto:'.$arShop['EMAIL'].'">'.$arShop['EMAIL'].'</a></div>' : '').'</div>'.(strlen($arShop['URL']) ? '<a rel="nofollow" class="button" href="'.$arShop["URL"].'"><span>'.GetMessage('DETAIL').'</span></a>' : '')
						);
					}
				}
				$arShops[$i] = $arShop;
			}
			?>
			<?if($arShops):?>
				<?if(abs($mapLAT) > 0 && abs($mapLON) > 0 && $showMap=="Y"):?>
					<?
					$mapLAT = floatval($mapLAT / count($arShops));
					$mapLON = floatval($mapLON / count($arShops));
					?>
					<div class="contacts_map">
						<?$APPLICATION->IncludeComponent(
							"bitrix:map.google.view",
							"map",
							array(
								"INIT_MAP_TYPE" => "ROADMAP",
								"MAP_DATA" => serialize(array("google_lat" => $mapLAT, "google_lon" => $mapLON, "google_scale" => 15, "PLACEMARKS" => $arPlacemarks)),
								"MAP_WIDTH" => "100%",
								"MAP_HEIGHT" => "400",
								"CONTROLS" => array(
								),
								"OPTIONS" => array(
									0 => "ENABLE_DBLCLICK_ZOOM",
									1 => "ENABLE_DRAGGING",
								),
								"MAP_ID" => "",
								"ZOOM_BLOCK" => array(
									"POSITION" => "right center",
								),
								"COMPONENT_TEMPLATE" => "map",
								"API_KEY" => $arParams["GOOGLE_API_KEY"],
								"COMPOSITE_FRAME_MODE" => "A",
								"COMPOSITE_FRAME_TYPE" => "AUTO"
							),
							false, array("HIDE_ICONS" =>"Y")
						);?>
					</div>
				<?endif;?>
				<div class="wrapper_inner">
					<div class="shops list">
						<div class="items">
							<?foreach($arShops as $arShop):?>
								<div class="item <?=(strlen($arShop["IMAGE"]["src"]) ? '' : 'wi')?>" data-ID="<?=$arShop['ID']?>">
									<div class="image">
										<?if(strlen($arShop["IMAGE"]["src"])):?>
											<?if(strlen($arShop['URL'])):?>
												<a href="<?=$arShop['URL']?>"><img src="<?=$arShop["IMAGE"]["src"]?>" alt="<?=$arShop["ADDRESS"]?>" title="<?=$arShop["ADDRESS"]?>" /></a>
											<?else:?>
												<img src="<?=$arShop["IMAGE"]["src"]?>" alt="<?=$arShop["ADDRESS"]?>" title="<?=$arShop["ADDRESS"]?>" />
											<?endif;?>
										<?endif;?>
									</div>
									<div class="rubber">
										<div class="title_metro">
											<?if(strlen($arShop["ADDRESS"])):?>
												<?if(strlen($arShop['URL'])):?>
													<a href="<?=$arShop['URL']?>"><div class="title"><?=$arShop["ADDRESS"]?></div></a>
												<?else:?>
													<div class="title"><?=$arShop["ADDRESS"]?></div>
												<?endif;?>
											<?endif;?>
											<?if($arShop["METRO"]):?>
												<?foreach($arShop['METRO'] as $metro):?>
													<div class="metro"><i></i><?=$metro?></div>
												<?endforeach;?>
											<?endif;?>
										</div>
										<div class="schedule_phone_email">
											<div class="schedule"><?=$arShop["SCHEDULE"]?></div>
											<div class="phone_email">
												<?if(strlen($arShop["PHONE"])):?>
													<div class="phone"><a rel="nofollow" href="tel:<?=$arShop["PHONE"]?>"><?=$arShop["PHONE"]?></a></div>
												<?endif;?>
												<?if(strlen($arShop["EMAIL"])):?>
													<div class="email"><a rel="nofollow" href="mailto:<?=$arShop["EMAIL"]?>"><?=$arShop["EMAIL"]?></a></div>
												<?endif;?>
											</div>
										</div>
									</div>
								</div>
							<?endforeach;?>
						</div>
					</div>
				</div>
				<div class="clearboth"></div>
			<?endif;?>
			<?
		}
		else{
			LocalRedirect(SITE_DIR.'contacts/');
		}
	}

	function drawShopDetail($arShop, $arParams, $showMap="Y"){
		global $APPLICATION;
		$mapLAT = $mapLON = 0;
		$arPlacemarks = array();
		$arPhotos = array();

		if(is_array($arShop)){
			if(isset($arShop['IBLOCK_ID'])){
				$arShop['LIST_URL'] = $arShop['LIST_PAGE_URL'];
				$arShop['TITLE'] = (in_array('NAME', $arParams['FIELD_CODE']) ? $arShop['NAME'] : '');
				$arShop['ADDRESS'] = $arShop['DISPLAY_PROPERTIES']['ADDRESS']['VALUE'];
				$arShop['ADDRESS'] = $arShop['TITLE'].((strlen($arShop['TITLE']) && strlen($arShop['ADDRESS'])) ? ', ' : '').$arShop['ADDRESS'];
				$arShop['PHONE'] = $arShop['DISPLAY_PROPERTIES']['PHONE']['VALUE'];
				$arShop['EMAIL'] = $arShop['DISPLAY_PROPERTIES']['EMAIL']['VALUE'];
				if(strtolower($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TYPE']) == 'html'){
					$arShop['SCHEDULE'] = htmlspecialchars_decode($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TEXT']);
				}
				else{
					$arShop['SCHEDULE'] = nl2br($arShop['DISPLAY_PROPERTIES']['SCHEDULE']['VALUE']['TEXT']);
				}
				$arShop['URL'] = $arShop['DETAIL_PAGE_URL'];
				$arShop['METRO_PLACEMARK_HTML'] = '';
				if($arShop['METRO'] = $arShop['DISPLAY_PROPERTIES']['METRO']['VALUE']){
					if(!is_array($arShop['METRO'])){
						$arShop['METRO'] = array($arShop['METRO']);
					}
					foreach($arShop['METRO'] as $metro){
						$arShop['METRO_PLACEMARK_HTML'] .= '<div class="metro"><i></i>'.$metro.'</div>';
					}
				}
				$arShop['DESCRIPTION'] = $arShop['DETAIL_TEXT'];
				$imageID = ((in_array('DETAIL_PICTURE', $arParams['FIELD_CODE']) && $arShop["DETAIL_PICTURE"]['ID']) ? $arShop["DETAIL_PICTURE"]['ID'] : ((in_array('PREVIEW_PICTURE', $arParams['FIELD_CODE']) && $arShop["PREVIEW_PICTURE"]['ID']) ? $arShop["PREVIEW_PICTURE"]['ID'] : false));
				if($imageID){
					$arShop['IMAGE'] = CFile::ResizeImageGet($imageID, array('width' => 210, 'height' => 143), BX_RESIZE_IMAGE_EXACT);
					$arPhotos[] = array(
						'ID' => $arShop["PREVIEW_PICTURE"]['ID'],
						'ORIGINAL' => ($arShop["DETAIL_PICTURE"]['SRC'] ? $arShop["DETAIL_PICTURE"]['SRC'] : ($arShop["PREVIEW_PICTURE"]['SRC'] ? $arShop["PREVIEW_PICTURE"]['SRC'] : $arShop['IMAGE'])),
						'PREVIEW' => $arShop['IMAGE'],
						'DESCRIPTION' => (strlen($arShop["PREVIEW_PICTURE"]['DESCRIPTION']) ? $arShop["PREVIEW_PICTURE"]['DESCRIPTION'] : $arShop['ADDRESS']),
					);
				}
				if(is_array($arShop['DISPLAY_PROPERTIES']['MORE_PHOTOS']['VALUE'])) {
					foreach($arShop['DISPLAY_PROPERTIES']['MORE_PHOTOS']['VALUE'] as $i => $photoID){
						$arPhotos[] = array(
							'ID' => $photoID,
							'ORIGINAL' => CFile::GetPath($photoID),
							'PREVIEW' => CFile::ResizeImageGet($photoID, array('width' => 210, 'height' => 143), BX_RESIZE_IMAGE_EXACT),
							'DESCRIPTION' => $arShop['DISPLAY_PROPERTIES']['MORE_PHOTOS']['DESCRIPTION'][$i],
						);
					}
				}

				$arShop['GPS_S'] = false;
				$arShop['GPS_N'] = false;
				if($arStoreMap = explode(',', $arShop['DISPLAY_PROPERTIES']['MAP']['VALUE'])){
					$arShop['GPS_S'] = $arStoreMap[0];
					$arShop['GPS_N'] = $arStoreMap[1];
				}

				if($arShop['GPS_S'] && $arShop['GPS_N']){
					$mapLAT += $arShop['GPS_S'];
					$mapLON += $arShop['GPS_N'];
					$arPlacemarks[] = array(
						"ID" => $arShop["ID"],
						"LAT" => $arShop['GPS_S'],
						"LON" => $arShop['GPS_N'],
						"TEXT" => $arShop["TITLE"],
						"HTML" => '<div class="title">'.(strlen($arShop["URL"]) ? '<a href="'.$arShop["URL"].'">' : '').$arShop["ADDRESS"].(strlen($arShop["URL"]) ? '</a>' : '').'</div><div class="info-content">'.($arShop['METRO'] ? $arShop['METRO_PLACEMARK_HTML'] : '').(strlen($arShop['SCHEDULE']) ? '<div class="schedule">'.$arShop['SCHEDULE'].'</div>' : '').(strlen($arShop['PHONE']) ? '<div class="phone"><a rel="nofollow" href="tel:'.$arShop["PHONE"].'">'.$arShop['PHONE'].'</a></div>' : '').(strlen($arShop['EMAIL']) ? '<div class="email"><a rel="nofollow" href="mailto:'.$arShop['EMAIL'].'">'.$arShop['EMAIL'].'</a></div>' : '').'</div>'.(strlen($arShop['URL']) ? '<a rel="nofollow" class="button" href="'.$arShop["URL"].'"><span>'.GetMessage('DETAIL').'</span></a>' : '')
					);
				}
			}
			else{
				$arShop["TITLE"] = htmlspecialchars_decode($arShop["TITLE"]);
				$arShop["ADDRESS"] = htmlspecialchars_decode($arShop["ADDRESS"]);
				$arShop["ADDRESS"] = (strlen($arShop["TITLE"]) ? $arShop["TITLE"].', ' : '').$arShop["ADDRESS"];
				$arShop["DESCRIPTION"] = htmlspecialchars_decode($arShop['DESCRIPTION']);
				$arShop['SCHEDULE'] = htmlspecialchars_decode($arShop['SCHEDULE']);
				if($arShop["IMAGE_ID"]){
					$arShop['IMAGE'] = CFile::ResizeImageGet($arShop["IMAGE_ID"], array('width' => 210, 'height' => 143), BX_RESIZE_IMAGE_EXACT);
					$arPhotos[] = array(
						'ID' => $arShop["PREVIEW_PICTURE"]['ID'],
						'ORIGINAL' => CFile::GetPath($arShop["IMAGE_ID"]),
						'PREVIEW' => $arShop['IMAGE'],
						'DESCRIPTION' => (strlen($arShop["PREVIEW_PICTURE"]['DESCRIPTION']) ? $arShop["PREVIEW_PICTURE"]['DESCRIPTION'] : $arShop["ADDRESS"]),
					);
				}
				if(is_array($arShop['MORE_PHOTOS'])) {
					foreach($arShop['MORE_PHOTOS'] as $photoID){
						$arPhotos[] = array(
							'ID' => $photoID,
							'ORIGINAL' => CFile::GetPath($photoID),
							'PREVIEW' => CFile::ResizeImageGet($photoID, array('width' => 210, 'height' => 143), BX_RESIZE_IMAGE_EXACT),
							'DESCRIPTION' => $arShop["ADDRESS"],
						);
					}
				}

				if($arShop['GPS_S'] && $arShop['GPS_N']){
					$mapLAT += $arShop['GPS_N'];
					$mapLON += $arShop['GPS_S'];
					$arPlacemarks[] = array(
						"ID" => $arShop["ID"],
						"LON" => $arShop['GPS_S'],
						"LAT" => $arShop['GPS_N'],
						"TEXT" => $arShop["TITLE"],
						"HTML" => '<div class="title">'.(strlen($arShop["URL"]) ? '<a href="'.$arShop["URL"].'">' : '').$arShop["ADDRESS"].(strlen($arShop["URL"]) ? '</a>' : '').'</div><div class="info-content">'.($arShop['METRO'] ? $arShop['METRO_PLACEMARK_HTML'] : '').(strlen($arShop['SCHEDULE']) ? '<div class="schedule">'.$arShop['SCHEDULE'].'</div>' : '').(strlen($arShop['PHONE']) ? '<div class="phone"><a rel="nofollow" href="tel:'.$arShop["PHONE"].'">'.$arShop['PHONE'].'</a></div>' : '').(strlen($arShop['EMAIL']) ? '<div class="email"><a rel="nofollow" href="mailto:'.$arShop['EMAIL'].'">'.$arShop['EMAIL'].'</a></div>' : '').'</div>'.(strlen($arShop['URL']) ? '<a rel="nofollow" class="button" href="'.$arShop["URL"].'"><span>'.GetMessage('DETAIL').'</span></a>' : '')
					);
				}
			}
			?>
			<?if(abs($mapLAT) > 0 && abs($mapLON) > 0 && $showMap=="Y"):?>
				<div class="contacts_map">
					<?$APPLICATION->IncludeComponent(
					"bitrix:map.google.view",
					"map",
					array(
						"INIT_MAP_TYPE" => "ROADMAP",
						"MAP_DATA" => serialize(array("google_lat" => $mapLAT, "google_lon" => $mapLON, "google_scale" => 16, "PLACEMARKS" => $arPlacemarks)),
						"MAP_WIDTH" => "100%",
						"MAP_HEIGHT" => "400",
						"CONTROLS" => array(
						),
						"OPTIONS" => array(
							0 => "ENABLE_DBLCLICK_ZOOM",
							1 => "ENABLE_DRAGGING",
						),
						"MAP_ID" => "",
						"ZOOM_BLOCK" => array(
							"POSITION" => "right center",
						),
						"COMPONENT_TEMPLATE" => "map",
						"API_KEY" => $arParams["GOOGLE_API_KEY"],
						"COMPOSITE_FRAME_MODE" => "A",
						"COMPOSITE_FRAME_TYPE" => "AUTO"
					),
					false, array("HIDE_ICONS" =>"Y")
				);?>
				</div>
			<?endif;?>
			<div class="wrapper_inner shop detail">
				<div class="contacts_left clearfix">
					<div class="store_description">
						<?if(strlen($arShop['ADDRESS'])):?>
							<div class="store_property">
								<div class="title"><?=GetMessage('ADDRESS')?></div>
								<div class="value"><?=$arShop['ADDRESS']?></div>
							</div>
						<?endif;?>
						<?if($arShop['METRO']):?>
							<div class="store_property metro">
								<div class="title"><?=GetMessage('METRO')?></div>
								<?foreach($arShop['METRO'] as $metro):?>
									<div class="value"><i></i><?=$metro?></div>
								<?endforeach;?>
							</div>
						<?endif;?>
						<?if(strlen($arShop['PHONE'])):?>
							<div class="store_property">
								<div class="title"><?=GetMessage('PHONE')?></div>
								<div class="value"><a rel="nofollow" href="tel:<?=$arShop['PHONE']?>"><?=$arShop['PHONE']?></a></div>
							</div>
						<?endif;?>
						<?if(strlen($arShop['EMAIL'])):?>
							<div class="store_property">
								<div class="title">Email</div>
								<div class="value"><a rel="nofollow" href="mailto:<?=$arShop['EMAIL']?>"><?=$arShop['EMAIL']?></a></div>
							</div>
						<?endif;?>
						<?if(strlen($arShop['SCHEDULE'])):?>
							<div class="store_property">
								<div class="title"><?=GetMessage('SCHEDULE')?></div>
								<div class="value"><?=$arShop['SCHEDULE']?></div>
							</div>
						<?endif;?>
					</div>
				</div>
				<div class="contacts_right clearfix">
					<blockquote><?=$arShop['DESCRIPTION']?></blockquote>
					<?if($arPhotos):?>
						<!-- noindex-->
						<?foreach($arPhotos as $arPhoto):?>
							<a class="fancy" rel="item_slider" title="<?=$arPhoto['DESCRIPTION']?>" alt="<?=$arPhoto['DESCRIPTION']?>" href="<?=$arPhoto['ORIGINAL']?>"><img border="0" title="<?=$arPhoto['DESCRIPTION']?>" alt="<?=$arPhoto['DESCRIPTION']?>" src="<?=$arPhoto['PREVIEW']['src']?>"></a>
						<?endforeach;?>
						<!-- /noindex-->
					<?endif;?>
				</div>
				<!-- noindex--><a rel="nofollow" href="<?=$arShop['LIST_URL']?>" class="back"><?=GetMessage('BACK_STORE_LIST')?></a><!-- /noindex-->
			</div>
			<div class="clearboth"></div>
			<?
		}
		else{
			LocalRedirect(SITE_DIR.'contacts/');
		}
	}

	function getBasketAspro(){
		$arResult = array('BASKET' => array(), 'DELAY' => array(), 'SUBSCRIBE' => array(), 'COMPARE' => array());

		if(CModule::IncludeModule('sale')){
			$dbRes = CSaleBasket::GetList(array(), array('FUSER_ID' => CSaleBasket::GetBasketUserID(), 'LID' => SITE_ID, 'ORDER_ID' => 'NULL'), false, false, array('ID', 'PRODUCT_ID', 'DELAY', 'SUBSCRIBE', 'CAN_BUY', 'TYPE', 'SET_PARENT_ID'));
			while($arItem = $dbRes->Fetch()){
				if(CSaleBasketHelper::isSetItem($arItem)){
					continue;
				}
				if($arItem['DELAY'] === 'N' && $arItem['CAN_BUY'] === 'Y' && $arItem['SUBSCRIBE'] === 'N'){
					$arResult['BASKET'][] = $arItem['PRODUCT_ID'];
				}
				elseif($arItem['DELAY'] === 'Y' && $arItem['CAN_BUY'] === 'Y' && $arItem['SUBSCRIBE'] === 'N'){
					$arResult['DELAY'][] = $arItem['PRODUCT_ID'];
				}
				elseif($arItem['SUBSCRIBE'] === 'Y'){
					$arResult['SUBSCRIBE'][] = $arItem['PRODUCT_ID'];
				}
			}
		}

		return $arResult;
	}


	function checkVersionExt($template="main", $module="catalog", $default="N")
	{
		if($info = CModule::CreateModuleObject($module))
		{
			$testVersion = '16.0.14';
			if(CheckVersion($testVersion, $info->MODULE_VERSION))
			{
				$templateInclude=$template;
			}
			else
			{
				if($default=="Y")
				{
					$templateInclude=".default";
				}else
				{
					$templateInclude=$template."_new";
				}
			}
		}
		return $templateInclude;
	}

	static function getCurrentPageClass(){
		static $result;

		if(!isset($result)){
			if(self::IsMainPage())
				$result = 'front';
			if(self::IsAuthSection())
				$result = 'auth';
			if(self::IsBasketPage())
				$result = 'basket';
			if(self::IsCatalogPage())
				$result = 'catalog';
			if(self::IsPersonalPage())
				$result = 'personal';
			if(self::IsOrderPage())
				$result = 'order';
			if($result)
				$result.='_page';
		}

		return $result;
	}

	static function IsMainPage(){
		static $result;

		if(!isset($result)){
			$result = CSite::InDir(SITE_DIR.'index.php');
		}

		return $result;
	}

	static function IsAuthSection(){
		static $result;

		if(!isset($result)){
			$result = CSite::InDir(SITE_DIR.'auth/');
		}

		return $result;
	}

	static function IsBasketPage(){
		static $result;

		if(!isset($result)){
			$result = CSite::InDir(SITE_DIR.'basket/');
		}

		return $result;
	}

	static function IsCatalogPage(){
		static $result;

		if(!isset($result)){
			$result = CSite::InDir(SITE_DIR.'catalog/');
		}

		return $result;
	}

	static function IsOrderPage(){
		static $result;

		if(!isset($result)){
			$result = CSite::InDir(SITE_DIR.'order/');
		}

		return $result;
	}

	static function IsPersonalPage(){
		static $result;

		if(!isset($result)){
			$result = CSite::InDir(SITE_DIR.'personal/');
		}

		return $result;
	}
}
?>