Your IP : 18.219.217.5
// comments
$(function () {
$('.accordion-steps').livequery(function () {
var $context = $(this);
});
});
$(window).load(function(){
$('.accordion-steps .form-standart').each(function(){
// Не нужна нам эта штука тут
$(this).find('.form-standart__node').remove();
});
});
// Сетка преимуществ
$(function () {
$('.advantages-grid').livequery(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
960: 'is-3cols',
700: 'is-2cols',
400: 'is-flat',
}
})
});
});
// comments
$(function () {
// code here...
});
$(function () {
/*
$('#auth.auth-block form').submit(function() {
var form = $(this);
var msg = form.serialize();
$.ajax({
type: 'POST',
url: window.location.href,
data: msg,
dataType: "json",
success: function(data) {
if(data.MESSAGE == true) {
location.reload();
} else {
form.find(".error-text").text(data.MESSAGE);
}
},
error: function(xhr, str){
form.find(".form-standart__fields-list").prepend('Возникла ошибка: ' + xhr.responseCode);
}
});
setTimeout(function(){form.find(".error-text").text("")}, 3000);
return false;
});
*/
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 () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// comments
$(function () {
// code here...
});
// 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',
beforeShow: function () {
$('html').addClass('fancybox-margin fancybox-lock');
}
}
);
}
e.preventDefault();
});
});
// Список буклетов
$(function () {
});
// comments
$(function () {
// code here...
});
// Список сертификатов
$(function () {
$('.brands-tiles').livequery(function () {
var $context = $(this);
});
});
$(function() {
});
// comments
$(function () {
$('.cart-items').livequery(function () {
var $context = $(this);
$(document).on('click', '.cart-items__sku-selected-link', function(e){
e.preventDefault();
$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');
});
});
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// Древовидное меню
$(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');
console.log($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();
console.log($contextHeight);
$(".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();
$('.catalog-compare-button').livequery(function () {
var $context = $(this);
})
});
// comments
$(function () {
$('.catalog-favor-button').livequery(function () {
var $context = $(this);
// code here...
})
});
// Каталог товаров плиткой
$(function () {
$('.catalog-items').livequery(function () {
// console.log('.catalog-items');
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] === undefined) {
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');
isResizeCatalogItem = false;
}
function equalizer() {
var $plates = $('.catalog-items__col', $context);
if($plates.length == 0) return;
$('.catalog-plate', $context).css('height', '');
if($context.hasClass('is-slide-to-mobile')){
if($(window).width()< widthPhone && isSlic && $cols.length){
// console.log('slick is-slide-to-mobile');
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;
// console.info('slick');
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){
// console.log('unslick');
mobslik.slick('unslick');
}
$plates.css("height", "auto");
//setTimeout( ResizeCatalogItem , 400);
}
}
}
equalizer();
$(window).on('resize orientationchange', equalizer);
$context.on('resize.block', equalizer);
/* $context.adaptBlock({
maxWidth: {
1040: 'is-3cols',
790: 'is-2cols',
510: 'is-1cols'
},
minWidth: {
}
}); */
});
});
// Плитка товара в каталоге
$(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);
});
});
// comments
$(function () {
// code here...
});
// Плитка товара в каталоге
$(function () {
$('.catalog-plate').each(function () {
var $context = $(this);
var $favor = $('.catalog-plate__favor', $context);
var $preview = $('.catalog-plate__preview', $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 (current, previous) {
var $content = $(current.content);
// $content.addClass('_ajax-append');
// current.content = $('<div>').append($content.clone()).html();
$.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);
});
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
//.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 () {
// code here...
});
// comments
$(function () {
$('.catalog-table').livequery(function () {
var $context = $(this);
$('.catalog-table__header-text.is-sortable', $context).on('click', function(e){
if($(this).is('.is-sorted-up')){
document.location = $(this).attr('data-sort-down');
} else {
document.location = $(this).attr('data-sort-up');
}
});
});
});
// Список сертификатов
$(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);
});
});
// Список сертификатов
$(function () {
$('.clients-list').livequery(function () {
var $context = $(this);
});
});
// comments
$(function () {
// code here...
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// comments
$(function () {
// code here...
});
$(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.click(
function(e){
e.preventDefault();
e.stopPropagation();
var $th = $(this);
var html_to_print ='<img src="'+$th.attr('href')+'"/>';
var doc = $('#print_frame')[0].contentDocument || $('#print_frame')[0].contentWindow.document;
var win = $('#print_frame')[0].contentWindow || $('#print_frame')[0];
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'
}
});
});
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// Вкладки, переключение табов
$(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 $links = $('.contacts-tabs__link', $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);
}
});
/*
$('.counter-input').each(function () {
var $context = $(this);
var $up = $('.counter-input__up', $context);
var $down = $('.counter-input__down', $context);
var $input = $('.counter-input__input', $context);
(function init() {
initCounter();
})();
function initCounter () {
$up.add($down).on('click', function () {
var $this = $(this);
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;
});
$input.on('change', function () {
var $this = $(this);
var val = parseFloat($this.val());
if(isNaN(val)) {
$this.val(1);
} else {
$this.val(val);
}
});
}
});
*/
});
// comments
$(function () {
// code here...
});
// comments
$(function () {
$('.faq-chat').livequery(function () {
var $context = $(this);
// code here...
})
});
// 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(index, domElement) {
var self = $(this),
title = $('.js-faq-simple__title', $(this)),
desc = $('.js-faq-simple__desc', $(this));
title.on('click', function(e) {
e.preventDefault();
$(this).parent().hasClass('is-show') ?
$(this).parent().removeClass('is-show') :
$(this).parent().addClass('is-show');
});
});
});
// Блок преимуществ
$(function () {
$('.favorites-title').each(function () {
var $context = $(this);
});
});
// Блок преимуществ
$(function () {
$('.features-block').each(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
700: 'is-2cols',
470: 'is-flat'
}
})
});
});
// comments
$(function () {
$(document).on('click', '.feedback-wall__readmore', function(e){
$parent = $(this).parents('.feedback-wall__item');
$parent.addClass('is-expanded');
e.preventDefault();
});
$(document).on('click', '.feedback-wall__readless', function(e){
$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 $fields = $('.filter-hor__field', $context);
var $fieldCaptions = $('.filter-hor__field-header', $context);
var $contentHolders = $('.filter-hor__field-content', $context);
var $fieldResets = $('.filter-hor__field-reset', $context);
var $fullReset = $('.filter-hor__full-reset', $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
}
console.log(delItemId);
$curValue.remove();
if($lastValue) {
$curField.remove();
}
$filterFieldValue = $("#"+delItemId);
$filterFieldValueTag = $filterFieldValue.get(0).tagName.toLowerCase();
$filterFieldValueType = $filterFieldValue.attr("type");
console.log($filterFieldValueTag);
console.log($filterFieldValueType);
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;
}
$valuesCount = $(".filter-hor__selected-value", $curField).length;
$form.submit();
});
}
function putFieldsListHeight() {
$fieldsList.each(function () {
$thisList = $(this);
$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(index) {
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 () {
$('.filter-scale').livequery(function () {
var $context = $(this);
var $scale = $('.filter-scale__scale', $context);
var $minInput = $('.filter-scale__input.js-min', $context);
var $minHiddenInput = $('.js-hidden-min', $context);
var $maxInput = $('.filter-scale__input.js-max', $context);
var $maxHiddenInput = $('.js-hidden-max', $context);
var $maxText = $('.filter-scale__max-val', $context);
var $minText = $('.filter-scale__min-val', $context);
var scaleMin = parseFloat($context.data('min')) || 0;
var scaleMax = parseFloat($context.data('max')) || 100;
var scaleStep = parseFloat($context.data('step')) || 0.01;
var currMin = scaleMin;
var currMax = scaleMax;
var log = ($context.data('log') == '1');
var realfield_min = $('input[name="' + $minInput.data('name') + '"]');
var realfield_max = $('input[name="' + $maxInput.data('name') + '"]');
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
if(parseInt(scaleMin) == 0 && log) scaleMin = 1; // Logaryphmic slider can't handle values < 1
if(parseInt(scaleMax) == 0) return;
var options = {
range: true,
max: scaleMax,
min: scaleMin,
values: [$context.data('left'), $context.data('right')],
step: scaleStep,
slide: function(e, ui){
updateFields(ui.values);
}
}
if(log){
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])];
}
// console.log("range slider", options);
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){
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 parts = x.toString().split(".");
var digits = significant_digits - parts[0].length;
if(digits < 0){
digits = 0;
}
x = x.toFixed(digits);
var parts = x.toString().split(".");
var 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);
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 = Math.round(x * convert_factor);
var digits = x.toString().length;
var divider = 1;
if(digits > significant_digits){
divider = Math.pow(10, digits - significant_digits);
}
if(significant_digits > 0) x = x - (x % divider);
return numberWithSpaces(x);
}
function updateRealFields(){
realfield_min.val($minInput.val().toString().replace(/[^\d.]/g, '') / convert_factor);
realfield_max.val($maxInput.val().toString().replace(/[^\d.]/g, '') / convert_factor);
realfield_min.change();
realfield_max.change();
}
function updateFields(values){
if(log){
var min = Math.exp(values[0]);
var max = Math.exp(values[1]);
min = bound(min, scaleMin, scaleMax);
max = bound(max, scaleMin, scaleMax);
if(min <= scaleMin){
$minInput.val(format(min, true));
$minHiddenInput.val(format(min, true).replace(/\s+/g, '')).trigger('change');
} else {
$minInput.val(format(min));
$minHiddenInput.val(format(min).replace(/\s+/g, '')).trigger('change');
}
if(max >= scaleMax){
$maxInput.val(format(max, true));
$maxHiddenInput.val(format(max, true).replace(/\s+/g, '')).trigger('change');
} else {
$maxInput.val(format(max));
$maxHiddenInput.val(format(max).replace(/\s+/g, '')).trigger('change');
}
} else {
var min = bound(values[0], options.min, options.max);
var max = bound(values[1], options.min, options.max);
$minInput.val(format(min));
$minHiddenInput.val(min).trigger('change');
$maxInput.val(format(max));
$maxHiddenInput.val(max).trigger('change');
}
updateRealFields();
}
function updateSlider(onchange){
var min = $minInput.val().toString().replace(/[^\d.]/g, '') / convert_factor;
var max = $maxInput.val().toString().replace(/[^\d.]/g, '') / convert_factor;
min = parseFloat(min);
max = parseFloat(max);
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);
}
$minInput.val(numberWithSpaces(min * convert_factor));
$minHiddenInput.val(min).trigger('change');
$maxInput.val(numberWithSpaces(max * convert_factor));
$maxHiddenInput.val(max).trigger('change');
updateRealFields();
if(log){
$scale.slider("values", [Math.log(min), Math.log(max)]);
} else {
$scale.slider("values", [min, max]);
}
}
$scale.slider(options);
updateFields(options.values);
$minInput.add($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(e){
updateSlider(true);
});
});
});
// Обработка стандартной формы
$(function () {
// Функция проверки соответствия значения инпута регулярке
var checkVal = function($input, regExp) {
var result = regExp.test($input.val());
console.log(result);
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') == undefined) 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;
break;
}
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;
var result = 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') == undefined) 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, options) {
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') == undefined) 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) {
// console.warn('success', message);
// console.warn('$successMessage.length', $successMessage.length);
$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 (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 () {
$('.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(e){
if(isMenuOpened){
$('.header-mobile__cart-button, .header-mobile__cart-holder').addClass('is-active');
}
});
$(document).on('fancybox-before-show', function(){
closeActiveMenus();
});
});
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// comments
$(function () {
$('.loader-link').livequery(function () {
var $context = $(this);
$context.children('a').on('click', function() {
$('body').addClass('loading');
});
})
});
// logo-slider block
$(function () {
// .logo-slider js
$('.logo-slider').livequery(function () {
var $context = $(this);
var $slider = $('.logo-slider__slider', $context);
var slidesToShow = $slider.attr('data-slides') || 7;
var slidesToShowXs = $slider.attr('data-slides-xs') || slidesToShow;
var slidesToShowXxs = $slider.attr('data-slides-xxs') || slidesToShowXs;
function getSlidesToShow(){
var ww = $(window).width();
if(ww < 480) return slidesToShowXxs;
if(ww < 768) return slidesToShowXs;
return slidesToShow;
}
function initSlider(){
var slidesToShow = getSlidesToShow();
var slidesToScroll = $context.attr('data-slides-to-scroll') || slidesToShow;
var slide_count = $slider.find('.logo-slider__slide').length;
if (slide_count > slidesToShow) {
$context.removeClass("noslider");
$slider.slick({
dots: false,
infinite: true,
slidesToShow: slidesToShow,
slidesToScroll: slidesToScroll,
prevArrow: "<span class='logo-slider__arrows logo-slider__arrow-left'></span>",
nextArrow: "<span class='logo-slider__arrows logo-slider__arrow-right'></span>"
});
} else {
$context.addClass("noslider");
}
}
initSlider();
$(window).on('resize orientationchange', function(e){
$slider.slick('unslick');
initSlider();
});
});
});
// comments
$(function () {
$('.menu-aside').livequery(function () {
var $context = $(this);
var $menuHolders = $('.menu-aside__first-holder, .menu-aside__second-holder, .menu-aside__third-holder', $context);
var $menuLevels = $('.menu-aside__first-level, .menu-aside__second-level, .menu-aside__third-level', $context);
var $menuItems = $('.menu-aside__first-item, .menu-aside__second-item, .menu-aside__third-item', $context);
var $menuItemsContain = $menuItems.filter('.is-contain');
var $menuLinks = $('.menu-aside__first-link, .menu-aside__second-link, .menu-aside__third-link', $context);
var isMobile = $context.is('.is-mobile');
var $chevrons;
// Инициализация блока
(function init(){
$context.removeClass('no-js');
initShowMore();
initMenuOptimizer();
if(isMobile) {
addRealChevrons();
}
})();
function addRealChevrons(){
$menuItemsContain.each(function(){
$(this).append('<span class="menu-aside__chevron"></span>');
});
$chevrons = $('.menu-aside__chevron', $context);
$chevrons.on('click', function(e){
$(this).closest('.is-contain').toggleClass('is-opened').siblings('.is-contain').removeClass('is-opened');
$level = $(this).parents('.is-opened').length;
$context.removeClass('is-level0 is-level1 is-level2').addClass('is-level' + $level);
});
}
// Раскрытие списка доп.пунктов
function initShowMore() {
var $moreLink = $('.menu-aside__first-link.js-show-more', $context);
var $moreHolder = $('.menu-aside__additional-holder', $context);
$moreLink.on('click', function () {
$moreHolder.addClass('is-opened');
$moreLink.addClass('is-hide');
return false;
});
}
// Оптимизатор менюшек
function initMenuOptimizer() {
var stateChangeTimeout, timeoutLength;
var isTouch = $('html').hasClass('touch');
isTouch ? timeoutLength = 0 : timeoutLength = 300;
function changeState() {
if(stateChangeTimeout !== undefined) window.clearTimeout(stateChangeTimeout);
stateChangeTimeout = window.setTimeout(function () {
$menuItems.removeClass('is-opened').filter(function() { return $(this).is(":hover"); }).addClass('is-opened');
}, timeoutLength);
}
/* function touchHandler () {
var $link = $(this);
var $item = $link.closest($menuItems);
if($item.hasClass('is-touched') || $item.find($menuItems).length == 0) return true;
$menuItems
.removeClass('is-touched')
.filter(function() { return $(this).is(":hover"); })
.addClass('is-touched');
return false;
} */
// if(isTouch) $menuLinks.on('click', touchHandler);
if(!isTouch) $menuItems.on('mouseenter mouseleave', changeState);
}
});
});
// Древовидное меню
$(function () {
// Инициализация только для состояния И
$('.menu-bottom').livequery(function () {
});
});
// 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;
});
}
});
});
// Древовидное меню
$(function () {
// Инициализация только для состояния И
$('.menu-top').livequery(function () {
var $context = $(this);
var $firstHolders = $('.menu-top__first-holder', $context);
var $firstItems = $('.menu-top__first-item', $context);
var $firstLinks = $('.menu-top__first-link', $context);
var $secondHolders = $('.menu-top__second-holder', $context);
var $secondItems = $('.menu-top__second-item', $context);
var $secondLinks = $('.menu-top__second-link', $context);
var $thirdHolders = $('.menu-top__third-holder', $context);
var $thirdItems = $('.menu-top__third-item', $context);
var $thirdLinks = $('.menu-top__third-link', $context);
var $fourthHolders = $('.menu-top__fourth-holder', $context);
var $fourthItems = $('.menu-top__fourth-item', $context);
var $fourthLinks = $('.menu-top__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);
var $moreLinks = $('.menu-top__more-link', $context);
function initMoreLinks () {
$moreLinks.each(function () {
var $link = $(this);
var $list = $link.closest('.menu-top__third-level');
var $items = $list.find('.menu-top__third-item');
var $less = $list.find('.menu-top__less-link');
var qtty = $link.data('hide-qtty');
$less.on('click', function () {
$items.slice($items.length - (qtty + 1), $items.length - 1).addClass('is-hide');
$less.removeClass('is-active');
$link.addClass('is-active');
});
$link.on('click', function () {
$items.removeClass('is-hide');
$less.addClass('is-active');
$link.removeClass('is-active');
});
});
}
initMoreLinks();
});
});
// Древовидное меню
$(function () {
// Инициализация только для варианта с разворачивающимися пунктами
$('.menu-tree.is-expandable').livequery(function () {
var $context = $(this);
var id = $context.attr('id');
var $firstHolders = $('.menu-tree__first-holder', $context);
var $firstItems = $('.menu-tree__first-item', $context);
var $firstLinks = $('.menu-tree__first-link', $context);
var $secondHolders = $('.menu-tree__second-holder', $context);
var $secondItems = $('.menu-tree__second-item', $context);
var $secondLinks = $('.menu-tree__second-link', $context);
var $thirdHolders = $('.menu-tree__third-holder', $context);
var $thirdItems = $('.menu-tree__third-item', $context);
var $thirdLinks = $('.menu-tree__third-link', $context);
var $fourthHolders = $('.menu-tree__fourth-holder', $context);
var $fourthItems = $('.menu-tree__fourth-item', $context);
var $fourthLinks = $('.menu-tree__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.parent().hasClass('is-opened')) {
$this.slideUp(0);
//return ;
}
});
}
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 (e) {
var $item = $(this);
// click on the actual link, not on pseudo-arrow
if(e.target != this) return true;
if(!$item.hasClass('is-contain')) return false;
$item.hasClass('is-opened') ? closeSubHolder($item) : openSubHolder($item);
return false;
}
function addShowAllLink(id) {
if(typeof window.obShowLevelParams !== "undefined") {
var params = window.obShowLevelParams[id];
for(var level in params) {
$('.menu-tree__'+level+'-item:nth-child(n+'+(params[level]+1)+')', $context).css("display","none");
$('.menu-tree__'+level+'-level', $context).each(function () {
if($(this).find('.menu-tree__'+level+'-item').length > params[level]) {
$(this).find('.menu-tree__'+level+'-item:nth-child(n+'+(params[level])+'):not(".is-active")').css("display", "none");
$(this).append("<li class='menu-tree__show-all-item'><a class='menu-tree__show-all-link' data-level='"+level+"'>Показать все</a></li>");
}
});
}
$(".menu-tree__show-all-link", $context).on("click", function() {
var level = $(this).data("level");
var listItems = $(this).parents('.menu-tree__'+level+'-level');
if($(this).hasClass("is-active")) {
$(this).removeClass("is-active");
$(this).text("Показать все");
$('.menu-tree__'+level+'-item:nth-child(n+'+(params[level])+'):not(".is-active")', listItems).slideUp();
} else {
$(this).addClass("is-active");
$(this).text("Скрыть лишние");
$('.menu-tree__'+level+'-item:nth-child(n+'+(params[level])+')', listItems).slideDown(400);
}
});
}
}
addShowAllLink(id);
initHoldersFlip();
$allItems.on('click', linkClickHandler);
});
});
// Календарь
$(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, calendar) {
$input.val(date);
}
$calendar.datepicker({
firstDay: 1,
dayNames: [ "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота" ],
dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
monthNames: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
monthNamesShort: [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
dateFormat: 'dd.mm.yy',
showOtherMonths: true,
minDate: minDate,
maxDate: maxDate,
onSelect: changeDate
});
});
});
// Новость в списке
$(function () {
$('.news-item').each(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
460: '_mx460'
}
});
});
});
// comments
$(function () {
// code here...
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// comments
$(function () {
// code here...
});
// comments
$(function () {
//Стандартная печать
$('.order-detail__print').on('click', function () {
window.print();
});
});
// comments
$(function () {
// code here...
});
// comments
$(function () {
// code here...
});
// comments
$(function () {
// code here...
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// comments
$(function () {
// code here...
});
// Слайдер фотографий
$(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);
var mainSlider;
var thumbSlider;
$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
var rendered = Mustache.render(template, {title: this.title, description: desc});
this.title = rendered;
}
});
}
});
});
// Slider settings
$(function () {
$('.photogallery-sections-slider').livequery(function () {
var $context = $(this);
var $slider = $('.photogallery-sections-slider__slider', $context);
var $sliderMeta = $('.photogallery-sections-slider__meta', $context);
var $sliderDots = $('.photogallery-sections-slider__pagination', $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 $mainImages = $('.photogallery-with-thumbs__image', $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();
/*
mainSlider.slick('checkResponsive');
mainSlider.slick('setPosition');
thumbSlider.slick('checkResponsive');
thumbSlider.slick('setPosition'); */
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 () {
$('.photogallery-sections').each(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
800: 'is-3cols',
600: 'is-2cols',
400: 'is-1cols'
}
})
});
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
$(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 productId = $context.data('product-id');
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');
var propValueEnum = $(this).find('a.is-active').data('xml-id');
selectedVariants[propID] = propValueEnum;
});
// Запускаем проверку на доступность свойств
$(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');
console.log(resultImg);
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 (current, previous) {
$.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 () {
// console.log( 'catalogPlate.changeSelect');
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(); // формируем массив дла нахождения торгового предложения
}
//console.log(checkProp);
SerchOfers(checkProp, $thsel);
}
};
/**
* Ищем подходящее товарное предложение
* @param checkProp Обьект вида {COLOR_REF: "red", SIZES_CLOTHES: "XS", SIZES_SHOES: "36"} для поиска соответствующего ТП
* @param $thsel Текущий измененный инпут
* @constructor
*/
var SerchOfers = function (checkProp, $thsel) {
// console.log('catalogPlate.SerchOfers');
/** Ищем ТП полностью удавлитворяющее по всем полям */
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;
// console.log('setStatus',offer);
/**
* Проставляю цены и др поля под соответстыующее торговое предложение
* */
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();
} else {
// console.warn('Не найден input[name="' + selectsProperty[i] + '"]')
}
}
flagCh = true;
if (typeof initCompare == 'function') {
initCompare();
}
};
/**
* Ищем самое дешевое Торговое Предложение
* */
var setMinOffer = function () {
// console.log('catalogPlate.setMinOffer');
var min = 9007199254740992; //Number.MAX_SAFE_INTEGER;
var OfreVariant = new Array();
$.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
$.fn.ProductAddToBuy = function (conf) {
var def_config = {
continue_shopping :"Продолжить покупки",
go_to_cart: "Перейти в корзину",
price: "Цена",
order: "Оформить заказ",
cart_url: "/cart/",
order_url: "/cart/order/",
title: '',
img_src: false,
link_src: "#"
};
var config = $.extend({}, def_config, conf);
return this.each(function () {
var $th = $(this);
var $buyButton = $th.find('.js-buy-button, .js-buy, [data-action=add-to-basket]').first();
var $subscribeButton = $th.find('.js-subscribe-button').first();
var $img = $th.find('.js-img');
var $oldPrice = $th.find('.js-old-price');
var $price = $th.find('.js-price');
var $optionsItem = $th.find('.js-options-item'); // js-label js-val
var checkSubscribe = function (button) {
if (button.data('id')) {
console.log('checkSubscribe ' + button.data('id'));
var href = '/bitrix/components/bitrix/catalog.product.subscribe/ajax.php';
$.ajax({
method: 'POST',
url: href,
dataType: "json",
data: {
sessid: BX.bitrix_sessid(),
checkSubscribe: 'Y',
itemId: button.data('id')
}
}).done(function (result) {
console.log(result);
if (result.subscribe) {
button.hide();
} else {
button.show();
}
});
}
};
var init = function () {
$buyButton.on('click', buyButtonClick );
//console.info('init '+ $th.attr('id'));
checkSubscribe($subscribeButton);
$subscribeButton.on('click', subscribeButtonClick );
};
var popupTemplate = $(
'<div class="cart-modal bem">' +
'<div class="cart-modal__holder">' +
'<div class="cart-modal__head">' +
'<div class="cart-modal__head-content">' +
'<div class="cart-modal__head-title">' +
'<span class="cart-modal__heading">{{messages.item_added_to_cart}}</span>' +
'</div>' +
'<div class="cart-modal__head-shopping">' +
'<a href="#" class="cart-modal__shopping-link">'+ config.continue_shopping +'</a> ' +
'</div>' +
'</div>' +
'</div>' +
'<div class="cart-modal__product">' +
'<div class="cart-modal__product-content">' +
'<div class="cart-modal__thumb">' +
'<a href="'+ config.link_src +'" class="cart-modal__thumb-link"><img src="'+ config.img_src +'" class="cart-modal__thumb-img"></a> ' +
'</div>' +
'<div class="cart-modal__detail">' +
'<div class="cart-modal__name">' +
'<a href="'+ config.link_src +'" class="cart-modal__name-link">'+ config.title +'</a> ' +
'</div>' +
'<div class="cart-modal__options">#</div> ' +
'</div>' +
'<div class="cart-modal__checkout">' +
'<div class="cart-modal__price">' +
'<div class="cart-modal__price-old"></div>' +
'<div class="cart-modal__price-actual">' +
'<div class="cart-modal__actual-title">' +
'<span class="cart-modal__actual-label">'+ config.price +'</span> ' +
'</div>' +
'<div class="cart-modal__actual-value"></div>' +
'</div>' +
'</div>' +
'<div class="cart-modal__purchase">' +
'<a href="'+ config.cart_url +'" class="cart-modal__order-btn button">'+ config.go_to_cart +'</a>'+
'<a href="'+ config.order_url +'" class="cart-modal__order-btn button-primary">'+ config.order +'</a>'+
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>');
var prepare = function(resp){
popupTemplate.find('.cart-modal__heading').html(resp.MESSAGE);
if($img.length){
popupTemplate.find('.cart-modal__thumb-img').attr('src', $img.attr('src'));
}
if($price.length){
popupTemplate.find('.cart-modal__actual-value').html($price.html());
}
if($oldPrice.length){
popupTemplate.find('.cart-modal__price-old').html($oldPrice.html());
}
var option_list = '';
if($optionsItem.length){
$optionsItem.each(function(){
var $th = $(this);
var value = "";
var $value = $th.find('[value="'+$th.find('.js-val').val()+'"]');
if( !$value.hasClass('js-val') ){
value = $value.html();
}else{
value = $th.find('[data-val="'+$th.find('.js-val').val()+'"]').text();
}
// js-label js-val
//console.info(value);
option_list += '<div class="cart-modal__option"><span class="cart-modal__option-label">'+$th.find('.js-label').html()+'</span> <span class="cart-modal__option-value">'+value+'</span></div>'
});
}
popupTemplate.find('.cart-modal__options').html(option_list);
};
var buyButtonClick = function(e){
// console.info('buyButtonClick '+$th.attr('id'));
e.preventDefault();
e.stopPropagation();
var $this = $(this);
var element = $th;
var quantity = element.find('.e_quantity');
var href = $this.attr('href') + '&ajax_basket=Y';
if (quantity.length) {
href += '&quantity=' + quantity.val();
}
$.ajax({
url: href,
dataType: "text"
}).done(function (resp) {
var response = jQuery.parseJSON(resp.replace(/'/g, '"'));
if (response.STATUS == 'OK') {
BX.onCustomEvent('OnBasketChange');
prepare(response);
$.fancybox( popupTemplate, {
afterLoad: function(){
popupTemplate.find('.cart-modal__shopping-link').on('click', function(){ $.fancybox.close(); return false; })
},
padding: '0',
autoCenter: false,
fitToView: false
} );
} else {
$.fancybox( '<b>Ошибка:</b><br>'+response.MESSAGE );
}
});
return false;
};
var subscribeButtonClick = function(e) {
e.preventDefault();
e.stopPropagation();
var $this = $(this),
href = '/bitrix/components/bitrix/catalog.product.subscribe/ajax.php';
$.ajax({
method: 'POST',
url: href,
dataType: "json",
data: {
sessid: BX.bitrix_sessid(),
subscribe: 'Y',
itemId: $this.data('id'),
siteId: BX.message('SITE_ID')
}
}).done(function (result) {
console.log(result);
if (result.success) {
$this.hide();
$.fancybox( '<b>' + result.message + '</b>');
} else {
$.fancybox( '<b>Ошибка:</b><br>' + result.message );
}
});
return false;
};
init();
}); // return 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;
});
})
});
// comments
$(function () {
$('.product-detail-modal').livequery(function () {
var $context = $(this);
$context.find('.js-select').selectOffers();
// code here...
})
});
// comments
$(function () {
// code here...
});
// description
$(function () {
//...
});
// Slider settings (вынесено в функцию, для вызова вне блока)
function initPromoSliders ($reinit) {
$('.promo-slider').each(function() {
var $context = $(this);
var $slider = $('.promo-slider__slider', $context);
$slider.slick({
dots: true,
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 () {
initPromoSliders();
});
// promo-tiles block
$(function () {
// .promo-tiles js
});
// Чек-бокс
$(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);
});
});
// comments
$(function () {
// code here...
});
// Обработка стандартной формы
$(function () {
// Функция проверки соответствия значения инпута регулярке
var checkVal = function ($input, regExp) {
var result = regExp.test($input.val());
console.log(result);
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') == undefined) 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;
break;
}
return true;
}
$('.registration-form').each(function () {
var $context = $(this);
var $form = (!$context.hasClass("js-ajax") && !$('form', $context).hasClass("js-ajax")) ? $('form', $context) : $("");
//var $ajaxForm = $('form.js-ajax', $context);
var $ajaxForm = ($context.hasClass("js-ajax") || $('form', $context).hasClass("js-ajax")) ? $('form', $context) : $("");
console.log($ajaxForm);
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;
var result = 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') == undefined) 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, options) {
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') == undefined) 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 **/
console.log(message.error);
} 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;
});
});
});
// Slider settings
$(function () {
/* $('.related-carousel').livequery(function () {
var $context = $(this);
var $slider = $('.related-carousel__slider', $context);
$slider.slick({
infinite: true,
slidesToShow: 3,
slidesToScroll: 3,
draggable: false,
centerPadding: '100px',
prevArrow: "<span class='related-carousel__arrows related-carousel__arrow-left'></span>",
nextArrow: "<span class='related-carousel__arrows related-carousel__arrow-right'></span>"
});
}); */
});
// comments
$(function () {
// code here...
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// Обработка стандартной формы
$(function () {
// Функция проверки соответствия значения инпута регулярке
var checkVal = function($input, regExp) {
var result = regExp.test($input.val());
console.log(result);
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') == undefined) 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;
break;
}
return true;
}
$('.sale-interview').livequery(function () {
var $context = $(this);
var $form = (!$context.hasClass("js-ajax") && !$('form', $context).hasClass("js-ajax")) ? $('form', $context) : $("");
//var $ajaxForm = $('form.js-ajax', $context);
var $ajaxForm = ($context.hasClass("js-ajax") || $('form', $context).hasClass("js-ajax")) ? $('form', $context) : $("");
console.log($ajaxForm);
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;
var result = 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') == undefined) 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, options) {
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') == undefined) 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 **/
console.log(message.error);
}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;
});
});
});
// comments
$(function () {
// code here...
});
// Строка поиска
$(function () {
$('.search-b2b-title').livequery(function () {
});
});
// comments
$(function () {
// code here...
});
// Строка поиска
$(function () {
$('.search-title').each(function() {
var self = $(this);
self.livequery(function () {
var $context = $(this);
var $form = $('.search-title__form', self);
var $input = $('.search-title__input', $context);
var $resultsHolder = $('.search-title__results-holder', $context);
var $submit = $('.search-title__submit', $context);
var isNotInteractive = $context.is('.is-not-interactive');
function showResultLightbox(event) {
var val = $(this).val();
// console.log('showResultLightbox');
if(val !== '') {
$resultsHolder.addClass('is-active');
} else {
$resultsHolder.removeClass('is-active');
}
}
function submitClick(event){
if($context.hasClass('is-hide-input')){
$context.removeClass('is-hide-input');
}else{
$form.submit();
}
return false;
}
if(! isNotInteractive){
$input.on('keyup', showResultLightbox);
}
$submit.on('click', submitClick);
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");
});
}
});
});
});
// Плитка разделов каталога
$(function () {
});
// Плитка разделов каталога
$(function () {
$('.section-tiles').each(function () {
var $context = $(this);
$context.adaptBlock({
maxWidth: {
900: 'is-3cols',
600: 'is-2cols',
400: 'is-flat'
}
});
});
});
// comments
$(function () {
// code here...
});
// Древовидное меню
$(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);
});
});
// comments
$(function () {
// sitemap block code here...
});
// Умный фильтр
$(function () {
$('.smart-filter').livequery(function () {
var $context = $(this);
var $fields = $('.smart-filter__field', $context);
var $fieldCaptions = $('.smart-filter__field-header', $context);
var $contentHolders = $('.smart-filter__field-content', $context);
var $fieldResets = $('.smart-filter__field-reset', $context);
var $fullReset = $('.smart-filter__full-reset', $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);
});
});
// Умный фильтр
$(function () {
$('.smart-filter-dropdown').livequery(function () {
var $context = $(this);
var $fields = $('.smart-filter-dropdown__field', $context);
var $main = $('.smart-filter-dropdown__main', $context);
var $itemsSet = $('.smart-filter-dropdown__items-set', $context);
var $fieldCaptions = $('.smart-filter-dropdown__field-header', $context);
var $contentHolders = $('.smart-filter-dropdown__field-content', $context);
var $fieldResets = $('.smart-filter-dropdown__field-reset', $context);
var $fullReset = $('.smart-filter-dropdown__full-reset', $context);
var $fieldApply = $('.smart-filter-dropdown__field-btn', $context);
var $allTags = $('.smart-filter-dropdown__tag', $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();
//$itemsSet.toggle();
});
})();
function initTags() {
$('.smart-filter-dropdown__tag').on('click', function(){
$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');
var $container = $('.smart-filter-dropdown__field-content', $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);
}
});
});
// comments
$(function () {
$('.smart-tiles').livequery(function () {
var $context = $(this);
});
});
// comments
$(function () {
// code here...
});
// comments
$(function () {
// code here...
});
// comments
$(function () {
// code here...
});
// Вкладки, переключение табов
function tabsBlockInit() {
var $context = $('.tabs-block');
var $linkHolders = $('.tabs-block__link-holder', $context);
var $links = $('.tabs-block__link', $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 $links = $('.tabs-section__link', $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();
});
});
// comments
$(function () {
// code here...
});
// 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,
tid;
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;
tid = setTimeout( function(){ me.countDown(); }, 1000);
} else {
this.elem.innerHTML = this.expireMessage;
return;
}
};
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(parseFloat($qtty.val())) || 0;
console.log('getCurrentCost', price, qtty);
return price * qtty;
}
function getOldCost () {
var price = parseFloat($oldPrice.data('old-price')) || 0;
var qtty = parseFloat(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 filename;
if (str.lastIndexOf('\\')){
var i = str.lastIndexOf('\\')+1;
} else{
var 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.click(function () {
$detail.slideToggle();
});
});
// code here...
})
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
// Плитка видео
$(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);
}
});
});
// comments
$(function () {
// code here...
});
// Блок с картой
$(function () {
$('.ymap').livequery(function () {
var $context = $(this);
var $mapHolder = $('.ymap__map', $context);
var $marks = $('.ymap__point', $context);
var map;
//var placemarks = [];
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
}
);
//placemarks.push(placemark);
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());
// $('body').on('click', $.proxy(this.closeOnBlur, this));
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 (e) {
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 != undefined) map.container.fitToViewport(true);}, 200);
event.stopPropagation();
});
$context.on('setPlacemark.block', function (event, mark) {
setPlacemark(mark);
event.stopPropagation();
});
$context.on('resetPlacemarks.block', function (event, mark) {
resetPlacemarks();
event.stopPropagation();
});
$context.on('setCenter.block', function (event, center, zoom) {
map.setCenter(center, zoom, {
duration: 600
});
event.stopPropagation();
});
$context.on('destroy.block', function () {
if(map !== undefined) map.destroy();
event.stopPropagation();
});
}
});
});
// comments
$(function () {
$('.block-name').livequery(function () {
var $context = $(this);
// code here...
})
});
$(function () {
$(document).trigger('blocksReady');
})