Advertisement
Aleksandr37rus

Untitled

Oct 12th, 2022
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. jQuery.fn.shake = function () {
  2.     this.each(function (i) {
  3.         $(this).css({
  4.             "position": "relative"
  5.         });
  6.         for (var x = 1; x <= 2; x++) {
  7.             $(this).animate({
  8.                 left: -6
  9.             }, 12).animate({
  10.                 left: 0
  11.             }, 12).animate({
  12.                 left: 6
  13.             }, 12).animate({
  14.                 left: 0
  15.             }, 12);
  16.         }
  17.     });
  18.     return this;
  19. };
  20.  
  21.  
  22. $(function () {
  23.     var OTHER_SALES_CLASS = '6400';
  24.  
  25.     var $surname = $('#surname'),
  26.         $name = $('#name'),
  27.         $patronymic = $('#patronymic'),
  28.         $email = $('#contact'),
  29.         $password = $('#password'),
  30.         $passwordConfirm = $('#password-confirm'),
  31.         $quest = $('.js-radio-quest'),
  32.         $questContainer = $('.quest-container'),
  33.         $phone = $("#phone"),
  34.         $agree = $("#agree"),
  35.         $agreeToSend = $("#agreeToSend"),
  36.         $submit = $('.js-reg-submit'),
  37.         $currentCity = $('#location-selection__current-city'),
  38.         $currentLookupCode = $('#location-selection__city-lookup-code'),
  39.         $openCitySelectionPopup = $('#open-city-selection-popup'),
  40.         $otherInput = $('.input-other'),
  41.         emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
  42.         requiredMsg = 'Поле не должно быть пустым',
  43.         shopCitiesJson = $('#shopCitiesJson').val();
  44.  
  45.  
  46.     function capitalize(string) {
  47.         return string.charAt(0).toUpperCase() + string.slice(1)
  48.     }
  49.  
  50.     function checkPatronimic(value, name, required, minLength) {
  51.         value.trim();
  52.         var ret = [];
  53.         if (required && !value.length) {
  54.             ret.push(requiredMsg)
  55.         }
  56.  
  57.         if (minLength > value.length) {
  58.             ret.push(capitalize(name) + ' должно содержать более ' + (minLength - 1) + ' символов');
  59.         }
  60.         return ret;
  61.     }
  62.  
  63.     function checkSurName(value, name, required, minLength) {
  64.         value.trim();
  65.         var ret = [];
  66.  
  67.         if (minLength > value.length) {
  68.             ret.push('Поле "' + capitalize(name) + '" не должно быть пустым и иметь длину более 1 символа');
  69.         }
  70.  
  71.         return ret;
  72.     }
  73.  
  74.     function checkName(value, name, required, minLength) {
  75.         value.trim();
  76.         var ret = [];
  77.  
  78.         if (minLength > value.length) {
  79.             ret.push('Поле "' + capitalize(name) + '" не должно быть пустым и иметь длину более 1 символа');
  80.         }
  81.  
  82.         return ret;
  83.     }
  84.  
  85.     function checkEmail(value) {
  86.         value = value.trim();
  87.         var ret = [];
  88.  
  89.         if (value.length && !value.match(emailRegex)) {
  90.             ret.push('Неверный формат почты')
  91.         }
  92.  
  93.         if (value.length && !ret.length && !$agreeToSend.prop('checked')) {
  94.             ret.push('Подтвердите согласие на рассылку по email')
  95.         }
  96.  
  97.         return ret;
  98.     }
  99.  
  100.     function renderErrors(errors) {
  101.         return errors.map(function (error) {
  102.             return '<span class="help-block form-error ">' + error + '</span>';
  103.         }).join('');
  104.     }
  105.  
  106.     function showErrors(element, html) {
  107.         element.siblings('.error-block').html(html)
  108.     }
  109.  
  110.     function checkPassword() {
  111.         var ret = [],
  112.             pass = $password.val().trim(),
  113.             passConfirm = $passwordConfirm.val().trim(),
  114.             username = $phone.val().trim().replace(/(\s|\+|\(|\)|-)/g, ''),
  115.             wrongPassMsg = 'Пароль не соответствует требованиям';
  116.  
  117.         if (pass !== passConfirm) {
  118.             ret.push('Пароли не совпадают');
  119.         }
  120.  
  121.         if (pass.length < 8 && ret.length < 1) {
  122.             ret.push(wrongPassMsg);
  123.         }
  124.  
  125.         if (!(pass.match(/[A-Za-z]+/) && pass.match(/\d+/)) && ret.length < 1) {
  126.             ret.push(wrongPassMsg);
  127.         }
  128.         if ((pass === username || pass === username.split("").reverse().join("") || pass.indexOf(username) !== -1) && ret.length < 1) {
  129.             ret.push(wrongPassMsg);
  130.         }
  131.         if (pass.length > 1) {
  132.             var symb = pass[0];
  133.             for (var charIndex = 1; charIndex < pass.length; charIndex++) {
  134.                 var cSymb = pass[charIndex];
  135.                 if (symb === cSymb && ret.length < 1) {
  136.                     ret.push(wrongPassMsg)
  137.                     break;
  138.                 } else {
  139.                     symb = cSymb;
  140.                 }
  141.             }
  142.         }
  143.  
  144.         return ret;
  145.     }
  146.  
  147.     function checkAgree() {
  148.         if (!$agree.is(':checked')) {
  149.             return ['Необходимо согласие с условиями']
  150.         }
  151.         return []
  152.     }
  153.  
  154.     function getStoredData() {
  155.         return JSON.parse(localStorage.getItem('custRegData'))
  156.     }
  157.  
  158.     function setDataToStore(data) {
  159.         localStorage.setItem('custRegData', JSON.stringify(data))
  160.     }
  161.  
  162.     function isStoreValid(time) {
  163.         var data = getStoredData();
  164.         if (!data) {
  165.             return false;
  166.         }
  167.  
  168.         if (Date.now() - data.created > time * 1000) {
  169.             return false
  170.         }
  171.  
  172.         return true;
  173.     }
  174.  
  175.     function initStore(liveTime) {
  176.         var data = getStoredData();
  177.  
  178.         var initialState = {
  179.             created: Date.now(),
  180.             name: null,
  181.             surname: null,
  182.             patronymic: null,
  183.             email: null,
  184.             phone: null,
  185.             quest: null,
  186.             agree: false,
  187.             currentCity: null,
  188.             cityLookupCode: null
  189.         };
  190.  
  191.         isStoreValid(liveTime) ? persistForm(data) : setDataToStore(initialState)
  192.     }
  193.  
  194.     function persistForm(data) {
  195.         $name.val(data.name);
  196.         $surname.val(data.surname);
  197.         $patronymic.val(data.patronymic);
  198.         $email.val(data.email);
  199.         $agree.attr('checked', data.agree);
  200.         $phone.val(data.phone);
  201.  
  202.         if (data.quest) {
  203.             $('input[name="quest"][value="' + data.quest + '"]').click();
  204.         }
  205.     }
  206.  
  207.     function setField(field, value) {
  208.         var data = getStoredData();
  209.         data[field] = value;
  210.         setDataToStore(data);
  211.     }
  212.  
  213.     function updateStore() {
  214.         var $self = $(this),
  215.             field = $self.attr('name'),
  216.             value = $self.val();
  217.  
  218.         if (field === 'phone') {
  219.             if (value === '+7 (' || value === '+7 ' || value === '+7' || value === '+') {
  220.                 value = '';
  221.             }
  222.         }
  223.  
  224.         if ($self.attr('type') === 'checkbox') {
  225.             value = $self.is(':checked');
  226.         }
  227.  
  228.         if ($self.prop('nodeName') === 'SPAN') {
  229.             if ($self.text() !== '') {
  230.                 value = $self.text();
  231.             } else {
  232.                 return;
  233.             }
  234.         }
  235.  
  236.         setField('created', Date.now());
  237.         setField(field, value);
  238.     }
  239.  
  240.     function getShopCities() {
  241.         createCitiesPopup(JSON.parse(shopCitiesJson));
  242.     }
  243.  
  244.     function createCitiesPopup(jsonCities) {
  245.         var jsonCitiesObject = jsonCities;
  246.         var innerHtml = [];
  247.         $.each(jsonCitiesObject, function (k, v) {
  248.             innerHtml.push('<div class="city-list-block">');
  249.             innerHtml.push('<div class="capital">');
  250.             innerHtml.push(k);
  251.             innerHtml.push('</div>');
  252.             innerHtml.push('<div class="cities">');
  253.  
  254.             $.each(v, function (index, cityInfo) {
  255.                 innerHtml.push('<span>');
  256.                 innerHtml.push('<a class="select_sity" href="javascript:void(0);" data-cityLookupCode="' + cityInfo.lookupCode + '">');
  257.                 innerHtml.push(cityInfo.name);
  258.                 innerHtml.push('</a>');
  259.                 innerHtml.push('</span>');
  260.             });
  261.  
  262.             innerHtml.push('</div>');
  263.             innerHtml.push('</div>');
  264.         });
  265.         $('#reg_city-block .city-list').html(innerHtml.join(''));
  266.  
  267.         $(document).on('keyup', '#reg_city-block #city-block-input_reg', function () {
  268.             var phrase = $(this).val();
  269.             $('#reg_city-block .up_res li').remove();
  270.             $('#reg_city-block .up_res').hide();
  271.             if (phrase.length != 0) {
  272.                 var match = $("#reg_city-block .city-list a");
  273.  
  274.                 $("#reg_city-block .choose-city-block").hide();
  275.                 match.addClass('grey');
  276.                 match.each(
  277.                     function (id, element) {
  278.                         if ($(element).text().toLowerCase().indexOf(phrase.toLowerCase()) != -1) {
  279.                             $(element).removeClass('grey');
  280.                             $('#reg_city-block .up_res').append('<li>' + $(this).text() + '</li>');
  281.                             $('#reg_city-block .up_res').show();
  282.                         }
  283.                         if ($(this).text().toLowerCase() == phrase.toLowerCase()) {
  284.                             $(this).removeClass('grey');
  285.                             $("#reg_city-block .choose-city-block").show();
  286.                             $('#reg_city-block .up_res li').remove();
  287.                             $('#reg_city-block .up_res').hide();
  288.                             $('#reg_city-block .js-city-list-conf').show();
  289.                         }
  290.                     }
  291.                 );
  292.             } else {
  293.                 var match = $("#reg_city-block .city-list a");
  294.                 match.removeClass('grey');
  295.             }
  296.         });
  297.  
  298.         $(document).on('click', '#reg_city-block .up_res li', function (e) {
  299.             $("#reg_city-block #city-block-input_reg").val($(this).html().toLowerCase());
  300.             $("#reg_city-block #city-block-input_reg").trigger('keyup');
  301.             $("#reg_city-block #city-block-input_reg").focus();
  302.             $('#reg_city-block .js-city-list-conf').show();
  303.             e.preventDefault();
  304.             e.stopPropagation();
  305.         });
  306.  
  307.         $('#reg_city-block .js-city-list-conf').on('click', function () {
  308.             var links = $("#reg_city-block .city-list a"),
  309.                 phrase = $("#reg_city-block #city-block-input_reg").val();
  310.             links.each(function () {
  311.                 if ($(this).text().toLowerCase() == phrase.toLowerCase()) {
  312.  
  313.                     setSelectedCityData(this);
  314.  
  315.                     $('#reg_city-block').modal('hide');
  316.                     $("#reg_city-block .choose-city-block").hide();
  317.                     $("#reg_city-block #city-block-input_reg").val('');
  318.                     $('#reg_city-block .js-city-list-conf').hide();
  319.                 }
  320.             });
  321.             $("#reg_city-block .city-list a").removeClass('grey');
  322.         });
  323.  
  324.         $('#reg_city-block .select_sity').on('click', function () {
  325.             setSelectedCityData(this);
  326.             $('#reg_city-block .up_res li').remove();
  327.             $('#reg_city-block .up_res').hide();
  328.             $('#city-block-input_reg').val('');
  329.             $('#reg_city-block').modal('hide');
  330.             $("#reg_city-block .city-list a").removeClass('grey');
  331.             $('#reg_city-block .js-city-list-conf').hide();
  332.         });
  333.  
  334.         $('[name="user_filial"]').on('click', function () {
  335.             $('#reg_city-block').modal('show');
  336.         });
  337.  
  338.         $('#reg_city-block').modal('show');
  339.     }
  340.  
  341.     function showCitySelectionPopupIfNeeded(data) {
  342.         $currentLookupCode.val(data.cityLookupCode);
  343.         $currentCity.text(data.currentCity);
  344.  
  345.         if ($currentLookupCode.val() === '') {
  346.             getShopCities();
  347.         }
  348.     }
  349.  
  350.     function setSelectedCityData(city) {
  351.         $('#location-selection__current-city').text($(city).text().toLowerCase());
  352.         $('#location-selection__city-lookup-code').val(($(city).attr('data-cityLookupCode')));
  353.         $('#location-selection__city-lookup-code').trigger('change');
  354.     }
  355.  
  356.     function getDemandClass() {
  357.         var checkedQuest = $('input[name="quest"]:checked'),
  358.             value = checkedQuest.attr('value');
  359.  
  360.         return value;
  361.     }
  362.  
  363.     function collectData() {
  364.         return {
  365.             cityCode: $currentLookupCode.val(),
  366.             name: $name.val(),
  367.             secondName: $surname.val(),
  368.             middleName: $patronymic.val(),
  369.             email: $email.val().trim() === "" ? null : $email.val().trim(),
  370.             emailNotificationConfirm: $agreeToSend.prop('checked') ? "Y" : "N",
  371.             phone: $phone.val().replace(/(\s|\+|\(|\)|-)/g, ''),
  372.             password: $password.val(),
  373.             demandClass: getDemandClass(),
  374.             otherDemandClass: $otherInput.val(),
  375.             pdAgree: 'Y'
  376.         };
  377.     }
  378.  
  379.     function showPreloader() {
  380.         $('.content').preloader({
  381.             overlayBackground: 'rgba(255, 255, 255, .6)',
  382.             showOverlay: true,
  383.             contentsWidth: '85px',
  384.             contentsHtml: '<img src="' + changeStaticLink($('#constantEndecaPath').val() + '/static/img/assets/product-card/preloader.gif') + '" class="preloader__image" alt="" role="presentation">',
  385.             delay: 0
  386.         });
  387.     }
  388.  
  389.     function hidePreloader() {
  390.         $('.content').preloader('hide');
  391.     }
  392.  
  393.     function registerReachGoal() {
  394.         try {
  395.             yaCounterBuyInfo.reachGoal('registration_fiz');
  396.         } catch (e) {
  397.             console.log(e);
  398.         }
  399.     }
  400.  
  401.     $submit.on('click', function () {
  402.         var surnameErrors = checkSurName($surname.val(), 'фамилия', true, 2),
  403.             nameErrors = checkName($name.val(), 'имя', true, 2),
  404.             patronymicErrors = checkPatronimic($patronymic.val(), 'отчество', false, 0),
  405.             emailErrors = checkEmail($email.val()),
  406.             phoneErrors = checkPhone($phone.val()),
  407.             passErrors = checkPassword(),
  408.             agreeErrors = checkAgree(),
  409.             questErrors = checkQuest(),
  410.             otherInputErrors = checkOtherInput();
  411.  
  412.  
  413.         showErrors($surname, renderErrors(surnameErrors));
  414.  
  415.         showErrors($name, renderErrors(nameErrors));
  416.  
  417.         showErrors($patronymic, renderErrors(patronymicErrors));
  418.  
  419.         showErrors($email, renderErrors(emailErrors));
  420.  
  421.         showErrors($phone, renderErrors(phoneErrors));
  422.  
  423.         showErrors($password, renderErrors(passErrors));
  424.  
  425.         showErrors($agree, renderErrors(agreeErrors));
  426.  
  427.         showErrors($questContainer, renderErrors(questErrors));
  428.  
  429.         showErrors($otherInput, renderErrors(otherInputErrors));
  430.  
  431.         var errSum = surnameErrors.length
  432.             + nameErrors.length
  433.             + patronymicErrors.length
  434.             + emailErrors.length
  435.             + phoneErrors.length
  436.             + passErrors.length
  437.             + agreeErrors.length
  438.             + questErrors.length
  439.             + otherInputErrors.length;
  440.  
  441.         if (!errSum && phoneConfirmFlag) {
  442.  
  443.             showPreloader();
  444.  
  445.             var data = collectData(),
  446.                 personCandidate = data;
  447.  
  448.             $.ajax({
  449.                 url: $('#pageContextPath').val() + '/jsonRegisterCustomer',
  450.                 type: 'POST',
  451.                 data: JSON.stringify(data),
  452.                 contentType: "application/json; charset=utf-8",
  453.                 success: function success(data) {
  454.                     getWhIdByCityId(personCandidate.cityCode).then(
  455.                         function success(whId) {
  456.                             $(".register_page").addClass("hidden");
  457.  
  458.                             if ((data == "SUCCESS") || (data == "AUTHORIZE")) {
  459.                                 if (personCandidate.emailNotificationConfirm === 'Y' && personCandidate.email) {
  460.                                     fillEmailRetailRocket(personCandidate.email, whId);
  461.                                 }
  462.                                 $agreeToSend.prop('checked') ? $(".success_page_mail").removeClass("hidden") : $(".success_page_no_mail").removeClass("hidden");
  463.                                 localStorage.setItem('custRegData', null);
  464.                                 registerReachGoal();
  465.                                 if (data == "AUTHORIZE") {
  466.                                     $.ajax({
  467.                                         url: $('#pageContextPath').val() + '/authorize',
  468.                                         type: 'POST',
  469.                                         data: {event: '', isFirstEntry: 'true', targetUrlParameter:'/home.htm',
  470.                                             userType:'PERSON', authType:'SMS_AUTH', username: $phone.val().replace(/(\s|\+|\(|\)|-)/g, ''),
  471.                                             password: $password.val(), authCode:''},
  472.                                         success: function success() {
  473.                                             window.location.href = $('#pageContextPath').val() + '/cart.htm';
  474.                                         },
  475.                                         error: function () {
  476.                                             window.location.href = $('#pageContextPath').val() + '/cart.htm';
  477.                                         }
  478.                                     });
  479.                                 } else {
  480.                                     hidePreloader();
  481.                                 }
  482.                             } else {
  483.                                 $(".error_page_reg").removeClass("hidden");
  484.                                 hidePreloader();
  485.                             }
  486.                         },
  487.                         function error() {
  488.  
  489.                         }
  490.                     );
  491.                 },
  492.                 error: function () {
  493.                     $(".register_page").addClass("hidden");
  494.                     $(".error_page_reg").removeClass("hidden");
  495.                     hidePreloader();
  496.                 }
  497.             });
  498.  
  499.            
  500.         }
  501.     });
  502.  
  503.     function getWhIdByCityId(cityId) {
  504.         return new Promise(function (resolve, reject) {
  505.             $.ajax({
  506.                 method: "GET",
  507.                 url: '/getWhId?cityId=' + cityId,
  508.                 success: function (response) {
  509.                     resolve(response);
  510.                 },
  511.                 error: function (response) {
  512.                     reject(response);
  513.                 }
  514.             });
  515.         });
  516.     }
  517.  
  518.     function checkQuest() {
  519.         var ret = [];
  520.  
  521.         if ($('input[name="quest"]:checked').length === 0) {
  522.             ret.push("Должно быть выбрано значение");
  523.         }
  524.  
  525.         return ret;
  526.     }
  527.  
  528.     function checkOtherInput() {
  529.         var ret = [],
  530.             $lengthNotice= $('.input-other-notif');
  531.  
  532.         if (
  533.             $('input[name="quest"]:checked').val() === OTHER_SALES_CLASS &&
  534.             $otherInput.val().length <= 0
  535.         ) {
  536.             $lengthNotice.hide();
  537.             ret.push("Значение не может быть пустым, его длина не должна превышать 20 символов");
  538.         }else{
  539.             $lengthNotice.show();
  540.         }
  541.  
  542.         return ret;
  543.     }
  544.  
  545.     $quest.on('change', updateStore);
  546.  
  547.     $name.on('change', updateStore);
  548.  
  549.     $surname.on('change', updateStore);
  550.  
  551.     $patronymic.on('change', updateStore);
  552.  
  553.     $email.on('change', updateStore);
  554.  
  555.     $phone.on('change', updateStore);
  556.  
  557.     $agree.on('change', updateStore);
  558.  
  559.     $currentCity.on('DOMSubtreeModified', updateStore);
  560.  
  561.     $currentLookupCode.on('change', updateStore);
  562.  
  563.     $openCitySelectionPopup.on('click', getShopCities);
  564.  
  565.     limitTextFieldLength($otherInput, 20);
  566.  
  567.     initStore(9000);
  568.  
  569.     showCitySelectionPopupIfNeeded(getStoredData());
  570. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement