Your IP : 18.117.12.247
// Сетка преимуществ
$(function () {
$('.advantages-grid').livequery(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
960: 'is-3cols',
700: 'is-2cols',
400: 'is-flat',
}
})
});
});
function $_GET(string, key) {
var p = string.match(new RegExp(key + '=([^&=]+)'));
return p ? p[1] : false;
}
$(function () {
if(!window['captcha-handler-ready']){
$(document).on('click', '.is-captcha-field a', function () {
var captchaFieldWrapper = $(this).parents('.is-captcha-field');
var blockName = captchaFieldWrapper.data('block-name');
$.ajax({
url: '/local/php_interface/ajax/captcha.php',
type: 'post',
data: 'captcha=yes',
success: function(data){
captchaFieldWrapper.find('.'+blockName+'__captcha-img img').attr('src', '/bitrix/tools/captcha.php?captcha_sid=' + data);
captchaFieldWrapper.find('.'+blockName+'__inputs').children('input[name=captcha_sid]').val(data);
}
});
return false;
});
window['captcha-handler-ready'] = true;
}
});
// comments
$(function () {
$('body').on('click', '.js-b2b-info-link', function (e) {
var $target = $(this).parents('td').find('.js-b2b-info-modal');
if($.fancybox.isOpen) {
$.fancybox.close(true);
setTimeout(function() {b2bopen();}, 250);
} else {
b2bopen();
}
function b2bopen() {
$.fancybox.open(
$target, {
padding: 0,
margin: 20,
closeEffect: 'none',
wrapCSS: 'is-default',
closeSpeed: 0,
openSpeed: 0,
openEffect: 'none',
openOpacity: false,
closeOpacity: false,
fitToView: true,
scrolling: 'visible',
}
);
}
e.preventDefault();
});
});
$(function () {
/**
* Если нужно перетащить хлебные крошки в другое место, можно использовать такой метод
* @type {*}
*/
var $needReplace = $("#changeBreadcrumbs");
var $placeToBreadcrumbs = $("#blockToCrumbs");
var $breadcrumbs = $(".layout__page-header");
if($needReplace.length > 0 && $placeToBreadcrumbs.length > 0){
$placeToBreadcrumbs.prepend($breadcrumbs);
}
});
// comments
$(function () {
$('.cart-items').livequery(function () {
var $context = $(this);
$(document).on('click', '.cart-items__sku-selected-link', function(e) {
e.preventDefault();
var $parent = $(this).closest('.cart-items__table-item');
$parent.find('.cart-items__sku-selected', $context).toggleClass('is-hidden');
$parent.find('.cart-items__sku-holder', $context).toggleClass('is-visible');
});
});
});
$(function () {
$('.catalog-advantages__items').slick({
dots: true,
dotsClass: "promo-slider__pagination",
prevArrow: "<span class='catalog-advantages__arrows catalog-advantages__arrow-left'></span>",
nextArrow: "<span class='catalog-advantages__arrows catalog-advantages__arrow-right'></span>"
});
});
// Древовидное меню
$(function () {
// Инициализация только для состояния И
$('.catalog-aside').livequery(function () {
var $context = $(this);
var $openingLink =$('.is-opening', $context);
var $additionalLink =$('.is-additional', $context);
var $linkImgLink =$('.catalog-aside__link-img', $context);
var $firstItems = $('.catalog-aside__first-item', $context);
var $firstLinks = $('.catalog-aside__first-link', $context);
var $containMarker =$('.catalog-aside__contain-marker', $firstLinks);
addShowAllLink();
setHolderHeight();
/**
* Отображаем подписи к меню
*/
$containMarker.on('click',function(){
var $th = $(this);
var $item = $th.closest('.catalog-aside__first-item');
if($item.hasClass('is-contain') &&
$context.hasClass('is-x-state')) {
if(!$item.hasClass('is-hover')) {
$item.addClass('is-hover');
$item.find('.catalog-aside__second-holder').slideDown(400);
} else {
$item.removeClass('is-hover');
$item.find('.catalog-aside__second-holder').slideUp(400);
}
return false;
}
return false;
});
/**
* Отображаем подписи к меню
*/
$openingLink.on('click',function(){
$context.toggleClass('is-opened');
return false;
});
$linkImgLink.on('click',function(){
if(! $context.hasClass('is-opened') ){
$context.toggleClass('is-opened');
return false;
}
});
/**
* Расскрываем подкатегории если есть
*/
$firstLinks.on( 'click',function(){
var $th = $(this);
var $item = $th.closest('.catalog-aside__first-item');
if($item.hasClass('is-contain') &&
$context.hasClass('is-x-state')){
$item.addClass('is-hover');
$item.find('.catalog-aside__second-holder').slideDown(400);
return false;
}
return true;
});
/**
* Отображаем скрытые ссылки
*/
$additionalLink.on('click',function() {
$firstItems.each(function() {
$(this).removeClass('is-hide');
});
$additionalLink.remove();
return false;
});
function setHolderHeight() {
if($context.hasClass("is-t-state")) {
var $contextHeight = $context.height();
$(".catalog-aside__second-holder", $context).css("height",$contextHeight);
}
}
function addShowAllLink() {
// json obShowLevelParams задается в menu/aside/result_modifier.php
if(window.obShowLevelParams!==undefined) {
for(var level in obShowLevelParams) {
$('.catalog-aside__'+level+'-item:nth-child(n+'+(obShowLevelParams[level].count+1)+')', $context).css("display","none");
$('.catalog-aside__'+level+'-level').each(function () {
if($(this).find('.catalog-aside__'+level+'-item').length > obShowLevelParams[level].count) {
$(this).find('.catalog-aside__'+level+'-item:nth-child(n+'+(obShowLevelParams[level].count)+'):not(".show-all-item")').css("display", "none");
$(this)
.append("<li class='catalog-aside__"+level+"-item show-all-item'><a class='catalog-aside__"+level+"-link show-all-link' data-level='"+level+"'>"+obShowLevelParams[level].showText+"</a></li>");
}
});
}
$(".show-all-link", $context).on("click", function() {
var level = $(this).data("level");
var listItems = $(this).parents('.catalog-aside__'+level+'-level');
if($(this).hasClass("is-active")) {
$(this).removeClass("is-active");
$(this).text(obShowLevelParams[level].showText);
$('.catalog-aside__'+level+'-item:nth-child(n+'+(obShowLevelParams[level].count)+'):not(".show-all-item")', listItems).slideUp();
} else {
$(this).addClass("is-active");
$(this).text(obShowLevelParams[level].hideText);
$('.catalog-aside__'+level+'-item:nth-child(n+'+(obShowLevelParams[level].count)+')', listItems).slideDown(400);
}
setTimeout(function() {setHolderHeight();}, 500);
});
}
}
});
});
// comments
function initCompare() {
$('.js-compare-button').each(function () {
var $th = $(this);
$th.removeClass('added');
if ($th.data('add-title')){
$th.find('span').html($th.data('add-title'));
}
});
/** @var global COMPARE_VARIANT \catalog.compare.list\.default\template.php */
if(window.COMPARE_VARIANT){
$.each(window.COMPARE_VARIANT, function (i, v) {
if (v !== '') {
var $button = $('.js-compare-button[href$=' + v + ']');
if ($button.length) {
$button.addClass('added');
if ($button.data('active-title')) {
$button.find('span').html($button.data('active-title'));
}
}
}
});
}
return false;
}
$(function () {
initCompare();
});
// Каталог товаров плиткой
$(function () {
$('.catalog-items').livequery(function () {
var widthPhone = 460;
var $context = $(this);
var $cols = $('.catalog-items__cols', $context);
var $items = $('.catalog-items__col', $context);
var contextWidth;
var mobslik;
var isSlic = true;
/**
* Пересчитываем высоту карточек и делаем их одинаковыми в ряду
* @constructor
*/
function ResizeCatalogItem() {
var $plates = $('.catalog-items__col', $context);
var _tmp ;
var heights = [];
var iterations;
contextWidth = $cols.width();
if(contextWidth === 0) return;
var plateWidth = $items.eq(0).outerWidth();
_tmp = Math.round(contextWidth/plateWidth); // Кол-во плиток в ряду
iterations = $plates.length / _tmp; // Кол-во рядов
// Собираем наибольшую высоту элемента в ряду и в массив heights[номер_ряда]
for(var r = 0; r < iterations; r++) {
for(var i = 0; i < _tmp; i++) {
if (!heights[r]) {
heights[r] = $plates.eq(r*_tmp + i).find('.catalog-plate').outerHeight();
} else {
heights[r] = Math.max($plates.eq(r*_tmp + i).find('.catalog-plate').outerHeight(), heights[r]);
}
}
}
// Применяем наибольшую высоту ряда к каждому элементу
for(var r = 0; r < iterations; r++) {
for(var i = 0; i<_tmp; i++) {
$plates.eq(r*_tmp + i).find('.catalog-plate').css('height', heights[r]);
}
}
$('.catalog-plate', $context).addClass('is-initiated');
}
function equalizer() {
var $plates = $('.catalog-items__col', $context);
if (!$plates.length) return;
$('.catalog-plate', $context).css('height', '');
if($context.hasClass('is-slide-to-mobile')) {
if($(window).width() < widthPhone && isSlic && $cols.length) {
var max_h = 0
$plates.each(function() {
if (max_h < $(this).height()) {
max_h = $(this).height();
}
});
$plates.height(max_h + 20);
$cols.height(300);
isSlic = false;
mobslik = $cols.slick({
slidesToShow: 1,
prevArrow: '<div class="catalog-items__arrows catalog-items__arrows-right"></div>',
nextArrow:'<div class="catalog-items__arrows catalog-items__arrows-left"></div>',
variableWidth: true,
infinite: true,
centerMode: true
});
} else {
if(typeof mobslik != 'undefined' && $(window).width() > widthPhone){
mobslik.slick('unslick');
}
$plates.css("height", "auto");
}
}
}
equalizer();
$(window).on('resize orientationchange', equalizer);
$context.on('resize.block', equalizer);
});
});
// Плитка товара в каталоге
$(function () {
$('.catalog-largelist').each(function () {
var $context = $(this);
var $favor = $('.catalog-largelist__favor-link', $context);
function toggleFavor () {
var $link = $(this);
$link.toggleClass('is-active');
$.get($link.attr('href'));
return false;
}
$favor.on('click', toggleFavor);
});
});
// Плитка товара в каталоге
$(function () {
$('.catalog-plate').each(function () {
var $context = $(this);
var $preview = $('.catalog-plate__preview', $context);
var $energyButton = $('.catalog-plate__energy-link', $context);
function showPreview () {
$.fancybox.open({
href: $(this).attr('href')
}, {
wrapCSS: 'is-product-preview is-ajax',
type: 'ajax',
fitToView: true,
autoResize: true,
padding: 20,
margin: 20,
maxWidth: 1000,
afterLoad: function () {
$.fancybox.showLoading()
},
afterShow: function () {
$('.fancybox-wrap').livequery();
setTimeout(function () {
$('.fancybox-wrap .bem').trigger('resize.block');
$.fancybox .hideLoading();
$('.fancybox-wrap').removeClass('is-ajax');
if (typeof modalShowAfter == 'function'){
modalShowAfter();
}
}, 600);
}
}
);
return false;
}
$preview.on('click', showPreview);
$energyButton.each(function () {
$(this).attr('href', '/local/templates/home-comfort/files/EnergyLabel_EOB53434AX.pdf');
});
});
$('.catalog-plate__top-wrap').matchHeight();
$('.catalog-plate__img-holder').matchHeight();
});
//.catalog-sorter
$(function () {
$('.catalog-sorter').livequery(function () {
var sorter = $(this);
var form = sorter.find("form");
var hiddenParam = $("input[name='sorter-param']", form);
var hiddenValue = $("input[name='sorter-value']", form);
var hiddenOrder = $("input[name='sorter-order']", form);
$("a", sorter).on("click", function() {
var link = $(this);
var param = link.parents("ul").data("sorter-param");
var value = link.data("sorter-value");
var order = link.data("sorter-order");
hiddenParam.val(param);
hiddenValue.val(value);
if (order) {
hiddenOrder.val(order);
}
form.submit();
});
});
});
// comments
$(function () {
$('.catalog-table').livequery(function () {
var $context = $(this);
$('.catalog-table__header-text.is-sortable', $context).on('click', function(){
if($(this).is('.is-sorted-up')){
document.location = $(this).attr('data-sort-down');
} else {
document.location = $(this).attr('data-sort-up');
}
});
});
});
$(function () {
$('.catalog-text-block__link').on('click', function () {
var $this = $(this),
description = $('.catalog-text-block__description');
description.toggle();
if(description.is(':visible')) {
$this.text('Скрыть');
} else {
$this.text('Подробнее');
}
});
});
// Список сертификатов
$(function () {
$('.cert-list').livequery(function () {
var $context = $(this);
var $certLinks = $('.cert-list__cert-link', $context);
if($(window).width() < 768){
$certLinks.mobilezoom({backlink: 'Вернуться'});
} else {
$certLinks.fancybox({
type: 'image',
padding: 0,
margin: 20,
closeEffect: 'none',
closeSpeed: 0,
openSpeed: 0,
openEffect: 'none',
openOpacity: false,
closeOpacity: false,
fitToView: true,
scrolling: 'visible',
beforeShow: function () {
$('html').addClass('fancybox-margin fancybox-lock');
}
});
}
});
});
// Чек-бокс
$(function () {
$('.checkbox').livequery(function () {
var $context = $(this);
var $input = $('input[type="checkbox"]', $context);
function changeState () {
if($input.prop('checked')) {
$context.addClass('_checked')
} else {
$context.removeClass('_checked');
}
}
changeState();
$input.on('change', changeState);
});
});
// Список чекбоксов
$(function () {
$('.checkbox-cols').livequery(function () {
var $context = $(this);
var $moreBtn = $('.checkbox-cols__btn', $context)
var $moreContainer = $('.checkbox-cols__more-container', $context)
function toggleMoreContainer() {
$moreBtn.toggleClass('is-opened');
$moreContainer.toggleClass('is-opened');
return false;
}
$moreBtn.on('click', toggleMoreContainer);
});
});
// FAQ
$(function () {
$('.faq-list').each(function () {
var $context = $(this);
var $questions = $('.faq-list__question', $context);
var $answers = $('.faq-list__answer', $context);
(function init() {
$context.removeClass('no-js');
initAnswerSliders();
})();
function initAnswerSliders () {
$answers.filter(':not(.is-expanded)').slideUp(0);
$questions.on('click', function () {
var $link = $(this);
var $answer = $link.siblings('.faq-list__answer');
var isActive = $answer.hasClass('is-expanded')
if(isActive) {
$answer.slideUp(400, function () {$answer.removeClass('is-expanded');});
} else {
$answer.slideDown(400, function () {$answer.addClass('is-expanded');});
}
});
}
});
});
$(function(){
var faqItemsEls = $('.js-faq-simple__item');
faqItemsEls.each(function() {
var self = $(this),
title = $('.js-faq-simple__title', self);
title.on('click', function(e) {
e.preventDefault();
$(this).parent().hasClass('is-show') ?
$(this).parent().removeClass('is-show') :
$(this).parent().addClass('is-show');
});
});
});
// Блок преимуществ
$(function () {
$('.features-block').each(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
700: 'is-2cols',
470: 'is-flat'
}
})
});
});
$(function () {
$('.contacts-detail').livequery(function () {
var $context = $(this);
var $photoLinks = $('.contacts-detail__img-link', $context);
if($(window).width() < 768) {
$photoLinks.mobilezoom({backbutton: 'Вернуться'});
} else {
$photoLinks.fancybox({
type: 'image'
});
}
});
});
// Плитка разделов каталога
$(function () {
$('.contacts-list').each(function () {
var $context = $(this);
var $printLinks = $('.contacts-list__link.is-print', $context);
if($printLinks.length) {
console.info('print_frame');
if($('#print_frame').length === 0) {
var iframe = $('<iframe id="print_frame">');
$('body').append(iframe);
iframe.hide();
}
}
$printLinks.on('click', function(e) {
e.preventDefault();
e.stopPropagation();
var $th = $(this);
var html_to_print ='<img src="'+$th.attr('href')+'" alt=""/>';
var printIframe = $('#print_frame')[0];
var doc = printIframe.contentDocument || printIframe.contentWindow.document;
var win = printIframe.contentWindow || printIframe;
doc.getElementsByTagName('body')[0].innerHTML = html_to_print;
$(html_to_print).load(function(){
win.print();
});
return false;
});
$context.adaptBlock({
maxWidth: {
900: 'is-3cols',
600: 'is-2cols',
400: 'is-flat'
}
});
});
});
// Вкладки, переключение табов
$(function () {
$('.contacts-tabs').livequery(function () {
var $context = $(this);
var $photoLinks = $('.contacts-tabs__img-link', $context);
$photoLinks.fancybox({
type: 'image'
});
var $linkHolders = $('.contacts-tabs__link-holder', $context);
var $tabs = $('.contacts-tabs__tab', $context);
if($tabs.filter('.is-active').length === 0) {
$linkHolders.filter('.is-active').removeClass('is-active');
$tabs.eq(0).addClass('is-active');
$linkHolders.eq(0).addClass('is-active');
}
// Set corresponding tabs indexes
for(var i = 0; i < $linkHolders.length; i++) {
$linkHolders.eq(i).attr('data-index', i);
}
// Copy link-holders before corresponding tabs for mobile version
for(i = 0; i < $linkHolders.length; i++) {
$linkHolders
.eq(i)
.clone()
.addClass('is-hide-desktop')
.insertBefore($tabs.eq(i));
}
var $mobileLinkHolders = $('.contacts-tabs__tabs .contacts-tabs__link-holder', $context);
$(document).on('click', '.contacts-tabs__link-holder', function () {
var $this = $(this);
var index = $this.attr('data-index');
if($this.hasClass('is-active')) return false;
$linkHolders
.add($tabs)
.filter('.is-active')
.removeClass('is-active');
$mobileLinkHolders.filter('.is-active').removeClass('is-active');
$linkHolders.eq(index).addClass('is-active');
$mobileLinkHolders.eq(index).addClass('is-active');
$tabs.eq(index).addClass('is-active');
return false;
});
});
});
// Счетчик
$(function() {
$(document).on('click', '.counter-input__up, .counter-input__down', function() {
var $this = $(this);
var $input = $this.parents('.counter-input').find('.counter-input__input');
var stepInc = 1;
var stepInput = $input.attr('step');
if (typeof stepInput != "undefined") {
stepInc = Number(stepInput);
}
var direction = $this.is('.counter-input__up') ? stepInc : -stepInc;
var val = parseFloat($input.val());
var newVal = Math.max(val+direction, 1);
if ((newVal == 1) && (typeof stepInput != "undefined")) {
newVal = Number(stepInput);
}
$input
.val(newVal)
.trigger('change');
return false;
});
$(document).on('change', '.counter-input__input', function() {
var $this = $(this);
var val = parseFloat($this.val());
if(isNaN(val) || (val <= 0)) {
$this.val(1);
} else {
$this.val(val);
}
});
});
$(window).load(function(){
$('.accordion-steps .form-standart').each(function(){
// Не нужна нам эта штука тут
$(this).find('.form-standart__node').remove();
});
});
// comments
$(function () {
$(document).on('click', '.feedback-wall__readmore', function(e) {
var $parent = $(this).parents('.feedback-wall__item');
$parent.addClass('is-expanded');
e.preventDefault();
});
$(document).on('click', '.feedback-wall__readless', function(e) {
var $parent = $(this).parents('.feedback-wall__item');
$parent.removeClass('is-expanded');
e.preventDefault();
});
});
// Умный фильтр - горизонтальный
$(function () {
$('.filter-hor').livequery(function () {
var $context = $(this);
var $fieldsList = $('.filter-hor__fields', $context);
var $showFilterLink = $(".filter-hor__show-filter-link", $context);
var $moreBtn = $('.checkbox-cols__btn', $context);
var $form = $context.find('form');
if($(".filter-hor__selected-value-del", $context).length) {
$(".filter-hor__selected-value-del", $context).on("click", function() {
var $this = $(this);
var delItemId = $this.data("value-id");
var $curField = $this.parents(".filter-hor__selected-field");
var $curValue = $this.parents(".filter-hor__selected-value");
var $valuesCount = $(".filter-hor__selected-value", $curField).length;
var $lastValue = false;
if($valuesCount <= 1) {
$lastValue = true
}
$curValue.remove();
if($lastValue) {
$curField.remove();
}
var $filterFieldValue = $("#" + delItemId);
var $filterFieldValueTag = $filterFieldValue.get(0).tagName.toLowerCase();
var $filterFieldValueType = $filterFieldValue.attr("type");
switch($filterFieldValueTag) {
case "input":
if ($filterFieldValueType === "checkbox") {
$filterFieldValue.parents("label").click();
}
if ($filterFieldValueType === "hidden") {
var $scaleMax = $filterFieldValue.parents(".filter-scale").data("max");
var $scaleMin = $filterFieldValue.parents(".filter-scale").data("min");
$filterFieldValue.parents(".filter-scale").find(".js-min").val($scaleMin);
$filterFieldValue.parents(".filter-scale").find(".js-max").val($scaleMax).focus().blur();
}
break;
case "option":
$filterFieldValue.parent("select").select2("val", "");
break;
}
$form.submit();
});
}
function putFieldsListHeight() {
$fieldsList.each(function () {
var $thisList = $(this);
var $thisFields = $('.filter-hor__field', $thisList);
$thisFields.removeClass("is-full-height");
var maxFieldList = 0;
$thisFields.each(function() {
maxFieldList = $(this).outerHeight(true) > maxFieldList ? $(this).outerHeight(true) : maxFieldList;
});
$thisList.height(maxFieldList);
$thisFields.addClass("is-full-height");
});
}
function toggleFilterHorizontal() {
var filterBody = $(".filter-hor__main", $context);
var filterFooter = $(".filter-hor__footer", $context);
if($showFilterLink.hasClass("is-active")) {
$showFilterLink.removeClass("is-active");
$showFilterLink.text("Показать фильтр");
filterFooter.removeClass("is-open");
filterBody.removeClass("is-open");
} else {
$showFilterLink.addClass("is-active");
$showFilterLink.text("Скрыть фильтр");
filterFooter.addClass("is-open");
filterBody.addClass("is-open");
addScrollToCheckbox();
putFieldsListHeight();
}
}
//скроллер для блока с чекбоксами
function addScrollToCheckbox() {
var count = (typeof smartFilterObj !== "undefined") ? smartFilterObj.checkboxCount : 10;
var lists = $(".filter-hor__items", $context);
$(lists, $context).each(function() {
var thisList = $(this);
var withScroller = thisList.hasClass("with-scroller");
var container = thisList.parent();
if(!withScroller && container.is(":visible")) {
thisList.addClass("with-scroller");
var items = $(".filter-hor__item", container);
var itemsCount = items.length;
if(itemsCount > count) {
var listWrapperHtml = "<div class='filter-hor__list-wrapper'></div>";
thisList.wrap(listWrapperHtml);
var scrollContainerHeight = 0;
for(var i=0; i<count; i++) {
scrollContainerHeight = scrollContainerHeight + items.eq(i).addClass("counted").outerHeight(true);
}
var listHeight = 0;
items.each(function() {
listHeight = listHeight + $(this).outerHeight(true);
});
thisList
.parent()
.height(scrollContainerHeight);
$(".filter-hor__vertical-scroll", container).height(scrollContainerHeight-20);
}
}
});
}
$showFilterLink.on('click', toggleFilterHorizontal);
$moreBtn.on("click", putFieldsListHeight);
addScrollToCheckbox();
});
});
// Шкала в фильтре
$(function () {
$("#smart-filter-form").on('submit', function () {
$('.filter-scale').each(function () {
setInputHiddenVal($(this));
});
});
function getScaleFields($context) {
var $minInput = $('.filter-scale__input.js-min', $context);
var $maxInput = $('.filter-scale__input.js-max', $context);
return {
$minHiddenInput: $('.js-hidden-min', $context),
$maxHiddenInput: $('.js-hidden-max', $context),
$minInput: $minInput,
$maxInput: $maxInput,
logaryphmic: ($context.data('log') == 1 && $context.data('min') > 1),
inputMin: stringToFloat($context.data('min').toString()),
inputMax: stringToFloat($context.data('max').toString()),
settingMinVal: stringToFloat($minInput.val().toString()),
settingMaxVal: stringToFloat($maxInput.val().toString())
}
}
function setInputHiddenVal($context) {
var fields = getScaleFields($context);
fields.inputMin = fields.inputMin ? fields.inputMin : 0;
fields.settingMinVal === fields.inputMin ? fields.$minHiddenInput.remove() : fields.$minHiddenInput.val(fields.settingMinVal);
fields.settingMaxVal === fields.inputMax ? fields.$maxHiddenInput.remove() : fields.$maxHiddenInput.val(fields.settingMaxVal);
}
function stringToFloat(str) {
if(typeof(str) != 'string') {
str = str.toString();
}
return parseFloat(str.replace(',', '.').replace(/[^\d.-]/g, ''));
}
$('.filter-scale').each(function () {
var $context = $(this);
var fields = getScaleFields($context);
var $scale = $('.filter-scale__scale', $context);
var scaleMin = parseFloat($context.data('min')) || 0;
var scaleMax = parseFloat($context.data('max')) || 100;
var scaleStep = parseFloat($context.data('step')) || 0.01;
var significant_digits = $context.data('significant-digits') || 3;
var convert_factor = typeof ($context.data('convert-factor') !== 'undefined') ? $context.data('convert-factor') : 1;
var isPrice = $context.data('format') === "price";
if (scaleMin == scaleMax)
return; // No slider for 1
var options = {
range: true,
max: scaleMax,
min: scaleMin,
values: [$context.data('left'), $context.data('right')],
step: scaleStep,
slide: function (e, ui) {
updateFields(ui.values);
},
snap: true
}
if (fields.logaryphmic) {
options.step = 0.00001;
options.max = Math.log(options.max) + options.step;
options.min = Math.log(options.min);
options.values = [Math.log(options.values[0]), Math.log(options.values[1])];
}
function format(x, dontRound) {
if (!dontRound) {
if (isPrice) {
return formatPrice(x, significant_digits, convert_factor);
} else {
return formatNumber(x, significant_digits);
}
} else {
if (isPrice) {
return formatPrice(x, 0, convert_factor);
} else {
return formatNumber(x, 0);
}
}
}
function bound(_number, _min, _max) {
if (options.snap) {
if (_number * 1.01 >= _max) {
return _max;
} else if (_number * 0.99 <= _min) {
return _min;
} else {
return _number;
}
} else {
return Math.max(Math.min(_number, _max), _min);
}
}
function numberWithSpaces(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}
function formatNumber(x, significant_digits) {
if (typeof (x) == 'string')
x = parseFloat(x);
var negative = 1;
if(x < 0)
negative = -1;
x*=negative;
var parts = x.toString().split(".");
var digits = significant_digits - parts[0].length;
if (digits < 0)
digits = 0;
if (significant_digits != 0) {
x = x.toFixed(digits);
parts = x.toString().split(".");
digits = parts[0].length;
var divider = 1;
if (digits > significant_digits && significant_digits != 0) {
divider = Math.pow(10, digits - significant_digits);
}
parts[0] = parseInt(parts[0]) - (parseInt(parts[0]) % divider);
}
parts[0] *= negative;
if (parts.length > 1) {
return parts[0].toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ") + "." + parts[1];
} else {
return parts[0].toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}
}
function formatPrice(x, significant_digits, convert_factor) {
if (!convert_factor) {
convert_factor = 1;
}
x = x * convert_factor;
return formatNumber(x, significant_digits);
}
function updateRealFields() {
fields.$minHiddenInput.val(stringToFloat(fields.$minInput.val()) / convert_factor);
fields.$maxHiddenInput.val(stringToFloat(fields.$maxInput.val()) / convert_factor);
fields.$minHiddenInput.change();
fields.$maxHiddenInput.change();
$("#smart-filter-form").trigger('change', [fields.$minInput.get(0)]);
}
function updateFields(values) {
var min,
max;
if (fields.logaryphmic) {
min = bound(Math.exp(values[0]), scaleMin, scaleMax);
max = bound(Math.exp(values[1]), scaleMin, scaleMax);
if (min <= scaleMin) {
fields.$minInput.val(format(min, true));
fields.$minHiddenInput.val(format(min, true).replace(/\s+/g, ''));
} else {
fields.$minInput.val(format(min));
fields.$minHiddenInput.val(format(min).replace(/\s+/g, ''));
}
if (max >= scaleMax) {
fields.$maxInput.val(format(max, true));
fields.$maxHiddenInput.val(format(max, true).replace(/\s+/g, ''));
} else {
fields.$maxInput.val(format(max));
fields.$maxHiddenInput.val(format(max).replace(/\s+/g, ''));
}
} else {
min = bound(values[0], options.min, options.max);
max = bound(values[1], options.min, options.max);
fields.$minInput.val(format(min, (min <= options.min))); // Do not round on edges
fields.$minHiddenInput.val(min);
fields.$maxInput.val(format(max, (max >= options.max))); // Do not round on edges
fields.$minHiddenInput.val(max);
}
updateRealFields();
}
function updateSlider(onchange) {
var min = parseFloat(stringToFloat(fields.$minInput.val()) / convert_factor);
var max = parseFloat(stringToFloat(fields.$maxInput.val())/ convert_factor) ;
if (isNaN(min) || isNaN(max))
return;
if (onchange) {
if (max < min) {
max = Math.round(min * 1.1);
}
min = bound(min, scaleMin, scaleMax);
max = bound(max, scaleMin, scaleMax);
}
fields.$minInput.val(numberWithSpaces(min * convert_factor));
fields.$minHiddenInput.val(min);
fields.$maxInput.val(numberWithSpaces(max * convert_factor));
fields.$maxHiddenInput.val(max);
updateRealFields();
if (fields.logaryphmic) {
$scale.slider("values", [Math.log(min), Math.log(max)]);
} else {
$scale.slider("values", [min, max]);
}
}
$scale.slider(options);
updateFields(options.values);
fields.$minInput.add(fields.$maxInput).on('keyup', function (e) {
if (e.which > 47 || e.which == 8) {
// store current positions in variables
var start = this.selectionStart;
var l = this.value.length;
updateSlider();
if (this.value.length != l) {
start += (this.value.length - l);
}
this.setSelectionRange(start, start);
}
}).on('change blur', function () {
updateSlider(true);
});
});
});
$(function () {
$('.footer__arrow-up').on('click', function () {
var top = $('body').offset().top;
$('html, body').animate({
scrollTop: top
}, 500);
});
});
$(function () {
var $context = $(".footer-mobile__catalog-item");
$context.on("click", function (e) {
var $title = $(this).find(".footer-mobile__catalog-title");
var $subMenu = $(this).find(".footer-mobile__catalog-list");
if(e.target.className !== "footer-mobile__catalog-sub-link"){
$title.toggleClass("active");
$subMenu.toggle("medium");
}
});
});
// Обработка стандартной формы
$(function () {
// Функция проверки соответствия значения инпута регулярке
var checkVal = function($input, regExp) {
var result = regExp.test($input.val());
if(result) {
$input.closest('.forgotpasswd-form__field').removeClass('is-error');
} else {
$input.closest('.forgotpasswd-form__field').addClass('is-error');
}
return result;
}
// Функция проверки обязательных полей формы
function inputChecker($input) {
var $field = $input.closest('.forgotpasswd-form__field');
if($field.hasClass('is-error, is-none')) return false;
if(!$input.data('necessary')) return true;
var type = $input.attr('type');
switch (type) {
case 'checkbox':
if(!$input.prop('checked')) {
$field.addClass('is-none');
return false;
}
break;
default:
if($input.val() === '' || $input.hasClass('ui-placeholder')) {
$field.addClass('is-none');
return false;
}
return true;
}
return true;
}
$('.forgotpasswd-form').each(function () {
var $context = $(this);
var $form = $('form:not(.js-ajax)', $context);
var $ajaxForm = $('form.js-ajax', $context);
var $successMessage = $('.success-message-modal', $context);
var $nodesMessage = $('.forgotpasswd-form__node', $context);
if($nodesMessage.length === 0){
$context.prepend('<div class="forgotpasswd-form__node"></div>');
$nodesMessage = $('.forgotpasswd-form__node', $context);
}
// Сброс error при активности
$('input[data-necessary], textarea[data-necessary], select', $context).on('click keydown change', function() {
$(this).closest('.forgotpasswd-form__field').removeClass('is-none is-error');
});
// Устанавливаем маски ввода
$('[data-mask="phone"]', $context).each(function(){
$(this).mask('+7 (000) 000-00-00');
});
$('[data-mask="email"]', $context).change(function () {
var regExp = /^([A-Za-z0-9_-]+\.)*[A-Za-z0-9_-]+@[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*\.[a-z]{2,6}$/g;
checkVal($(this), regExp);
return true;
});
// Обработка формы без Ajax
$form.on('submit', function () {
var isValidate = true;
var radioNames = [];
$nodesMessage.html('').removeClass().addClass('forgotpasswd-form__node');
$('input[type="text"], input[type="email"], input[type="password"], input[type="checkbox"], select, textarea', $form).each(function() {
isValidate = inputChecker($(this)) && isValidate;
});
$('input[type="radio"]', $form).each(function() {
var $this = $(this);
if(!$this.data('necessary')) return true;
var name = $this.attr('name');
if($.inArray(name, radioNames) == -1) radioNames.push(name);
});
for(var i=0;i<radioNames.length; i++) {
var isChecked = $('input:checked[name='+radioNames[i]+']', $form).length > 0;
if(!isChecked) {
$('input[type="radio"][name="'+radioNames[i]+'"]', $form).eq(0).closest('.forgotpasswd-form__field').addClass('is-none');
} else {
$('input[type="radio"][name="'+radioNames[i]+'"]', $form).eq(0).closest('.forgotpasswd-form__field').addClass('_ok');
}
isValidate = isChecked && isValidate;
}
return isValidate;
});
// Обработка формы с Ajax
$ajaxForm.ajaxForm({
beforeSubmit: function (arr, $form) {
var isValidate = true;
var radioNames = [];
$('input[type="text"], input[type="email"], input[type="password"], input[type="checkbox"], select, textarea', $form).each(function() {
isValidate = inputChecker($(this)) && isValidate;
});
$('input[type="radio"]', $form).each(function() {
var $this = $(this);
if(!$this.data('necessary')) return true;
var name = $this.attr('name');
if($.inArray(name, radioNames) == -1) radioNames.push(name);
});
for(var i=0;i<radioNames.length; i++) {
var isChecked = $('input:checked[name='+radioNames[i]+']', $form).length > 0;
if(!isChecked) {
$('input[type="radio"][name="'+radioNames[i]+'"]', $form).eq(0).closest('.forgotpasswd-form__field').addClass('is-none');
}
isValidate = isChecked && isValidate;
}
return isValidate;
},
success: function (message) {
$nodesMessage.removeClass('success error');
if (message.status === 'success') {
if ($successMessage.length) {
$.fancybox($successMessage,{
afterClose: function(){
if($successMessage.hasClass('js-reload-page')){
window.location = window.location;
}
},
wrapCSS: 'modal-theme',
autoCenter: false,
padding: 0,
fitToView: false
});
} else {
if ($nodesMessage.length) {
$nodesMessage.addClass(message.status).html(message.info);
} else {
console.warn(message);
}
}
} else if(message.status === 'error') {
if ($nodesMessage.length) {
$nodesMessage.addClass(message.status).html((message.info) ? message.info : message.error);
/** Суда то приходит сообщение в message.error то message.error хранит true а текст сообщения message.info **/
} else {
console.warn(message);
}
} else {
if ($nodesMessage.length) {
$nodesMessage.addClass(message.status).html(message.info);
} else {
console.warn(message);
}
}
},
error: function () {
$.fancybox($successMessage, {
wrapCSS: 'modal-theme',
autoCenter: false,
padding: 0,
fitToView: false
});
}
});
// Появление полей для смены пароля
$('.js-pass-link', $context).on('click', function () {
$('.js-pass-change', $context).css({
display: 'table-row'
});
$(this).closest('.forgotpasswd-form__field').hide();
return false;
});
$('.js-pass-cancel', $context).on('click', function () {
$('.js-pass-change', $context).removeAttr('style');
$('.js-pass-link', $context)
.closest('.forgotpasswd-form__field')
.css({
display: 'table-row'
});
return false;
});
});
});
// Обработка стандартной формы
$(function () {
$('.form-standart').livequery(function () {
var $context = $(this);
var $form = $('form', $context);
$form.initWebForm('form-standart');
$('[data-mask="phone"]', $context).each(function(){
$(this).mask('+7 (999) 999-99-99', {clearIfNotMatch: true});
});
// Появление полей для смены пароля
$('.js-pass-link', $context).on('click', function () {
$context.find('[name=changepassword]').val('1');
$('.js-pass-change', $context).addClass('is-visible');
$(this).closest('.form-standart__field').addClass('is-hidden');
return false;
});
$('.js-pass-cancel', $context).on('click', function () {
$context.find('[name=changepassword]').val('');
$('.js-pass-change', $context).removeClass('is-visible');
$('.js-pass-link', $context).closest('.form-standart__field').removeClass('is-hidden');
return false;
});
});
});
// Галерея
$(function () {
$('.gallery-list').each(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
600: '_mx600',
470: '_mx470',
300: '_mx300'
}
})
});
});
$(function(){
$('.header-mobile').livequery(function(){
var $context = $(this);
var $buttons = $('a[data-action="mobile-menu"]', $context);
var isMenuOpened = false;
function closeActiveMenus(isSwitch){
$buttons = $('a[data-action="mobile-menu"]', $context); // dom changes, so buttons must be set again
$buttons.filter('.is-active').each(function(){
$(this).removeClass('is-active');
$($(this).attr('href')).removeClass('is-active');
});
if(!isSwitch){
$context.removeClass('is-menu-opened');
isMenuOpened = false;
window.endPreventBodyScroll();
}
}
$(document).on('click', 'a[data-action="mobile-menu"]', function(e){
var $button = $(this);
var $plate = $($button.attr('href'));
e.preventDefault();
if($button.is('.is-active')) {
closeActiveMenus();
} else {
closeActiveMenus(true);
$button.addClass('is-active');
$plate.addClass('is-active');
if($plate.height() >= $(window).height()*0.8) {
$plate.addClass('is-fullscreen');
} else {
$plate.removeClass('is-fullscreen');
}
$context.addClass('is-menu-opened');
isMenuOpened = true;
window.startPreventBodyScroll();
}
});
$(document).on('touchstart', function(e){
if(isMenuOpened && $(e.target).closest('.header-mobile').length === 0){
closeActiveMenus();
}
});
$(document).on('cartDataAvailable', function(){
if(isMenuOpened){
$('.header-mobile__cart-button, .header-mobile__cart-holder').addClass('is-active');
}
});
$(document).on('fancybox-before-show', function(){
closeActiveMenus();
});
});
});
/**
* Автовысота
*/
$.fn.equivalent = function () {
var $blocks = $(this), //запишем значение jQuery выборки к которой будет применена эта функция
maxH = $blocks.eq(0).height(); //примем за максимальную высоту - высоту первого блока в выборке
$blocks.each(function(){
//делаем сравнение высоты каждого блока с максимальной
maxH = ( $(this).height() > maxH ) ? $(this).height() : maxH;
});
$blocks.height(maxH); //устанавливаем найденное максимальное значение высоты для каждого блока jQuery выборки
}
// logo-slider block
$(function () {
// .logo-slider js
$('.logo-slider').livequery(function () {
var $context = $(this);
var $slider = $('.logo-slider__slider', $context);
function initSlider() {
$slider.slick({
dots: false,
infinite: true,
slidesToShow: 8,
slidesToScroll: 1,
responsive: [
{
breakpoint: 1580,
settings: {
slidesToShow: 7,
slidesToScroll: 1
}
},
{
breakpoint: 1367,
settings: {
slidesToShow: 6,
slidesToScroll: 1
}
},
{
breakpoint: 1280,
settings: {
slidesToShow: 5,
slidesToScroll: 1
}
},
{
breakpoint: 1024,
settings: {
slidesToShow: 4,
slidesToScroll: 1
}
},
{
breakpoint: 769,
settings: {
slidesToShow: 3,
slidesToScroll: 1
}
}
,
{
breakpoint: 680,
settings: "unslick"
}
]
});
}
initSlider();
var $slideImg = $slider.find('.logo-slider__image');
$slideImg.matchHeight();
});
});
// Строка поиска
$(function () {
$('.map-search').each(function () {
var $context = $(this);
var $clearbutton = $('.map-search__clear-field', $context);
var $input = $('.map-search__input', $context);
$input.on('keydown',function (event) {
if(event.target.value !== '') {
$clearbutton.removeClass('is-hide');
} else {
$clearbutton.addClass('is-hide');
}
});
$clearbutton.on('click', function () {
$input.val('');
$clearbutton.addClass('is-hide');
});
});
});
if(window.matchMedia('(max-width: 767px)').matches){
$(function () {
$('.map-search').each(function () {
var $context = $(this);
var $link = $('.map-search__path-link', $context);
$link.on('click', function () {
$('html, body').scrollTo('.map-search__maps');
});
});
});
}
// menu-footer
$(function () {
$('.menu-footer').livequery(function () {
var $context = $(this);
// Инициализация блока
(function init(){
initPseudoAll();
})();
// Раскрытие списка доп.пунктов
function initPseudoAll() {
var $pseudo_all_link = $('.js-show a', $context),
$hide_all_link = $('.js-hide a', $context);
$pseudo_all_link.on('click', function () {
var $item = $(this).closest(".menu-footer__item");
$item.hide().siblings(".more").show();
return false;
});
$hide_all_link.on('click', function () {
var $item = $(this).closest(".menu-footer__item");
$item.hide().siblings(".more").hide();
$item.siblings(".js-show").show();
return false;
});
}
});
});
// comments
$(function () {
$('.loader-link').livequery(function () {
var $context = $(this);
$context.children('a').on('click', function() {
$('body').addClass('loading');
});
})
});
// Новость в списке
$(function () {
$('.news-item').each(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
460: '_mx460'
}
});
});
});
var isLocalBuild = true;
// Обработка стандартной формы
$(function () {
$('.form-standart').livequery(function () {
var $context = $(this);
var $form = $('form', $context);
$form.initWebForm('form-standart');
$('[data-mask="phone"]', $context).each(function(){
$(this).mask('+7 (000) 000-00-00');
});
// Появление полей для смены пароля
$('.js-pass-link', $context).on('click', function () {
$context.find('[name=changepassword]').val('1');
$('.js-pass-change', $context).addClass('is-visible');
$(this).closest('.form-standart__field').addClass('is-hidden');
return false;
});
$('.js-pass-cancel', $context).on('click', function () {
$context.find('[name=changepassword]').val('');
$('.js-pass-change', $context).removeClass('is-visible');
$('.js-pass-link', $context).closest('.form-standart__field').removeClass('is-hidden');
return false;
});
});
});
// Обработка стандартной формы
$(function () {
$('.form-standart').livequery(function () {
var $context = $(this);
var $form = $('form', $context);
$form.initWebForm('form-standart');
$('[data-mask="phone"]', $context).each(function(){
$(this).mask('+7 (000) 000-00-00');
});
// Появление полей для смены пароля
$('.js-pass-link', $context).on('click', function () {
$context.find('[name=changepassword]').val('1');
$('.js-pass-change', $context).addClass('is-visible');
$(this).closest('.form-standart__field').addClass('is-hidden');
return false;
});
$('.js-pass-cancel', $context).on('click', function () {
$context.find('[name=changepassword]').val('');
$('.js-pass-change', $context).removeClass('is-visible');
$('.js-pass-link', $context).closest('.form-standart__field').removeClass('is-hidden');
return false;
});
});
});
// comments
$(function () {
//Стандартная печать
$('.order-detail__print').on('click', function () {
window.print();
});
});
// Календарь
$(function () {
$('.news-calendar').livequery(function () {
var $context = $(this);
var $calendar = $('.news-calendar__calendar', $context);
var $input = $('.news-calendar__input', $context);
var minDate = $context.data('min') || '-5d'; //http://api.jqueryui.com/datepicker/#option-minDate
var maxDate = $context.data('max') || '+5d'; //http://api.jqueryui.com/datepicker/#option-maxDate
function changeDate(date) {
$input.val(date);
}
$calendar.datepicker({
firstDay: 1,
dayNames: [ "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота" ],
dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
monthNames: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
monthNamesShort: [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
dateFormat: 'dd.mm.yy',
showOtherMonths: true,
minDate: minDate,
maxDate: maxDate,
onSelect: changeDate
});
});
});
// Слайдер фотографий
$(function () {
$('.photoalbums-slider').each(function () {
var $context = $(this);
var $slider = $('.photoalbums-slider__items', $context);
var $mainPrev = $('.photoalbums-slider__main-prev', $context);
var $mainNext = $('.photoalbums-slider__main-next', $context);
$slider.slick({
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: $mainPrev,
nextArrow: $mainNext
});
});
});
// Fancybox settings
$(function () {
$('.photogallery-plates').livequery(function () {
var $context = $(this);
var $photoLinks = $('.photogallery-plates__img-link', $context);
if($(window).width() < 768) {
$photoLinks.mobilezoom({backbutton: 'Вернуться'});
} else {
$photoLinks.fancybox({
type: 'image',
helpers: {
title: {
type: 'outside'
}
},
beforeLoad: function () {
//Шаблон задан в верстке
var template = $(".photogallery-plates__template").html();
var desc = $(this.element).data("text");
Mustache.parse(template); // optional, speeds up future uses
this.title = Mustache.render(template, {title: this.title, description: desc});
}
});
}
});
});
// Slider settings
$(function () {
$('.photogallery-sections-slider').livequery(function () {
var $context = $(this);
var $slider = $('.photogallery-sections-slider__slider', $context);
var $photoContainer = $('.photogallery-plates');
$slider.slick({
dots: true,
adaptiveHeight: true,
dotsClass: "photogallery-sections-slider__pagination",
prevArrow: "<span class='photogallery-sections-slider__arrows photogallery-sections-slider__arrow-left'></span>",
nextArrow: "<span class='photogallery-sections-slider__arrows photogallery-sections-slider__arrow-right'></span>"
});
if($context.is('.is-with-photo')){
//После смены слайда загруза фотографий в контейнер
$($slider).on('afterChange', function (event, slick, currentSlide) {
var url = $(slick.$slides.get(currentSlide)).attr('data-url');
var id = $(slick.$slides.get(currentSlide)).attr('id');
history.pushState({id: id}, 'Section', url);
if (typeof url != 'undefined') {
$photoContainer.animate({opacity: 0},500);
$photoContainer.load(url + ' .photogallery-plates');
$photoContainer.animate({opacity: 1},1000);
}
});
}
});
});
// Слайдер фотографий
$(window).on('load', function () {
$('.photogallery-with-thumbs').livequery(function () {
var $context = $(this);
var $slider = $('.photogallery-with-thumbs__items', $context);
var $mainPrev = $('.photogallery-with-thumbs__main-prev', $context);
var $mainNext = $('.photogallery-with-thumbs__main-next', $context);
var $thumbsPrev = $('.photogallery-with-thumbs__thumbs-prev', $context);
var $thumbsNext = $('.photogallery-with-thumbs__thumbs-next', $context);
var $thumbnails = $('.photogallery-with-thumbs__thumbnails-items', $context);
var $galleryLinks = $('.photogallery-with-thumbs__gallery-link', $context);
var slidesToShow = parseInt($context.data('thumbs-qtty')) || 5;
var mainSlider;
var thumbSlider;
function fixWidth() {
// slick slider somehow breaks on relative width
$slider.width('auto');
$thumbnails.width('auto');
$slider.width($slider.width());
$thumbnails.width($slider.width());
}
function initMainSlider() {
mainSlider = $slider.slick({
fade: true,
adaptiveHeight: true,
slidesToShow: 1,
slidesToScroll: 1,
prevArrow: $mainPrev,
nextArrow: $mainNext
});
}
function initThumbsSlider () {
thumbSlider = $thumbnails.slick({
slidesToShow: slidesToShow,
slidesToScroll: 1,
infinite: false,
prevArrow: $thumbsPrev,
nextArrow: $thumbsNext
});
}
function handleThumbClick () {
var index = $(this).data('index');
$slider.slick('slickGoTo', index);
}
function initGallery () {
$galleryLinks.fancybox({
type: 'image'
});
}
function resizeBlock () {
mainSlider.slick('unslick');
thumbSlider.slick('unslick');
fixWidth();
initMainSlider();
initThumbsSlider();
}
(function init () {
fixWidth();
initMainSlider();
initThumbsSlider();
initGallery();
$(window).on('resize', resizeBlock);
$thumbnails.on('click', '.photogallery-with-thumbs__thumbnails-item',handleThumbClick);
$context.on('resize.block', resizeBlock);
})();
});
});
$(function () {
$('.plate-advantages__items').slick({
dots: true,
dotsClass: "plate-advantages__pagination",
prevArrow: "<span class='plate-advantages__arrows plate-advantages__arrow-left'></span>",
nextArrow: "<span class='plate-advantages__arrows plate-advantages__arrow-right'></span>"
});
});
$(function() {
var div = document.createElement('div');
div.style.overflowY = 'scroll';
div.style.width = '50px';
div.style.height = '50px';
div.style.visibility = 'hidden';
document.body.appendChild(div);
var scrollWidth = div.offsetWidth - div.clientWidth;
document.body.removeChild(div);
$(window).on('load', function() {
$('.js-product-compare__products-options-titles')
.height($('.js-product-compare__products-scroll').height() - scrollWidth);
})
});
// comments
$(function () {
$('.product-constructor').livequery(function () {
var $context = $(this);
var zoomClassName = 'product-variant__zoom';
var constructorResultWrapper = $('.product-constructor__result-section');
var properties = $('.js-property');
var firstProp = $(document).find('.js-property').eq(0);
// Изменение свойств
var propVariant = '.product-variant__link';
$(document).on('click', propVariant, function(e) {
e.preventDefault();
if(!$(e.target).hasClass(zoomClassName) && !$(this).hasClass('is-muted')) {
var currentVariant = $(e.currentTarget);
var currentPropertyWrap = currentVariant.parents('.product-constructor__filter-item');
currentPropertyWrap.removeClass('is-empty'); // Свойтво выбранно, не пустое
var currentProp = currentPropertyWrap.find('.js-property');
var currentActiveVariant = currentVariant.parents('ul').find('a.is-active');
// Помечаем выбранный элемент
var currentClick = false;
currentActiveVariant.removeClass('is-active');
if(currentActiveVariant.data('xml-id') != currentVariant.data('xml-id')){
currentVariant.addClass('is-active');
} else {
currentClick = true;
}
var allSelected = true;
var nextProp;
var selectedVariants = []; // Выбранные свойства
properties.each(function () {
var propID = $(this).find('a.is-active').parents('ul').data('prop-id');
var propValueEnum = $(this).find('a.is-active').data('xml-id');
selectedVariants[propID] = propValueEnum;
if(typeof propValueEnum == 'undefined' && allSelected) {
allSelected = false;
if(!currentClick) {
nextProp = currentPropertyWrap.next(); // Следующее свойство для заполнения
// Если следующего свойства нет, то идем к первому не заполненному свойству
if (nextProp.length === 0) {
nextProp = $('.product-constructor__filter-item.is-empty');
}
} else {
nextProp = false;
}
}
});
var resultVisible = constructorResultWrapper.is(":visible");
constructorResultWrapper.fadeOut();
// Если не все свойства выбраны, то чистим все следующие выбранные свойства
var currentPropertyIndex = currentPropertyWrap.index();
$('.product-constructor__filter-item').each(function() {
if($(this).index() > currentPropertyIndex) {
$(this).addClass('is-empty');
$(this).find('a').removeClass('is-muted').removeClass('is-active');
}
});
// Обновляем массив свойств без активности всех нижестоящих
var selectedVariantsTmp = selectedVariants;
selectedVariants = [];
properties.each(function () {
var propID = $(this).find('a.is-active').parents('ul').data('prop-id');
selectedVariants[propID] = $(this).find('a.is-active').data('xml-id');
});
// Запускаем проверку на доступность свойств
$(document).trigger(
'constructor_calculate_variants',
[
selectedVariants,
selectedVariantsTmp,
nextProp,
currentProp,
resultVisible,
constructor_calculate_variants_callback
]
);
}
});
/**
* Callback события constructor_calculate_result
* Заполняет и показывает результат выбора опираясь на данные компонента Битрикс
* @param result
*/
var constructor_calculate_result_callback = function callback(result) {
$('.result-detail.is-price .result-detail__price').html(result.price);
jQuery.each(result.variants, function(i, val) {
var activeVariant = $("a[data-xml-id='"+val+"']");
var activeValue = activeVariant.find('.js-prop-value').html();
$(".result-detail[data-prop-id='"+i+"'] .result-detail__value").html(activeValue);
var resultImg = activeVariant.find('img').data('result-picture');
if(resultImg) $('.product-constructor__result-image img').attr('src', resultImg);
});
constructorResultWrapper.fadeIn();
$('html, body').animate({ scrollTop: constructorResultWrapper.offset().top }, 500);
};
/**
* Callback события constructor_calculate_variants
* Перестраиваем возможные варианты свойтв исходя из заданных
* @param result
*/
var constructor_calculate_variants_callback = function callback(result) {
// Чистим недоступные варианты выбора
// Иначе мы не сможем вернуться к выбору других предложений после первого выбора
var selectedVariants = []; // Собираем значения свойств повторно
var allSelected = true;
$('.js-property').each(function() {
var currentProp = $(this);
var propID = $(this).data('prop-id');
$(this).find('.product-variant__link').each(function() {
var xmlId = $(this).data('xml-id');
var isActive = $(this).hasClass('is-active');
var propVariants = result.availableVariants[propID];
// Если это не текущее свойство, то сначала зачишаем заблокированные.
// Чтобы текущее свойство сохранило свои доступные на предыдущем шаге варианты
// При этом, если был виден результат, значит при предыдущем нажатии были выделены все.
// В таком случае зачищаем и текущее свойство
if(result.currentProp.data('prop-id') != propID || result.resultVisible) {
$(this).removeClass('is-muted');
}
if(jQuery.inArray(xmlId+"", propVariants) === -1 &&
currentProp.data('prop-id') != firstProp.data('prop-id') &&
(result.currentProp.data('prop-id') != propID || result.resultVisible) ) {
if(isActive) $(this).removeClass('is-active');
$(this).addClass('is-muted'); // Блокируем вариант
}
// Добавляем класс активности, который стоял до пересчета, если вариант не заблокирован
if(!$(this).hasClass('is-muted') &&
result.selectedVariantsTmp[propID] == $(this).data('xml-id')) {
$(this).addClass('is-active');
}
});
var propValueEnum = $(this).find('a.is-active').data('xml-id');
selectedVariants[propID] = propValueEnum;
if(typeof propValueEnum == 'undefined' && allSelected) {
allSelected = false;
}
});
if(allSelected) {
// Если после обновления все свойства снова активные, запускаем генерацию результата
$(document).trigger('constructor_calculate_result', [selectedVariants, allSelected, constructor_calculate_result_callback]);
} else if(result.nextProp) {
// Если не все заполнены, то скролим к следующему пустому
$('html, body').animate({ scrollTop: result.nextProp.offset().top }, 500);
}
};
// Увеличение изображения
$(".product-variant__image-holder").each(function() {
if(typeof($(this).children('img').data('detail')) !== "undefined"){
$(this).append('<span class="'+zoomClassName+'"></span>');
}
});
// Увеличение изображения
$(document).on('click', "."+zoomClassName, function(e) {
e.preventDefault();
var detailLink = $(e.target).prev('img').data('detail');
if(typeof detailLink != "undefined"){
showPreview(detailLink);
}
});
/**
* Show Detail image
* @param link
* @returns {boolean}
*/
function showPreview (link) {
$.fancybox.open({
href: link
}, {
wrapCSS: '_product-preview _ajax-appended',
type: 'image',
fitToView: true,
autoResize: true,
padding: 20,
margin: 20,
maxWidth: 1200,
afterLoad: function () {
$.fancybox .showLoading()
},
afterShow: function () {
$(window).trigger('resize');
setTimeout(function () {
$.fancybox .hideLoading();
$('.fancybox-wrap._ajax-appended').removeClass('_ajax-appended');
$('.fancybox-wrap ._ajax-append').removeClass('_ajax-append');
}, 400);
}
}
);
return false;
}
})
});
// comments
(function($){
/** Плагин по торговым предложениям */
$.fn.catalogPlate = function (conf) {
var def_config = {
propertyView:{}, // свойства ТП отброжаемые на карточке ПРИМЕР {"ARTICLE": "js-article"}
selectsProperty:[], // свойства на которые есть input c соответствующем name ПРИМЕР ["COLOR_REF", "SIZES_CLOTHES", "SIZES_SHOES"]
offers:{} /**
JSON самих ТП ПРИМЕР
{
"608": {
"ID": 608,
"CATALOG_WEIGHT": "0",
"BUY_URL": "?region=msk&action=BUY&id=608",
"ADD_URL": "?region=msk&action=ADD2BASKET&id=608",
"COMPARE_URL": null,
"PROPERTIES": {
"COLOR_REF": "red",
"SIZES_SHOES": "36",
"SIZES_CLOTHES": "S"
},
"RATIO_PRICE": {
"VALUE": 2000,
"DISCOUNT_VALUE": 2000,
"PRINT_VALUE": "<span>2 000<\/span> \u0440\u0443\u0431.",
"PRINT_DISCOUNT_VALUE": "<span>2 000<\/span> \u0440\u0443\u0431.",
"DISCOUNT_DIFF": 0,
"PRINT_DISCOUNT_DIFF": "<span>0<\/span> \u0440\u0443\u0431.",
"DISCOUNT_DIFF_PERCENT": 0,
"CURRENCY": "RUB"
},
},
"607": { ...
....
}
*/
};
var config = $.extend({}, def_config, conf);
return this.each(function () {
var $th = $(this);
var $buyButton = $th.find('.js-buy-button');
var $subscribeButton = $th.find('.js-subscribe-button');
var $FastBuyButton = $th.find('.js-fast-buy-button');
var $CompareButton = $th.find('.js-compare-button');
var $Price = $th.find('.js-price');
var $OldPrice = $th.find('.js-old-price');
var offers,
selectsProperty,
propertyView,
$sel = $th.find('input.e_quantity, select.js-select, .js-select input, .js-val');
/**
* При смене значений инпута делаем или не делаем запрос на поиск соответствующего ТП
*/
var flagCh = true; /* выключатель changeSelect */
var changeSelect = function () {
var $thsel = $(this);
var $_sel;
var checkProp = {};
/*
* Если надо подобрать ТП
*/
if (flagCh) {
for (var i = 0; i < selectsProperty.length; i++) {
$_sel = $th.find('input[name="' + selectsProperty[i] + '"]');
if($_sel.length === 0){
$_sel = $th.find('select[name="' + selectsProperty[i] + '"]');
}
checkProp[selectsProperty[i]] = $_sel.val(); // формируем массив дла нахождения торгового предложения
}
SerchOfers(checkProp, $thsel);
}
};
/**
* Ищем подходящее товарное предложение
* @param checkProp Обьект вида {COLOR_REF: "red", SIZES_CLOTHES: "XS", SIZES_SHOES: "36"} для поиска соответствующего ТП
* @param $thsel Текущий измененный инпут
* @constructor
*/
var SerchOfers = function (checkProp, $thsel) {
/** Ищем ТП полностью удавлитворяющее по всем полям */
var obg = undefined;
$.each(offers, function (index, value) {
var isch = true;
$.each(checkProp, function (chindex, chvalue) {
if (value['PROPERTIES'][chindex] != chvalue) {
isch = false;
}
});
if (isch) {
obg = value;
}
});
/**
* НЕ нашел подходящее торговое предложение так что придется
* сбросить пару второстепенных свойств
* **/
if (typeof obg == "undefined") {
var min = 9007199254740992; //Number.MAX_SAFE_INTEGER;
$.each(offers, function (index, value) {
/** Проверяем только те ТП что подходят по свойству что мы только что проставили */
if (value['PROPERTIES'][$thsel.attr('name')] == $thsel.val()) {
if (min > value['RATIO_PRICE']['VALUE']) {
min = value['RATIO_PRICE']['VALUE'];
obg = value;
}
}
});
}
setStatus(obg);
};
var setStatus = function (offer) {
/** @var COMPARE_VARIANT */
var $_sel;
/**
* Проставляю цены и др поля под соответстыующее торговое предложение
* */
flagCh = false; // чтоб не срабатывал changeSelect
$buyButton.attr('href', offer['ADD_URL'].replace(/&/g, '&'));
if ($FastBuyButton.length)
$FastBuyButton.attr('href', offer['BUY_URL'].replace(/&/g, '&'));
if ($CompareButton.length){
$CompareButton.attr('href', offer['COMPARE_URL'].replace(/&/g, '&'));
if($CompareButton.data('add')){
$CompareButton.data('add', $CompareButton.data('add').replace(/id=\d+/g, 'id='+offer['ID']));
}
if($CompareButton.data('remove')){
$CompareButton.data('remove', $CompareButton.data('remove').replace(/id=\d+/g, 'id='+offer['ID']));
}
}
/**
* Показывем другие свойства данного ТП
*/
if(propertyView){
$.each(propertyView, function (index, value){
var $el = $th.find('.'+ value);
if($el.length){
$el.html(offer['PROPERTIES'][index]);
} else {
console.warn('Не нашел '+ '.'+ value);
console.warn('Не могу показать '+ offer['PROPERTIES'][index]);
}
});
}
if (offer['RATIO_PRICE']['DISCOUNT_DIFF'] > 0) {
$OldPrice.html('<span>' + offer['RATIO_PRICE']['VALUE'] + '</span>');
$Price.html(offer['RATIO_PRICE']['PRINT_DISCOUNT_VALUE']);
} else {
if(offer.hasOwnProperty('PROPERTIES')){
if (typeof offer['PROPERTIES']['OLD_PRICE'] != "undefined" && offer['PROPERTIES']['OLD_PRICE']) {
$OldPrice.html('<span>' + offer['RATIO_PRICE']['PRINT_VALUE'] + '</span>');
}
}
$Price.html(offer['RATIO_PRICE']['PRINT_VALUE']);
}
for (var i = 0; i < selectsProperty.length; i++) {
$_sel = $th.find('input[name="' + selectsProperty[i] + '"]');
if($_sel.length === 0){
$_sel = $th.find('select[name="' + selectsProperty[i] + '"]');
}
if ($_sel.length) {
$_sel.val(offer['PROPERTIES'][selectsProperty[i]]).change();
}
}
flagCh = true;
if (typeof initCompare == 'function') {
initCompare();
}
};
/**
* Ищем самое дешевое Торговое Предложение
* */
var setMinOffer = function () {
var min = 9007199254740992; //Number.MAX_SAFE_INTEGER;
var OfreVariant = [];
$.each(offers, function (index, value) {
if (min > value['RATIO_PRICE']['VALUE']) {
min = value['RATIO_PRICE']['VALUE'];
OfreVariant = value;
}
});
setStatus(OfreVariant);
};
var init = function () {
//console.log('catalogPlate.init');
offers = config.offers;
selectsProperty = config.selectsProperty;
if (offers){
setMinOffer();
}
$sel.on('change', changeSelect);
}
init();
}); // return catalogPlate
};
$.fn.selectOffers = function (conf) {
var config = $.extend({}, {}, conf);
return this.each(function () {
var $th = $(this);
var $inp = $th.find('input');
var $point = $th.find('[data-val]');
var changeSelect = function () {
$point.each(function () {
var $th = $(this);
if ($th.data('val') == $inp.val()) {
$th.find('span').addClass('is-active');
} else {
$th.find('span').removeClass('is-active');
}
});
}
var clickPoint = function () {
var $th = $(this);
$inp.val($th.data('val')).change();
return false;
};
var init = function () {
$inp.on('change', changeSelect);
$point.on('click', clickPoint);
changeSelect();
};
init();
}); // return selectOffers
}; // #END selectOffers
})(jQuery);
$(function () {
$('.product-detail').livequery(function () {
var $context = $(this);
$context.find('.js-select').selectOffers();
var $moreButton = $context.find('.js-more-button').first(),
$moreProps = $context.find('.js-more-props');
$moreButton.on('click', function () {
$moreProps.toggle();
return false;
});
})
});
// Список разделов фотогалереи
$(function () {
$('.photogallery-sections').each(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
800: 'is-3cols',
600: 'is-2cols',
400: 'is-1cols'
}
})
});
});
// Slider settings (вынесено в функцию, для вызова вне блока)
function initPromoSliders ($reinit) {
$('.promo-slider').each(function() {
var $context = $(this);
var $slider = $('.promo-slider__slider', $context);
var slidesCount = $('.promo-slider__slide', $slider).length;
if($context.hasClass("home-big-slider")) {
$slider.slick({
dots: false,
autoplay: false,
speed: 900,
arrows: false,
infinite: true
});
} else {
$slider.slick({
dots: (slidesCount > 1),
dotsClass: "promo-slider__pagination",
prevArrow: "<span class='promo-slider__arrows promo-slider__arrow-left'></span>",
nextArrow: "<span class='promo-slider__arrows promo-slider__arrow-right'></span>"
});
}
if(!$reinit) {
// Перенос фона из img в background
if($context.hasClass('is-adaptive-bg')) {
$('.promo-slider__bg-holder', $context).each(function() {
var $bgHolder = $(this);
var $img = $bgHolder.children('img');
$bgHolder.css('background-image','url('+$img.attr('src')+')');
$img.remove();
});
}
}
});
}
$(function () {
var percentTime;
var tick;
var time = 1;
var progressBarIndex = 0;
$('.promo-slider__slide').each(function(index) {
var progress = '<div class="inProgress inProgress' + index + '"></div>';
progress = '<span data-slick-index="'+ index +'" class="progressBar">' + progress + '</span>';
progress = '<span class="HomepageCarousel-tab-title">'+ $(this).find('.promo-slider__title').text() +'</span>' + progress;
progress = '<div class="glide__bullet glide__bullet--active">' + progress + '</div>';
$('.progressBarContainer').append(progress);
});
initPromoSliders();
function startProgressbar() {
resetProgressbar();
percentTime = 0;
tick = setInterval(interval, 10);
}
function interval() {
if ($('.promo-slider__slider .slick-track div[data-slick-index="' + progressBarIndex + '"]')
.attr("aria-hidden") === "true") {
progressBarIndex = $('.promo-slider__slider .slick-track div[aria-hidden="false"]').data("slickIndex");
startProgressbar();
} else {
percentTime += 1 / (time + 5);
$('.inProgress' + progressBarIndex).css({
width: percentTime + "%"
});
if (percentTime >= 100) {
var promoSliderSlideBullet = $('.promo-slider__slide-bullet');
$('.promo-slider__slider').slick('slickNext');
progressBarIndex++;
if (progressBarIndex > promoSliderSlideBullet.length - 1) {
progressBarIndex = 0;
}
promoSliderSlideBullet.removeClass('active');
promoSliderSlideBullet.eq(progressBarIndex).addClass('active');
startProgressbar();
}
}
}
function resetProgressbar() {
$('.inProgress').css({
width: 0 + '%'
});
clearInterval(tick);
}
startProgressbar();
// End ticking machine
$('.progressBarContainer div').on('click', function () {
clearInterval(tick);
var goToThisIndex = $(this).find(".progressBar").data('slickIndex');
var promoSliderSlideBullet = $('.promo-slider__slide-bullet');
$('.promo-slider__slider').slick('slickGoTo', goToThisIndex, false);
promoSliderSlideBullet.removeClass('active');
promoSliderSlideBullet.eq(goToThisIndex).addClass('active');
startProgressbar();
});
});
// Чек-бокс
$(function () {
$('.checkbox').livequery(function () {
var $context = $(this);
var $input = $('input[type="checkbox"]', $context);
function changeState () {
if($input.prop('checked')) {
$context.addClass('_checked')
} else {
$context.removeClass('_checked');
}
}
changeState();
$input.on('change', changeState);
});
});
// Обработка стандартной формы
$(function () {
// Функция проверки соответствия значения инпута регулярке
var checkVal = function ($input, regExp) {
var result = regExp.test($input.val());
if (result) {
$input.closest('.registration-form__field').removeClass('is-error');
} else {
$input.closest('.registration-form__field').addClass('is-error');
}
return result;
};
// Функция проверки обязательных полей формы
function inputChecker($input) {
var $field = $input.closest('.registration-form__field');
if ($field.hasClass('is-error, is-none')) return false;
if (!$input.data('necessary')) return true;
var type = $input.attr('type');
switch (type) {
case 'checkbox':
if (!$input.prop('checked')) {
$field.addClass('is-none');
return false;
}
break;
default:
if ($input.val() === '' || $input.hasClass('ui-placeholder')) {
$field.addClass('is-none');
return false;
}
return true;
}
return true;
}
$('.registration-form').each(function () {
var $context = $(this);
var $form = (!$context.hasClass("js-ajax") && !$('form', $context).hasClass("js-ajax")) ? $('form', $context) : $('');
var $ajaxForm = ($context.hasClass("js-ajax") || $('form', $context).hasClass("js-ajax")) ? $('form', $context) : $('');
var $successMessage = $('.success-message-modal', $context);
var $nodesMessage = $('.registration-form__node', $context);
var $capthaButton = $('.registration-form__captcha-link', $context);
if ($nodesMessage.length === 0) {
$context.prepend('<div class="registration-form__node"></div>');
$nodesMessage = $('.registration-form__node', $context);
}
// Сброс error при активности
$('input[data-necessary], textarea[data-necessary], select', $context).on('click keydown change', function () {
$(this).closest('.registration-form__field').removeClass('is-none is-error');
});
// Устанавливаем маски ввода
$('[data-mask="phone"]', $context).each(function(){
$(this).mask('+7 (000) 000-00-00');
});
$('[data-mask="email"]', $context).change(function () {
var regExp = /^([A-Za-z0-9_-]+\.)*[A-Za-z0-9_-]+@[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*\.[a-z]{2,6}$/g;
checkVal($(this), regExp);
return true;
});
// Обработка формы без Ajax
$form.on('submit', function () {
var isValidate = true;
var radioNames = [];
$nodesMessage.html('').removeClass().addClass('registration-form__node');
$('input[type="text"], input[type="email"], input[type="password"], input[type="checkbox"], select, textarea', $form).each(function () {
isValidate = inputChecker($(this)) && isValidate;
});
$('input[type="radio"]', $form).each(function () {
var $this = $(this);
if (!$this.data('necessary')) return true;
var name = $this.attr('name');
if ($.inArray(name, radioNames) == -1) radioNames.push(name);
});
for (var i = 0; i < radioNames.length; i++) {
var isChecked = $('input:checked[name=' + radioNames[i] + ']', $form).length > 0;
if (!isChecked) {
$('input[type="radio"][name="' + radioNames[i] + '"]', $form)
.eq(0)
.closest('.registration-form__field')
.addClass('is-none');
} else {
$('input[type="radio"][name="' + radioNames[i] + '"]', $form)
.eq(0)
.closest('.registration-form__field')
.addClass('_ok');
}
isValidate = isChecked && isValidate;
}
return isValidate;
});
// Обработка формы с Ajax
$ajaxForm.ajaxForm({
dataType: "json",
beforeSerialize: function(){
$ajaxForm.find('input[name="confirm"]').remove();
},
beforeSubmit: function (arr, $form) {
var isValidate = true;
var radioNames = [];
$('input[type="text"], input[type="email"], input[type="password"], input[type="checkbox"], select, textarea', $form).each(function () {
isValidate = inputChecker($(this)) && isValidate;
});
$('input[type="radio"]', $form).each(function () {
var $this = $(this);
if (!$this.data('necessary')) return true;
var name = $this.attr('name');
if ($.inArray(name, radioNames) == -1) radioNames.push(name);
});
for (var i = 0; i < radioNames.length; i++) {
var isChecked = $('input:checked[name=' + radioNames[i] + ']', $form).length > 0;
if (!isChecked) {
$('input[type="radio"][name="' + radioNames[i] + '"]', $form).eq(0).closest('.registration-form__field').addClass('is-none');
}
isValidate = isChecked && isValidate;
}
if ($("input[type='hidden'][name='confirm']", $form).length) {
$("input[type='hidden'][name='confirm']", $form).val(0);
}
return isValidate;
},
success: function (message) {
if (message.status === 'success') {
if ($successMessage.length) {
$successMessage.find('.js-fancybox-close').on('click', function(){
$.fancybox.close();
return false;
});
$.fancybox($successMessage, {
afterClose: function () {
if ($successMessage.hasClass('js-reload-page')) {
window.location = window.location;
}
},
wrapCSS: 'modal-theme',
autoCenter: false,
padding: 0,
fitToView: false
});
} else {
if ($nodesMessage.length) {
$nodesMessage.addClass(message.status).html(message.info);
} else {
console.warn(message);
}
}
} else if (message.status === 'error') {
if ($capthaButton.length){$capthaButton.click()}
if ($nodesMessage.length) {
$nodesMessage.addClass(message.status).html((message.error === true) ? message.info : message.error);
/** Суда то приходит сообщение в message.error то message.error хранит true а текст сообщения message.info **/
} else {
console.warn(message);
}
} else {
if ($capthaButton.length) $capthaButton.click()
if ($nodesMessage.length) {
$nodesMessage.addClass(message.status).html(message.info);
} else {
console.warn(message);
}
}
},
error: function () {
$.fancybox($successMessage, {
wrapCSS: 'modal-theme',
autoCenter: false,
padding: 0,
fitToView: false
});
}
});
// Появление полей для смены пароля
$('.js-pass-link', $context).on('click', function () {
$context.find('[name=changepassword]').val('1');
$('.js-pass-change', $context).css({
display: 'table-row'
});
$(this).closest('.registration-form__field').hide();
return false;
});
$('.js-pass-cancel', $context).on('click', function () {
$context.find('[name=changepassword]').val('');
$('.js-pass-change', $context).removeAttr('style');
$('.js-pass-link', $context)
.closest('.registration-form__field')
.css({
display: 'table-row'
});
return false;
});
});
});
// Обработка стандартной формы
$(function () {
// Функция проверки соответствия значения инпута регулярке
var checkVal = function($input, regExp) {
var result = regExp.test($input.val());
if(result) {
$input.closest('.sale-interview__field').removeClass('is-error');
} else {
$input.closest('.sale-interview__field').addClass('is-error');
}
return result;
};
// Функция проверки обязательных полей формы
function inputChecker($input) {
var $field = $input.closest('.sale-interview__field');
if($field.hasClass('is-error, is-none')) return false;
if(!$input.data('necessary')) return true;
var type = $input.attr('type');
switch (type) {
case 'checkbox':
if(!$input.prop('checked')) {
$field.addClass('is-none');
return false;
}
break;
default:
if($input.val() === '' || $input.hasClass('ui-placeholder')) {
$field.addClass('is-none');
return false;
}
return true;
}
return true;
}
$('.sale-interview').livequery(function () {
var $context = $(this);
var $form = (!$context.hasClass("js-ajax") && !$('form', $context).hasClass("js-ajax")) ? $('form', $context) : $('');
var $ajaxForm = ($context.hasClass("js-ajax") || $('form', $context).hasClass("js-ajax")) ? $('form', $context) : $('');
var $successMessage = $('.success-message-modal', $context);
var $capthaButton = $('.sale-interview__captcha-link', $context);
var $nodesMessage = $('.sale-interview__node', $context);
if ($nodesMessage.length === 0){
$context.prepend('<div class="auth-form__node"></div>');
$nodesMessage = $('.sale-interview__node', $context);
}
// Сброс error при активности
$('input[data-necessary], textarea[data-necessary], select', $context).on('click keydown change', function() {
$(this).closest('.sale-interview__field').removeClass('is-none is-error');
});
// Устанавливаем маски ввода
$('[data-mask="phone"]', $context).each(function(){
$(this).mask('+7 (000) 000-00-00');
});
$('[data-mask="email"]', $context).change(function () {
var regExp = /^([A-Za-z0-9_-]+\.)*[A-Za-z0-9_-]+@[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*\.[a-z]{2,6}$/g;
checkVal($(this), regExp);
return true;
});
// Обработка формы без Ajax
$form.on('submit', function () {
var isValidate = true;
var radioNames = [];
$nodesMessage.html('').removeClass().addClass('auth-form__node');
$('input[type="text"], input[type="email"], input[type="password"], input[type="checkbox"], select, textarea', $form).each(function() {
isValidate = inputChecker($(this)) && isValidate;
});
$('input[type="radio"]', $form).each(function() {
var $this = $(this);
if(!$this.data('necessary')) return true;
var name = $this.attr('name');
if($.inArray(name, radioNames) == -1) radioNames.push(name);
});
for(var i=0;i<radioNames.length; i++) {
var isChecked = $('input:checked[name='+radioNames[i]+']', $form).length > 0;
if(!isChecked) {
$('input[type="radio"][name="'+radioNames[i]+'"]', $form).eq(0).closest('.sale-interview__field').addClass('is-none');
} else {
$('input[type="radio"][name="'+radioNames[i]+'"]', $form).eq(0).closest('.sale-interview__field').addClass('_ok');
}
isValidate = isChecked && isValidate;
}
if($("input[type='hidden'][name='confirm']", $(this)).length) {
$("input[type='hidden'][name='confirm']", $(this)).val(0);
}
return isValidate;
});
// Обработка формы с Ajax
$ajaxForm.ajaxForm({
dataType: "json",
beforeSubmit: function (arr, $form) {
var isValidate = true;
var radioNames = [];
$('input[type="text"], input[type="email"], input[type="password"], input[type="checkbox"], select, textarea', $form).each(function() {
isValidate = inputChecker($(this)) && isValidate;
});
$('input[type="radio"]', $form).each(function() {
var $this = $(this);
if(!$this.data('necessary')) return true;
var name = $this.attr('name');
if($.inArray(name, radioNames) == -1) radioNames.push(name);
});
for(var i=0;i<radioNames.length; i++) {
var isChecked = $('input:checked[name='+radioNames[i]+']', $form).length > 0;
if(!isChecked) {
$('input[type="radio"][name="'+radioNames[i]+'"]', $form).eq(0).closest('.sale-interview__field').addClass('is-none');
}
isValidate = isChecked && isValidate;
}
if($("input[type='hidden'][name='confirm']", $form).length) {
$("input[type='hidden'][name='confirm']", $form).val(0);
}
return isValidate;
},
success: function (message) {
if (message.status === 'success') {
if ($successMessage.length) {
$.fancybox($successMessage, {
afterClose: function(){
if($successMessage.hasClass('js-reload-page')){
window.location = window.location;
}
},
wrapCSS: 'modal-theme',
autoCenter: false,
padding: 0,
fitToView: false
});
} else {
if ($nodesMessage.length) {
$nodesMessage.addClass(message.status).html(message.info);
} else {
console.warn(message);
}
}
} else if(message.status === 'error') {
if ($capthaButton.length) $capthaButton.click()
if ($nodesMessage.length) {
$nodesMessage.addClass(message.status).html((message.error === true)? message.info : message.error);
/** Суда то приходит сообщение в message.error то message.error хранит true а текст сообщения message.info **/
} else {
console.warn(message);
}
} else {
if ($capthaButton.length) $capthaButton.click()
if ($nodesMessage.length) {
$nodesMessage.addClass(message.status).html(message.info);
} else {
console.warn(message);
}
}
},
error: function () {
$.fancybox($successMessage, {
wrapCSS: 'modal-theme',
autoCenter: false,
padding: 0,
fitToView: false
});
}
});
// Появление полей для смены пароля
$('.js-pass-link', $context).on('click', function () {
$context.find('[name=changepassword]').val('1');
$('.js-pass-change', $context).css({
display: 'table-row'
});
$(this).closest('.sale-interview__field').hide();
return false;
});
$('.js-pass-cancel', $context).on('click', function () {
$context.find('[name=changepassword]').val('');
$('.js-pass-change', $context).removeAttr('style');
$('.js-pass-link', $context)
.closest('.sale-interview__field')
.css({
display: 'table-row'
});
return false;
});
});
});
// Строка поиска
$(function () {
$('.search-cities').each(function() {
var self = $(this);
self.livequery(function () {
var $context = $(this);
var $input = $('.search-cities__input', $context);
var $resultsHolder = $('.search-cities__results-holder', $context);
var isNotInteractive = $context.is('.is-not-interactive');
var $icon = $('.search-cities__icon', $context);
var $close = $('.search-cities__close', $context);
function showResultLightbox() {
var val = $(this).val();
if(val !== '') {
$resultsHolder.addClass('is-active');
} else {
$resultsHolder.removeClass('is-active');
}
}
$icon.on('click', function(e){
e.preventDefault();
$context.removeClass('is-hide-input').addClass('is-visible');
$input.focus();
});
$close.on('click', function(e){
e.preventDefault();
$context.addClass('is-hide-input').removeClass('is-visible');
});
if(!isNotInteractive){
$input.on('keyup', showResultLightbox);
}
if(self.hasClass("is-b2b")) {
$(".search-cities__b2b-explain").mouseenter(function(e) {
e.stopPropagation();
$(".search-cities__b2b-tooltip", self).addClass("is-visible");
}).mouseleave(function(e) {
e.stopPropagation();
$(".search-cities__b2b-tooltip", self).removeClass("is-visible");
});
}
});
});
});
/**
* Функция замены значения поля submit
*/
function media400px(){
var $sumbitButton = $(".search-title__submit");
var $sumbitPlate = $sumbitButton.closest('.search-title');
if(!$sumbitPlate.hasClass('no-change')) {
if (window.matchMedia('(max-width: 400px)').matches) {
$sumbitButton.addClass("fa").val("\uf002");
} else {
$sumbitButton.removeClass("fa").val("Найти");
}
}
}
// Строка поиска
$(document).ready(function() {
$('body').on('click','.js-show-search', function(e){
e.preventDefault();
$('.header__bottom .search-title')
.toggleClass('is-hide-input')
.toggleClass('is-visible');
$('body').toggleClass('no-scroll');
});
$(document).on('click', function(e) {
if (!$(e.target).closest("#title-search-input").length &&
!$(e.target).closest(".js-show-search").length) {
$('.header__bottom .search-title')
.addClass('is-hide-input')
.removeClass('is-visible');
$('body').removeClass('no-scroll');
}
e.stopPropagation();
});
});
$(function () {
$('.search-title').each(function() {
var self = $(this);
self.livequery(function () {
var $context = $(this);
var $input = $('.search-title__input', $context);
var $resultsHolder = $('.search-title__results-holder', $context);
var isNotInteractive = $context.is('.is-not-interactive');
var $icon = $('.search-title__icon', $context);
var $close = $('.search-title__close', $context);
var $clear = $('.search-title__clearfield', $context);
function showResultLightbox() {
var val = $(this).val();
if(val !== '') {
$resultsHolder.addClass('is-active');
} else {
$resultsHolder.removeClass('is-active');
}
}
$icon.on('click', function(e){
e.preventDefault();
$context.removeClass('is-hide-input').addClass('is-visible');
$('#title-search-input').focus();
});
$close.on('click', function(e){
e.preventDefault();
$context.addClass('is-hide-input').removeClass('is-visible');
});
$clear.on('click', function (e) {
e.preventDefault();
$input.val('');
});
if(!isNotInteractive){
$input.on('keyup', showResultLightbox);
}
if(self.hasClass("is-b2b")) {
$(".search-title__b2b-explain").mouseenter(function(e) {
e.stopPropagation();
$(".search-title__b2b-tooltip", self).addClass("is-visible");
}).mouseleave(function(e) {
e.stopPropagation();
$(".search-title__b2b-tooltip", self).removeClass("is-visible");
});
}
});
});
/**
* Убираем слово "найти" в поле submit
*/
media400px();
});
$(window).on('resize', function(){
media400px();
});
$(window).on('orientationchange', function(){
media400px();
});
// comments
$(function () {
$('.product-detail-modal').livequery(function () {
var $context = $(this);
$context.find('.js-select').selectOffers();
})
});
$(function () {
var section = $('.section-modal .section-tiles__title-text');
section.on('click', function (e) {
e.preventDefault();
var $this = $(this),
dataNum = $this.data('menu-num');
$('.section-modal').hide();
$('.section-modal__open-' + dataNum).show();
});
$('.header__modal').mouseleave(function () {
$('.section-modal').hide();
});
});
// Древовидное меню
$(function () {
$('.sidebar-menu').livequery(function () {
var $context = $(this);
var $firstHolders = $('.sidebar-menu__first-holder', $context);
var $firstItems = $('.sidebar-menu__first-item', $context);
var $firstLinks = $('.sidebar-menu__first-link', $context);
var $secondHolders = $('.sidebar-menu__second-holder', $context);
var $secondItems = $('.sidebar-menu__second-item', $context);
var $secondLinks = $('.sidebar-menu__second-link', $context);
var $thirdHolders = $('.sidebar-menu__third-holder', $context);
var $thirdItems = $('.sidebar-menu__third-item', $context);
var $thirdLinks = $('.sidebar-menu__third-link', $context);
var $fourthHolders = $('.sidebar-menu__fourth-holder', $context);
var $fourthItems = $('.sidebar-menu__fourth-item', $context);
var $fourthLinks = $('.sidebar-menu__fourth-link', $context);
var $allHolders = $firstHolders.add($secondHolders).add($thirdHolders).add($fourthHolders);
var $allLinks = $firstLinks.add($secondLinks).add($thirdLinks).add($fourthLinks);
var $allItems = $firstItems.add($secondItems).add($thirdItems).add($fourthItems);
function initHoldersFlip () {
$allHolders.each(function () {
var $this = $(this);
if($this.hasClass('sidebar-menu__second-holder') && !$this.hasClass('is-opened')) $this.slideUp(0);
});
}
function openSubHolder ($item) {
var $holder = $item.find('> *').filter($allHolders);
$item.addClass('is-opened');
$holder.slideDown(400);
}
function closeSubHolder ($item) {
var $holder = $item.find('> *').filter($allHolders);
$item.removeClass('is-opened');
$holder.slideUp(400);
}
function linkClickHandler () {
var $link = $(this);
var $item = $link.closest($allItems);
if(!$link.hasClass('is-contain')) return true;
$item.hasClass('is-opened') ? closeSubHolder($item) : openSubHolder($item);
return false;
}
initHoldersFlip();
$allLinks.on('click', linkClickHandler);
});
});
// Умный фильтр
$(function () {
$('.smart-filter').livequery(function () {
var $context = $(this);
var $fieldCaptions = $('.smart-filter__field-header', $context);
var $contentHolders = $('.smart-filter__field-content', $context);
function toggleContentHolder() {
var $field = $(this).closest('.smart-filter__field');
var $container = $('.smart-filter__field-content', $field);
if($field.hasClass('is-open')) {
$container.slideUp(400);
$field.removeClass('is-open');
} else {
$container.slideDown(400);
$field.addClass('is-open');
}
}
function initContentHolders () {
var $container = $(this);
var $field = $(this).closest('.smart-filter__field');
if($field.hasClass('is-open')) {
$container.slideDown(0);
} else {
$container.slideUp(0);
}
}
$contentHolders.each(initContentHolders);
$fieldCaptions.on('click', toggleContentHolder);
});
$("#filter-toggle").on('click', function (e) {
e.preventDefault();
var mobileWidth = 768;
var $filterBody = $(".product-table__left");
if($(window).width() < mobileWidth) {
$filterBody.slideToggle("medium");
}
});
});
// Умный фильтр
$(function () {
$('.smart-filter-dropdown').livequery(function () {
var $context = $(this);
var $main = $('.smart-filter-dropdown__main', $context);
var $fieldCaptions = $('.smart-filter-dropdown__field-header', $context);
var $activeField = $();
$('.smart-filter-dropdown__fields', $context)
.last()
.find('.smart-filter-dropdown__field-content')
.addClass('is-drop-left');
(function init() {
$(window).on('load resize', mainFixer);
$context.on('resize.block', function (e) {
mainFixer ();
e.stopPropagation();
});
$fieldCaptions.on('click', toggleContentHolder);
initTags();
$('.smart-filter-dropdown__header-mobile').on('click', function(e){
e.preventDefault();
$(this).toggleClass('is-active');
$main.toggle();
});
})();
function initTags() {
$('.smart-filter-dropdown__tag').on('click', function() {
var $valueName = $(this).attr('data-value-name');
if($valueName){
// Uncheck checkbox
$(this).closest('.smart-filter-dropdown__field')
.find('input[name="'+ $valueName +'"]')
.prop("checked", false);
// Unselect select
$(this).closest('.smart-filter-dropdown__field').find('select').val('');
$(this).closest('form').submit();
} else {
// Range slider
var slider = $(this).closest('.smart-filter-dropdown__field').find('.filter-scale');
var sliderMin = slider.attr('data-min');
var sliderMax = slider.attr('data-max');
slider.find('.js-min').val(sliderMin);
slider.find('.js-hidden-min').val(sliderMin);
slider.find('.js-max').val(sliderMax);
slider.find('.js-hidden-max').val(sliderMax);
$(this).closest('form').submit();
}
});
}
function toggleContentHolder() {
var $field = $(this).closest('.smart-filter-dropdown__field');
if($field.hasClass('is-open')) {
$field.removeClass('is-open');
} else {
if($activeField.length === 0) {
$('body').on('click', function (e) {
var $target = $(e.target);
if($target.is($activeField) || $target.closest($activeField).length) return;
$activeField.removeClass('is-open');
});
}
$activeField.removeClass('is-open');
$activeField = $field;
$field.addClass('is-open');
}
}
function mainFixer () {
$main.css('height', '');
setTimeout(function () {
$main.css('height', $main.height());
}, 20);
}
});
});
// Плитка разделов каталога
$(function () {
$('.section-tiles').each(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
900: 'is-3cols',
600: 'is-2cols',
400: 'is-flat'
}
});
});
});
$.fn.equivalent = function () {
var $blocks = $(this), //запишем значение jQuery выборки к которой будет применена эта функция
maxH = $blocks.eq(0).height(); //примем за максимальную высоту - высоту первого блока в выборке
$blocks.each(function(){
//делаем сравнение высоты каждого блока с максимальной
maxH = ( $(this).height() > maxH ) ? $(this).height() : maxH;
});
$blocks.height(maxH); //устанавливаем найденное максимальное значение высоты для каждого блока jQuery выборки
}
$(function () {
/**
* Подгоняем размер блоков сравнения
* @type {*}
*/
var $contentSection = $(".section-tiles__top");
if($contentSection.length > 0) {
$contentSection.equivalent();
}
/**
* Фильтры
*/
$(".section-tiles__filter-button").on("click", function () {
var $button = $(this);
$button.find(".section-tiles__filter-icon").toggleClass('active');
var $menu = $button.parent(".section-tiles__filter-group").find(".section-tiles__filter-menu");
$menu.slideToggle();
});
});
$(window).on("resize", function () {
var $contentSection = $(".section-tiles__top");
if($contentSection.length > 0){
$contentSection.equivalent();
}
});
$(window).on("orientationchange", function () {
var $contentSection = $(".section-tiles__top");
if($contentSection.length > 0){
$contentSection.equivalent();
}
});
// Вкладки, переключение табов
function tabsBlockInit() {
var $context = $('.tabs-block');
var $linkHolders = $('.tabs-block__link-holder', $context);
var $tabs = $('.tabs-block__tab', $context);
if($tabs.filter('.is-active').length === 0) {
$linkHolders.filter('.is-active').removeClass('is-active');
$tabs.eq(0).addClass('is-active');
$linkHolders.eq(0).addClass('is-active');
}
// Set corresponding tabs indexes
for(var i = 0; i < $linkHolders.length; i++) {
$linkHolders.eq(i).attr('data-index', i);
}
// Copy link-holders before corresponding tabs for mobile version
for(i = 0; i < $linkHolders.length; i++) {
$linkHolders
.eq(i)
.clone()
.addClass('is-hide-desktop')
.insertBefore($tabs.eq(i));
}
var $mobileLinkHolders = $('.tabs-block__tabs .tabs-block__link-holder', $context);
$(document).on('click', '.tabs-block__link-holder', function () {
var $this = $(this);
var index = $this.attr('data-index');
if($this.hasClass('is-active')) return false;
$linkHolders.add($tabs)
.filter('.is-active')
.removeClass('is-active');
$mobileLinkHolders.filter('.is-active').removeClass('is-active');
$linkHolders.eq(index).addClass('is-active');
$mobileLinkHolders.eq(index).addClass('is-active');
$tabs.eq(index).addClass('is-active');
return false;
});
}
$(function () {
$('.tabs-block').livequery(function () {
tabsBlockInit();
});
});
// Вкладки, переключение табов
function tabsSectionInit() {
var $context = $('.tabs-section');
var $linkHolders = $('.tabs-section__link-holder', $context);
var $tabs = $('.tabs-section__tab', $context);
if($tabs.filter('.is-active').length === 0) {
$linkHolders.filter('.is-active').removeClass('is-active');
$tabs.eq(0).addClass('is-active');
$linkHolders.eq(0).addClass('is-active');
}
// Set corresponding tabs indexes
for(var i = 0; i < $linkHolders.length; i++) {
$linkHolders.eq(i).attr('data-index', i);
}
// Copy link-holders before corresponding tabs for mobile version
for(i = 0; i < $linkHolders.length; i++) {
$linkHolders.eq(i).clone().addClass('is-hide-desktop').insertBefore($tabs.eq(i));
}
var $mobileLinkHolders = $('.tabs-section__tabs .tabs-section__link-holder', $context);
$(document).on('click', '.tabs-section__link-holder', function () {
var $this = $(this);
var index = $this.attr('data-index');
if($this.hasClass('is-active')) return false;
$linkHolders.add($tabs)
.filter('.is-active')
.removeClass('is-active');
$mobileLinkHolders.filter('.is-active').removeClass('is-active');
$linkHolders.eq(index).addClass('is-active');
$mobileLinkHolders.eq(index).addClass('is-active');
$tabs.eq(index).addClass('is-active');
return false;
});
}
$(function () {
$('.tabs-section').livequery(function () {
tabsSectionInit();
});
});
// Actions timer
$(function () {
$('.timer-counter').livequery(function () {
var $context = $(this);
var expireDate = new Date('2016/09/17 00:00:00');
var expireMessage = '<span class="promo-offer__expired">Время вышло!</span>';
// Конструктор таймера
function CountdownTimer(element, expireTime, expireMessage) {
this.elem = element;
this.expireTime = expireTime;
this.expireMessage = expireMessage;
this.countDown = function() {
var timer='',
today = new Date(),
day = Math.floor((this.expireTime-today)/(24*60*60*1000)),
hour = Math.floor(((this.expireTime-today)%(24*60*60*1000))/(60*60*1000)),
min = Math.floor(((this.expireTime-today)%(24*60*60*1000))/(60*1000))%60,
sec = Math.floor(((this.expireTime-today)%(24*60*60*1000))/1000)%60%60,
me = this;
if( ( this.expireTime - today ) > 0 ) {
timer += '<div class="timer-counter__item timer-counter__item--days"><span class="timer-counter__number">'+day+'</span><span class="timer-counter__value">Дней</span></div> ';
timer += '<div class="timer-counter__item timer-counter__item--hours"><span class="timer-counter__number">'+this.addZero(hour)+'</span><span class="timer-counter__value">Часов</span></div> ';
timer += '<div class="timer-counter__item timer-counter__item--minuts"><span class="timer-counter__number">'+this.addZero(min)+'</span><span class="timer-counter__value">Минут</span></div> ' +
'<div class="timer-counter__item timer-counter__item--seconds"><span class="timer-counter__number">'+this.addZero(sec)+'</span><span class="timer-counter__value">Секунд</span></div>';
this.elem.innerHTML = timer;
setTimeout( function(){ me.countDown(); }, 1000);
} else {
this.elem.innerHTML = this.expireMessage;
return false;
}
};
this.addZero = function(num){
return ('0'+num).slice(-2);
};
return this;
}
// Запуск таймера
(new CountdownTimer($context.get(0),expireDate,expireMessage)).countDown();
});
});
// comments
$(function () {
$('.units-calc').livequery(function () {
var $context = $(this);
var $syncedInputs = $('[data-sync-factor]', $context);
var $qttyItems = $('.units-calc__qtty-item', $context);
var $price = $('[data-current-price]', $context);
var $qtty = $('[data-current-qtty]', $context);
var $total = $('.units-calc__current-total-val', $context);
var $oldPrice = $('[data-old-price]', $context);
var $oldTotal = $('.units-calc__old-total-val', $context);
(function () {
initSyncInputs();
})();
function initSyncInputs () {
$syncedInputs.on('change', function () {
var $this = $(this);
var syncFactor = parseFloat($this.data('sync-factor')) || 1;
var val = parseFloat($this.val()) * syncFactor;
$syncedInputs.each(function () {
var $otherInput = $(this);
var $counter = $otherInput.closest('.counter-input');
var $equivalent = $counter.find('.counter-input__equivalent-val');
var $changeMeasure = $('.counter-input__change-measure', $counter);
var $changeUnit = $('.counter-input__unit', $counter);
var syncFactor = $otherInput.data('sync-factor') || 1;
var convertFactor = $otherInput.data('convert-factor') || 1;
var isFloor = $otherInput.data('floor');
var result;
var equivalent;
!isFloor ? result = Math.ceil(val/syncFactor) : result = Math.floor(val/syncFactor)
equivalent = Math.ceil(result * convertFactor);
$otherInput.val(result);
$changeUnit.text(plural(result, $changeUnit.data('plural').split(',')));
$equivalent.text(equivalent);
$changeMeasure.text(plural(equivalent, $changeMeasure.data('plural').split(',')));
});
if(getOldCost()){
$oldTotal.text(accounting.formatNumber(getOldCost(), 0, ''));
}
$total.text(accounting.formatNumber(getCurrentCost(), 0, ' '));
});
$('.counter-input__change-measure').on('click', function () {
var $target = $qttyItems.not('.is-active');
$qttyItems.removeClass('is-active');
$target.addClass('is-active');
});
}
function getCurrentCost () {
var price = parseFloat($price.data('current-price')) || 0;
var qtty = parseFloat($qtty.val()) || 0;
return price * qtty;
}
function getOldCost () {
var price = parseFloat($oldPrice.data('old-price')) || 0;
var qtty = parseFloat($qtty.val()) || 0;
return price * qtty;
}
})
});
$(function () {
$('.upload-input').each(function () {
var $context = $(this);
var $input = $('input[type="file"]', $context);
var $text = $('.upload-input__text', $context);
function getName(str) {
var i;
if (str.lastIndexOf('\\')) {
i = str.lastIndexOf('\\') + 1;
} else {
i = str.lastIndexOf('/') + 1;
}
return str.slice(i);
}
$input.on('change', function () {
$text.text(getName($(this).val()));
});
});
});
// comments
$(function () {
$('.vacancy-accordion').livequery(function () {
var $context = $(this);
var $items = $('.vacancy-accordion__item', $context);
$items.each(function () {
var $item = $(this);
var $title = $('.vacancy-accordion__title', $item);
var $detail = $('.vacancy-accordion__detail', $item);
$title.on('click', function () {
$detail.slideToggle();
});
});
})
});
// Плитка видео
$(function () {
$('.video-tiles').livequery(function () {
var $context = $(this);
var $playElems = $('.video-tiles__play-btn', $context);
$playElems.fancybox({
type: 'iframe',
openEffect : 'none',
closeEffect : 'none',
wrapCSS: 'is-video',
padding: 0,
helpers : {
media : {}
}
});
})
});
// Выбор рейтинга
$(function () {
$('.vote-stars').livequery(function () {
var $context = $(this);
var $items = $('.vote-stars__item', $context);
var $input = $('.vote-stars__input input', $context);
var isInit = false;
var isUnchanged = $context.hasClass('is-unchanged');
function changeValueByClick () {
var $currItem = $(this);
var index = $items.index($currItem);
var value = 5 - index;
$input.val(value);
$items.removeClass('is-active');
$currItem.find('~ .vote-stars__item').addClass('is-active');
$currItem.addClass('is-active');
if(isInit){
$(document).trigger('vote_stars_set_value', [value]);
}
}
function changeValueByInput () {
var value = parseFloat($input.val());
changeValueByClick.apply($items.eq(5 - value));
}
changeValueByInput();
isInit = true;
if(!isUnchanged) {
$items.on('click', changeValueByClick);
$input.on('change.block', changeValueByInput);
}
});
});
// Блок с картой
$(function () {
$('.ymap').livequery(function () {
var $context = $(this);
var $mapHolder = $('.ymap__map', $context);
var $marks = $('.ymap__point', $context);
var map;
var collection ;
(function init() {
// ymapAPIready == true если был загужен api карт, иначе ждем события загрузки.
// определяется в script.js
if(!ymapAPIready) {
$(document).on('ymapAPIready', init);
return;
}
createMap();
defaultPlacemarking($marks);
initBlockAPI();
$context.triggerHandler('mapReady.block'); // without bubble up
})();
function createMap () {
map = new ymaps.Map($mapHolder.get(0), {
center: $mapHolder.data('center').split(','),
zoom: ($mapHolder.data('zoom'))? $mapHolder.data('zoom'): 6,
controls: ['default']
});
map.behaviors.disable('scrollZoom');
collection = new ymaps.GeoObjectCollection();
}
function defaultPlacemarking($marks) {
$marks.each(function () {
var $this = $(this);
setPlacemark({
address: $('.ymap__point-address', $this).html(),
phone: $('.ymap__point-phone', $this).html(),
hours: $('.ymap__point-hours', $this).html(),
type: $('.ymap__point-type', $this).html(),
coords: $this.data('coords').split(','),
details: ($this.data('detail') === undefined),
link: $this.data('link') || '/',
markTemplate: $this.data('mark-template') || 'default',
balloonTemplate: $this.data('balloon-template') || 'default',
layoutTemplate: $this.data('layout-template') || 'default'
});
});
map.geoObjects.add(collection);
if(!$mapHolder.data('center') || !$mapHolder.data('zoom')) {
// Устанавливаем карте центр и масштаб так, чтобы охватить коллекцию целиком.
map.setBounds(collection.getBounds());
}
}
function setPlacemark(mark) {
var placemark;
var iconTemplate = getMarkTemplate(mark.markTemplate);
placemark = new ymaps.Placemark(
[parseFloat(mark.coords[0]), parseFloat(mark.coords[1])],
$.extend({
address: mark.address,
phone: mark.phone,
hours: mark.hours,
link: mark.link,
iconContent: mark.type,
details: mark.details
}, mark.data),
{
// Изображение метки
iconLayout: iconTemplate.template,
iconShape: iconTemplate.shape,
iconOffset: iconTemplate.offset,
hideIconOnBalloonOpen: true,
// Свойства балуна
balloonShadow: false,
balloonContentLayout: getBalloonTemplate(mark.balloonTemplate),
balloonLayout: getLayoutTemplate(mark.layoutTemplate, mark.buildCallback),
balloonPanelMaxMapArea: 0
}
);
collection.add(placemark);
}
function resetPlacemarks() {
for(var i = 0; i < placemarks.length; i++) {
map.geoObjects.remove(placemarks[i]);
}
}
function getBalloonTemplate (name) {
// Шаблонизация https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Template-docpage
var template;
name = name || 'default';
switch (name) {
default:
template =
'<div class="ymap__balloon-inner">' +
'<div class="ymap__balloon-header">' +
'<div class="ymap__balloon-address">{{properties.address|raw}}</div>' +
'</div>' +
'<div class="ymap__balloon-content">' +
'<div class="ymap__balloon-phone">{{properties.phone|raw}}</div>' +
'<div class="ymap__balloon-hours">{{properties.hours|raw}}</div>' +
'{% if !properties.details %}' +
'<a href="{{properties.link|raw}}" class="ymap__balloon-details button js-shop-info">Подробнее</a>' +
'{% endif %}' +
'</div>' +
'</div>'
}
return ymaps.templateLayoutFactory.createClass(template);
}
function getMarkTemplate (name) {
var template;
name = name || 'default';
switch (name) {
case 'small':
template = {
template: ymaps.templateLayoutFactory.createClass(
'<div class="ymap__placemark-small"></div>'
),
shape: {
type: 'Rectangle',
coordinates: [[0, 20], [20, 0]]
},
offset: [-10, -20]
}
break;
case 'green':
template = {
template: ymaps.templateLayoutFactory.createClass(
'<div class="ymap__placemark-small is-green"></div>'
),
shape: {
type: 'Rectangle',
coordinates: [[0, 20], [20, 0]]
},
offset: [-10, -20]
}
break;
case 'yellow':
template = {
template: ymaps.templateLayoutFactory.createClass(
'<div class="ymap__placemark-small is-yellow"></div>'
),
shape: {
type: 'Rectangle',
coordinates: [[0, 20], [20, 0]]
},
offset: [-10, -20]
}
break;
default:
template = {
template: ymaps.templateLayoutFactory.createClass(
'<div class="ymap__placemark">' +
'<div class="ymap__placemark-round"></div>' +
'<div class="ymap__placemark-text">' +
'{{ properties.iconContent }}' +
'</div>' +
'</div>'
),
shape: {
type: 'Rectangle',
coordinates: [[0, -46], [178, 0]]
},
offset: [0, 0]
}
}
return template
}
function getLayoutTemplate (name, buildCallback) {
var template;
name = name || 'default';
switch (name) {
default:
template =
'<div class="ymap__balloon-outer">' +
'<span class="ymap__balloon-close"></span>'+
'<div class="ymap__balloon-outer-holder">' +
'$[[options.contentLayout]]' +
'</div>' +
'</div>';
break;
}
return ymaps.templateLayoutFactory.createClass(template, {
build: function () {
this.constructor.superclass.build.call(this);
this._$element = $('.ymap__balloon-outer', this.getParentElement());
this._$element.find('.ymap__balloon-close').on('click', $.proxy(this.closeOnClick, this));
if(buildCallback !== undefined) buildCallback.apply(this);
this.applyElementOffset();
},
clear: function () {
$('body').off('click', this.closeOnBlur);
this.constructor.superclass.clear.call(this);
},
onSublayoutSizeChange: function () {
MyBalloonLayout.superclass.onSublayoutSizeChange.apply(this, arguments);
if(!this._isElement(this._$element)) return;
this.applyElementOffset();
this.events.fire('shapechange');
},
applyElementOffset: function () {
this._$element.css({
left: -(this._$element[0].offsetWidth / 2),
top: -(this._$element[0].offsetHeight)
});
},
closeOnBlur: function (e) {
var $target = $(e.target);
if($target.is(this._$element) || $target.closest(this._$element).length) {
return true;
} else {
this.events.fire('userclose');
}
},
closeOnClick: function () {
this.events.fire('userclose');
},
getShape: function () {
if(!this._isElement(this._$element)) return MyBalloonLayout.superclass.getShape.call(this);
var position = this._$element.position();
return new ymaps.shape.Rectangle(
new ymaps.geometry.pixel.Rectangle([
[position.left, position.top],
[
position.left + this._$element[0].offsetWidth,
position.top + this._$element[0].offsetHeight
]
])
);
},
onCloseClick: function (e) {
e.preventDefault();
this.events.fire('userclose');
},
_isElement: function (element) {
return element && element[0];
}
}
);
}
function initBlockAPI() {
$context.on('resize.block', function (event) {
setTimeout(function () {
if(map) {
map.container.fitToViewport(true);
}
}, 200);
event.stopPropagation();
});
$context.on('setPlacemark.block', function (event, mark) {
setPlacemark(mark);
event.stopPropagation();
});
$context.on('resetPlacemarks.block', function (event) {
resetPlacemarks();
event.stopPropagation();
});
$context.on('setCenter.block', function (event, center, zoom) {
map.setCenter(center, zoom, {
duration: 600
});
event.stopPropagation();
});
$context.on('destroy.block', function (event) {
if(map) map.destroy();
event.stopPropagation();
});
}
});
});
$(function () {
$(document).trigger('blocksReady');
})
$(document).ready(function() {
// Форма подписки
$(document).on('click', '.js-show-mail-form', function() {
$('.mail-modal_main').addClass('active');
});
$(document).on('click', '.mail-modal__close', function() {
$(this).parents('.mail-modal').removeClass('active');
});
$(document).on('click', function(event) {
if(($(event.target).closest(".mail-modal__block").length)||($(event.target).closest(".js-show-mail-form").length))
return;
$(".mail-modal").removeClass('active');
event.stopPropagation();
});
$(".sub_form").submit(function() {
var name = $('input[name="SUB_NAME"]').val();
var email = $('input[name="SUB_EMAIL"]').val();
var phone = $('input[name="SUB_PHONE"]').val();
if($('input[name="SUB_AGREE"]').is(':checked')) {
$(".mail-modal__input_agree").css("border","0");
$.post('/ajax/subscribe.php', {NAME: name, EMAIL: email, PHONE: phone}).done(function(data) {
if(data === "ok") {
$('.mail-modal_main').removeClass('active');
$('.mail-modal_success').addClass('active');
setCookie('mailFormCookie', 5, {expires: 60*60*24*365, path:"/"})
mindbox("async", {
operation: "customerSubscribedInPopup",
data: {
customer: {
firstName: name,
mobilePhone: phone,
email: email,
subscriptions: [{
pointOfContact: "Email",
topic: "homeComfort"
}]
}
},
});
} else {
$(".sub_error").html("Ошибка: " + data);
}
});
} else {
$(".mail-modal__input_agree").css("border","1px dotted red");
}
return false;
});
// END: Форма подписки
// запуск через 40-40-40 сек , 7 дней
setTimeout(function() {
checkMailFormCookie();
}, 40000);
setTimeout(function() {
checkMailFormCookie();
}, 80000);
setTimeout(function() {
checkMailFormCookie();
}, 120000);
});
// запуск через 40-40-40 сек , 7 дней
function checkMailFormCookie() {
if( window.location.href.indexOf("/cart/order/") > -1)
return false;
var mailFormCookie = getCookie('mailFormCookie');
switch (mailFormCookie) {
case undefined:
setCookie('mailFormCookie', 2, {expires: 60*60*24*7, path:"/"});
showMailForm(2);
break;
case "2":
setCookie('mailFormCookie', 3, {expires: 60*60*24*7, path:"/"});
break;
case "3":
setCookie('mailFormCookie', 4, {expires: 60*60*24*7, path:"/"});
break;
case "4":
break;
case "5":
break;
default:
break;
}
}
function showMailForm(time) {
setTimeout(function() {
$('.mail-modal_main').addClass('active');
}, time * 1000);
}
function setCookie(name, value, options) {
options = options || {};
var expires = options.expires;
if (typeof expires == "number" && expires) {
var d = new Date();
d.setTime(d.getTime() + expires * 1000);
expires = options.expires = d;
}
if (expires && expires.toUTCString) {
options.expires = expires.toUTCString();
}
value = encodeURIComponent(value);
var updatedCookie = name + "=" + value;
for (var propName in options) {
updatedCookie += "; " + propName;
var propValue = options[propName];
if (propValue !== true) {
updatedCookie += "=" + propValue;
}
}
document.cookie = updatedCookie;
}
function getCookie(name) {
var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
function deleteCookie(name) {
setCookie(name, "", {
expires: -1
});
}
$(document).ready(function(){
$('.js-model-btn .btn-ul').on('click', function() {
$(this).next(".model-list-items").toggleClass("active");
});
})