/* Common */ function scrollTo(target, params) { var defaultParams = { duration: 400, indent: 0 }; if (typeof target === 'string') { // TODO: this fix for old usage need to be deleted target = $(selector); } switch (typeof params) { case 'undefined': params = $.extend({}, defaultParams); break; case 'number': params = $.extend({}, defaultParams, { duration: params }); break; case 'object': params = $.extend({}, defaultParams, params); break; } if (target.length > 0) { $('html, body').animate({ scrollTop: target.offset().top - params.indent }, { duration: params.duration, complete: params.complete }); } } function showAjaxPopup(url, options) { var widthScroll = scrollbarWidth(); var defaultOptions = { modal: false, autoFocus: false, toolbar: false, smallBtn: false, touch: false, helpers: { overlay: { locked: true } }, beforeLoad: function () { if ($(window).width() > 992) { $('.fancybox-active .margin_right_fancybox').css('width', 'calc(100% - ' + widthScroll + 'px)'); } }, afterClose: function () { $('.margin_right_fancybox').css('width', '100%'); } }; $.fancybox.open({ type: 'ajax', src: url, opts: $.extend(new Object(), defaultOptions, options) }); } function openMailPopup() { var content = $('.block_mail_request').html(); $.fancybox.open({ type: "html", content: content, touch: false, }); } function sendMalRequest(e) { var parent = $($(e).parent().parent()); var name = parent.find('#mail_request_name').val(); var email = parent.find('#mail_request_email').val(); var phone = parent.find('#mail_request_phone').val(); var text = parent.find('#mail_request_text').val(); if (!name || !email || !phone/* || !text*/) { parent.find('#mail_request_error').html("Заполнены не все поля!"); return; } parent.find('#mail_request_error').html(""); $.ajax({ url: window.location.href + 'mailer.php', method: 'POST', dataType: 'json', data: JSON.stringify({ name: name, email: email, phone: phone, text: text }), processData: false, contentType: false, success: function (result) { if (result) { $.fancybox.close(); // $.fancybox.open('
Спасибо за оставленную заявку, мы свяжемся с Вами в ближайшее время!
'); } } }); } function scrollbarWidth() { var documentWidth = parseInt(document.documentElement.clientWidth); var windowsWidth = parseInt(window.innerWidth); var scrollbarWidth = windowsWidth - documentWidth; return scrollbarWidth; } function toggleToTopArrow() { if ($('html, body').scrollTop() > $(window).height()) { $('.to-top').removeClass('hidden'); } else { $('.to-top').addClass('hidden'); } } function pluralForm(number, one, two, five) { let n = Math.abs(number); n %= 100; if (n >= 5 && n <= 20) { return five; } n %= 10; if (n === 1) { return one; } if (n >= 2 && n <= 4) { return two; } return five; } function waitingForVar(varName) { var deferred = $.Deferred(); if (window[varName] === undefined) { var interval = setInterval(function () { if (window[varName] !== undefined) { deferred.resolve(); clearInterval(interval); } }, 50); } else { deferred.resolve(); } return deferred.promise(); } /* Contact boss */ function showContactBossForm() { showAjaxPopup('/common/get_contact_boss_form', { afterShow: function (instance, current) { current.$content.find('form').on('submit', function () { var $form = $(this); var regexp = /\@/ig; var email = $form.find('input[name=email]').val(); var check = regexp.exec(email); if (!email || !check) { $.fancybox.open('
Введите корректный E-mail!
'); } else { var data = { name: $form.find('input[name=name]').val(), email: email, alternative_contact: $form.find('input[name=additional_contact]').val(), message: $form.find('textarea[name=message]').val() }; $.post( '/common/add_mail_to_boss', data, function (result) { if (result) { $.fancybox.open('
Мы обязательно Вам позвоним
'); instance.close(); } }, 'json' ); } return false; }); current.$content.find('.close-form-review').on('click', function () { instance.close(); }); } }); } /* Callback request */ function showCallbackRequestForm() { showAjaxPopup('/common/get_callback_form', { afterShow: function (instance, current) { current.$content.children('form.callback').on('submit', function () { sendCallbackFormData($(this)) .done(function () { instance.close(); }); return false; }); current.$content.children('.ajax-form-close').on('click', function () { instance.close(); }); } }); } function sendCallbackFormData($form) { var deferred = $.Deferred(); var $name = $form.find('input[name=name]'); var $phone = $form.find('input[name=phone]'); if ($name.val().length > 0 && $phone.val().length > 0) { $.post( '/common/add_callback', { name: $name.val(), phone: $phone.val() }, function (result) { if (result) { // Яндекс.Метрика - Цель "Обратный звонок" yaCounter1122275.reachGoal('OBRATNYY-ZVONOK'); $.fancybox.open('
Мы обязательно Вам позвоним
'); deferred.resolve(); } else { deferred.reject(); } }, 'json' ); } else { deferred.reject(); } return deferred.promise(); } function showContactForm() { var tour_name = ''; $.fancybox.open({ type: 'ajax', src: "/hikes/get_manager_form", opts: { afterShow: function (instance, current) { var secur = false; $('.contact_form_ajax').find('input.tour_name').val(tour_name); $("body").on('click touchend', '.tabs_menu div', function () { if (!$(this).hasClass("active")) { var i = $(this).index(); $(".tabs_menu div.active").removeClass("active"); $(".tabs .info").hide().removeClass("active").find('input').val(''); $(this).addClass("active"); $($(".tabs").children(".info")[i]).fadeIn(500).addClass("active"); } }); $('body').on('input keyup', '.contact_form_ajax .content_form .input_contact_for_js', function (e) { if ($(".form_contact_input").val() !== "" && $(".questions_textarea_form_contact").val() !== "" && ($('.tabs .info').hasClass("active") == true && $(".tabs .active .form_contact_input").val() !== "")) { $(".send_button_form_contact").fadeIn(500).removeClass("button_form_contact_block"); secur = true; } else { $(".send_button_form_contact").fadeIn(500).addClass("button_form_contact_block"); secur = false; } }); $("body").on("touchend click", '.send_button_form_contact', function () { if (secur == true) { var form = $(this).parents('form'); var data = form.serializeArray(); $.post( '/common/add_feedback', data, function (result) { if (result) { $(".wrapper_form_content_contact").addClass("display_none"); $(".thanks_for_feedback_contact").removeClass("display_none"); $(".contact_form_ajax").addClass("contact_form_ajax_send"); } }, 'json' ); } }); } } }); } /* Hike request */ function showTourRequestForm(tourId, dateId = false, params = {}) { console.log(params); showAjaxPopup('/common/get_tour_request_form/' + tourId, { afterShow: function (instance, current) { // Яндекс.Метрика - Цель "Заход в Заявку" waitingForVar('yaCounter1122275') .done(function () { window.yaCounter1122275.reachGoal('ZAYAVKA_VHOD', {URL: document.location.href}); }); current.$content.find('form').on('submit', function () { sendTourRequestFormData($(this), { goalId: params.goalId }) .done(function () { instance.close(); }); return false; }); current.$content.find('.select_time_countplace').selectric({ disableOnMobile: false, nativeOnMobile: false, onInit: function (e) { if ($(e).hasClass('tours')) { getDatesForTour($(e).val(), undefined, current.$content); } }, }); current.$content.find('.mask_age').mask('00'); current.$content.find('.mask_code_phone').mask('+0'); current.$content.find('.mask_number_phone').mask('000-000-00-00'); current.$content.find('.close-form-review').on("click", function () { instance.close(); }); if (dateId) { current.$content.find('.select_time_countplace').val(dateId); current.$content.find('.select_time_countplace').selectric('init'); } current.$content.find(".name_travel select").on('change', function (event, params) { getDatesForTour($(this).val(), params, current.$content); }); } }); } function sendTourRequestFormData($form, params = {}) { var deferred = $.Deferred(); var data = {}; var error = 0; var input_required = ['select_time_countplace', 'name', 'number_phone', 'email']; $form.serializeArray().forEach(function (item) { data[item.name] = item.value; if (input_required.indexOf(item.name) >= 0 && !item.value) error++; }); if (error > 0) { $.fancybox.open('
Пожалуйста, заполните обязательные поля.
'); } else { $.post( '/common/add_tour_request', data, function (result) { result.success === true ? deferred.resolve() : deferred.reject(); if (result.success === true) { // Яндекс.Метрика - Цель "Заказ" yaCounter1122275.reachGoal('ORDER'); if (params.goalId) { yaCounter1122275.reachGoal(params.goalId) } $.fancybox.open('
Заявка отправлена, спасибо! В ближайшее время наши менеджеры свяжутся с вами.
'); } }, 'json' ); } return deferred.promise(); } function getDatesForTour($tourId, params, content) { content.find('.date_travel').html(''); var hiking_id = $tourId; if (params === undefined) { params = {}; params.selected = hiking_id; } if (params.selected.length > 0) { $.post( '/hikes/hikeInfo/' + params.selected, {}, function (result) { content.find('.date_travel').removeClass('hide'); if (result.dates) { var dates_ajax = ''; result.dates.forEach(function (date) { date.start_date = date.date; date.end_date = date.date_end; var start_date = date.start_date.split(' ')[0]; var end_date = date.end_date.split(' ')[0]; var start_date_split = start_date.split('-'); var end_date_split = end_date.split('-'); var start_date = start_date_split[2] + '.' + start_date_split[1] + '.' + start_date_split[0]; var end_date = end_date_split[2] + '.' + end_date_split[1] + '.' + end_date_split[0]; var price = date.price; if (date.other_price == 0){ price = result.info.price; } if (date.places > 0) dates_ajax += ''; }); if (dates_ajax) { content.find('.select_time_countplace.dates').html(dates_ajax).selectric({ disableOnMobile: false, nativeOnMobile: false }); content.find('input[name="hiking_id"]').val(hiking_id); content.find('.date_travel').removeClass('hide'); } } }, 'json' ); } } /* Subscribes */ function sendSubscriptionData(form) { var deferred = $.Deferred(); var data = {}; var empty = 0; var regexp = /\@/ig; form.serializeArray().forEach(function (item) { switch (item.name) { case 'email': var check = regexp.exec(item.value); if (!item.value || !check) empty++; break; } data[item.name] = item.value; }); if (empty > 0) { $.fancybox.open('
Введите корректный E-mail!
'); } else { $.post( '/common/add_subscription', data, function (result) { if (result) { // Яндекс.Метрика - Цель "Подписаться" yaCounter1122275.reachGoal('PODPISATSYA-NA-RASSYLKU'); $.fancybox.open('
Теперь Вы не пропустите всё самое интересное!
'); deferred.resolve(); } else { deferred.reject(); } }, 'json' ); } return deferred.promise(); } /* Review */ function showMakeReviewForm() { var url = '/reviews/get_review_form'; if ($(document).width() < 480) { url = '/reviews/get_mobile_review_form'; } showAjaxPopup(url, { afterShow: function (instance, current) { var lastResult; current.$content.find('form').on('submit', function () { sendReviewFormData($(this)) .done(function () { instance.close(); }); return false; }); current.$content.find(".select-sex").chosen({ no_results_text: "Результатов поиска нет.", width: "100%" }); current.$content.find(".select-roadmap").chosen({ no_results_text: "Результатов поиска нет.", width: "100%" }); current.$content.find(".select-roadmap").on('change', function (event, params) { if (params === undefined) { params = {}; params.selected = $(this).val(); } if (params.selected.length > 0) { $.post( '/hikes/hikeInfo/' + params.selected, {}, function (result) { lastResult = result; updateSelectBox({ $selectbox: $('.select-time'), placeholder: 'Выберите сроки', data: result.dates, value: 'id', display: 'dates', disabled: false }); updateSelectBox({ $selectbox: $('#manager-block .select-instructor'), placeholder: 'Выберите менеджера', data: result.managers, value: 'id', display: 'name', disabled: false }); updateSelectBox({ $selectbox: $('#blockInsructors .select-instructor'), placeholder: 'Выберите инструктора', data: result.instructors, value: 'id', display: 'name', disabled: false }); }, 'json' ); } else { lastResult = null; updateSelectBox({ $selectbox: $('.select-time'), placeholder: 'Выберите сроки', data: [], disabled: true }); updateSelectBox({ $selectbox: $('#manager-block .select-instructor'), placeholder: 'Выберите менеджера', data: [], disabled: true }); updateSelectBox({ $selectbox: $('#blockInsructors .select-instructor'), placeholder: 'Выберите инструктора', data: [], disabled: true }); } }); current.$content.find(".select-time").chosen({ no_results_text: "Результатов поиска нет.", width: "100%" }); current.$content.find(".select-instructor").chosen({ no_results_text: "Результатов поиска нет.", width: "100%" }); //Клац по звёздочке рейтинга current.$content.find(".liStarRating").on("click", function () { var block = $(this).parents(".blockStarsRating"); var rating = parseInt($(this).data("stars-rating")); block.find(".liStarRating").each( function (index, elem) { if (parseInt($(elem).data("stars-rating")) <= rating) { $(elem).find("i").removeClass("icon-Stars-2").addClass("icon-Stars-1"); } else { $(elem).find("i").removeClass("icon-Stars-1").addClass("icon-Stars-2"); } } ); block.data("StarsRating", rating); block.find(".inputUserRating").addClass("fullUserRating"); block.find(".inputUserRating").val(rating); }); //Ресет формы отзыва current.$content.find("click", ".feedback-clear-button", function () { $("body").find("input").val(""); $("body").find(".inputUserRating").removeClass("fullUserRating"); $("body").find(".icon-Stars-1").removeClass("icon-Stars-1").addClass("icon-Stars-2"); }); //Добавить инструктора current.$content.find(".addInstructor").on("click", function () { var html = $('#instructor-row-template').html(); var $html = $(html); var $selectbox = $html.find('.select-instructor'); $selectbox.chosen({ no_results_text: 'Результатов поиска нет.', width: '100%' }); if (typeof lastResult === 'object') { updateSelectBox({ $selectbox: $selectbox, placeholder: 'Выберите инструктора', data: lastResult.instructors, value: 'id', display: 'full_name', disabled: false }); } $html.find(".liStarRating").on("click", function () { var block = $(this).parents(".blockStarsRating"); var rating = parseInt($(this).data("stars-rating")); block.find(".liStarRating").each( function (index, elem) { if (parseInt($(elem).data("stars-rating")) <= rating) { $(elem).find("i").removeClass("icon-Stars-2").addClass("icon-Stars-1"); } else { $(elem).find("i").removeClass("icon-Stars-1").addClass("icon-Stars-2"); } } ); block.data("StarsRating", rating); block.find(".inputUserRating").addClass("fullUserRating"); block.find(".inputUserRating").val(rating); }); current.$content.find("#blockInsructors").append($html); if (current.$content.find("#blockInsructors").find('.select-instructor').length >= 10) current.$content.find(".addInstructor").hide(); }); //Закрытие формы отзыва current.$content.find(".close-form-review").on("click", function () { instance.close(); }); current.$content.find('form').on('reset', function () { resetForm($(this)); return false; }); } }); } function sendReviewFormData($form) { var deferred = $.Deferred(); var name = $form.find('input[name="name-name-surname"]').val(); var age = $form.find('input[name="name-age"]').val(); var sex = $form.find('select[name="select-sex"]').val(); var town = $form.find('input[name="name-town"]').val(); var roadmap = $form.find('select[name="select-roadmap"]').val(); var time = $form.find('select[name="select-time"]').val(); var rating = $form.find('input[name="inputUserRatingTrip"]').val(); var text_review = $form.find('textarea[name="name-review-textarea"]').val(); if (name && age && town && roadmap && rating && sex && text_review) { $.ajax({ url: '/reviews/add_review', method: 'POST', dataType: 'json', data: new FormData($form[0]), processData: false, contentType: false, success: function (result) { if (result) { deferred.resolve(); $.fancybox.open('
Спасибо за ваш отзыв!
'); } else deferred.reject(); } }); } else { $('.form-review .required_error').text('Пожалуйста, заполните обязательные поля'); deferred.reject(); } return deferred.promise(); } function updateSelectBox(options) { options.$selectbox.empty(); options.$selectbox.append($('