/* 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($('