shower

<link href="https://steklomall.ru/bitrix/cache/css/s1/main/template_9ede261412ae8b870cf8b6041e4d12ec/template_9ede261412ae8b870cf8b6041e4d12ec.css?1548683023239392" type="text/css" data-template-style="true" rel="stylesheet"/> <script type="text/javascript" src="https://steklomall.ru//bitrix/cache/js/s1/main/kernel_main/kernel_main.js?1548682979288581"></script> <script type="text/javascript" src="https://steklomall.ru//bitrix/cache/js/s1/main/page_f1074ed538653fabb342c4c0e4f1f3f5/page_f1074ed538653fabb342c4c0e4f1f3f5.js?15486981491183"></script> <script type="text/javascript" src="https://steklomall.ru//bitrix/cache/js/s1/main/template_053ea486a9a3179bb2de9fb3c7190263/template_053ea486a9a3179bb2de9fb3c7190263.js?1548682979434270"></script> <div class="container"> <div class="calculator"> <div class="calculator__content"> <div class="row"> <div class="col col_size_4 col_md_12"> <div class="block block_type_product-type" id="widget_calc_type"> <div class="block__inner"> <div class="h2 block__heading block__heading_lg"> Выбор изделия </div> <div class="block__content"> <form name="form-step1" action="" method="GET"> <div class="group group_size_sm"> <div class="radio"> <input type="radio" name="CALC_TYPE" id="product-type-108" value="shower" checked="checked"> <label for="product-type-108"> Душевая кабина </label> </div> </div> <div class="group group_size_sm"> <div class="radio"> <input type="radio" name="CALC_TYPE" id="product-type-110" value="skinali"> <label for="product-type-110"> Скинали </label> </div> </div> <div class="group group_size_sm"> <div class="radio"> <input type="radio" name="CALC_TYPE" id="product-type-109" value="doors"> <label for="product-type-109"> Двери </label> </div> </div> </form> </div> </div> </div> <script> $(function() { var holder = $('.calculator'), form = $('form[name="form-step1"]', holder); form.on('submit', function (e) { e.preventDefault(); holder.addClass('loading'); $.ajax({ url: form.prop('action'), type: 'GET', cache: false, dataType: 'html', data: form.serializeArray(), success: function (html) { holder.replaceWith(html); } }); }); $('input[name="CALC_TYPE"]', form).on('change', function (e) { form.submit(); }); }); </script> </div> <div class="col col_size_4 col_md_12"> <div class="block block_type_glass-width" id="widget_thickness"> <div class="block__inner"> <div class="h2 block__heading block__heading_lg"> Толщина стекла </div> <div class="block__content"> <div class="group group_size_sm"> <div class="radio"> <input type="radio" name="THICKNESS" id="glass-width-128" value="128" checked=""> <label for="glass-width-128"> 8 мм </label> </div> </div> <div class="group group_size_sm"> <div class="radio"> <input type="radio" name="THICKNESS" id="glass-width-129" value="129"> <label for="glass-width-129"> 10 мм </label> </div> </div> </div> <div class="block__footer"> От выбранной вами толщины будет зависеть не только цена, но и прочность изделия. </div> </div> </div> <script> var ThicknessWidget = function (holder) { this.holder = holder; }; ThicknessWidget.prototype.getData = function() { return { success: true, value: this.holder.find('input[name="THICKNESS"]:checked').val() }; }; ThicknessWidget.prototype.getPriceList = function () { return {"115_129":4140,"115_128":3408,"116_129":51,"116_128":400,"136_128":4536,"136_129":5600,"135_129":4368,"135_128":4368,"137_129":6500,"137_128":5136,"134_129":4140,"134_128":3408,"161_128":4836,"161_129":5800,"115_181":2000,"116_181":3850}; }; ThicknessWidget.prototype.getTextView = function () { return $.trim(this.holder.find('.block__heading').text()) + ": " + $.trim(this.holder.find('input[type="radio"]:checked + label').text()); }; $(function() { calc.registerWidget('thickness', new ThicknessWidget($('#widget_thickness'))); }); </script> </div> <div class="col col_size_4 col_md_12"> <div class="block block_type_glass-type" id="widget_glass_type"> <div class="block__inner"> <div class="h2 block__heading block__heading_lg"> Тип стекла </div> <div class="block__content"> <div class="group group_size_sm block__info"> <div class="radio"> <input type="radio" name="GLASS_TYPE" id="glass-type-134" value="134" data-price="100"> <label for="glass-type-134"> Прозрачное </label> </div> </div> <div class="group group_size_sm block__info"> <div class="radio"> <input type="radio" name="GLASS_TYPE" id="glass-type-135" value="135" data-price="500"> <label for="glass-type-135"> Матовое </label> </div> </div> <div class="group group_size_sm block__info"> <div class="radio"> <input type="radio" name="GLASS_TYPE" id="glass-type-136" value="136" data-price="500"> <label for="glass-type-136"> Бронзовое </label> </div> </div> <div class="group group_size_sm block__info"> <div class="radio"> <input type="radio" name="GLASS_TYPE" id="glass-type-137" value="137" data-price="500"> <label for="glass-type-137"> Оптивайт </label> </div> </div> <div class="group group_size_sm block__info"> <div class="radio"> <input type="radio" name="GLASS_TYPE" id="glass-type-161" value="161" data-price="0"> <label for="glass-type-161"> Серое </label> </div> </div> </div> </div> </div> <script> var GlassTypeWidget = function(holder) { this.holder = holder; }; GlassTypeWidget.prototype.getValue = function () { return this.holder.find('input[name="GLASS_TYPE"]:checked').val(); }; GlassTypeWidget.prototype.getPrice = function () { return parseInt(this.holder.find('input[name="GLASS_TYPE"]:checked').data('price')); }; GlassTypeWidget.prototype.getData = function () { var result = { success: true, value: this.getValue(), price: this.getPrice() }; return result; }; GlassTypeWidget.prototype.getTextView = function () { return $.trim(this.holder.find('.block__heading').text()) + ": " + $.trim(this.holder.find('input[type="radio"]:checked + label').text()); }; $(function() { calc.registerWidget('glass_type', new GlassTypeWidget($('#widget_glass_type'))); }); </script> </div> </div> <div class="row"> <div class="col col_size_12"> <div class="block block_type_shower" data-profile-price="300" data-crossbar-price="1000" data-crossbar2-price="1800" data-recoil-price="4000" data-hinge-price="600"> <div class="block__inner"> <div class="h2 block__heading block__heading_md"> Тип кабины, размер </div> <div class="block__content"> <div class="row"> <div class="col col_size_8 col_md_6 col_sm_12"> <div class="block-thumb-selector"> <div class="row grid block-thumb-selector__items"> <div class="col col_size_3 col_md_4 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-type="1"> <img src="/page-proofs/images/sh1.png" alt="" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 col_md_4 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner block-thumb-selector__inner_active" data-type="2"> <img src="/page-proofs/images/sh2.png" alt="" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 col_md_4 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-type="3"> <img src="/page-proofs/images/sh3.png" alt="" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 col_md_4 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-type="4"> <img src="/page-proofs/images/sh4.png" alt="" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 col_md_4 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-type="5"> <img src="/page-proofs/images/sh5.png" alt="" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 col_md_4 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-type="6"> <img src="/page-proofs/images/sh6.png" alt="" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 col_md_4 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-type="7"> <img src="/page-proofs/images/sh7.png" alt="" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 col_md_4 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-type="8"> <img src="/page-proofs/images/sh8.png" alt="" class="block-thumb-selector__image"> </div> </div> </div> </div> </div> <div class="col col_size_4 col_md_6 col_sm_12"> <div class="block__fields" data-type="1"> <div class="group group_size_lg block__description"> <b>Тип перегородки:</b> <br> <span class="blue">Название</span> </div> <div class="group group_size_xl"> <div class="block__caption"> Размер: </div> <div class="group group_size_lg"> <div class="hroup group_size_sm"> <label class="label"> Высота <span class="blue">h</span> </label> <input type="number" name="h" value="2000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="block__caption block__caption_size_sm"> До 1000 мм </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">w</span> </label> <input type="number" name="w" max="1000" class="control control_size_md"> <span class="blue">мм</span> </div> </div> <div class="group group_size_lg"> <div class="block__caption"> Наличие верхней штанги </div> <div class="row"> <div class="col col_size_6"> <div class="radio"> <input type="radio" name="add_1" value="Y"> <label> Да </label> </div> </div> <div class="col col_size_6"> <div class="radio"> <input type="radio" name="add_1" value="N" checked=""> <label> Нет </label> </div> </div> </div> </div> </div> </div> <div class="block__fields" data-type="2" style="display: block;"> <div class="group group_size_lg block__description"> <b>Тип перегородки:</b> <br> <span class="blue">Название</span> </div> <div class="group group_size_xl"> <div class="block__caption"> Размер: </div> <div class="group group_size_lg"> <div class="hroup group_size_sm"> <label class="label"> Высота <span class="blue">h</span> </label> <input type="number" name="h" value="2000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="block__caption block__caption_size_sm"> До 1000 мм </div> <div class="hroup group_size_sm"> <label class="label"> Дверь <span class="blue">d</span> </label> <input type="number" name="d" max="1000" class="control control_size_md"> <span class="blue">мм</span> </div> </div> </div> </div> <div class="block__fields" data-type="3"> <div class="group group_size_lg block__description"> <b>Тип перегородки:</b> <br> <span class="blue">Название</span> </div> <div class="group group_size_xl"> <div class="block__caption"> Размер: </div> <div class="group group_size_lg"> <div class="hroup group_size_sm"> <label class="label"> Высота <span class="blue">h</span> </label> <input type="number" name="h" max="1000" value="2000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="block__caption block__caption_size_sm"> До 1000 мм </div> <div class="hroup group_size_sm"> <label class="label"> Дверь <span class="blue">d</span> </label> <input type="number" name="d" max="1000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">l</span> </label> <input type="number" name="l" max="1000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="group group_size_lg"> <div class="block__caption"> Наличие верхней штанги </div> <div class="row"> <div class="col col_size_6"> <div class="radio"> <input type="radio" name="add_3" value="Y"> <label> Да </label> </div> </div> <div class="col col_size_6"> <div class="radio"> <input type="radio" name="add_3" value="N" checked=""> <label> Нет </label> </div> </div> </div> </div> </div> </div> </div> <div class="block__fields" data-type="4"> <div class="group group_size_lg block__description"> <b>Тип перегородки:</b> <br> <span class="blue">Название</span> </div> <div class="group group_size_xl"> <div class="block__caption"> Размер: </div> <div class="group group_size_lg"> <div class="hroup group_size_sm"> <label class="label"> Высота <span class="blue">h</span> </label> <input type="number" name="h" value="2000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="block__caption block__caption_size_sm"> До 1000 мм </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">l</span> </label> <input type="number" name="l" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Дверь <span class="blue">d</span> </label> <input type="number" name="d" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">w</span> </label> <input type="number" name="w" max="1000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="group group_size_lg"> <div class="block__caption"> Наличие верхней штанги </div> <div class="row"> <div class="col col_size_6"> <div class="radio"> <input type="radio" name="add_4" value="Y"> <label> Да </label> </div> </div> <div class="col col_size_6"> <div class="radio"> <input type="radio" name="add_4" value="N" checked=""> <label> Нет </label> </div> </div> </div> </div> </div> </div> </div> <div class="block__fields" data-type="5"> <div class="group group_size_lg block__description"> <b>Тип перегородки:</b> <br> <span class="blue">Название</span> </div> <div class="group group_size_xl"> <div class="block__caption"> Размер: </div> <div class="group group_size_lg"> <div class="hroup group_size_sm"> <label class="label"> Высота <span class="blue">h</span> </label> <input type="number" name="h" value="2000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="block__caption block__caption_size_sm"> До 1000 мм </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">f</span> </label> <input type="number" name="f" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">l</span> </label> <input type="number" name="l" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Дверь <span class="blue">d2</span> </label> <input type="number" name="d2" max="1000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Дверь <span class="blue">d</span> </label> <input type="number" name="d" max="1000" class="control control_size_md"> <span class="blue">мм</span> </div> </div> <div class="group group_size_lg"> <div class="block__caption"> Наличие верхней штанги </div> <div class="row"> <div class="col col_size_6"> <div class="radio"> <input type="radio" name="add_5" value="Y"> <label> Да </label> </div> </div> <div class="col col_size_6"> <div class="radio"> <input type="radio" name="add_5" value="N" checked=""> <label> Нет </label> </div> </div> </div> </div> </div> </div> <div class="block__fields" data-type="6"> <div class="group group_size_lg block__description"> <b>Тип перегородки:</b> <br> <span class="blue">Название</span> </div> <div class="group group_size_xl"> <div class="block__caption"> Размер: </div> <div class="group group_size_lg"> <div class="hroup group_size_sm"> <label class="label"> Высота <span class="blue">h</span> </label> <input type="number" name="h" value="2000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="block__caption block__caption_size_sm"> До 1000 мм </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">w</span> </label> <input type="number" name="w" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">l</span> </label> <input type="number" name="l" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Дверь <span class="blue">d</span> </label> <input type="number" name="d" max="1000" class="control control_size_md"> <span class="blue">мм</span> </div> </div> <div class="group group_size_lg"> <div class="block__caption"> Наличие верхней штанги </div> <div class="row"> <div class="col col_size_6"> <div class="radio"> <input type="radio" name="add_6" value="Y"> <label> Да </label> </div> </div> <div class="col col_size_6"> <div class="radio"> <input type="radio" name="add_6" value="N" checked=""> <label> Нет </label> </div> </div> </div> </div> </div> </div> <div class="block__fields" data-type="7"> <div class="group group_size_lg block__description"> <b>Тип перегородки:</b> <br> <span class="blue">Название</span> </div> <div class="group group_size_xl"> <div class="block__caption"> Размер: </div> <div class="group group_size_lg"> <div class="hroup group_size_sm"> <label class="label"> Высота <span class="blue">h</span> </label> <input type="number" name="h" value="2000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="block__caption block__caption_size_sm"> До 1000 мм </div> <div class="hroup group_size_sm"> <label class="label"> Дверь <span class="blue">d</span> </label> <input type="number" name="d" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">l</span> </label> <input type="number" name="l" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">w</span> </label> <input type="number" name="w" max="1000" class="control control_size_md"> <span class="blue">мм</span> </div> </div> </div> </div> <div class="block__fields" data-type="8"> <div class="group group_size_lg block__description"> <b>Тип перегородки:</b> <br> <span class="blue">Угловая душевая кабина</span> </div> <div class="group group_size_xl"> <div class="block__caption"> Размер: </div> <div class="group group_size_lg"> <div class="hroup group_size_sm"> <label class="label"> Высота <span class="blue">h</span> </label> <input type="number" name="h" value="2000" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="block__caption block__caption_size_sm"> До 1000 мм </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">f</span> </label> <input type="number" name="f" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Дверь <span class="blue">d2</span> </label> <input type="number" name="d2" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Дверь <span class="blue">d</span> </label> <input type="number" name="d" class="control control_size_md"> <span class="blue">мм</span> </div> <div class="hroup group_size_sm"> <label class="label"> Параметр <span class="blue">l</span> </label> <input type="number" name="l" class="control control_size_md"> <span class="blue">мм</span> </div> </div> </div> </div> <a class="button block__btn button_step3" href="javascript:void(0);" style="display: none;">Продолжить</a> </div> </div> </div> </div> </div> <script type="text/javascript"> var ShowerSize = function (holder) { this.holder = holder; this.type = 2; }; ShowerSize.prototype.setType = function (t) { this.type = parseInt(t); }; ShowerSize.prototype.checkNextButton = function () { var data = this.getData(); if (data.success) { this.holder.find('.button_step3').show(); } else { this.holder.find('.button_step3').hide(); } $('.calculator').find('.step-3').hide(); calc.enabled(false); }; ShowerSize.prototype.getSizes = function () { var result = { success: true, sizes: {} }; this.holder.find('input[type="number"]:visible').each(function () { if ($(this).val() != '') { result.sizes[$(this).prop('name')] = parseInt($(this).val()); } else { result.success = false; } }); return result; }; ShowerSize.prototype.getDoorsLength = function () { var sizes = this.getSizes().sizes, sum = 0; switch (this.type) { case 7: { sum = sizes.d; break; } case 8: { sum = sizes.d + sizes.d2; break; } } return sum * 1e-3; }; ShowerSize.prototype.getData = function () { var result = { success: true, sizes: {} }; var sel = this.holder.find('.block__fields:visible'); if (sel.length == 0) { result.success = false; } else { result.type = sel.data('type'); } result = $.extend(result, this.getSizes()); if (this.holder.find('.has-error').length > 0) { result.success = false; } if (result.success) { // Считаем цену текущего варианта! var profilePrice = parseInt(this.holder.data('profile-price')), crossbarPrice = parseInt(this.holder.data('crossbar-price')), crossbar2Price = parseInt(this.holder.data('crossbar2-price')), recoilPrice = parseInt(this.holder.data('recoil-price')), hingePrice = parseInt(this.holder.data('hinge-price')), sum = 0; // Петли? var dCnt = this.getDoorsCount(); if (dCnt > 0) { console.log("Hinges = ", hingePrice * dCnt * 2); sum += hingePrice * dCnt * 2; } // П-образный профиль var pLength = this.getProfileLength(); console.log("Profile length = ", pLength, pLength * profilePrice); sum += pLength * profilePrice; // Штанга? if (dCnt >= 0) { // Для петлевых дверей.. // Пользователь вообще захотел штангу? if (sel.find('input[name^="add"]:checked:visible').val() == 'Y') { console.log("crossBar = ", this.getCrossbarLength() * crossbarPrice); sum += this.getCrossbarLength() * crossbarPrice; } } else if (dCnt < 0) { // Для откатных дверей console.log("crossBar = ", this.getCrossbarLength() * crossbar2Price); sum += this.getCrossbarLength() * crossbar2Price; // Суммируем стоимость откатного механизма.. console.log("recoil = ", this.getDoorsLength() * recoilPrice); sum += this.getDoorsLength() * recoilPrice; } result.price = sum; } result['shower_type'] = this.holder.find('.block-thumb-selector__inner_active').data('type'); return result; }; ShowerSize.prototype.getTextView = function () { var data = this.getData(); var result = "Душевая кабина №" + data.shower_type + "\n"; result += "Размеры \n"; for (var key in data.sizes) { result += key + " = " + data.sizes[key] + "\n"; } return result; }; ShowerSize.prototype.getSquare = function () { var data = this.getData(), result = 0; if (data.success) { switch (this.type) { case 1: { result = data.sizes.w * data.sizes.h; // + data.sizes.l break; } case 2: { result = data.sizes.d * data.sizes.h; break; } case 3: { result = (data.sizes.d + data.sizes.l) * data.sizes.h; break; } case 4: case 6: case 7: { result = (data.sizes.w + data.sizes.d + data.sizes.l) * data.sizes.h; break; } case 5: case 8: { result = (data.sizes.f + data.sizes.d2 + data.sizes.d + data.sizes.l) * data.sizes.h; break; } } } return result * 1e-6; }; ShowerSize.prototype.getDoorsCount = function () { switch (this.type) { case 1: { return 0; break; } case 2: case 3: case 4: case 6: { return 1; } case 5: { return 2; } case 7: { return -1; } case 8: { return -2; } } return 0; }; ShowerSize.prototype.getProfileLength = function () { var result = 0, data = this.getSizes(); if (data.success) { switch (this.type) { case 1: { result = data.sizes.h + data.sizes.w; break; } case 3: { result = data.sizes.h + data.sizes.l; break; } case 4: { result = data.sizes.h*2 + data.sizes.w + data.sizes.l; break; } case 5: case 8: { result = data.sizes.h*2 + data.sizes.f + data.sizes.l; break; } case 6: case 7: { result = data.sizes.h*2 + data.sizes.w + data.sizes.l; break; } } } return result * 1e-3; }; ShowerSize.prototype.getCrossbarLength = function () { var result = 0, data = this.getSizes(); switch (this.type) { case 1: { result = data.sizes.w; break; } case 3: { result = data.sizes.d + data.sizes.l; break; } case 4: case 6: case 7: { result = data.sizes.w + data.sizes.d + data.sizes.l; break; } case 5: case 8: { result = data.sizes.l + data.sizes.d + data.sizes.d2 + data.sizes.f; break; } } return result * 1e-3; }; $(function() { var block = $('.block_type_shower'), items = block.find('.block-thumb-selector__inner'), fields = block.find('.block__fields'); items.on('click', function() { items.removeClass('block-thumb-selector__inner_active'); $(this).addClass('block-thumb-selector__inner_active'); fields.hide(); fields.filter('[data-type="' + $(this).data('type') + '"]').show(); if ($(this).data('type') == 1) { calc.widgets.handle_type.setHandlesVisibility(false); } else { calc.widgets.handle_type.setHandlesVisibility(true); } calc.widgets.shower_size.setType($(this).data('type')); calc.widgets.shower_size.checkNextButton(); }); block.find('input[type="number"]').each(function() { $(this).on('focusout', function () { var vInt = parseInt($(this).val()); if ($(this).val() == '') { $(this).parent().addClass('has-error'); } else if (vInt < parseInt($(this).prop('min'))) { $(this).parent().addClass('has-error'); } else if (vInt > parseInt($(this).prop('max'))) { $(this).parent().addClass('has-error'); } else { $(this).parent().removeClass('has-error'); } calc.widgets.shower_size.checkNextButton(); }); }); calc.registerWidget('shower_size', new ShowerSize(block)); // Тут мы прячем все виджеты после этого.. $('.calculator').find('.step-3').hide(); // Кнопка будет видна только когда все размеры будут указаны.. block.find('.button_step3').hide(); block.find('.button_step3').on('click', function () { $('.calculator').find('.step-3').show(); calc.enabled(true); calculate(); }); $('.calculator').on('change', ':input', function (e) { calculate(); }); }); </script> </div> </div> <div class="row"> <div class="col col_size_4 col_md_12"> <div class="block block_type_glass-type step-3" id="widget_print_type" style="display: none;"> <div class="block__inner"> <div class="h2 block__heading block__heading_lg"> Вид печати </div> <div class="block__content"> <div class="group group_size_sm block__info"> <div class="radio"> <input type="radio" name="PRINT_TYPE" id="print-type-117" value="117" data-price="2000"> <label for="print-type-117"> Фотопечать </label> </div> <div class="info"> <div class="info__toggle"></div> <div class="info__content">Цветное изображение на поверхности стекла. Широко используется в оформлении дизайна интерьера и расширяет спектр применяемых стилевых решений. </div> </div> </div> <div class="group group_size_sm block__info"> <div class="radio"> <input type="radio" name="PRINT_TYPE" id="print-type-160" value="160" data-price="3000"> <label for="print-type-160"> С рисунком </label> </div> <div class="info"> <div class="info__toggle"></div> <div class="info__content">123</div> </div> </div> <div class="group group_size_sm block__info"> <div class="radio"> <input type="radio" name="PRINT_TYPE" id="print-type-139" value="139" data-price="1500"> <label for="print-type-139"> Крашеное Ral </label> </div> <div class="info"> <div class="info__toggle"></div> <div class="info__content">Покраска стекла в любой цвет по шкале RAL может быть выполнена несколькими способами: нанесение на стекло через краскопульт предварительно отколерованных эмалевых красок или нанесение на стекло цветного изображение посредством фотопечати. </div> </div> </div> <div class="group group_size_sm block__info"> <div class="radio"> <input type="radio" name="PRINT_TYPE" id="print-type-119" value="119" data-price="0" checked=""> <label for="print-type-119"> Без печати </label> </div> </div> <p>Рисунок на стекло может наносить несколькими способами. Или посредством нанесения на стекло пескоструйной обработки или посредством химического матирования. Цена за квадратный метр может меняться от способа нанесения рисунка и сложности наносимого рисунка</p> </div> </div> </div> <script> var PrintTypeWidget = function(holder) { this.holder = holder; }; PrintTypeWidget.prototype.getValue = function () { return this.holder.find('input[name="PRINT_TYPE"]:checked').val(); }; PrintTypeWidget.prototype.getPrice = function () { return parseInt(this.holder.find('input[name="PRINT_TYPE"]:checked').data('price')); }; PrintTypeWidget.prototype.getTextView = function () { return $.trim(this.holder.find('.block__heading').text()) + ": " + $.trim(this.holder.find('input[type="radio"]:checked + label').text()); }; $(function() { calc.registerWidget('print_type', new PrintTypeWidget($('#widget_print_type'))); }); </script> </div> <div class="col col_size_4 col_md_12"> <div class="block block_type_handle-type step-3 block_accent" style="display: none;"> <div class="block__inner"> <div class="h2 block__heading block__heading_lg"> Тип ручки </div> <div class="block__content"> <div class="block-thumb-selector"> <div class="row grid block-thumb-selector__items"> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="184" data-price="0" data-multiplier="0" data-name="Без ручки"> <img src="/upload/iblock/f97/f97166a5d5395cb668d77653a976e642.png" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="140" data-price="1650" data-multiplier="3" data-name="Ручка-скоба"> <img src="/upload/iblock/65a/65a9f1e67b54bd19cb88688d49159ddd.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="141" data-price="2483" data-multiplier="3" data-name="Ручка-скоба 2"> <img src="/upload/iblock/00a/00af05e4222463e8090c1a0583c1e9a5.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="142" data-price="1828" data-multiplier="3" data-name="Ручка скоба 3"> <img src="/upload/iblock/306/306edca41741e5b5d14177ce02e08fd4.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="173" data-price="1992" data-multiplier="3" data-name="Кноб 6"> <img src="/upload/iblock/5a7/5a7d2b8e237027699e0674d4b355ac71.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="180" data-price="1014" data-multiplier="3" data-name="Кнбо 12"> <img src="/upload/iblock/244/2443d9829f65f9cf855e9d3feaf09158.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="179" data-price="1014" data-multiplier="3" data-name="Кноб 11"> <img src="/upload/iblock/fef/feffabb3b5595e8a2adde0c2b4035a92.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="178" data-price="1014" data-multiplier="3" data-name="Кноб 10"> <img src="/upload/iblock/fa8/fa8d656f90b3d3be21b7406b685952eb.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="177" data-price="1014" data-multiplier="3" data-name="Кноб 8"> <img src="/upload/iblock/047/047b145f42877e3c2f3649075fc80ce2.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="176" data-price="1014" data-multiplier="3" data-name="Кноб 9"> <img src="/upload/iblock/296/296d6f419bda5f550af3fb2003035b7c.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="175" data-price="1014" data-multiplier="3" data-name="Кноб 8"> <img src="/upload/iblock/3ae/3aec9b7836726d4429fd4c310e955ba5.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="174" data-price="1014" data-multiplier="3" data-name="Кноб 7"> <img src="/upload/iblock/61c/61c2612d6160241515672e7d2f71233a.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="164" data-price="6841" data-multiplier="3" data-name="Нажимная без замка"> <img src="/upload/iblock/c4f/c4f65035c8602df688a87ea27eefafef.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="172" data-price="1765" data-multiplier="3" data-name="Кноб 5"> <img src="/upload/iblock/dc4/dc4414ad54b978b5f48812af0deb8c82.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="171" data-price="1014" data-multiplier="3" data-name="Кноб 4"> <img src="/upload/iblock/7b2/7b25743763d8d2988f15e73524c8659c.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="170" data-price="2008" data-multiplier="3" data-name="Кноб 3"> <img src="/upload/iblock/080/0803aa28a252c5fd91b45748830e0754.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="169" data-price="3088" data-multiplier="3" data-name="Кноб "> <img src="/upload/iblock/2a2/2a27567e21e91451765ea77455f63d08.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="168" data-price="2534" data-multiplier="3" data-name="Скоба 6"> <img src="/upload/iblock/e12/e127c1a23f398b92b1df009c35b8ab66.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="167" data-price="5648" data-multiplier="3" data-name="Скоба 5"> <img src="/upload/iblock/8c7/8c7ea2145060018343742e694584f2fa.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="166" data-price="1709" data-multiplier="3" data-name="Скоба 4"> <img src="/upload/iblock/11c/11c83492f151c53bc34f88d5b1de4eab.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> <div class="col col_size_3 grid-cell block-thumb-selector__item"> <div class="block-thumb-selector__inner" data-id="165" data-price="7061" data-multiplier="3" data-name="Ручка нажимная с замком"> <img src="/upload/iblock/353/353ab5e6f6297a65bec8a7955242f050.jpg" alt="Ручка" class="block-thumb-selector__image"> </div> </div> </div> </div> </div> </div> </div> <script type="text/javascript"> var HandleTypeWidget = function (holder) { this.holder = holder; }; HandleTypeWidget.prototype.getData = function () { var result = { success: true }; result.id = this.holder.find('.block-thumb-selector__inner_active').data('id'); if (result.id) { result.price = parseInt(this.holder.find('.block-thumb-selector__inner_active').data('price')); result.multiplier = parseFloat(this.holder.find('.block-thumb-selector__inner_active').data('multiplier')); result.name = this.holder.find('.block-thumb-selector__inner_active').data('name'); } else { result.success = false; } return result; }; HandleTypeWidget.prototype.getTextView = function () { var data = this.getData(); return "Ручка: " + data.name; }; HandleTypeWidget.prototype.setHandlesVisibility = function (flag) { if (flag === true) { this.holder.find('.block-thumb-selector__item').show(); } else { this.holder.find('.block-thumb-selector__item:gt(0)').hide(); this.holder.find('.block-thumb-selector__inner:first').click(); } }; $(function() { var block = $('.block_type_handle-type'), items = block.find('.block-thumb-selector__inner'); items.on('click', function() { items.removeClass('block-thumb-selector__inner_active'); $(this).addClass('block-thumb-selector__inner_active'); calculate(); }); calc.registerWidget('handle_type', new HandleTypeWidget(block)); }); </script> </div> <div class="col col_size_4 col_md_12"> <div class="block block_type_handle-color step-3" style="display: none;"> <div class="block__inner"> <div class="h2 block__heading block__heading_lg"> Цвет ручки </div> <div class="block__content"> <div class="row"> <div class="group group_size_sm col col_size_6"> <div class="radio"> <input type="radio" name="handle-color" id="handle-color-143" value="143" data-price="100"> <label for="handle-color-143"> Матовая нержавеющая сталь </label> </div> </div> <div class="group group_size_sm col col_size_6"> <div class="radio"> <input type="radio" name="handle-color" id="handle-color-144" value="144" data-price="200"> <label for="handle-color-144"> Другой цвет </label> </div> </div> </div> </div> <div class="block__footer"> </div> </div> </div> <script type="text/javascript"> var HandleColorWidget = function (holder) { this.holder = holder; }; HandleColorWidget.prototype.getData = function () { var result = { success: true }; var colorSel = this.holder.find('input[name="handle-color"]:checked'), color = colorSel.val(), colorPrice = colorSel.data('price'); if (!color) { result.success = false; } result.color = color; result.price = colorPrice; var sel = this.holder.find('.block-color-selector'); if (sel.length > 0) { result.customColorName = this.holder.find('.block-color-selector__inner_active').data('name'); } return result; }; HandleColorWidget.prototype.getTextView = function () { var data = this.getData(); var result = $.trim(this.holder.find('.block__heading').text()) + ": " + $.trim(this.holder.find('input[type="radio"]:checked + label').text()); if (data.customColorName) { result += ", выбранный цвет: " + data.customColorName; } return result; }; $(function() { var block = $('.block_type_handle-color'), items = block.find('.block-color-selector__inner'); block.find('input[name="handle-color"]').change(function() { var field = block.find('.block__footer'); if ($(this).prop('checked')) { $('.block-color-selector').hide(); $('.block-color-selector.block-color-' + $(this).val()).show(); } }); block.find('input[name="handle-color"]:first').prop('checked', true).change(); items.on('click', function() { items.removeClass('block-color-selector__inner_active'); $(this).addClass('block-color-selector__inner_active'); }); calc.registerWidget('handle_color', new HandleColorWidget(block)); }); </script> </div> </div> <div class="row"> <div class="col col_size_4 col_md_12"> <div class="block block_type_delivery step-3" id="widget_delivery" data-price-fix="1930" data-price-km="60" style="display: none;"> <div class="block__inner"> <div class="h2 block__heading"> Доставка </div> <div class="block__content"> <div class="block__rows"> <div class="group group_size_sm"> <div class="radio"> <input type="radio" name="delivery" id="delivery-y" value="Y"> <label for="delivery-y"> Да </label> </div> </div> <div class="group group_size_sm"> <div class="radio"> <input type="radio" name="delivery" id="delivery-n" value="N" checked="checked"> <label for="delivery-n"> Нет </label> </div> </div> <div class="block__field" style="display: none;"> <div class="group group_size_sm"> <label class="label"> Расстояние от МКАД </label> <input type="text" class="control control_size_md" name="distance"> <span class="blue">км</span> </div> <div class="group group_size_sm"> по Москве – 1930 руб.<br> за пределами МКАД – 60 р. за 1 км </div> </div> </div> </div> </div> </div> <script type="text/javascript"> var DeliveryWidget = function (holder) { this.holder = holder; }; DeliveryWidget.prototype.getData = function () { var result = { success: true, enabled: $('#delivery-y').is(':checked') }; if (result.enabled) { result.distance = parseInt(this.holder.find('input[name="distance"]').val()); if (result.distance > 0 && !isNaN(result.distance)) { } else { result.distance = 0; } result.price = parseInt(this.holder.data('price-fix')) + (parseInt(this.holder.data('price-km')) * result.distance); } return result; }; DeliveryWidget.prototype.getTextView = function () { var data = this.getData(), result = ""; if (data.enabled) { result = "Доставка: да, расстояние: " + data.distance; } else { result = "Доставка: нет"; } return result; }; $(function() { var block = $('.block_type_delivery'); block.find('input[type="radio"]').change(function() { var field = $(this).closest('.block__rows').find('.block__field'); if ($(this).prop('checked') && $(this).val() == 'Y') { field.show(); if (calc.widgets.mount != void(0)) { calc.widgets.mount.hideDistanceBlock(); } // if (calc.widgets.metering != void(0)) { // calc.widgets.metering.hideDistanceBlock(); // } } else { field.hide(); if (calc.widgets.mount != void(0)) { calc.widgets.mount.showDistanceBlock(); } if (calc.widgets.metering != void(0)) { calc.widgets.metering.showDistanceBlock(); } } }); block.find('input[type="radio"]:checked').trigger('change'); calc.registerWidget('delivery', new DeliveryWidget($('#widget_delivery'))); }); </script> </div> <div class="col col_size_4 col_md_12"> <div class="block block_type_mounting step-3" id="widget_mount" data-price-msk-meter="2000" data-price-msk-min="3000" data-price-region-meter="1000" data-price-region-min="4000" data-price-fix="1930" data-price-km="60" style="display: none;"> <div class="block__inner"> <div class="h2 block__heading"> Монтаж </div> <div class="block__content"> <div class="group group_size_sm"> <div class="radio"> <input type="radio" name="mounting" id="mounting-1" value="1"> <label for="mounting-1"> В Москве </label> </div> </div> <div class="group group_size_sm"> <div class="radio"> <input type="radio" name="mounting" id="mounting-2" value="2"> <label for="mounting-2"> За пределами МКАД </label> </div> </div> <div class="group group_size_sm"> <div class="radio"> <input type="radio" name="mounting" id="mounting-3" value="3" checked="checked"> <label for="mounting-3"> Я сам поставлю </label> </div> </div> <div class="block__field" id="mount_distance" style="display: none;"> <div class="group group_size_sm"> <label class="label"> Расстояние от МКАД </label> <input type="text" class="control control_size_md" name="distance"> <span class="blue">км</span> </div> </div> </div> </div> </div> <script> var MountWidget = function (holder) { this.holder = holder; }; MountWidget.prototype.getData = function () { var result = { type: this.holder.find('input[name="mounting"]:checked').val(), distance: this.getDistance() }; return result; }; MountWidget.prototype.showDistanceBlock = function () { var data = this.getData(); if (data.type == 2) { $('#mount_distance').show(); } }; MountWidget.prototype.getDistance = function () { var type = this.holder.find('input[name="mounting"]:checked').val(), distance = 0; if (type == 2) { if (calc.widgets.delivery != void(0)) { var deliveryData = calc.widgets.delivery.getData(); if (!deliveryData.enabled) { distance = parseInt(this.holder.find('input[name="distance"]').val()); } else { distance = deliveryData.distance; } } else { throw new Error("No delivery widget"); } } if (isNaN(distance)) { distance = 0; } return distance; }; MountWidget.prototype.hideDistanceBlock = function () { $('#mount_distance').hide(); }; MountWidget.prototype.getPrice = function () { var sum = 0; if (calc.widgets.shower_size != void(0)) { var square = calc.widgets.shower_size.getSquare(), myData = this.getData(); sum = square * 1300; if (parseInt(myData.type) == 2 && !calc.widgets.delivery.getData().enabled) { var distance = this.getDistance(), priceKm = parseInt(this.holder.data('price-km')); sum += (distance * priceKm); } if (sum < 6000) { sum = 6000; } } if (myData.type == 3) { sum = 0; } return sum; }; MountWidget.prototype.getTextView = function () { var data = this.getData(); if (data.type == 1) { return "Монтаж: МСК"; } if (data.type == 2) { return "Монтаж: выезд за МКАД, расстояние: " + this.getDistance(); } else { return "Монтаж: сам"; } }; $(function () { var holder = $('#widget_mount'); calc.registerWidget('mount', new MountWidget(holder)); holder.find('input[name="mounting"]').each(function() { $(this).on('change', function () { if ($(this).val() == 2) { if (calc.widgets.delivery != void(0)) { var deliveryData = calc.widgets.delivery.getData(); if (!deliveryData.enabled) { calc.widgets.mount.showDistanceBlock(); } else { calc.widgets.mount.hideDistanceBlock(); } } else { calc.widgets.mount.hideDistanceBlock(); } } else { calc.widgets.mount.hideDistanceBlock(); } }); }); }); </script> </div> <div class="col col_size_4 col_md_12"> <div class="block block_type_price step-3" style="display: none;"> <div class="block__inner"> <div class="h2 block__heading"> Стоимость заказа </div> <div class="block__content"> <div class="block__price"></div> <a href="javascript:void(0);" class="button" onclick="if (calc.enabled()) $.mw.open('calc_request');"> Заказать </a> <div> *Цена является ориентировочной и после обсуждения с менеджером может быть скорректирована </div> </div> </div> </div> <script> var ResultWidget = function (holder) { this.holder = holder; }; ResultWidget.prototype.number_format = function ( number, decimals, dec_point, thousands_sep ) { // Format a number with grouped thousands // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com) // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + bugfix by: Michael White (http://crestidg.com) var i, j, kw, kd, km; // input sanitation & defaults if( isNaN(decimals = Math.abs(decimals)) ){ decimals = 2; } if( dec_point == undefined ){ dec_point = ","; } if( thousands_sep == undefined ){ thousands_sep = "."; } i = parseInt(number = (+number || 0).toFixed(decimals)) + ""; if( (j = i.length) > 3 ){ j = j % 3; } else{ j = 0; } km = (j ? i.substr(0, j) + thousands_sep : ""); kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep); //kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).slice(2) : ""); kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, 0).slice(2) : ""); return km + kw + kd; }; ResultWidget.prototype.setPrice = function (p) { this.holder.find('.block__price').text('≈ ' + this.number_format(p, 0, ',', ' ') + ' руб*'); }; ResultWidget.prototype.getTextView = function () { return "Стоимость: " + this.holder.find('.block__price').text(); }; $(function() { calc.registerWidget('result', new ResultWidget($('.block_type_price'))); }); </script> </div> </div> </div> </div> <script> var calc = new Calculator("Душ"), calculate = function () { var sum = {}, doorCount = Math.abs(calc.widgets.shower_size.getDoorsCount()); for (var key in calc.widgets) { calc.highlight(calc.widgets[key], false); } // тип + толщина.. if (calc.widgets.glass_type != void(0) && calc.widgets.thickness != void(0)) { var typeData = calc.widgets.glass_type.getData(), thicknessData = calc.widgets.thickness.getData(), priceList = calc.widgets.thickness.getPriceList(), key = "", ok = true; if (typeData.value != void(0)) { key += typeData.value + "_"; if (thicknessData.value != void(0)) { key += thicknessData.value; } else { ok = false; calc.highlight(calc.widgets.thickness, true); } } else { ok = false; calc.highlight(calc.widgets.glass_type, true); } if (!ok) { return; } sum['glass'] = priceList[key]; } // Если нашли стоимость стекла.. if (sum.hasOwnProperty('glass')) { if (calc.widgets.shower_size != void(0)) { var square = calc.widgets.shower_size.getSquare(); sum['glass_full'] = Math.floor(sum['glass'] * square); sum['glass'] = 0; // Вид печати sum['print_type'] = calc.widgets['print_type'].getPrice() * square; } } // Тип ручки if (calc.widgets.handle_type != void(0)) { data = calc.widgets.handle_type.getData(); if (data.id != void(0)) { sum['handle_type'] = data.price * doorCount; } else { calc.highlight(calc.widgets.handle_type, true); return; } } // Цвет ручки.. if (calc.widgets.handle_color != void(0)) { data = calc.widgets.handle_color.getData(); if (data.color != void(0)) { // Для "другого" цвета умножаем стоимость ручки на мультипликатор.. if (data.color == "144") { data = calc.widgets.handle_type.getData(); sum['handle_type'] = sum['handle_type'] * data.multiplier; } } } // Доставка if (calc.widgets.delivery != void(0)) { var data = calc.widgets.delivery.getData(); if (data.enabled) { sum['delivery'] = data.price; } else { sum['delivery'] = 0; } } // Монтаж if (calc.widgets.mount != void(0)) { sum['mount'] = calc.widgets.mount.getPrice(); } sum['shower'] = calc.widgets.shower_size.getData().price; console.log(sum); if (calc.enabled()) { var s = 0; for (var key in sum) { if (!isNaN(sum[key])) { s += sum[key]; } else { console.warn("One of items (" + key + ") is NaN!"); } } calc.widgets.result.setPrice(s); } return sum; }; $(function() { $('.calculator') .on('mouseenter', '.info__toggle', function() { var holder = $(this).closest('.info'), element = holder.find('.info__content'); element.show().position({ of: holder, my: 'left top', at: 'left bottom', collision: 'flip flip' }); }) .on('mouseleave', '.info__toggle', function() { $(this).closest('.info').find('.info__content').hide(); }); $('.calculator').on('change', ':input', function (e) { calculate(); }); }); $('#glass-type-134').prop('checked', true); </script> </div>