PageSourceSearch

https://tripsmarket.ru/wp-content/plugins/quasar-form/assets/js/frontend.js?ver=6.0

js tripsmarket.ru collected 2026-10-05 00:35:48 UTC 59,296 bytes, 1,276 lines download raw bytes

1var arraySubmit = '';
2var idThisForm = '';
3var arrayCheckbox = '';
4var arrayTextField= '';
5(function ($) {
6$(document).ready(function () {
7
8'use strict';
9
10//show popup form
11$('.button-qform').on('click', function(){
12    $(this).addClass('active-q-b');
13    let dataForm = $(this).attr('data-form');
14    let showForm = $('.quasar-form[data-id="'+dataForm+'"]').closest('.modal-box-qform');
15    showForm.css({'display' : 'flex'});
16    //animation popup
17    setTimeout(function(){
18        showForm.find('.swap-form-block').addClass('show-from-q');
19    },100);
20});
21
22$('.modal-box-qform').on('click', function(q){
23    if( !$(q.target).hasClass('quasar-form') && ($(".quasar-form").has(q.target).length === 0 ) && !$(q.target).hasClass('fa-timesq')  ) {  
24        $('.modal-box-qform').css('display' , 'none').find('.swap-form-block').removeClass('show-from-q');
25        $('.button-qform').removeClass('active-q-b');
26    }
27});
28
29//close modal Esc
30$(document).keyup(function(e) {
31	if (e.key === "Escape" || e.keyCode === 27) {
32	    $('.modal-box-qform').each(function(){
33	        if ( $(this).css('display') =='flex'){
34	            $('.modal-box-qform').css('display' , 'none').find('.swap-form-block').removeClass('show-from-q');
35                $('.button-qform').removeClass('active-q-b');
36	        }
37	    });
38	}
39});
40
41//show popup form when you click on an element with class "data-starid" and attr data-starid 
42$(document).on('click', '.quasar-form-button' , function(){
43    let iformi  = $(this).attr('data-quasarid');
44    if (typeof iformi !== typeof undefined && iformi !== false) {
45        let showForm = $('.quasar-form[data-id="'+iformi+'"]').closest('.modal-box-qform');
46        showForm.css({'display' : 'flex'});
47        //animation popup
48        setTimeout(function(){
49            showForm.find('.swap-form-block').addClass('show-from-q');
50        },100);
51    }
52});
53
54//show popup form link
55$(document).on('click', 'a' , function(q){
56    let href = $(this).attr('href');
57   
58    if (typeof href !== typeof undefined){
59        if ( href.match(/quasar-form-p-/g) ){
60            q.preventDefault();
61            let iformi = href.split('-');
62            iformi = iformi[3];
63            let showForm = $('.quasar-form[data-id="'+iformi+'"]').closest('.modal-box-qform');
64            showForm.css({'display' : 'flex'});
65            //animation popup
66            setTimeout(function(){
67                showForm.find('.swap-form-block').addClass('show-from-q');
68            },100);
69        }
70    }
71});
72
73
74//close popup form
75$('.close-quasar-form, .close-quasar-form i').on('click', function(){
76    $('.modal-box-qform').css('display' , 'none').find('.swap-form-block').removeClass('show-from-q');
77});
78
79
80//input style 2
81$('.form-main-element').on('focus', '.input-style-quasar, .textarea-style-quasar',  function(){
82    let field = $(this).closest('.form-element-q');
83    //fix phone style 2
84    field.closest('.form-main-element').find('.type-phone-element').each(function(){
85       if ( $(this).find('input').val() ===''){ $(this).removeClass('style-qform-2-focus'); }
86    });
87    if ( field.hasClass('style-qform-2') ) {
88        field.addClass('style-qform-2-focus');
89    }
90});
91
92$('.form-main-element').on('focusout', '.style-qform-2 .input-style-quasar, .style-qform-2 .textarea-style-quasar',  function(){
93    if ( $(this).val()==='' ) { 
94        let field = $(this).closest('.form-element-q');
95        //all filed
96        if ( !field.hasClass('type-timepicker-element') ) { field.removeClass('style-qform-2-focus'); }
97        //timepicker field
98        if ( field.hasClass('type-timepicker-element') ) { 
99            if ( field.find('.hour-picker-q').html() =='--' && field.find('.minut-picker-q').html() =='--' ) {  field.removeClass('style-qform-2-focus'); }
100        }
101    }
102});
103//calculation function
104function kalculation(thisForm) {
105    
106    thisForm.find('.type-itog-element').each(function(){ 
107        let stringCalculation = $(this).find('div').attr('data-kalkulation');
108        let object  = $(this);
109        let hide = object.attr('data-hide-total');
110        let hideNumber = 0;
111        //array id for calculation
112        var arrayCalkulation = stringCalculation.match(/\[.*?\]/g); 
113        var valueField = '';
114        let rounding = $(this).attr('data-rounding');
115        if (arrayCalkulation !==null){
116            $.each( arrayCalkulation,function(index,value){ 
117                var brackets = value;
118                var idfield = '#' + value.substr( 1, (value.length - 2 ))+' ';//remove brackets [ ]
119                var thisField = thisForm.find(idfield);
120                //value field
121                if ( thisField.hasClass('type-input-element') || thisField.hasClass('type-quantity-element') ){ 
122                    valueField = thisField.find('input').val(); 
123                    if ( valueField !== '' && !valueField.match(/[0-9]/g) ){valueField = 0;}
124                }
125                if ( thisField.hasClass('type-checkbox-element') || thisField.hasClass('checkbox-img') ){ 
126                    valueField = ''; 
127                    thisField.find('input').each(function(){
128                        if ($(this).prop("checked")){ 
129                            //total all field checkbox
130                            if (valueField ===''){ valueField = $(this).attr('date-rasschet'); }
131                            else {
132                                if ( $(this).attr('date-rasschet') !=='' ){
133                                    valueField = stringMath ( valueField +'+'+$(this).attr('date-rasschet') );
134                                }
135                            }
136                        }
137                    });
138                } 
139                if ( thisField.hasClass('type-dropdawn-element') ){ 
140                    valueField = ''; 
141                    thisField.find('option').each(function(){
142                        if ($(this).prop("selected")){ 
143                            //total all option selected
144                            if (valueField ===''){ valueField = $(this).attr('date-rasschet'); }
145                            else valueField = stringMath ( valueField +'+'+$(this).attr('date-rasschet') ) ;
146                        }
147                    });
148                } 
149                if ( thisField.hasClass('type-range-element') ){ valueField = thisField.find('.tumbler-q-slider').html(); }
150                if ( thisField.hasClass('type-itog-element') ){ 
151                    valueField = thisField.find('.summa-itog').html(); 
152                }
153                if (typeof valueField =="undefined"){ valueField = 0; hideNumber++; }
154                if ( valueField==='' ){ valueField = 0; hideNumber++;}
155                stringCalculation = stringCalculation.replace( value , valueField );
156            });
157            //hide not full fill
158            if ( hide == 'yes'){
159                if ( hideNumber > 0){ object.addClass('hide-not-full'); } 
160                if ( hideNumber === 0){ object.removeClass('hide-not-full'); } 
161            }
162            
163            //clear extra characters
164            if ( stringCalculation === ''){ stringCalculation = '0'; }
165            stringCalculation = stringCalculation.replace( /[^0-9+*\-\/\(\)\.]/g , '' );
166            //blocked error delenie na 0
167            stringCalculation = stringCalculation.replace( /(\/0)/g , '/1' );
168            var total  =  stringMath ( stringCalculation ) ;
169            if ( rounding == '1' ){ total = Math.round(total); }//standart down
170            if ( rounding == '2' ){ total = Math.ceil(total); }//Round up
171            if ( rounding == '3' ){ total = Math.floor(total); }//Round down
172            if ( rounding == '4' ){ total = total.toFixed(2); }
173            if ( rounding == '5' ){ total = total.toFixed(1); }
174
175            $(this).find('.summa-itog').html(total).attr('data-val-calculation', total);//output
176
177            let qforma = $(this).closest('.quasar-form');
178            qforma.find('.form-element-q').attr('data-logick', '0');
179        }
180    });
181}
182
183
184//launch function calculation
185$('.quasar-form').on('click keyup', 'input' ,   function(){
186    var thisForm = $(this).closest('.quasar-form');
187    //validation
188    let element = $(this).closest('.form-element-q');
189    if ( element.hasClass('type-input-element') ){
190        if ( element.attr('data-validation') == 'number'){
191            if ( $(this).val().match(/[^0-9]/g) ) { 
192                if ( ! element.hasClass('error-validation') ) { 
193                    element.addClass('error-validation'); 
194                    showTextErrorForm(thisForm);
195                } 
196            }
197            else {
198                if ( element.hasClass('error-validation') ) {
199                    element.removeClass('error-validation'); 
200                    showTextErrorForm(thisForm);
201                } 
202            }
203        }
204        if ( element.attr('data-validation') == 'number-calculator' ){
205            if ( $(this).val().match(/[^0-9.,]/g) ) { 
206                if ( ! element.hasClass('error-validation') ) { 
207                    element.addClass('error-validation'); 
208                    showTextErrorForm(thisForm);
209                } 
210            }
211            else {
212                if ( element.hasClass('error-validation') ) {
213                    element.removeClass('error-validation'); 
214                    showTextErrorForm(thisForm);
215                } 
216            }
217            //replce zapetua na tochka for calculator
218            let val_replace = $(this).val().replace(/,/g, '.');
219            $(this).val( val_replace  ); 
220        }
221        if ( element.attr('data-validation') == 'alphabete' ){
222            if ( $(this).val().match(/[0-9@#$%^&*(){}|+=_№!"':;.,<>?!`~\-\]\[\\\/\s]/) ) { 
223                if ( ! element.hasClass('error-validation') ) { 
224                    element.addClass('error-validation'); 
225                    showTextErrorForm(thisForm);
226                } 
227            }
228            else {
229                if ( element.hasClass('error-validation') ) {
230                    element.removeClass('error-validation'); 
231                    showTextErrorForm(thisForm);
232                } 
233            }
234        }
235    }
236    if ( thisForm.find('.type-itog-element').length > 0 ) { 
237        kalculation(thisForm); 
238    }
239});
240
241$('.quasar-form').on('change', 'select' , function(){
242    var thisForm = $(this).closest('.quasar-form');
243    if ( thisForm.find('.type-itog-element').length > 0 ) { 
244        kalculation(thisForm); 
245    }
246    //for logick zapolneno or nezapolneno
247    let object = $(this).closest('.form-element-q');
248    if ( object.hasClass('type-dropdawn-element')  ){
249        let zapolnenie = 0;
250        let valuselect = object.find('option:selected');
251        if ( valuselect.attr('data-selected')=='yes') { zapolnenie++; }
252        if ( zapolnenie > 0 ) { object.attr('data-val', 'false'); }
253        else { object.attr('data-val', 'true'); }
254    }
255});
256		
257
258//launch slider UI
259function sliderUpdate(){
260    $('.type-range-element').each(function(){ 
261        var element = $(this).find('.polzet');
262        let width = element.attr('data-width');
263        let color1 = element.attr('data-color1');
264        let color2 = element.attr('data-color2');
265        let color3 = element.attr('data-color3');
266        let color4 = element.attr('data-color4');
267        let minQ = Number(element.attr('data-min'));
268        let maxQ = Number(element.attr('data-max'));
269        let stepQ = Number(element.attr('data-step'));
270        let valQ = Number(element.attr('data-val'));
271 
272        element.slider({// UI slider
273            min: minQ,
274            max: maxQ,
275	        step: stepQ,
276            value: valQ,
277            range: "min",
278            animate: "fast",
279            slide : function(event, ui) { 
280                if (ui.value !==0){ 
281                    $(this).find('span').html("<div class='tumbler-q-slider show-informer' style='color: "+color4+";'>" + ui.value + "</div>"); 
282                } 
283                else { 
284                    $(this).find('span').html("<div class='tumbler-q-slider' style='color: "+color4+";'>" + ui.value + "</div>"); 
285                }
286                
287                //1. launch calulation
288                var thisForm = $(this).closest('.quasar-form');
289                if ( thisForm.find('.type-itog-element').length > 0 ) { kalculation(thisForm); }
290                //2. launch logic function
291                thisForm.find('.form-element-q').attr('data-logick', '0');
292            }   
293        });
294        //add sclae in range
295        if ( element.attr('data-sh')==='yes' || element.attr('data-sh-2')==='yes' ) {
296            let slider = $(this).find('.polzet');
297            let top = slider.attr('data-m-s');
298            if ( element.attr('data-sh')==='yes' && element.attr('data-sh-2')==='not' ) {
299                if ( minQ!=='' && maxQ!=='' ){
300                    slider.addClass('scale-q');
301                    let summaVal = maxQ - minQ;
302                    let leftPX = 0;
303                    slider.append( $('<div class="rangeotm"><div class="scale-sl-q">'+minQ+'</div></div>').css({'left' : leftPX+'%', 'top': top, 'color': element.attr('data-color5') }) );
304                    leftPX = 100;
305                    slider.append( $('<div class="rangeotm"><div class="scale-sl-q">'+maxQ+'</div></div>').css({'left': leftPX+'%', 'top': top, 'color': element.attr('data-color5') }) );
306                }
307            }
308            else {
309                if ( element.attr('data-sh-2')==='yes' ) {
310                    if ( minQ!=='' && maxQ!=='' ){
311                        slider.addClass('scale-q');
312                        let summaVal = (maxQ - minQ) / stepQ;
313                        summaVal = Math.floor(summaVal);
314                        let left = 100 / summaVal;
315                        let leftPX = 0;
316                        while( minQ <= maxQ ){
317                            let val = minQ;
318                            if ( minQ != Math.floor(minQ) ){
319                                val = val.toFixed(1);
320                            }
321                            slider.append( $('<div class="rangeotm"><div class="scale-sl-q">'+val+'</div></div>').css({'left' : leftPX+'%', 'top' : top, 'color': element.attr('data-color5') }) );
322                            leftPX = leftPX + left;
323                            minQ = minQ + stepQ;
324                        }
325                    }
326                }
327            }
328        }
329        //position
330        if ( element.attr('data-p-s')==='bottom' ){ element.addClass('button-scale-q'); }
331        
332        $(this).find('.polzet').find('span').html("<div class='tumbler-q-slider'>" +  element.slider("value") + "</div>");  
333        $(this).find('.ui-slider-range').css({
334            'background-color' : color1,
335            'height' : element.css('height'),
336            'border-radius' : element.css('border-radius'),
337        });
338        $(this).find('.polzet').css({ 'background-color' : color2 });
339        $(this).find('.ui-slider-handle').css('background-color', color3);
340    });
341}
342      
343sliderUpdate();
344
345//start calculator
346$('.quasar-form').each(function(){
347    if ( $(this).find('.type-itog-element').length > 0 ){
348        kalculation( $(this) );
349    }
350});
351     
352
353//activation UI datepicker
354function datapiker() {
355    $('.type-data-element').each(function(){
356        let lang = $(this).attr('data-lang');
357        if ( lang =='ru' ){
358            $.datepicker.setDefaults({
359				closeText: 'Закрыть',
360				prevText: '<Пред',
361				nextText: 'След>',
362				currentText: 'Сегодня',
363				monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
364				monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'],
365				dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
366				dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
367				dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
368				weekHeader: 'Нед',
369				dateFormat: 'dd-mm-yy',
370				firstDay: 1,
371				showAnim: 'slideDown',
372				isRTL: false,
373				showMonthAfterYear: false,
374				yearSuffix: ''
375			} );
376        }
377        let setting_1 = 0;
378        if ( $(this).attr('data-s-1') =='not' ){ setting_1 = null; }
379        let setting_2 = $(this).attr('data-s-2');
380        
381        let datacolor1 = $(this).find('input').attr('data-colorsw');
382        let datacolor2 = $(this).find('input').attr('data-colorsw2');
383        let datacolor3 = $(this).find('input').attr('data-colorsw3');
384        
385        $(this).find('input').datepicker({//date table call
386            beforeShow: function(input, inst) {
387                //before action
388                $('#ui-datepicker-div').addClass('qdatapicker').attr('data-id-field', $(this).closest('.type-data-element').attr('id') );
389                $('#ui-datepicker-div').find('.ui-datepicker-header').css('background-color', datacolor1) ;
390                //color of setting
391                setTimeout(function(){
392                    $('.ui-datepicker-header').css({'background-color' : datacolor1 , 'color' : datacolor2 }).find('.ui-corner-all').css('color' , datacolor2 ); 
393                    $('.ui-datepicker-calendar a').css({'color' : datacolor3}); 
394                },30);
395            },
396            beforeShowDay: function(date){
397                //disable wekend
398                if ( setting_2 =='yes' ){
399                    let dayOfWeek = date.getDay();
400                    if (dayOfWeek === 0 || dayOfWeek === 6){
401        				return [false];
402        			} 
403        			else {
404        				return [true];
405        			}
406        		}
407        		else { return [true]; }
408		    },
409            onChangeMonthYear: function(year, month, widget) {
410                let datacolor1 = $(this).attr('data-colorsw');
411                let datacolor2 = $(this).attr('data-colorsw2');
412                let datacolor3 = $(this).attr('data-colorsw3');
413                setTimeout(function(){
414                    $('.ui-datepicker-header').css({'background-color' : datacolor1 , 'color' : datacolor2 }).find('.ui-corner-all').css('color' , datacolor2 ); 
415                    $('.ui-datepicker-calendar a').css({'color' : datacolor3}); 
416                },20);
417            },
418            minDate: setting_1,
419        });
420    });
421}
422
423if( $('.type-data-element').length > 0 ){
424    datapiker();
425}
426
427//fix date style2
428$('.type-data-element').on('change',  function(){
429    let object = '#'+$('.qdatapicker').attr('data-id-field');
430    if ( $(object).hasClass('style-qform-2') ){
431        $(object).addClass('style-qform-2-focus'); 
432    }
433});
434
435//custom timepicker
436$('.quasar-form').on('click', '.type-timepicker-element .input-swap', function(){
437    if ( $(this).find('.wrap-time-list-q').length === 0 ) {
438        let object = $(this).parent();
439        $('.wrap-time-list-q').remove();
440        $('.active-time-q').removeClass('active-time-q').find('.wrap-time-list-q').remove();
441        object.addClass('active-time-q');
442        let min = object.attr('data-min').split(':');
443        let max = object.attr('data-max').split(':');
444        let step = object.attr('data-step');
445        let time = '<div class="wrap-time-list-q" style="background-color:'+object.attr('data-color-2')+';">';
446        let hours = '<div class="hours-list-q">';
447        let minute = '<div class="minute-list-q">';
448        let valHours = $(this).find('.hour-picker-q').html();
449        let valMinute = $(this).find('.minut-picker-q').html();
450        let number = 0;
451        let totalHour = 0;
452
453        while (number < 24) {
454            let val = '';
455            if (number < 10){ val = '0'+number; }
456            else { val = number; }
457            if ( Number(val) >= min[0] && Number(val) <= max[0] ){ //min max hour
458                if ( String(valHours) ==  String(val) ){hours = hours + "<div class='active-t-q' style='color:"+object.attr('data-color-4')+"; background-color:"+object.attr('data-color-3')+";'>"+val+"</div>";}
459                else { hours = hours + "<div style='color:"+object.attr('data-color-1')+";'>"+val+"</div>"; }
460                totalHour++;
461            }
462            number++;
463        }
464        hours = hours + '</div>';
465        time = time + hours;
466    
467        number = 0;
468        let stepVal = 1;
469        while (number < 60) {
470            let val = '';
471            if (number < 10){ val = '0'+number; }
472            else { val = number; }
473            if ( totalHour === 1 ){
474                if ( stepVal === 1 ){//step
475                    if ( Number(val) >= min[1] && Number(val) <= max[1] ){ //min max minut
476                        if ( String(valMinute) == String(val) ){ minute = minute + "<div class='active-t-q' style='color:"+object.attr('data-color-4')+"; background-color:"+object.attr('data-color-3')+";'>"+val+"</div>";}
477                        else { minute = minute + "<div style='color:"+object.attr('data-color-1')+";'>"+val+"</div>"; }
478                    }
479                }
480            }
481            else { 
482                //stepVal = Number(stepVal);
483                if ( stepVal === 1 ){//step
484                    if ( String(valMinute) == String(val) ){ minute = minute + "<div class='active-t-q' style='color:"+object.attr('data-color-4')+"; background-color:"+object.attr('data-color-3')+";'>"+val+"</div>";}
485                    else { minute = minute + "<div style='color:"+object.attr('data-color-1')+";'>"+val+"</div>"; }
486                }
487            }
488            number++;
489            stepVal--;
490            if ( stepVal === 0 ){ stepVal =  Number(step); }
491        }
492        time = time + minute;
493        time = time + '</div>';
494        $(this).append(time);
495    }
496});
497
498//window timepicker remove
499$(document).on('click', function(e){
500    if ( $('.wrap-time-list-q').length > 0 ){
501        if ( (!$(".active-time-q").is(e.target)) && ($(".active-time-q").has(e.target).length === 0) )  {
502            $('.wrap-time-list-q').remove();
503            $('.active-time-q').removeClass('active-time-q');
504        }
505    }
506});
507
508$('.quasar-form').on('click', '.hours-list-q div, .minute-list-q div' , function(e){
509    let object = $(this).parent();
510    let val = $(this).html();
511    let mainObject = $(this).closest('.type-timepicker-element');
512    $(this).parent().find('.active-t-q').removeClass('active-t-q').css({"color" : mainObject.attr('data-color-1'), "background-color" : '' });
513    $(this).addClass('active-t-q').css({"background-color" : mainObject.attr('data-color-3'), "color" : mainObject.attr('data-color-4')  });
514    if ( object.hasClass('hours-list-q') ){
515        object.closest('.type-timepicker-element').attr('data-hour' , val).find('.hour-picker-q').html(val);
516    }
517    if ( object.hasClass('minute-list-q') ){
518        object.closest('.type-timepicker-element').attr('data-minute' , val).find('.minut-picker-q').html(val);
519    }
520    mainObject.removeClass('empty-filed-q');
521    mainObject.attr( 'data-time',  mainObject.find('.hour-picker-q').html() + ':' + mainObject.find('.minut-picker-q').html() );//for logic condition
522    //for logick
523    if ( mainObject.find('.hour-picker-q').html() !='--' && mainObject.find('.minut-picker-q').html() !='--' ) {  
524        mainObject.find('input').trigger('keyup'); //zapolneno
525    }
526    //fix style 2
527    if ( mainObject.hasClass('style-qform-2') ){
528        if ( mainObject.find('.hour-picker-q').html() !='--' || mainObject.find('.minut-picker-q').html() !='--' ) { 
529            mainObject.find('.wrap-time-picker-q').css('display' ,'flex');
530            mainObject.addClass('style-qform-2-focus');
531        }
532    }
533}); 
534
535//captcha
536function captcha(){
537    $('.type-captcha-element').each(function(){
538        //random
539        var elementcaptcha = $(this).find('.captcha-element-q');
540        var stringk = '';
541        elementcaptcha.find('img').each(function(){
542            function getRandomInRange(min, max) {
543                return Math.floor(Math.random() * (max - min + 1)) + min;
544            }
545            var random1 = getRandomInRange(0, 8);
546            var linkimg =  $(this).attr('src').split('/');
547            linkimg.pop();
548            var string ='';
549            $.each(linkimg,function(index,value){
550                string = string + value +'/';
551            });
552            string = string + 'qfc-'+random1+'.png';
553            stringk = stringk + '/' + random1;
554            $(this).attr({'src': string });
555        });
556        stringk = stringk.split('/');
557        if (stringk[1] > stringk[2]  ) {
558            $(this).find('div').each(function(){
559                if( $(this).html()=='+'){ $(this).html('-'); }
560            });
561        }
562        else {  
563            $(this).find('div').each(function(){
564                if( $(this).html()=='-'){ $(this).html('+'); }
565            }); 
566        }
567    });
568}
569captcha();
570
571
572
573//fix style with empty title
574$('.form-main-element .type-upload-element').each(function(){
575    if ($(this).find('.heading-field-q').html()===''){ $(this).find('.heading-field-q').css('top' , '-5px'); }
576});
577
578var idNumber = 0;
579//uplod file
580$('.type-upload-element').on('change', 'input[type="file"]',  function(){	
581    if ( $(this).val()!=='' ) {
582        let nameFile = this.files[0].name;
583        let nameFileUpload = nameFile.length;
584        let sizeFile = this.files[0].size;
585        let condition = 0;
586        let button = $(this).closest('.type-upload-element');
587        //type file
588        let arrayTypeFile = nameFile.split('.');
589        let typeFile = arrayTypeFile .pop();// typeFile
590        $(this).closest('label').removeClass('empty-filed-q').prev('.messagereq').find('span').css('display', 'none'); 
591        //conditions
592        //size file
593        let max = button.attr('data-v') * 1000000 ;
594        if ( sizeFile > max ){ 
595            $(this).closest('label').addClass('empty-filed-q').prev('.messagereq').find('.error-upload-1').css('display', 'flex');  
596            $(this).attr('type', 'text'); 
597            $(this).attr('type', 'file');
598            $(this).closest('label').find('.textfq').removeClass('tochkiq');
599            condition++;
600        }
601        //type fiel (typeFile)
602        let extension = button.attr('data-r');
603        let number = 0;
604        if ( extension.indexOf(',') > 0 ){
605            var arrayExtension = extension.split(','); 
606            $.each(arrayExtension,function(index,value){ 
607                if(value == typeFile){ number++; }
608            });
609        }
610        if ( extension.indexOf(',') == -1 ){ 
611            if (extension == typeFile){ number++; }
612        }
613        if ( number === 0 ){ 
614            $(this).closest('label').addClass('empty-filed-q').prev('.messagereq').find('.error-upload-2').css('display', 'flex'); 
615            $(this).attr('type', 'text');
616            $(this).attr('type', 'file');  
617            $(this).closest('label').find('.textfq').removeClass('tochkiq');
618            condition++;
619        }
620        //name file in button
621        if (nameFileUpload > 16 && condition === 0 ) { 
622            nameFile = nameFile.substr( 0, nameFileUpload - (nameFileUpload - 16) ); //maximum name length
623            $(this).closest('label').find('.textfq').addClass('tochkiq');
624            $(this).closest('label').find('.textfq').text(nameFile);
625        }
626        if (nameFileUpload <= 16) { 
627            $(this).closest('label').find('.textfq').removeClass('tochkiq'); 
628            $(this).closest('label').find('.textfq').text(nameFile);
629        }
630        idNumber++;
631        //plus add file
632        if( button.attr('data-max') > 1) {//condition file limit
633            if ( button.attr('data-max') >  button.find('label').length ) {
634                if ( $(this).closest('.type-upload-element').find('.add-button-upload').length === 0 ) {
635                    let CreadetElement ='<div class="additionally-box"> <div class="add-button-upload">'+ button.attr('data-add') +'</div></div>';
636                    button.append(CreadetElement);
637                }
638            }
639        }
640    }
641    else {
642        let textButton = $(this).closest('.type-upload-element').attr('data-text');
643        $(this).closest('label').find('.textfq').removeClass('tochkiq').text(textButton); 
644    }
645});
646
647$('.type-upload-element').on('click', '.add-button-upload',  function(){ 
648    let stylebutton = [];
649    let button = $(this).closest('.type-upload-element');
650    let idq = button.find('label').filter(":first").attr('for');
651    stylebutton[0] = button.find('label');
652    stylebutton[1] = stylebutton[0].attr('style');
653    stylebutton[2] = stylebutton[0].attr('class');
654    stylebutton[3] = stylebutton[0].find('i').attr('style');
655    let idq2 = idq + idNumber;
656    //add upload button
657    let CreadetElement = '<span class="messagereq">'+button.find('.messagereq').filter(":first").html()+'</span> <label class="'+stylebutton[2]+'" style="'+stylebutton[1]+'" for="'+idq2+'"><span class="textfq">'+button.attr('data-text')+'</span> <div class="fa-icons-q"><i class="fa fa-uploadq" style="'+stylebutton[3]+'"></i></div>
657<input id="'+idq2+'" class="element-css-q" name="userFile1" type="file"></label>'; 
658    button.find('.swap-button-upload').append(CreadetElement);
659    idNumber++;
660    //hide message
661    $('#'+idq2).closest('label').removeClass('empty-filed-q').prev('.messagereq').find('span').css('display', 'none');
662    //add remove button
663    if ( button.find('.remove-button-upload').length === 0 && button.find('label').length > 1 ){
664        CreadetElement ='<div class="remove-button-upload"><i class="fa fa-timesq"></i></div>';
665        button.find('.additionally-box').append(CreadetElement);
666    } 
667    //add class margin
668    if ( button.find('label').length > 1 ) {
669        if ( !button.find('.swap-button-upload').hasClass('margin-bottom-upload') ){ button.find('.swap-button-upload').addClass('margin-bottom-upload'); }
670    }
671    else { 
672        if ( button.find('.swap-button-upload').hasClass('margin-bottom-upload') ){ 
673            button.find('.swap-button-upload').removeClass('margin-bottom-upload'); 
674        } 
675    }
676  
677    //remove plus add file
678    if ( $(this).closest('.type-upload-element').find('label').length >= $(this).closest('.type-upload-element').attr('data-max') ) { 
679       $(this).remove();
680    }
681});
682
683$('.type-upload-element').on('click', '.remove-button-upload',  function(){ 
684    let button = $(this).closest('.type-upload-element');
685    let remove = button.find('label').filter(":last");
686    remove.prev('.messagereq').remove();
687    remove.remove();
688    if ( button.find('label').length == 1 ) { button.find('.remove-button-upload').remove(); }
689    //plus add file
690    if ( button.attr('data-max') > 1) {//condition file limit
691        if ( button.find('.add-button-upload').length === 0 ) {
692            if ( button.find('label').length > 0 ) {
693                let CreadetElement ='<div class="add-button-upload">'+ button.attr('data-add') +'</div>';
694                button.find('.additionally-box').append(CreadetElement);
695            }
696        }
697    }
698});	
699
700//launch phone
701$('.type-phone-element').each(function(){ 
702    let val = $(this).find('input').attr('data-mask');
703    if ( $(this).find('input').attr('data-mask-a') !='not' ){
704        if ( val !=='' ){ $(this).find('input').mask( val, {autoclear: false} ); }
705    }
706});
707
708//auto filling
709$('.quasar-form').each(function(){
710    let qforma = $(this);
711    qforma.find('.type-input-element input').each(function(){
712        if ( $(this).attr('data-filling-a') == '1' && $(this).attr('data-filling') !== '' ) { 
713            let input = $(this);
714            let classFiling = $(this).attr('data-filling');
715            if ( !classFiling.match(/,/g) ){
716                let object = $('.'+classFiling);
717                let type = object.prop('nodeName');
718                if ( type == 'INPUT' || type == 'TEXTAREA' || type == 'SELECT' ){
719                    input.val( $('.'+classFiling).val() ) ;
720                }
721                else  { 
722                    input.val( $('.'+classFiling).html() ) ;
723                }
724                //fix fot style 2
725                if ( input.closest('.form-element-q').hasClass('style-qform-2') ) {
726                    if ( input.val !==''){ $(this).closest('.form-element-q').addClass('style-qform-2-focus'); }
727                }
728            }
729        }
730    });
731});
732
733
734function showTextErrorForm(qforma){
735    if ( !qforma.hasClass('warning-add') ){
736        qforma.find('.error-filed-q').each(function(){
737            $(this).html( $(this).attr('data-text') );
738        });
739        
740        let val = qforma.find('.error-qform');
741        val.html( val.attr('data-text') );
742        
743        qforma.find('.messagereq span').each(function(){
744            $(this).html( $(this).attr('data-text') );
745        });
746        
747        val = qforma.find('.message-send-q span');
748        val.html( val.attr('data-text') );
749        
750        val = qforma.find('.text-prorgress-send');
751        val.html( val.attr('data-text')+': ');
752        
753        val = qforma.find('.text-after-send-q');
754        val.html( val.attr('data-text') );
755        
756        qforma.addClass('warning-add');
757        
758        //text after send
759        let object = qforma.find('.text-after-send-q');
760        let objectHtml = object.html();
761        let textDefoult = qforma.find('.none-element-send-q').html();
762        if ( objectHtml.match(/\[default value\]/) ) {
763            objectHtml = objectHtml.replace( '[default value]' , textDefoult);
764            object.html( objectHtml );
765        }
766    }
767}
768
769// Send emails
770$('.quasar-form').on('submit', function(e) {
771
772    e.preventDefault();
773    e.stopPropagation();
774    
775    var qforma = $(this).closest('.quasar-form');
776    showTextErrorForm(qforma);
777    qforma.find('.tab-box-q').filter(':last').addClass('last');
778    if ( qforma.find('.activ-tab-q').hasClass('last') || qforma.find('.tab-box-q').length === 0  ) {
779        
780        var valueRequed = 0; 
781        var numberRequed = 0;
782        //required field conditions
783        qforma.find('.requed-field-q').each(function(){ 
784            numberRequed++;
785            //1. input, datepicker, email
786            if ( $(this).hasClass('type-input-element') || $(this).hasClass('type-email-element') || $(this).hasClass('type-phone-element') || $(this).hasClass('type-data-element') || $(this).hasClass('type-upload-element') ) { 
787                let input = $(this).find('input');
788                if ( input.val() ==="" && input.attr('data-filling-a') != '2' && input.attr('data-filling-a') != '1' ) { 
789                    $(this).closest('.form-element-q').addClass('empty-filed-q'); 
790                    valueRequed = 1;
791                } 
792            }
793            //2. timepicker
794            if ( $(this).hasClass('type-timepicker-element' ) ) { 
795                if ( $(this).find('.hour-picker-q').html() =='--' || $(this).find('.minut-picker-q').html() =='--' ) {  
796                    $(this).closest('.form-element-q').addClass('empty-filed-q'); 
797                    valueRequed = 1;
798                }
799            }
800            //3. checkbox
801            if ( $(this).hasClass('type-checkbox-element') || $(this).hasClass('checkbox-img') || $(this).hasClass('type-privacy-element') ) { 
802                let elementThis = $(this);
803                let number = 0; 
804                $(this).find('input').each(function(){
805                    if ( $(this).prop("checked") ){ number++ ; }
806                }); 
807                if (number === 0){
808                    if(!$(elementThis).hasClass('empty-filed-q')) { $(elementThis).addClass('empty-filed-q'); }
809                    valueRequed = 1 ;
810                } 
811            } 
812            //4. textarea
813            if ($(this).hasClass('type-textarea-element')) {
814                if ($(this).find('textarea').val() ===""){ 
815                    $(this).addClass('empty-filed-q'); 
816                    valueRequed = 1;
817                } 
818            }
819            //5. dropdawn
820            if ($(this).hasClass('type-dropdawn-element')) { 
821                let valuselect = $(this).find('option:selected');
822                if ( valuselect.attr('data-selected')=='yes') { 
823                    $(this).addClass('empty-filed-q');
824                    valueRequed = 1;
825                }
826            }
827            //6. captcha
828            if ($(this).hasClass('type-captcha-element')) { 
829                if ($(this).find('input').val() ===""){ 
830                    $(this).addClass('empty-filed-q'); 
831                    valueRequed = 1;
832                } 
833                else {
834                    var stringc ='';
835                    var valueinput = $(this).find('input').val();
836                    $(this).find('img').each(function(){
837                        var arrayCaptcha = $(this).attr('src').split('/');
838                        var valc = arrayCaptcha.pop();
839                        valc = valc.split('-');
840                        var valc2 = valc[1].split('.');
841                        stringc = stringc + valc2[0] + '/';
842                    });
843                    stringc = stringc.split('/');
844                    var verification='';
845                    $(this).find('div.pl-form-q').each(function(){
846                        if ( $(this).html()=='-' ){ verification = ( Number(stringc[0])+1) - ( Number(stringc[1])+1 ); }
847                        if ( $(this).html()=='+' ){ verification = ( Number(stringc[0])+1) + ( Number(stringc[1])+1 ); }
848                    });
849                    //final validationFieldValue
850                    if( valueinput != verification ){  
851                        $(this).closest('.type-captcha-element').addClass('error-captcha-q');  
852                        captcha(); 
853                        valueRequed = 2;  
854                       
855                    }
856                }
857            }
858        }); 
859        //validation key
860        var numberfalid = 0;
861        var keyVerification = qforma.find('.form-main-element').attr('data-q');
862        if (typeof keyVerification =="undefined"){ numberfalid++; }
863        else {
864            keyVerification = keyVerification.split('&');
865            var arrayKey = keyVerification[0].split('A');
866            if (keyVerification !=='' && arrayKey.length === 3){
867                if ( qforma.attr('data-id') != ( keyVerification[1] - 7) ){ numberfalid++; } //condition id form
868                if ( arrayKey[0] != numberRequed ){ numberfalid++; } //quantity requed field
869                //quantity numbers and alphabets
870                if ( arrayKey[1] != qforma.find('.form-element-q[data-validation="Only numbers"]').length ){ numberfalid++; }
871                if ( arrayKey[2] != qforma.find('.form-element-q[data-validation="Only alphabets"]').length ){ numberfalid++; }
872            }
873            else { numberfalid++; }
874        
875            if (numberfalid !== 0) { 
876                qforma.find('.swap-error-qform').css('display', 'block');
877                valueRequed = 10; 
878            }
879            else {qforma.find('.swap-error-qform').css('display', 'none');}
880        } 
881        //validation only numbers
882        qforma.find('.form-element-q[data-validation="number"]').each(function(){
883            let input = $(this).find('input');
884            if ( input.val().match(/[^0-9]/g) && input.attr('data-filling-a') != '2' && input.attr('data-filling-a') != '1') { 
885                if ( ! $(this).hasClass('empty-filed-q') ) { 
886                    $(this).addClass('error-validation'); 
887                    valueRequed = 3;
888                } 
889            }
890        });
891        //validation only numbers for calculation
892        qforma.find('.form-element-q[data-validation="number-calculator"]').each(function(){
893            let input = $(this).find('input');
894            if ( input.val().match(/[^0-9.,]/g) && input.attr('data-filling-a') != '2' && input.attr('data-filling-a') != '1') { 
895                if ( ! $(this).hasClass('empty-filed-q') ) { 
896                    $(this).addClass('error-validation'); 
897                    valueRequed = 3;
898                } 
899            }
900        });
901        //validation only alphabets
902        qforma.find('.form-element-q[data-validation="alphabete"]').each(function(){
903            let input = $(this).find('input');
904            if ( input.val().match(/[0-9@#$%^&*(){}|+=_№!"':;.,<>?!`~\-\]\[\\\/\s]/) ) { 
905                if ( ! $(this).hasClass('empty-filed-q') && input.attr('data-filling-a') != '2' && input.attr('data-filling-a') != '1') { 
906                    $(this).addClass('error-validation');
907                    valueRequed = 3;
908                } 
909            }
910        });
911        //validation email
912        qforma.find('.type-email-element').each(function(){
913            let email = $(this).find('input').val();
914            if ( email !=='' ){
915                function validateEmail() {
916                    var re = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
917                    return re.test(String(email).toLowerCase());
918                }
919                let valid = validateEmail();
920                if ( valid === false ){
921                    $(this).addClass('error-mail-q');
922                    valueRequed = 4; 
923                }
924            }
925        });
926        //validation phone
927        qforma.find('.type-phone-element').each(function(){
928            let mask = $(this).find('input').attr('data-mask-a');
929            if ( mask ==='yes' ){
930                let mask2 = $(this).find('input').attr('data-mask');
931                let number = mask2.match(/[0-9]/g).length;
932                if ( mask2 !== '' ){
933                    let phone = $(this).find('input').val();
934                    if ( phone !=='' ){
935                        phone = phone.match(/[0-9]/g).length;
936                        if ( number != phone ) {  
937                            $(this).addClass('error-validation');
938                            valueRequed = 3;
939                        }
940                    }
941                       
942                }
943            }
944        });
945        //validation special
946        if ( qforma.find('.special-field').val() !=='' ) {
947            valueRequed = 1; 
948        }
949
950        if (valueRequed === 0){
951            arrayCheckbox = '';
952            arrayTextField = '';
953            var dataField = '';
954            var form_data = new FormData(); 
955            form_data.append('id-form', qforma.attr('data-id') ); //add id this form in message
956
957            qforma.find('.form-element-q').each(function(){
958                //input, email, datepicker
959                var heading = '';
960                if ($(this).hasClass('type-input-element') || $(this).hasClass('type-email-element') || $(this).hasClass('type-phone-element') || $(this).hasClass('type-data-element') ){
961                    let input = $(this).find('input');
962                    //auto filling
963                    if ( input.attr('data-filling-a') == '2' ) { 
964                        let classFiling = input.attr('data-filling');
965                        if ( !classFiling.match(/,/g) ){
966                            input.val( $('.'+classFiling).html() ) ;
967                        }
968                        else {
969                            classFiling = classFiling.split(',');
970                            if ( classFiling[0]!=='' && classFiling[1]!=='' ){
971                                //popup form
972                                if ( qforma.hasClass('form-type-popup') ){
973                                    let id = qforma.attr('data-id');
974                                    let button = $('.active-q-b');
975                                    let val = button.closest('.'+classFiling[0]).find('.'+classFiling[1]).html();
976                                    input.val( val) ;
977                                }
978                                else {
979                                    let val = qforma.closest('.'+classFiling[0]).find('.'+classFiling[1]).html();
980                                    $(this).val( val ) ;
981                                }
982                            }
983                        }
984                    }
985                    
986                    if ($(this).find('input').val() !==''){ 
987                        if ( $(this).find('.heading-field-q').length > 0 ) { 
988                            heading = $(this).find('.heading-field-q').html(); 
989                        }
990                        else { 
991                            heading= '';
992                        }
993                        dataField = dataField + $(this).attr('id') + ";" + heading + ';' + $(this).find('input').val() + 'RazDelITEL';
994                        arrayTextField = arrayTextField + $(this).attr('id') + ";" + heading + ';' + input.val() + 'RazDelITEL';
995                    }
996                }
997                //checkbox
998                if ( $(this).hasClass('type-checkbox-element') || $(this).hasClass('checkbox-img') ){
999                    let validationFieldValue = 0; 
1000                    let thisElement = $(this);
1001                    $(this).find('input').each(function(){
1002                        if ( $(this).prop("checked") ){
1003                            validationFieldValue++;
1004                            if (validationFieldValue == 1) { 
1005                                dataField = dataField + thisElement.attr('id') + ";" + thisElement.find('.heading-field-q').html() + ";"; 
1006                            }
1007                            dataField = dataField + $(this).next('label').find('.html-text-check-q').html() + ';';
1008                            arrayCheckbox = arrayCheckbox + $(this).next('label').find('.html-text-check-q').html() + ';';
1009                        }
1010                    });
1011                    if (validationFieldValue !== 0){ 
1012                        dataField = dataField +'RazDelITEL'; 
1013                        arrayCheckbox = arrayCheckbox +'custom-class:' + $(this).find('input').attr('class')+ 'RazDelITEL'; 
1014                    }
1015                }
1016                //upload
1017                if ($(this).hasClass('type-upload-element')){
1018                    $(this).find('input').each( function(){
1019                        var idnameq = $(this).attr('name');
1020                        form_data.append('file[]', $(this).prop('files')[0]);
1021                    });
1022                }
1023
1024                //textarea
1025                if ($(this).hasClass('type-textarea-element')) {
1026                    if ( $(this).find('.heading-field-q').length > 0 ) { 
1027                        heading = $(this).find('.heading-field-q').html(); 
1028                    }
1029                    else heading = '';
1030                    if ( $(this).find('textarea').val() !==''){ 
1031                        dataField = dataField + $(this).attr('id') + ";" + heading + ';' + $(this).find('textarea').val() + 'RazDelITEL';
1032                    }
1033                }
1034                //dropdown
1035                if ($(this).hasClass('type-dropdawn-element')) {
1036                    if ( $(this).find('.heading-field-q').length > 0 ) { 
1037                        heading = $(this).find('.heading-field-q').html();
1038                    }
1039                    else heading = '';
1040                    if ($(this).find('select').val() !==''){
1041                        dataField = dataField + $(this).attr('id') + ";" + heading + ';' + $(this).find('select').val() + 'RazDelITEL';
1042                    }
1043                }
1044                //range
1045                if ($(this).hasClass('type-range-element')) { 
1046                    dataField = dataField + $(this).attr('id') + ";" + $(this).find('.heading-field-q').html() + ';' + $(this).find(".polzet").slider( "value" ) + 'RazDelITEL' ;
1047                }
1048                //timepicker
1049                if ($(this).hasClass('type-timepicker-element')) { 
1050                    if ( $(this).find('.hour-picker-q').html() !='--' || $(this).find('.minut-picker-q').html() !='--' ) {  
1051                        dataField = dataField + $(this).attr('id') + ";" + $(this).find('.heading-field-q').html() + ';' + $(this).find(".hour-picker-q").html() + ':' + $(this).find(".minut-picker-q").html() + 'RazDelITEL' ;
1052                    }
1053                }
1054                //total
1055                if ($(this).hasClass('type-itog-element')) {
1056                    dataField = dataField + $(this).attr('id') + ";" + ";" + $(this).find('div').html() + 'RazDelITEL';
1057                }
1058            });
1059
1060            //data mail
1061            form_data.append('action', 'mail_send_q'); 
1062            form_data.append('nonce_code', params.nonce); 
1063            form_data.append('contentQform', dataField );
1064            form_data.append('urlpage', window.location.href ); 
1065            form_data.append('titlepage', qforma.attr('data-title') ); 
1066            //addon 1 info product
1067            let stringWooData = '';
1068            if ( $('.wrap-button-quasar-woo').length > 0 ){
1069                let object = $('.active-q-b').closest('.wrap-button-quasar-woo');
1070                //id
1071                stringWooData = stringWooData +'id;'+ object.attr('data-id') +';' + object.attr('data-id-v') +'/';
1072                //name
1073                if ( qforma.find('.type-name-product').length > 0 ){
1074                    stringWooData = stringWooData +'name;'+ qforma.find('.type-name-product').html() +'/';
1075                }
1076                //quantity
1077                if ( qforma.find('.number-product-in-q').length > 0 ){
1078                    stringWooData = stringWooData +'quantity;'+ qforma.find('.number-product-in-q input').val() +';default/';
1079                }
1080                else {
1081                    if ( $('.active-q-b').length > 0  ){
1082                        let val = object.attr('data-qua');
1083                        if ( val !== 0 ){
1084                            if ( qforma.find('#'+val).length > 0 ){ 
1085                                stringWooData = stringWooData +'quantity;'+ qforma.find('#'+val).find('input').val() +';custom/';
1086                            }
1087                        }
1088                    }
1089                } 
1090                //prise
1091                if ( qforma.find('.product-prise-q').length > 0 ){
1092                    stringWooData = stringWooData +'price;'+ object.attr('data-id') +'/';
1093                }
1094                //empty 
1095                if ( qforma.find('.wrap-select-variable-q').length > 0 ){
1096                    let block = qforma.find('.wrap-select-variable-q');
1097                    if ( block.hasClass('error-variable-q') ){ 
1098                        block.removeClass('error-variable-q').find('.text-requed-woo-q').remove();
1099                    }
1100                    if ( object.attr('data-fill')=='not' ){ 
1101                        block.addClass('error-variable-q').append( '<div class="text-requed-woo-q">'+object.find('.variable-block-q').attr('data-text-r')+'</div>' );
1102                        return; 
1103                    }
1104                    else {
1105                        if ( object.attr('data-id-v')=='none' || object.attr('data-id-v')==='' || object.attr('data-full')==='not' ){ 
1106                            block.addClass('error-variable-q').append( '<div class="text-requed-woo-q" style="top: -25px;">'+object.find('.variable-block-q').attr('data-text-not-v')+'</div>' );    
1107                            return; 
1108                        }
1109                    }
1110                    
1111                }
1112                //data val 
1113                stringWooData = stringWooData +'data-val;'+ object.attr('data-val') +'/';
1114            }
1115            if ( stringWooData !=='' ){form_data.append('product-info', stringWooData ); }
1116            
1117    	    $.ajax({
1118                beforeSend: function() {
1119                    qforma.find('.text-after-send-q').css('display', 'flex');
1120                    //collapse form
1121                    if ( qforma.find('.text-after-send-q').attr('data-after-submit') =='yes' ){
1122                        qforma.find('.form-main-element').slideToggle();
1123                    }
1124                    else {
1125                        qforma.find('.text-after-send-q').css({
1126                            'position' : 'absolute',
1127                            'z-index' : '5',
1128                            'background-color' : '#fff',
1129                            'left' : '20px',
1130                            'right' : '20px',
1131                            'border' : '1px solid #d5d2d2',
1132                        });
1133                        qforma.find('.text-after-send-q').css({
1134                            'opacity' : '1',
1135                        });
1136                        
1137                        setTimeout(function(){
1138                            qforma.find('.text-after-send-q').css({
1139                                'display' : 'none',
1140                            });
1141                        }, 2800);
1142                    }
1143                    
1144                    //scroll after submit
1145                    if ( !qforma.hasClass('form-type-popup') && qforma.find('.text-after-send-q').attr('data-scroll') =='yes' ){
1146                        let heightWindow3 = ( $(window).height() / 100 ) * 40 ;
1147                        let poz = qforma.find('.text-after-send-q').offset().top - heightWindow3;
1148                        $('html, body').animate({
1149                            scrollTop: poz
1150                        }, 300);
1151                    }
1152                },
1153		        xhr: function() { 
1154                    var xhr = new window.XMLHttpRequest();
1155                    xhr.upload.addEventListener("progress", function(evt) {
1156                        if (evt.lengthComputable) {
1157                            var percentComplete = (evt.loaded / evt.total) * 100;
1158                            percentComplete = percentComplete.toFixed(0) + '%';
1159                            qforma.find('.text-after-send-q .percent-send-q').html(percentComplete);
1160                        }
1161                    }, false);
1162                    return xhr;
1163                },
1164                url         : params.ajaxurlq,
1165                type        : 'POST',
1166                data        : form_data,
1167                cache       : false,
1168                processData : false,
1169                contentType : false,
1170                success: function() {
1171                    qforma.find('.message-send-q').css('display' , 'block');
1172                    qforma.find('.text-prorgress-send, .swap-tabs-element, .percent-send-q').css('display' , 'none');
1173                    //pay 
1174                    if ( qforma.find('.type-paypal-element').length > 0 ){
1175                        setTimeout(function(){
1176                            let object = qforma.find('.type-paypal-element');
1177                            let pay_data = new FormData(); 
1178                            pay_data.append('action', 'pay_pal_q'); 
1179                            pay_data.append('nonce_code', params.nonce); 
1180                            pay_data.append('idpay', object.attr('id') ); 
1181                            pay_data.append('idform', qforma.attr('data-id') ); 
1182                            pay_data.append('urlpage', window.location.href ); 
1183                            pay_data.append('titlepage', qforma.attr('data-title') );
1184                            
1185                            let attr1 = object.attr('data-i-1');
1186                            let attr2 = object.attr('data-i-2');
1187                            if (typeof attr1 !== typeof undefined && attr1 !== false) {
1188                                attr1 = qforma.find('#'+attr1).find('.summa-itog').html();
1189                                pay_data.append('attr1', attr1 );
1190                            }
1191                            if (typeof attr2 !== typeof undefined && attr2 !== false) {
1192                                attr2 = qforma.find('#'+attr2).find('.summa-itog').html();
1193                                pay_data.append('attr2', attr2 );
1194                            }
1195                            $.ajax({
1196                                url : params.ajaxurlq,
1197                                type : 'POST',
1198                                data : pay_data,
1199                                cache : false,
1200                                processData : false,
1201                                contentType : false,
1202                                success: function(q) {
1203                                    let last = q[q.length-1];
1204                                    if (last == '0'){
1205                                        q = q.substring(0, q.length - 1);
1206                                    }
1207                                    window.location.href = q; 
1208                                }
1209                            });
1210                            
1211                        }, 1200);
1212                        
1213                    }
1214                    //redirect
1215                    let redirect = qforma.find('.url-r').attr('data-url');
1216                    if ( redirect !== '') { 
1217                        setTimeout(function(){
1218                            window.location.href = redirect; 
1219                        }, 1200);
1220                    }
1221                },
1222                error: function(errorThrown) {
1223                }
1224            });
1225            idThisForm = qforma.attr('data-id');
1226            arraySubmit = dataField.split('RazDelITEL');
1227            if ( arrayCheckbox !=='' ){ arrayCheckbox = arrayCheckbox.split('RazDelITEL'); }
1228            if ( arrayTextField !=='' ){ arrayTextField = arrayTextField.split('RazDelITEL'); }
1229        }
1230        else  { 
1231            arraySubmit = false;
1232            //scroll enable
1233            if ( qforma.find('.text-after-send-q').attr('data-scroll') =='yes' ){
1234                //error field
1235                let last_error ='';
1236                if ( valueRequed == 1 ){
1237                    last_error = qforma.find('.empty-filed-q:last');
1238                }
1239                if ( valueRequed == 3 ){
1240                    last_error = qforma.find('.error-validation:last');
1241                }
1242                if ( valueRequed == 4 ){
1243                    last_error = qforma.find('.error-mail-q:last');
1244                }
1245                if ( valueRequed == 2 ){
1246                    last_error = qforma.find('.error-captcha-q:last');
1247                }
1248                 
1249                if ( last_error !=='' && !qforma.hasClass('form-type-popup') ){
1250                    //scroll
1251                    let heightWindow3 = ( $(window).height() / 100) * 40 ;
1252                    let poz = last_error.offset().top - heightWindow3;
1253                    $('html, body').animate({
1254                        scrollTop: poz
1255                    }, 500);
1256                }
1257            }
1258        }
1259        //activ event submit
1260        qforma.find('.submit-quasar-form-event').trigger('click');
1261    }
1262    //click on the next tab when submit is clicked
1263    if ( qforma.find('.tab-box-q').length > 0 ){ qforma.find('.activ-tab-q').next().trigger('click'); } 
1264}); 
1265
1266    
1267$('.form-main-element').on('click', 'input, textarea, select' , function(){ 
1268    var elementClass = $(this).closest('.form-element-q');
1269    if ( elementClass.hasClass('error-validation') || elementClass.hasClass('empty-filed-q') || elementClass.hasClass('error-mail-q') || elementClass.hasClass('error-captcha-q') ){
1270        $(this).closest('.form-element-q').removeClass('empty-filed-q').removeClass('error-validation').removeClass('error-captcha-q').removeClass('error-mail-q'); 
1271    } 
1272});
1273
1274
1275});
1276})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.