PageSourceSearch

https://flytodiscover.it/wp-content/plugins/checkout-field-editor-…/assets/js/frontend.js?ver=1787732840

js flytodiscover.it collected 2026-10-09 04:41:32 UTC 84,521 bytes, 2,055 lines download raw bytes

1function awcfe_initialize_script($ck) {
2    window.fullMonthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
3    if (typeof jQuery.fn.datetimepicker === 'function') {
4        jQuery(".awcfe_date_field .awcfedatepicker").each(function () {
5            e = jQuery(this).data("dpconfig");
6
7            null == e && (e = {}), jQuery(this).datetimepicker(jQuery.extend({
8                timepicker: false,
9                scrollInput: false,
10                format: awcfeSettings.dateFormat,
11                validateOnBlur: false,
12            }, e));
13        });
14    }
15
16    if (typeof jQuery.fn.datetimepicker === 'function') {
17        jQuery(".awcfe_week_field .awcfeweekpicker").each(function () {
18            let e = jQuery(this).data("dpconfig") || {};
19            jQuery(this).datetimepicker(jQuery.extend({
20                dayOfWeekStart: 1,
21                weeks: true,
22                weekData: true,
23                format: "W Y",
24                timepicker: false,
25                scrollInput: false,
26                validateOnBlur: false,
27                onGenerate: function (ct, $input) {
28                    jQuery('.xdsoft_calendar td, .xdsoft_calendar tr').removeClass('xdsoft_hover xdsoft_current xdsoft_today awcfe-week-hover awcfe-week-selected');
29                    jQuery('.xdsoft_calendar tr').off('mouseenter.awcfeweek mouseleave.awcfeweek').on('mouseenter.awcfeweek', function () {
30                        jQuery(this).addClass('awcfe-week-hover');
31                    }).on('mouseleave.awcfeweek', function () {
32                        jQuery(this).removeClass('awcfe-week-hover');
33                    });
34                    // Highlight selected week row
35                    let selected = $input.val();
36                    if (selected) {
37                        let parts = selected.split(' ');
38                        if (parts.length === 2) {
39                            let week = parseInt(parts[0].replace(/\D/g, ''), 10);
40                            let year = parseInt(parts[1], 10);
41                            jQuery('.xdsoft_calendar tr').each(function () {
42                                let found = false;
43                                jQuery(this).find('td').each(function () {
44                                    let d = new Date(jQuery(this).data('year'), jQuery(this).data('month'), jQuery(this).data('date'));
45                                    if (getWeekNumber(d) === week && d.getFullYear() === year) found = true;
46                                });
47                                if (found) jQuery(this).addClass('awcfe-week-selected');
48                            });
49                        }
50                    }
51                },
52                onSelectDate: function (ct, $input) {
53                    let weekNumber = getWeekNumber(ct);
54                    let year = ct.getFullYear();
55                    $input.val(weekNumber + ' ' + year);
56                    setTimeout(function () {
57                        jQuery('.xdsoft_calendar tr').removeClass('awcfe-week-selected').each(function () {
58                            let found = false;
59                            jQuery(this).find('td').each(function () {
60                                let d = new Date(jQuery(this).data('year'), jQuery(this).data('month'), jQuery(this).data('date'));
61                                if (getWeekNumber(d) === weekNumber && d.getFullYear() === year) found = true;
62                            });
63                            if (found) jQuery(this).addClass('awcfe-week-selected');
64                        });
65                    }, 10);
66                }
67            }, e));
68        });
69
70        function getWeekNumber(d) {
71            d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
72            let dayNum = d.getUTCDay() || 7;
73            d.setUTCDate(d.getUTCDate() + 4 - dayNum);
74            let yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
75            return Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
76        }
77    }
78
79
80    if (typeof jQuery.fn.datetimepicker === 'function') {
81        jQuery(".awcfe_time_field .awcfetimepicker").each(function () {
82            e = jQuery(this).data("dpconfig");
83            null == e && (e = {}), jQuery(this).datetimepicker(jQuery.extend({
84                datepicker: false,
85                scrollInput: false,
86                format: awcfeSettings.timeFormat,
87                formatTime: awcfeSettings.timeFormat,
88                validateOnBlur: false,
89            }, e));
90        });
91    }
92
93    if (typeof jQuery.fn.datetimepicker === 'function') {
94        jQuery(".awcfe_datetime_field .awcfedatetimepicker").each(function () {
95
96            e = jQuery(this).data("dpconfig");
97            null == e && (e = {}), jQuery(this).datetimepicker(jQuery.extend({
98                scrollInput: false,
99                format: awcfeSettings.dateFormat + ' ' + awcfeSettings.timeFormat,
100                validateOnBlur: false,
101            }, e));
102        });
103    }
104
105    if (typeof jQuery.fn.monthpicker === 'function') {
106        jQuery(".awcfe_month_field .awcfemonthpicker").each(function () {
107            var $this = jQuery(this);
108            if (!$this.hasClass('awcfe-initialized')) {
109                $this.monthpicker({
110                    pattern: 'MM-yyyy',
111                    startYear: new Date().getFullYear() - 10,
112                    finalYear: new Date().getFullYear() + 10,
113                    openOnFocus: true,
114                    onMonthSelect: function (year, month) {
115                        const monthName = window.fullMonthNames[month - 1];
116                        jQuery(this).val(`${monthName}-${year}`);
117                    }
118                }).addClass('awcfe-initialized').on('click', function () {
119                    jQuery(this).monthpicker('show');
120                });
121            }
122        });
123    }
124
125    if (jQuery('.awcfe-color').length) {
126        jQuery(".awcfe_color_field .awcfe-color").spectrum({
127            preferredFormat: "hex",
128            showInput: false,
129            allowEmpty: true,
130        });
131    }
132
133    if (jQuery.isFunction(jQuery.fn.selectWoo)) {
134        jQuery('.awcfemultiselect').selectWoo();
135    }
136
137    jQuery('.awcfe_condSec').each(function () {
138        var itemType = jQuery(this).data('type');
139        var elmnt = jQuery(this).attr('id');
140        var isSec = 'section';
141        exc_relations(elmnt, itemType, isSec, $ck);
142    });
143
144    jQuery('.awcfe_condField').each(function () {
145        var itemType = jQuery(this).find('.awcfe_cl_fields').data('type');
146        if (itemType == 'checkboxGroup' || itemType == 'radio' || itemType == 'imageGroup' || itemType == 'colorGroup') {
147            var elmnt = jQuery(this).find('.awce-check-param').attr('id');
148        } else {
149            var elmnt = jQuery(this).find('.awcfe_cl_fields').attr('id');
150        }
151        var isSec = 'field';
152        exc_relations(elmnt, itemType, isSec, $ck);
153    });
154
155    //  awcfe_payMethodCL();
156    jQuery('.awcfe_has_sec_rules').each(function () {
157        var itemType = jQuery(this).data('type');
158        var elmnt = jQuery(this).attr('id');
159        var isSec = 'section';
160        exc_relations(elmnt, itemType, isSec, $ck);
161    });
162
163    // jQuery($ck+' .awcfe_has_relation').each(function () {
164    jQuery(' .awcfe_has_relation').each(function () {
165
166        var itemType = jQuery(this).find('.awcfe_cl_fields').data('type');
167
168        if (itemType == 'checkboxGroup' || itemType == 'radio' || itemType == 'imageGroup' || itemType == 'colorGroup') {
169            var related = jQuery(this).find('.awce-check-param').data('related');
170        } else {
171            var related = jQuery(this).find('.awcfe_cl_fields').data('related');
172        }
173        // var related = jQuery(this).find('.awcfe_cl_fields').data('related');
174
175        var isSec = 'field';
176        if (related != null) {
177            related.forEach(function (el) {
178                exc_relations(el, itemType, isSec, $ck);
179            });
180            //awcfe_calculate_price();
181        }
182    });
183
184    jQuery('[data-rules]').each(function () {
185        var elmnt = jQuery(this).attr('id');
186        var itemType = jQuery(this).data('type');
187        var isSec = jQuery(this).hasClass('awcfe_cl_sec_parent') || jQuery(this).hasClass('awcfe_condSec') || jQuery(this).hasClass('awcfe_has_sec_rules') ? 'section' : 'field';
188        exc_relations(elmnt, itemType, isSec, $ck);
189    });
190
191}
192
193/* min-max selection */
194jQuery(document).on('change', ".awcfe_has_val_rules input", function (e) {
195    $item = jQuery(this).parents(".awcfe_has_val_rules");
196    $rules = $item.data('val_rules');
197
198    if ($rules.selection !== undefined && $rules.selection.min !== undefined && $rules.selection.min > 0) {
199        if (jQuery("input[type=checkbox]:checked", $item).length <= $rules.selection.min) {
200            awcfe_remove_val_error($item);
201        }
202    }
203
204    if ($rules.selection !== undefined && $rules.selection.max !== undefined && $rules.selection.max > 0) {
205        if (jQuery("input[type=checkbox]:checked", $item).length > $rules.selection.max) {
206            awcfe_show_val_error($item, awcfeSettings.strings.sel_max_req_error.replace('%d', $rules.selection.max));
207            jQuery(this).prop('checked', false);
208        } else {
209            awcfe_remove_val_error($item);
210        }
211    }
212
213});
214
215function awcfe_show_val_error($field, $msg) {
216    if ($field.next('.awcfe_error_msg').length) {
217        $field.next('.awcfe_error_msg').html('<p>' + $msg + '</p>');
218    } else {
219        jQuery('<div class="awcfe_error_msg"><p>' + $msg + '</p></div>').insertAfter($field);
220    }
221}
222
223function awcfe_remove_val_error($field) {
224    if ($field.next('.awcfe_error_msg').length) {
225        $field.next('.awcfe_error_msg').remove();
226    }
227}
228
229if (jQuery(".awcfe_has_val_rules").length > 0) {
230
231    jQuery('form.checkout').on('checkout_place_order', function () {
232        $status = true;
233        jQuery(".awcfe_has_val_rules", jQuery(this)).each(function () {
234            $item = jQuery(this);
235            $rules = $item.data('val_rules');
236            if ($rules.selection !== undefined && $rules.selection.max !== undefined && $rules.selection.max > 0) {
237                if ($item.is(":visible") && jQuery("input[type=checkbox]:checked", $item).length > $rules.selection.max) {
238                    awcfe_show_val_error($item, awcfeSettings.strings.sel_max_req_error.replace('%d', $rules.selection.max));
239                    $status = false;
240                }
241            }
242            if ($rules.selection !== undefined && $rules.selection.min !== undefined && $rules.selection.min > 0) {
243                if ($item.is(":visible") && jQuery("input[type=checkbox]:checked", $item).length < $rules.selection.min) {
244                    awcfe_show_val_error($item, awcfeSettings.strings.sel_min_req_error.replace('%d', $rules.selection.min));
245                    $status = false;
246                }
247            }
248        });
249
250        if ($status == false) {
251            alert(awcfeSettings.strings.fix_val_errors);
252            return false;
253        } else {
254            return true;
255        }
256    });
257
258}
259
260jQuery(document).on('keyup change', ".awcfe_cl_section input,.awcfe_cl_section select,.awcfe_cl_section textarea", function (e) {
261    //jQuery(".awcfe_cl_section input,.awcfe_cl_section select,.awcfe_cl_section textarea" ).on('keyup change', function () {
262
263    var related = jQuery(this).data('sec-related');
264    var itemType = jQuery(this).data('type');
265    var isSec = 'section';
266    if (related != null) {
267        related.forEach(function (el) {
268            exc_relations(el, itemType, isSec, $ck);
269        });
270    }
271
272});
273
274jQuery(document).on('keyup change', '.awcfe_cl_section .awce-check-param .awcfe_cl_fields', function (e) {
275    //jQuery('.awcfe_cl_section .awce-check-param .awcfe_cl_fields').on('keyup change', function () {
276    var related = jQuery(this).closest('.awce-check-param').data('sec-related');
277    var itemType = jQuery(this).closest('.awce-check-param').data('type');
278    var isSec = 'section';
279    if (related != null) {
280        related.forEach(function (el) {
281            exc_relations(el, itemType, isSec, $ck);
282        });
283    }
284});
285
286/* conditional fields */
287jQuery(document).on('keyup change', ".awcfe_has_relation input,.awcfe_has_relation select,.awcfe_has_relation textarea", function (e) {
288    //jQuery(".awcfe_has_relation input,.awcfe_has_relation select,.awcfe_has_relation textarea" ).on('keyup change', function () {
289
290    var related = jQuery(this).data('related');
291    var itemType = jQuery(this).data('type');
292    var isSec = 'field';
293    if (related != null) {
294        related.forEach(function (el) {
295            exc_relations(el, itemType, isSec, $ck);
296        });
297    }
298
299});
300
301jQuery(document).on('keyup change', '.awcfe_has_relation .awce-check-param .awcfe_cl_fields', function (e) {
302    //jQuery('.awcfe_has_relation .awce-check-param .awcfe_cl_fields').on('keyup change', function () {
303    var related = jQuery(this).closest('.awce-check-param').data('related');
304    var itemType = jQuery(this).closest('.awce-check-param').data('type');
305    var isSec = 'field';
306    if (related != null) {
307        related.forEach(function (el) {
308            exc_relations(el, itemType, isSec, $ck);
309        });
310    }
311});
312
313/* mmm */
314function awcfe_payMethodCL() {
315
316    jQuery('.awcfe_condFieldPay').each(function () {
317        var itemType = jQuery(this).find('.awcfe_cl_fields').data('type');
318        if (itemType == 'checkboxGroup' || itemType == 'radio' || itemType == 'imageGroup' || itemType == 'colorGroup') {
319            var elmnt = jQuery(this).find('.awce-check-param').attr('id');
320        } else {
321            var elmnt = jQuery(this).find('.awcfe_cl_fields').attr('id');
322        }
323        var isSec = 'field';
324        exc_relations(elmnt, itemType, isSec, $ck);
325    });
326    jQuery('.awcfe_has_sec_rules').each(function () {
327        // jQuery('.acwcfe_extra_section.awcfe_has_sec_rules').each(function () {
328        var itemType = jQuery(this).data('type');
329        var elmnt = jQuery(this).attr('id');
330        var isSec = 'section';
331        exc_relations(elmnt, itemType, isSec, $ck);
332    });
333
334}
335
336jQuery(document).on('change', 'input[name="awcdp_deposit_option"]', function (e) {
337    awcfe_payMethodCL();
338});
339
340
341jQuery(document).on('change', 'input[name="payment_method"]', function (e) {
342    awcfe_payMethodCL();
343});
344
345jQuery(document).on('change', 'input[name="shipping_method[0]"]', function (e) {
346    awcfe_payMethodCL();
347});
348
349
350jQuery(document).on('keyup change', "form.checkout input, form.checkout select, form.checkout textarea", function (e) {
351    jQuery('[data-rules]').each(function () {
352        var elmnt = jQuery(this).attr('id');
353        var itemType = jQuery(this).data('type');
354        var isSec = jQuery(this).hasClass('awcfe_cl_sec_parent') || jQuery(this).hasClass('awcfe_condSec') || jQuery(this).hasClass('awcfe_has_sec_rules') ? 'section' : 'field';
355        exc_relations(elmnt, itemType, isSec, '');
356    });
357});
358
359
360function exc_relations(ele_id, itemType, isSec, $ck) {
361
362    var $element = jQuery("#" + ele_id);
363    if ($element.length == 0) {
364        return false;
365    }
366    var $relation = $element.data('rules');
367
368    if (!$relation) {
369        return false;
370    }
371    var $rules = $relation.rules;
372    $evel_str = '';
373
374    $rules.forEach(function (ele) {
375        $evel_str += '(';
376        ele.rules.forEach(function (el) {
377
378            $evel_str += '(';
379            if (eval_relation(el.rules, $element, itemType)) {
380                $evel_str += ' true ';
381            }
382            else {
383                $evel_str += ' false ';
384            }
385            $evel_str += ') ' + ((el.operator !== false) ? el.operator : '') + ' ';
386
387        });
388
389        if (ele.length > 0) {
390            $evel_str = $evel_str.match(/\(.*\)/g)[0] + ' ';
391        }
392
393        $evel_str += ') ' + ((ele.operator !== false) ? ele.operator : '') + ' ';
394
395    });
396
397    if ($rules.length > 0) {
398        $evel_str = $evel_str.match(/\(.*\)/g)[0];
399    }
400
401
402    var result = false;
403    try {
404        result = eval($evel_str.replace(/or/gi, '||').replace(/and/gi, '&&'));
405        console.log('AWCFE Debug: Eval String:', $evel_str, 'Result:', result);
406    } catch (e) {
407        return false;
408    }
409
410    var hidenFields = jQuery('#awcfe_disabled_fields').val();
411    var elementID = $element.attr('id');
412    var elementTyp = $element.attr('type');
413    var isColorPicker = ($element.data('type') === 'colorpicker' || elementTyp === 'color');
414
415
416    if (isSec == 'field') {
417        if (result) {
418
419            if ($relation.action == 'show') {
420                //$element.closest('.awcfe_cl_parent').removeClass('awcfe_cl_hidden');
421                jQuery('#' + elementID).removeAttr('disabled');
422                if (isColorPicker) {
423                    jQuery('#' + elementID).spectrum("enable");
424                }
425                if (elementTyp === 'file') {
426                    jQuery('#' + elementID).siblings('.awcfe-file-value').removeAttr('disabled');
427                }
428                removeHiddenFields(hidenFields, elementID);
429
430                /*
431                if (!$element.is(":visible")) {
432                      $element.show(0, function () {
433                          awcfe_calculate_price();
434                      }).closest('.awcfe_cl_parent').removeClass('awcfe_cl_hidden');
435                  } else {
436                      return true;
437                  }
438                  */
439
440                if ($ck == '') {
441                    if (elementTyp === 'file') {
442                        var $siblings = $element.siblings('.awcfe-file-button-wrap').find('.awcfe-file-button');
443                        if (!$siblings.is(":visible") && !$siblings.hasClass('fileAdded')) {
444                            $siblings.show(0, function () {
445                                awcfe_calculate_price();
446                            }).closest('.awcfe_cl_parent').removeClass('awcfe_cl_hidden');
447                            $element.closest('.awcfe_cl_parent').removeClass('awcfe_cl_hidden');
448                        } else {
449                            //return true;
450                        }
451                    } else if (isColorPicker) {
452                        var $parent = $element.closest('.awcfe_cl_parent');
453                        if (!$parent.is(":visible")) {
454                            $parent.removeClass('awcfe_cl_hidden');
455                            awcfe_calculate_price();
456                        }
457                    } else {
458                        if (!$element.is(":visible")) {
459                            $element.show(0, function () {
460                                awcfe_calculate_price();
461                            }).closest('.awcfe_cl_parent').removeClass('awcfe_cl_hidden');
462                        } else {
463                            //return true;
464                        }
465                    }
466                }
467                $element.closest('.awcfe_cl_parent').show().removeClass('awcfe_cl_hidden');
468
469            } else {
470
471
472                if ($ck == '') {
473                    if (elementTyp === 'file') {
474                        var $siblings = $element.siblings('.awcfe-file-button-wrap').find('.awcfe-file-button');
475                        if (($siblings.is(":visible") && !$siblings.hasClass('fileAdded'))) {
476                            jQuery('#' + elementID).attr('disabled', true);
477                            if (elementTyp === 'file') {
478                                jQuery('#' + elementID).siblings('.awcfe-file-value').attr('disabled', true);
479                            }
480                            $siblings.hide(0, function () {
481                                awcfe_calculate_price();
482                            });
483
484                        } else {
485                            //  return true;
486                        }
487
488                    } else {
489                        var isVisible = isColorPicker ? $element.closest('.awcfe_cl_parent').is(":visible") : $element.is(":visible");
490                        if (isVisible) {
491                            jQuery('#' + elementID).attr('disabled', true);
492                            if (elementTyp === 'file') {
493                                jQuery('#' + elementID).siblings('.awcfe-file-value').attr('disabled', true);
494                            }
495                            if (isColorPicker) {
496                                awcfe_calculate_price();
497                            } else {
498                                $element.hide(0, function () {
499                                    awcfe_calculate_price();
500                                });
501                            }
502                        } else {
503                            return true;
504                        }
505
506                    }
507                }
508                /*
509                if ($element.is(":visible")) {
510                  jQuery('#'+elementID).attr('disabled', true);
511                  if( elementTyp==='file'){
512                      jQuery('#'+elementID).siblings('.awcfe-file-value').attr('disabled', true);
513                  }
514                      $element.hide(0, function () {
515                          awcfe_calculate_price();
516                      });
517    
518                  } else {
519                      return true;
520                  }
521                  */
522
523                $element.closest('.awcfe_cl_parent').addClass('awcfe_cl_hidden');
524                jQuery('#' + elementID).attr('disabled', true);
525                if (isColorPicker) {
526                    jQuery('#' + elementID).spectrum("disable");
527                }
528
529                if (elementTyp === 'file') {
530                    jQuery('#' + elementID).siblings('.awcfe-file-value').attr('disabled', true);
531                }
532                addHiddenFields(hidenFields, elementID);
533
534
535            }
536        } else {
537            if ($relation.action == 'show') {
538
539                if ($ck == '') {
540                    if (elementTyp === 'file') {
541                        var $siblings = $element.siblings('.awcfe-file-button-wrap').find('.awcfe-file-button');
542                        if (($siblings.is(":visible") && !$siblings.hasClass('fileAdded'))) {
543                            jQuery('#' + elementID).attr('disabled', true);
544                            if (elementTyp === 'file') {
545                                jQuery('#' + elementID).siblings('.awcfe-file-value').attr('disabled', true);
546                            }
547                            $siblings.hide(0, function () {
548                                awcfe_calculate_price();
549                            });
550
551                        } else {
552                            //  return true;
553                        }
554
555                    } else {
556                        var isVisible = isColorPicker ? $element.closest('.awcfe_cl_parent').is(":visible") : $element.is(":visible");
557                        if (isVisible) {
558                            jQuery('#' + elementID).attr('disabled', true);
559                            if (elementTyp === 'file') {
560                                jQuery('#' + elementID).siblings('.awcfe-file-value').attr('disabled', true);
561                            }
562                            if (isColorPicker) {
563                                awcfe_calculate_price();
564                            } else {
565                                $element.hide(0, function () {
566                                    awcfe_calculate_price();
567                                });
568                            }
569                        }
570                    }
571                }
572
573                $element.closest('.awcfe_cl_parent').addClass('awcfe_cl_hidden');
574                jQuery('#' + elementID).attr('disabled', true);
575                if (isColorPicker) {
576                    jQuery('#' + elementID).spectrum("disable");
577                }
578                if (elementTyp === 'file') {
579                    jQuery('#' + elementID).siblings('.awcfe-file-value').attr('disabled', true);
580                }
581                addHiddenFields(hidenFields, elementID);
582
583
584            } else {
585                if ($element.closest('.awcfe_cl_parent').hasClass('awcfe_cl_hidden')) {
586                    $element.closest('.awcfe_cl_parent').removeClass('awcfe_cl_hidden');
587
588                    jQuery('#' + elementID).removeAttr('disabled');
589                    if (isColorPicker) {
590                        jQuery('#' + elementID).spectrum("enable");
591                    }
592                    if (elementTyp === 'file') {
593                        jQuery('#' + elementID).siblings('.awcfe-file-value').removeAttr('disabled');
594                    }
595                    removeHiddenFields(hidenFields, elementID);
596                }
597
598                if ($ck == '') {
599                    if (elementTyp === 'file') {
600                        var $siblings = $element.siblings('.awcfe-file-button-wrap').find('.awcfe-file-button');
601                        if (!$siblings.is(":visible") && !$siblings.hasClass('fileAdded')) {
602                            $siblings.show(0, function () {
603                                awcfe_calculate_price();
604                            }).closest('.awcfe_cl_parent').removeClass('awcfe_cl_hidden');
605                            $element.closest('.awcfe_cl_parent').removeClass('awcfe_cl_hidden');
606                        } else {
607                            //return true;
608                        }
609                    } else {
610                        if (isColorPicker) {
611                            var $parent = $element.closest('.awcfe_cl_parent');
612                            if (!$parent.is(":visible")) {
613                                $parent.removeClass('awcfe_cl_hidden');
614                                awcfe_calculate_price();
615                            }
616                        } else {
617                            if (!$element.is(":visible")) {
618                                $element.show(0, function () {
619                                    awcfe_calculate_price();
620                                }).closest('.awcfe_cl_parent').removeClass('awcfe_cl_hidden');
621                            } else {
622                                return true;
623                            }
624                        }
625                    }
626                }
627            }
628        }
629    } else if (isSec == 'section') {
630
631        if (result) {
632
633            if ($relation.action == 'show') {
634
635                //$element.removeClass('awcfe_cl_hidden');
636                jQuery('#' + elementID).find('input, textarea, select').removeAttr('disabled');
637                if (elementTyp === 'file') {
638                    jQuery('#' + elementID).find('.awcfe-file-value').removeAttr('disabled');
639                }
640                removeHiddenFields(hidenFields, elementID);
641
642                if ($ck == '') {
643                    if (!$element.is(":visible")) {
644                        $element.show(0, function () {
645                            awcfe_calculate_price();
646                        }).removeClass('awcfe_cl_hidden');
647                    } else {
648                        //return true;
649                    }
650                }
651                $element.show().removeClass('awcfe_cl_hidden');
652
653            } else {
654
655
656                if ($element.is(":visible")) {
657                    jQuery('#' + elementID).find('input, textarea, select').attr('disabled', true);
658                    if (elementTyp === 'file') {
659                        jQuery('#' + elementID).find('.awcfe-file-value').attr('disabled', true);
660                    }
661                    $element.hide(0, function () {
662                        awcfe_calculate_price();
663                    });
664
665                } else {
666                    //return true;
667                }
668
669
670                $element.addClass('awcfe_cl_hidden');
671                jQuery('#' + elementID).find('input, textarea, select').attr('disabled', true);
672                if (elementTyp === 'file') {
673                    jQuery('#' + elementID).find('.awcfe-file-value').attr('disabled', true);
674                }
675                addHiddenFields(hidenFields, elementID);
676
677            }
678        } else {
679            if ($relation.action == 'show') {
680
681
682                if ($element.is(":visible")) {
683                    jQuery('#' + elementID).find('input, textarea, select').attr('disabled', true);
684                    if (elementTyp === 'file') {
685                        jQuery('#' + elementID).find('.awcfe-file-value').attr('disabled', true);
686                    }
687                    $element.hide(0, function () {
688                        awcfe_calculate_price();
689                    });
690
691                } else {
692                    return true;
693                }
694
695                $element.addClass('awcfe_cl_hidden');
696                jQuery('#' + elementID).find('input, textarea, select').attr('disabled', true);
697                if (elementTyp === 'file') {
698                    jQuery('#' + elementID).find('.awcfe-file-value').attr('disabled', true);
699                }
700                addHiddenFields(hidenFields, elementID);
701
702            } else {
703                if ($element.hasClass('awcfe_cl_hidden')) {
704                    $element.removeClass('awcfe_cl_hidden');
705                    jQuery('#' + elementID).find('input, textarea, select').removeAttr('disabled');
706                    if (elementTyp === 'file') {
707                        jQuery('#' + elementID).find('.awcfe-file-value').removeAttr('disabled');
708                    }
709                    removeHiddenFields(hidenFields, elementID);
710                }
711
712                if (!$element.is(":visible")) {
713                    $element.show(0, function () {
714                        awcfe_calculate_price();
715                    }).removeClass('awcfe_cl_hidden');
716
717                } else {
718                    return true;
719                }
720
721            }
722        }
723    }
724
725    if (jQuery.isFunction(jQuery.fn.selectWoo)) {
726        // jQuery('.awcfemultiselect').select2();
727        setTimeout(function () {
728            jQuery('.awcfemultiselect').selectWoo();
729        });
730
731    }
732
733    var related = $element.data('related');
734    var itemsType = $element.data('type');
735
736    if (related != null) {
737        related.forEach(function (el) {
738            exc_relations(el, itemsType, isSec);
739        });
740    }
741
742    var related = $element.data('sec-related');
743    var itemsType = $element.data('type');
744
745    var isSec = 'section';
746    if (related != null) {
747        related.forEach(function (el) {
748            exc_relations(el, itemsType, isSec);
749        });
750    }
751}
752
753function removeHiddenFields(hidenFields, element) {
754
755    var hiddenArr = '';
756    if (hidenFields.length === 0) {
757        hiddenArr = [];
758    } else {
759        temp = hidenFields.split(",");
760        //if(hidenFields.includes(element)){
761        if (jQuery.inArray(element, temp) !== -1) {
762            //if (hidenFields.indexOf(',') > -1) {
763            if (temp && temp.length > 0) {
764                //temp = hidenFields.split(",");
765                temp.splice(jQuery.inArray(element, temp), 1);
766            } else {
767                temp = [];
768            }
769            // temp = hidenFields.split(",");
770            // temp.splice( jQuery.inArray(element,temp) ,1 );
771            hiddenArr = temp.toString()
772     
772   } else {
773            hiddenArr = hidenFields;
774        }
775    }
776    jQuery('#awcfe_disabled_fields').val(hiddenArr);
777
778}
779
780function addHiddenFields(hidenFields, element) {
781
782    var hiddenArr = '';
783    if (hidenFields.length === 0) {
784        hiddenArr = element;
785    } else {
786        temp = hidenFields.split(",");
787        temp.indexOf(element) === -1 ? temp.push(element) : '';
788        hiddenArr = temp.toString()
789    }
790    jQuery('#awcfe_disabled_fields').val(hiddenArr);
791}
792
793
794jQuery('.awcfe_cl_hidden.awcfe_has_sec_rules').each(function () {
795    jQuery(this).find('input, textarea, select').attr('disabled', true);
796
797    var hidenFields = jQuery('#awcfe_disabled_fields').val();
798    var elementID = jQuery(this).attr('id');
799    addHiddenFields(hidenFields, elementID);
800});
801
802
803function eval_relation(rule, $element, itemType) {
804    function isDate(s) {
805        if (!s || typeof s !== 'string' || s.length < 5) return false;
806        if (/^\d+$/.test(s.trim())) return false; // Ignore pure numbers
807        var d = new Date(s);
808        return d instanceof Date && !isNaN(d.getTime());
809    }
810    function isNumeric(n) {
811        return !isNaN(parseFloat(n)) && isFinite(n);
812    }
813
814    var flag = false;
815    if (rule.cl_field === 'cart_product') {
816        var $field = new Array();
817        $field.push(jQuery('#awcfe_cart_items').val().split(','));
818        flag = true;
819    } else if (rule.cl_field === 'cart_category') {
820        var $field = new Array();
821        $field.push(jQuery('#awcfe_cart_categories').val().split(','));
822        flag = true;
823    } else if (rule.cl_field === 'shipping_class') {
824        var $field = new Array();
825        $field.push(jQuery('#awcfe_cart_shipping_class').val().split(','));
826        flag = true;
827    } else if (rule.cl_field === 'cart_subtotal') {
828        var $field = new Array();
829        $field.push(jQuery('#awcfe_amount_subtotal').val());
830        flag = true;
831    } else if (rule.cl_field === 'cart_total') {
832        var $field = new Array();
833        $field.push(jQuery('#awcfe_amount_total').val());
834        flag = true;
835    } else if (rule.cl_field === 'cart_weight') {
836        var $field = new Array();
837        $field.push(jQuery('#awcfe_cart_weight').val());
838        flag = true;
839    } else if (rule.cl_field === 'cart_variation') {
840        var $field = new Array();
841        $field.push(jQuery('#awcfe_cart_variatns').val().split(','));
842        flag = true;
843    } else if (rule.cl_field === 'user_role') {
844        var $field = new Array();
845        $field.push(jQuery('#awcfe_role_user').val().split(','));
846        $field.push(jQuery('#awcfe_role_user').val());
847        flag = true;
848    } else if (rule.cl_field === 'payment_method') {
849        var $field = new Array();
850        $field.push(jQuery('input[name="payment_method"]:checked').val());
851        flag = true;
852    } else if (rule.cl_field === 'checkout_deposit') {
853        var $field = new Array();
854        $field.push(jQuery('input[name="awcdp_deposit_option"]:checked').val());
855        flag = true;
856    } else if (rule.cl_field === 'shipping_method') {
857        var $field = new Array();
858        $field.push(jQuery('input[name="shipping_method[0]"]:checked').val());
859        flag = true;
860    } else {
861        var $field = jQuery("#" + rule.cl_field);
862        if ($field.length === 0) {
863            $field = jQuery("#" + rule.cl_field + "_field");
864        }
865        flag = false;
866    }
867
868    if (flag == false) {
869        var resolvedType = $field.find('.awcfe_cl_fields').data('type');
870        if (!resolvedType) {
871            if ($field.is('select.country_to_state, select.country_select') || $field.find('select.country_to_state, select.country_select').length > 0 || $field.attr('id') === 'billing_country' || $field.attr('id') === 'shipping_country' || $field.attr('id') === 'billing_country_field' || $field.attr('id') === 'shipping_country_field') {
872                resolvedType = 'country';
873            } else if ($field.is('select.state_select, input.state_noui') || $field.find('select.state_select, input.state_noui').length > 0 || $field.attr('id') === 'billing_state' || $field.attr('id') === 'shipping_state' || $field.attr('id') === 'billing_state_field' || $field.attr('id') === 'shipping_state_field') {
874                resolvedType = 'state';
875            } else if ($field.is('select') || $field.find('select').length > 0) {
876                resolvedType = 'select';
877            } else if ($field.is('input[type=checkbox]') || $field.find('input[type=checkbox]').length > 0) {
878                resolvedType = 'check-box';
879            } else if ($field.is('input[type=radio]') || $field.find('input[type=radio]').length > 0) {
880                resolvedType = 'radio';
881            } else if ($field.is('textarea') || $field.find('textarea').length > 0) {
882                resolvedType = 'textarea';
883            } else if ($field.is('input') || $field.find('input').length > 0) {
884                resolvedType = 'text';
885            }
886        }
887        itemType = resolvedType;
888    }
889    var $fieldType = itemType;
890
891    // if (flag == false && $field.is(":visible") == false ) {
892    if (flag == false && $field.hasClass("awcfe_cl_hidden")) {
893        return false;
894    }
895    if (!$field.length) {
896        return false;
897    }
898
899    if (rule.cl_relation === '0') {
900        return false;
901    }
902    var val = Array();
903
904    if (rule.cl_field !== 'cart_product' && rule.cl_field !== 'cart_category' && rule.cl_field !== 'cart_subtotal' && rule.cl_field !== 'cart_total' && rule.cl_field !== 'cart_variation' && rule.cl_field !== 'user_role' && rule.cl_field !== 'payment_method' && rule.cl_field !== 'checkout_deposit' && rule.cl_field !== 'shipping_method' && rule.cl_field !== 'cart_weight' && rule.cl_field !== 'shipping_class') {
905
906        if (jQuery.inArray($fieldType, ['text', 'tel', 'email', 'colorpicker', 'hidden', 'url']) >= 0) {
907            var $input = $field.is('input') ? $field : $field.find('input');
908            if ($input.val()) {
909                val.push($input.val().toLowerCase().trim());
910            }
911
912        } else if (jQuery.inArray($fieldType, ['file']) >= 0) {
913            var $input = $field.is('input') ? $field : $field.find('input');
914            if ($input.val()) {
915                val.push($input.val().split('\\').pop().toLowerCase());
916            } else if ($field.parents('.awcfe_file_field').length) {
917                $temp = $field.parents('.awcfe_file_field').find('.awcfe-file-value').val();
918                if ($temp.split("||").length === 2) {
919                    val.push($temp.split("||")[1].toLowerCase());
920                }
921            }
922
923        } else if (jQuery.inArray($fieldType, ['numberfield']) >= 0) {
924            var $input = $field.is('input') ? $field : $field.find('input');
925            if ($input.val()) {
926                val.push(parseFloat($input.val().toLowerCase().trim()));
927            }
928
929        } else if (jQuery.inArray($fieldType, ['textarea']) >= 0) {
930            var $textarea = $field.is('textarea') ? $field : $field.find('textarea');
931            if ($textarea.val()) {
932                val.push($textarea.val().toLowerCase().trim());
933            }
934
935        } else if (jQuery.inArray($fieldType, ['html']) >= 0) {
936            var $html = $field.is('html') ? $field : $field.find('html');
937            if ($html.val()) {
938                val.push($html.val().toLowerCase().trim());
939            }
940
941        } else if (jQuery.inArray($fieldType, ['check-box', 'toggleSwitch']) >= 0) {
942            var $checkbox = $field.is('input') ? $field : $field.find('input');
943            val = $checkbox.filter(':checked').map(function () {
944                return jQuery(this).val().toLowerCase();
945            }).get();
946
947        } else if (jQuery.inArray($fieldType, ['checkboxGroup', 'radio', 'imageGroup', 'colorGroup']) >= 0) {
948            var $inputs = $field.is('input') ? $field : $field.find('input');
949            val = $inputs.filter(':checked').map(function () {
950                return jQuery(this).val().toLowerCase();
951            }).get();
952        } else if (jQuery.inArray($fieldType, ['select', 'multiselect', 'country', 'state']) >= 0) {
953            var $select = $field.is('select') ? $field : $field.find('select');
954            if ($select.length > 0) {
955                if ($select.val() && $select.val().constructor === Array) {
956                    val = $select.val().map(function (e) {
957                        return e.toLowerCase().trim();
958                    });
959                } else if ($select.val()) {
960                    val.push($select.val().toLowerCase().trim());
961                }
962            } else {
963                var $input = $field.is('input') ? $field : $field.find('input');
964                if ($input.length > 0 && $input.val()) {
965                    val.push($input.val().toLowerCase().trim());
966                }
967            }
968        }
969        else if (jQuery.inArray($fieldType, ['datepicker', 'datetimepicker']) >= 0) {
970            var $input = $field.is('input') ? $field : $field.find('input');
971            if ($input.val()) {
972                if (jQuery.inArray(rule.cl_relation, ['contains', 'not_contains', 'starts_with', 'ends_with']) >= 0) {
973
974                    val.push($input.val().toLowerCase());
975                } else if (jQuery.inArray(rule.cl_relation, ['day_is', 'day_is_not']) >= 0) {
976                    var dd = awcfe_get_day_week($input.val().toLowerCase());
977                    val.push(dd.toLowerCase());
978                } else {
979                    var d = awcfe_get_date_obj($input.val(), 'wp');
980                    if (typeof d.getTime === 'function') {
981                        val.push(d.getTime());
982                    }
983                }
984            }
985        }
986
987        else if (jQuery.inArray($fieldType, ['weekpicker']) >= 0) {
988            var $input = $field.is('input') ? $field : $field.find('input');
989            var inputVal = $input.val() ? $input.val().trim() : '';
990            if (inputVal) {
991                if (jQuery.inArray(rule.cl_relation, ['contains', 'not_contains', 'starts_with', 'ends_with']) >= 0) {
992                    val.push(inputVal.toLowerCase());
993                } else {
994                    var weekData = awcfe_get_week_number(inputVal.toLowerCase());
995                    if (weekData !== null) {
996                        val.push(weekData);
997                    }
998                }
999            }
1000        }
1001
1002        else if (jQuery.inArray($fieldType, ['timepicker']) >= 0) {
1003            var $input = $field.is('input') ? $field : $field.find('input');
1004            if ($input.val()) {
1005                if (jQuery.inArray(rule.cl_relation, ['contains', 'not_contains', 'starts_with', 'ends_with']) >= 0) {
1006                    val.push($input.val().toLowerCase());
1007                } else {
1008                    // Parse timepicker input as time only
1009                    var d = new Date('1/1/2018 ' + $input.val());
1010                    val.push(d.getTime());
1011                }
1012            }
1013        } else if (jQuery.inArray($fieldType, ['monthpicker']) >= 0) {
1014            var $input = $field.is('input') ? $field : $field.find('input');
1015            var inputVal = $input.val() ? $input.val().trim() : '';
1016            if (inputVal) {
1017                if (jQuery.inArray(rule.cl_relation, ['contains', 'not_contains', 'starts_with', 'ends_with']) >= 0) {
1018                    val.push(inputVal.toLowerCase());
1019                } else {
1020                    var isValidFormat = /^[A-Za-z]+-\d{4}$/.test(inputVal);
1021                    if (isValidFormat) {
1022                        var [monthName, year] = inputVal.split('-');
1023                        var monthIndex = window.fullMonthNames.indexOf(monthName);
1024                        if (monthIndex !== -1) {
1025                            var date = new Date(year, monthIndex, 1);
1026                            val.push(date.getTime());
1027                        } else {
1028                            val.push(null);
1029                        }
1030                    } else {
1031                        val.push(null);
1032                    }
1033                }
1034            }
1035        }
1036
1037    }
1038
1039    var rel_val = false;
1040
1041    if (rule.cl_field === 'cart_product') {
1042        val = (jQuery('#awcfe_cart_items').val().split(',').map(Number));
1043    } else if (rule.cl_field === 'cart_category') {
1044        val = (jQuery('#awcfe_cart_categories').val().split(',').map(Number));
1045    } else if (rule.cl_field === 'shipping_class') {
1046        val = (jQuery('#awcfe_cart_shipping_class').val().split(',').map(Number));
1047    } else if (rule.cl_field === 'cart_variation') {
1048        val = (jQuery('#awcfe_cart_variatns').val().split(',').map(Number));
1049    } else if (rule.cl_field === 'payment_method') {
1050        val = jQuery('input[name="payment_method"]:checked').val().split(',');
1051    } else if (rule.cl_field === 'checkout_deposit') {
1052        val = jQuery('input[name="awcdp_deposit_option"]:checked').val();
1053        if (typeof val === 'undefined') {
1054            val = '';
1055        }
1056    } else if (rule.cl_field === 'shipping_method') {
1057        if (jQuery('input[name="shipping_method[0]"]').is(":hidden")) {
1058            val = jQuery('input[name="shipping_method[0]"]').val().split(',');
1059        } else {
1060            if (jQuery('input[name="shipping_method[0]"]').length > 0) {
1061                val = jQuery('input[name="shipping_method[0]"]:checked').val().split(',');
1062            }
1063        }
1064        //val = jQuery('input[name="shipping_method[0]"]:checked').val().split(',');
1065    } else if (rule.cl_field === 'cart_subtotal') {
1066        var val = new Array();
1067        val1 = parseFloat(jQuery('#awcfe_amount_subtotal').val()).toFixed(2);
1068        val.push(val1);
1069    } else if (rule.cl_field === 'cart_total') {
1070        var val = new Array();
1071        val1 = parseFloat(jQuery('#awcfe_amount_total').val()).toFixed(2);
1072        val.push(val1);
1073    } else if (rule.cl_field === 'cart_weight') {
1074        var val = new Array();
1075        var $weightField = jQuery('#awcfe_cart_weight');
1076        val1 = parseFloat($weightField.val() || 0).toFixed(2);
1077        val.push(val1);
1078    } else if (rule.cl_field === 'user_role') {
1079        // var val = new Array();
1080        // val1 = jQuery('#awcfe_role_user').val();
1081        // val.push(val1);
1082
1083        val = jQuery('#awcfe_role_user').val().split(',');
1084    }
1085
1086    if (val.length == 0) {
1087        switch (rule.cl_relation) {
1088            case 'is_empty':
1089                if (val.length === 0 || val[0] === '' || val[0] === null) {
1090                    return true;
1091                } else {
1092                    return false;
1093                }
1094            case 'is_not_empty':
1095                if (val.length === 0 || val[0] === '' || val[0] === null) {
1096                    return false;
1097                } else {
1098                    return true;
1099                }
1100            default:
1101                return false;
1102        }
1103    }
1104
1105    if (rule.cl_val && rule.cl_field === 'cart_product') {
1106        rel_val = rule.cl_val;
1107        rel_val = rel_val.map(function (x) {
1108            return parseInt(x, 10);
1109        });
1110    } else if (rule.cl_val && rule.cl_field === 'cart_variation') {
1111        rel_val = rule.cl_val;
1112        rel_val = rel_val.split(',');
1113        rel_val = rel_val.map(function (x) {
1114            return parseInt(x, 10);
1115        });
1116    } else if (rule.cl_val && rule.cl_field === 'payment_method') {
1117        rel_val = rule.cl_val;
1118        rel_val = rel_val.split(',');
1119        rel_val = rel_val.map(function (x) {
1120            return x;
1121        });
1122    } else if (rule.cl_val && rule.cl_field === 'checkout_deposit') {
1123        rel_val = rule.cl_val;
1124        rel_val = rel_val.split(',');
1125        rel_val = rel_val.map(function (x) {
1126            return x;
1127        });
1128    } else if (rule.cl_val && rule.cl_field === 'shipping_method') {
1129        rel_val = rule.cl_val;
1130        rel_val = rel_val.split(',');
1131        rel_val = rel_val.map(function (x) {
1132            return x;
1133        });
1134    } else if (rule.cl_val && rule.cl_field === 'cart_category') {
1135        rel_val = rule.cl_val;
1136        rel_val = rel_val.map(function (x) {
1137            return parseInt(x, 10);
1138        });
1139    } else if (rule.cl_val && rule.cl_field === 'shipping_class') {
1140        rel_val = [parseInt(rule.cl_val, 10)];
1141    } else if (rule.cl_val && rule.cl_field === 'cart_subtotal') {
1142        rel_val = (parseFloat(rule.cl_val).toFixed(2));
1143    } else if (rule.cl_val && rule.cl_field === 'cart_total') {
1144        rel_val = (parseFloat(rule.cl_val).toFixed(2));
1145    } else if (rule.cl_val && rule.cl_field === 'cart_weight') {
1146        rel_val = (parseFloat(rule.cl_val).toFixed(2));
1147    } else if (rule.cl_val && rule.cl_field === 'user_role') {
1148        rel_val = rule.cl_val;
1149        rel_val = rel_val.map(function (x) {
1150            return x;
1151        });
1152
1153    }
1154    else if (rule.cl_val && ($fieldType == 'datepicker' || $fieldType == 'datetimepicker')) {
1155        if (jQuery.inArray(rule.cl_relation, ['contains', 'not_contains', 'starts_with', 'ends_with']) >= 0) {
1156            rel_val = rule.cl_val.toLowerCase();
1157        } else if (jQuery.inArray(rule.cl_relation, ['day_is', 'day_is_not']) >= 0) {
1158            rel_val = rule.cl_val.toLowerCase();
1159        } else {
1160            var d1 = awcfe_get_date_obj(rule.cl_val);
1161            rel_val = d1.getTime();
1162        }
1163    }
1164
1165    else if (rule.cl_val && ($fieldType === 'weekpicker')) {
1166        var match = rule.cl_val.match(/^(\d{4})-W(\d{2})$/);
1167        var formattedWeekString = match ? `${parseInt(match[2], 10)} ${match[1]}` : rule.cl_val;
1168        var weekData = awcfe_get_week_number(formattedWeekString.toLowerCase());
1169        if (weekData) {
1170            if (jQuery.inArray(rule.cl_relation, ['contains', 'not_contains', 'starts_with', 'ends_with']) >= 0) {
1171                rel_val = rule.cl_val.toLowerCase();
1172            } else {
1173                rel_val = weekData;
1174            }
1175        } else {
1176            rel_val = null;
1177        }
1178    }
1179
1180    else if (rule.cl_val && ($fieldType == 'timepicker')) {
1181        if (jQuery.inArray(rule.cl_relation, ['contains', 'not_contains', 'starts_with', 'ends_with']) >= 0) {
1182            rel_val = rule.cl_val.toLowerCase();
1183        } else {
1184            var d1 = new Date('1/1/2018 ' + rule.cl_val);
1185            rel_val = d1.getTime();
1186        }
1187    } else if (rule.cl_val && ($fieldType == 'monthpicker')) {
1188        if (jQuery.inArray(rule.cl_relation, ['contains', 'not_contains', 'starts_with', 'ends_with']) >= 0) {
1189            rel_val = rule.cl_val.toLowerCase();
1190        } else {
1191            var cleanedVal = rule.cl_val.trim();
1192            var isValidFormat = /^\d{4}-\d{2}$/.test(cleanedVal);
1193            if (isValidFormat) {
1194                var [year, month] = cleanedVal.split('-');
1195                var date = new Date(year, month - 1, 1);
1196                rel_val = date.getTime();
1197            } else {
1198                rel_val = null; // Invalid format
1199            }
1200        }
1201    }
1202
1203    else if (rule.cl_val && $fieldType == 'numberfield') {
1204        rel_val = parseFloat(((rule.cl_val.value) ? rule.cl_val.value : rule.cl_val));
1205    } else if (rule.cl_val) {
1206        rel_val = ((rule.cl_val.value) ? rule.cl_val.value : rule.cl_val).toLowerCase();
1207    }
1208
1209    switch (rule.cl_relation) {
1210        case 'day_is':
1211            if (jQuery.inArray(rel_val, val) >= 0) {
1212                return true;
1213            } else {
1214                return false;
1215            }
1216        case 'day_is_not':
1217            if (jQuery.inArray(rel_val, val) >= 0) {
1218                return false;
1219            } else {
1220                return true;
1221            }
1222        case 'is':
1223            var is_match = false;
1224            for (var i = 0; i < val.length; i++) {
1225                if (isNumeric(val[i]) && isNumeric(rel_val)) {
1226                    if (parseFloat(val[i]) === parseFloat(rel_val)) {
1227                        is_match = true; break;
1228                    }
1229                } else if (isDate(val[i]) && isDate(rel_val)) {
1230                    if (new Date(val[i]).getTime() === new Date(rel_val).getTime()) {
1231                        is_match = true; break;
1232                    }
1233                } else if (val[i] == rel_val) {
1234                    is_match = true; break;
1235                }
1236            }
1237            return is_match;
1238
1239        case 'is_not':
1240            var is_match = false;
1241            for (var i = 0; i < val.length; i++) {
1242                if (isNumeric(val[i]) && isNumeric(rel_val)) {
1243                    if (parseFloat(val[i]) === parseFloat(rel_val)) {
1244                        is_match = true; break;
1245                    }
1246                } else if (isDate(val[i]) && isDate(rel_val)) {
1247                    if (new Date(val[i]).getTime() === new Date(rel_val).getTime()) {
1248                        is_match = true; break;
1249                    }
1250                } else if (val[i] == rel_val) {
1251                    is_match = true; break;
1252                }
1253            }
1254            return !is_match;
1255        case 'is_in':
1256            if (Array.isArray(rel_val)) {
1257                var is_in = rel_val.filter(function(element) {
1258                    return val.some(function (v) {
1259                        if (isNumeric(v) && isNumeric(element)) {
1260                            return parseFloat(v) === parseFloat(element);
1261                        }
1262                        return v == element;
1263                    });
1264                });
1265                if (is_in.length > 0) {
1266                    return true;
1267
1268                } else {
1269                    return false;
1270                }
1271            } else {
1272                return false;
1273            }
1274
1275        case 'is_not_in':
1276            if (Array.isArray(rel_val)) {
1277                var is_in = rel_val.filter(function (element) {
1278                    return val.some(function (v) {
1279                        if (isNumeric(v) && isNumeric(element)) {
1280                            return parseFloat(v) === parseFloat(element);
1281                        }
1282                        return v == element;
1283                    });
1284                });
1285                if (is_in.length > 0) {
1286                    return false;
1287                } else {
1288                    return true;
1289                }
1290            } else {
1291                return false;
1292            }
1293
1294
1295        case 'is_select':
1296            if (val == 'deposit') {
1297                return true;
1298            } else {
1299                return false;
1300            }
1301
1302        case 'is_not_select':
1303            if (val == 'full') {
1304                return true;
1305            } else {
1306                return false;
1307            }
1308
1309        case 'is_empty':
1310            if (val.length === 0 || val[0] === '' || val[0] === null) {
1311                return true;
1312            } else {
1313                return false;
1314            }
1315        case 'is_not_empty':
1316            if (val.length === 0 || val[0] === '' || val[0] === null) {
1317                return false;
1318            } else {
1319                return true;
1320            }
1321        case 'is_greater':
1322            for (var i = 0; i < val.length; i++) {
1323                if (isDate(val[i]) && isDate(rel_val)) {
1324                    if (new Date(val[i]) > new Date(rel_val)) return true;
1325                } else if (parseFloat(val[i]) > parseFloat(rel_val)) {
1326                    return true;
1327                }
1328            }
1329            return false;
1330        case 'is_lessthan':
1331            for (var i = 0; i < val.length; i++) {
1332                if (isDate(val[i]) && isDate(rel_val)) {
1333                    if (new Date(val[i]) < new Date(rel_val)) return true;
1334                } else if (parseFloat(val[i]) < parseFloat(rel_val)) {
1335                    return true;
1336                }
1337            }
1338            return false;
1339        case 'is_greater_or_equal':
1340            for (var i = 0; i < val.length; i++) {
1341                if (isDate(val[i]) && isDate(rel_val)) {
1342  
1342                  if (new Date(val[i]) >= new Date(rel_val)) return true;
1343                } else if (parseFloat(val[i]) >= parseFloat(rel_val)) {
1344                    return true;
1345                }
1346            }
1347            return false;
1348        case 'is_lessthan_or_equal':
1349            for (var i = 0; i < val.length; i++) {
1350                if (isDate(val[i]) && isDate(rel_val)) {
1351                    if (new Date(val[i]) <= new Date(rel_val)) return true;
1352                } else if (parseFloat(val[i]) <= parseFloat(rel_val)) {
1353                    return true;
1354                }
1355            }
1356            return false;
1357        case 'contains':
1358            for (var i = 0; i < val.length; i++) {
1359                if (val[i].indexOf(rel_val) !== -1) {
1360                    return true;
1361                }
1362            }
1363            return false;
1364        case 'not_contains':
1365            for (var i = 0; i < val.length; i++) {
1366                if (val[i].indexOf(rel_val) !== -1) {
1367                    return false;
1368                }
1369            }
1370            return true;
1371        case 'starts_with':
1372            for (var i = 0; i < val.length; i++) {
1373                if (val[i].startsWith(rel_val)) {
1374                    return true;
1375                }
1376            }
1377            return false;
1378        case 'ends_with':
1379            for (var i = 0; i < val.length; i++) {
1380                if (val[i].endsWith(rel_val)) {
1381                    return true;
1382                }
1383            }
1384            return false;
1385        case 'date_is':
1386        case 'time_is':
1387            if (jQuery.inArray(rel_val, val) >= 0) {
1388                return true;
1389            } else {
1390                return false;
1391            }
1392        case 'date_is_before':
1393        case 'time_is_before':
1394            for (var i = 0; i < val.length; i++) {
1395                if (parseFloat(val[i]) >= parseFloat(rel_val)) { // need to ensuer no values are greater
1396                    return false;
1397                }
1398            }
1399
1400            return true;
1401        case 'date_is_after':
1402        case 'time_is_after':
1403            for (var i = 0; i < val.length; i++) {
1404                if (parseFloat(val[i]) > parseFloat(rel_val)) { // need to ensuer no values are greater
1405                    return true;
1406                }
1407            }
1408            return false;
1409    }
1410}
1411
1412function awcfe_get_week_number(weekString) {
1413    if (!weekString) return null;
1414
1415    // Adjust the regex to match 'W{week} {year}' format
1416    var match = weekString.match(/^(\d{1,2})\s(\d{4})$/);
1417    if (!match) return null;
1418
1419    var week = parseInt(match[1], 10);
1420    var year = parseInt(match[2], 10);
1421
1422    if (week >= 1 && week <= 53) {
1423        return `W${week} ${year}`;
1423 // Return as a single string in the format 'W{week} {year}'
1424    }
1425
1426    return null;
1427}
1428
1429
1430
1431function awcfe_get_day_week(weekString) {
1432    var days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
1433    var d = awcfe_get_date_obj(weekString, 'wp');
1434    return d instanceof Date && !isNaN(d) ? days[d.getDay()] : null;
1435}
1436
1437function awcfe_get_date_obj(val, date_format) {
1438
1439    date_format = typeof date_format !== 'undefined' ? date_format : false;
1440    if (typeof moment == 'function') {
1441        if (date_format == 'wp') {
1442            return moment(val, awcfeSettings.dateFormatJs + ' ' + awcfeSettings.timeFormatJs).toDate();
1443        } else if (date_format !== false) {
1444            return moment(val, date_format).toDate();
1445        } else {
1446            return moment(val).toDate();
1447        }
1448    }
1449    return new Date(val);
1450}
1451
1452/* / RegExp / */
1453
1454jQuery(document).on('change keyup', '.wcfe_allowed_chars input[type=text], .wcfe_allowed_chars textarea', function (e) {
1455    var val = jQuery(this).val();
1456    var new_val = '';
1457    var validation = jQuery(this).data('validation');
1458    var errormsg = jQuery(this).data('errormsg');
1459    var allowed_chars = regExpFromString(validation.allowed_chars, 'i');
1460
1461    var a = jQuery.trim(val).match(allowed_chars) ? true : false;
1462    if (a == true) {
1463        jQuery(this).parents('.form-row').removeClass('woocommerce-invalid');
1464    } else {
1465        jQuery(this).parents('.form-row').removeClass('woocommerce-validated');
1466        jQuery(this).closest('.form-row').addClass('woocommerce-invalid');
1467
1468        if (typeof $error_ele !== 'undefined') {
1469            $error_ele.remove();
1470        }
1471        $error_ele = jQuery('<span class="wcfe_error_msg">' + errormsg + '</span>').insertAfter(jQuery(this));
1472        setTimeout(function () {
1473            $error_ele.fadeOut(1000, function () {
1474                jQuery(this).remove();
1475            })
1476        }, 1500);
1477
1478    }
1479});
1480
1481function regExpFromString(q, ext) {
1482    var flags = q.replace(/.*\/([gimuy]*)$/, '$1');
1483    if (flags === q) flags = '';
1484    var pattern = (q.charAt(0) == '/' ? q.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1') : q);
1485    try {
1486        if (flags == '' && q.charAt(0) !== '/') {
1487            flags = ext;
1488        }
1489        return new RegExp(pattern, flags);
1490    } catch (e) {
1491        return null;
1492    }
1493}
1494
1495
1496
1497// }
1498
1499var $ck = '';
1500awcfe_initialize_script($ck);
1501
1502// jQuery( document.body ).on( 'updated_checkout', function() {
1503//   awcfe_initialize_script();
1504//   var $ck = '.acwcfe_extra_section';
1505//   awcfe_file_action_script($ck);
1506//
1507//   jQuery('.acwcfe_extra_section .awcfe_price_field .awcfe_price_item').on('change', function () {
1508//     awcfe_calculate_price();
1509//   });
1510//
1511// });
1512
1513jQuery(document.body).bind('update_checkout', function () {
1514    var myform = jQuery('.acwcfe_extra_section');
1515    var disabled = myform.find(':input:disabled').removeAttr('disabled');
1516    var secFieldData = jQuery('.acwcfe_extra_section input, .acwcfe_extra_section select, .acwcfe_extra_section textarea').serializeArray();
1517    disabled.attr('disabled', 'disabled');
1518    dataObj = {};
1519    jQuery(secFieldData).each(function (i, field) {
1520        if (field.name in dataObj) {
1521            dataObj[field.name] = dataObj[field.name] + ',' + field.value;
1522        } else {
1523            dataObj[field.name] = field.value;
1524        }
1525    })
1526});
1527jQuery(document.body).bind('updated_checkout', function () {
1528
1529    jQuery('.acwcfe_extra_section').find('input, select, textarea').each(function () {
1530        var itemName = jQuery(this).attr('name');
1531        var itemId = jQuery(this).attr('id');
1532        var itemType = jQuery(this).attr('data-type');
1533        if (itemName in dataObj) {
1534            if (itemType == 'checkboxGroup') {
1535                optz = dataObj[itemName].trim().split(',');
1536                optz.forEach(function (item) {
1537                    jQuery(":checkbox[name='" + itemName + "'][value='" + item + "']").attr('checked', true);
1538                });
1539            } else if (itemType == 'radio') {
1540                jQuery(":radio[name='" + itemName + "'][value='" + dataObj[itemName] + "']").attr('checked', true).trigger('change');
1541            } else if (itemType == 'multiselect') {
1542                jQuery("#" + itemId).val(dataObj[itemName].trim().split(','));
1543            } else if (itemType == 'colorpicker') {
1544                jQuery("#" + itemId).spectrum("set", dataObj[itemName]).trigger('change');
1545            } else if (itemType == 'fileitem') {
1546                var valuee = dataObj[itemName];
1547                jQuery("input[name='" + itemName + "']").val(valuee);
1548                if (valuee) {
1549                    var data = JSON.parse(valuee);
1550                    var preview = "";
1551                    if (data.type === "image/jpg" || data.type === "image/png" || data.type === "image/gif" || data.type === "image/jpeg") {
1552                        preview = "<span class='awcfe-file-image-container'><img src='" + data.url + "' title='" + data.filename + "' /></span>";
1553                    } else {
1554                        preview = "<span class='awcfe-file-image-container'><img src='" + awcfeSettings.asseturl + "/images/text.png' title='" + data.filename + "' /></span>";
1555                    }
1556                    jQuery("input[name='" + itemName + "']").siblings('.awcfe-file-list1').find('.awcfe-file-list').append(preview);
1557                    jQuery("input[name='" + itemName + "']").siblings('.awcfe-file-list1').show();
1558                    jQuery("input[name='" + itemName + "']").siblings('.awcfe-file-button-wrap').hide();
1559                }
1560
1561            } else {
1562                jQuery("#" + itemId).val(dataObj[itemName]);
1563            }
1564        }
1565
1566    });
1567
1568
1569    var $ck = '.acwcfe_extra_section';
1570    awcfe_initialize_script($ck);
1571    awcfe_file_action_script($ck);
1572    jQuery('.acwcfe_extra_section .awcfe_price_field .awcfe_price_item').on('change', function () {
1573        //awcfe_calculate_price();
1574    });
1575
1576    jQuery('.acwcfe_extra_section.awcfe_has_sec_rules').each(function () {
1577        var itemType = jQuery(this).data('type');
1578        var elmnt = jQuery(this).attr('id');
1579        var isSec = 'section';
1580        exc_relations(elmnt, itemType, isSec, $ck);
1581    });
1582
1583    jQuery('.acwcfe_extra_section .awcfe_has_relation').each(function () {
1584
1585        var related = jQuery(this).find('.awcfe_cl_fields').data('related');
1586        var itemType = jQuery(this).find('.awcfe_cl_fields').data('type');
1587        var isSec = 'field';
1588        if (related != null) {
1589            related.forEach(function (el) {
1590                exc_relations(el, itemType, isSec, $ck);
1591            });
1592        }
1593    });
1594    awcfeInitMap();
1595
1596});
1597
1598var $ck = '';
1599awcfe_file_action_script($ck);
1600
1601function awcfe_file_action_script($ck) {
1602
1603    jQuery($ck + " .awcfe_file_field ").each(function (i, field) {
1604
1605        var $field = jQuery(field),
1606            $button_file = $field.find('[type=file]'),
1607            $button_click = $field.find('.awcfe-file-button'),
1608            $button_wrap = $field.find('.awcfe-file-button-wrap'),
1609            $field_list = $field.find('.awcfe-file-list'),
1610            $field_list1 = $field.find('.awcfe-file-list1'),
1611
1612            $file_value = $field.find('.awcfe-file-value'),
1613            $button_remove = $field.find('.awcfe-remove-uploaded'),
1614            $up_loading = $field.find('.awcfe-file-upstatus'),
1615            $up_error = $field.find('.awcfe-file-error');
1616
1617        $button_click.on('click', function (e) {
1618            e.preventDefault();
1619            $button_file.trigger('click');
1620        });
1621
1622
1623        $button_file.on('change', prepareUpload);
1624
1625        function prepareUpload(event) {
1626            var file = event.target.files;
1627            var data = new FormData();
1628            data.append("action", "awcfe_file_action");
1629            data.append("maxsize", jQuery(this).attr("data-max"));
1630            data.append("minsize", jQuery(this).attr("data-min"));
1631            data.append("types", jQuery(this).attr("data-types"));
1632
1633            jQuery.each(file, function (key, value) {
1634                // data.append("awcfe_file_upload[]", value);
1635                data.append("awcfe_file_upload", value);
1636            });
1637
1638            jQuery.ajax({
1639                url: awcfeSettings.ajaxurl,
1640                type: 'POST',
1641                data: data,
1642                cache: false,
1643                dataType: 'json',
1644                processData: false,
1645                contentType: false,
1646                beforeSend: function () {
1647                    $up_error.hide();
1648                    $up_error.html('');
1649                    $field_list.text('');
1650                    $up_loading.show();
1651                    $button_click.removeClass('fileAdded');
1652                },
1653                success: function (data, textStatus, jqXHR) {
1654                    $up_loading.hide();
1655                    $button_file.val('');
1656                    if (data.response == "SUCCESS") {
1657                        var preview = "";
1658
1659                        if (data.type === "image/jpg" || data.type === "image/png" || data.type === "image/gif" || data.type === "image/jpeg") {
1660                            preview = "<span class='awcfe-file-image-container'><img src='" + data.url + "' title='" + data.filename + "' /></span>";
1661                        } else {
1662                            preview = "<span class='awcfe-file-image-container'><img src='" + awcfeSettings.asseturl + "/images/text.png' title='" + data.filename + "' /></span>";
1663                            // preview = data.filename;
1664                        }
1665
1666                        delete data["response"];
1667                        jQuery($file_value).val(JSON.stringify(data));
1668
1669                        jQuery($field_list).append(preview);
1670                        jQuery($field_list1).show();
1671                        $button_click.hide();
1672                        $button_click.addClass('fileAdded');
1673                        $button_wrap.hide();
1674                        $button_remove.attr("data-fileurl", data.url);
1675                        awcfe_calculate_price();
1676                    } else {
1677                        jQuery($up_error).html(data.error);
1678                        $up_error.show();
1679                    }
1680                }
1681
1682            });
1683        }
1684
1685        $button_remove.on('click', function (e) {
1686            e.preventDefault();
1687
1688            var fileurl = jQuery(this).attr("data-fileurl");
1689            var data = { fileurl: fileurl, action: 'awcfe_file_delete' };
1690            jQuery.ajax({
1691                url: awcfeSettings.ajaxurl,
1692                type: 'POST',
1693                data: data,
1694                cache: false,
1695                dataType: 'json',
1696                beforeSend: function () {
1697                    $up_error.hide();
1698                    $field_list.text('');
1699                    $up_loading.show();
1700                },
1701                success: function (data, textStatus, jqXHR) {
1702                    $up_loading.hide();
1703                    if (data.response == "SUCCESS") {
1704                        $field_list1.hide();
1705                        $button_click.show();
1706                        $button_click.removeClass('fileAdded');
1707                        $button_wrap.show();
1708                        jQuery($file_value).val('');
1709                        awcfe_calculate_price();
1710                    }
1711                    if (data.response == "ERROR") {
1712                        jQuery($up_error).html(data.error);
1713                        $up_error.show();
1714                    }
1715                },
1716                error: function (jqXHR, textStatus, errorThrown) {
1717                    jQuery($up_error).html(textStatus);
1718                    $up_error.show();
1719                }
1720            });
1721        });
1722    });
1723}
1724
1725
1726awcfe_calculate_price();
1727
1728jQuery(document).on('change', '.awcfe_price_field .awcfe_price_item', function (e) {
1729    // jQuery('.awcfe_price_field .awcfe_price_item').on('change', function () {
1730
1731    awcfe_calculate_price();
1732
1733});
1734
1735
1736function awcfe_calculate_price() {
1737
1738    var priceInfoArr = {};
1739    jQuery(".awcfe_price_item:not([disabled])").each(function () {
1740        var dis = jQuery(this);
1741        var itype = '';
1742
1743        var priceInfo = {};
1744        pname = dis.prop("name");
1745        ftype = dis.data('type');
1746        taxable = dis.data('taxable');
1747        taxClass = dis.data('taxclass');
1748
1749        var plabel = dis.data("pricelabel"),
1750            priceType = dis.data("pricetype"),
1751            priceOption = dis.data("priceoption");
1752
1753        if (ftype == 'multiselect') {
1754
1755            var pname = dis.data("name");
1756            var value = dis.val();
1757            var selected = jQuery(this).find('option:selected', this);
1758            var total = 0;
1759            selected.each(function () {
1760                total += isNaN(parseFloat(jQuery(this).data('optionprice'))) ? 0 : parseFloat(jQuery(this).data('optionprice'));
1761            });
1762            var price = total;
1763
1764        } else if (ftype == 'radio') {
1765
1766            var pname = dis.data("name");
1767            var value = jQuery('input[name="' + pname + '"]:checked').val();
1768
1769            if (priceOption == 'fixed_for_all') {
1770                var price = dis.data("price");
1771            } else {
1772                var price = jQuery('input[name="' + pname + '"]:checked').data('optionprice');
1773            }
1774
1775        } else if (ftype == 'checkboxGroup') {
1776
1777            var pname = dis.data("name");
1778            // var value = jQuery('input[name="'+pname+'[]"]:checked').val();
1779            var value = [];
1780            jQuery('input:checkbox[name="' + pname + '[]"]:checked').each(function () {
1781                value.push(jQuery(this).val());
1782            });
1783
1784            var total = 0;
1785            jQuery('input[name="' + pname + '[]"]:checked').each(function () {
1786                total += isNaN(parseFloat(jQuery(this).data('optionprice'))) ? 0 : parseFloat(jQuery(this).data('optionprice'));
1787            });
1788            var price = total;
1789
1790        } else if (ftype == 'check-box' || ftype == 'toggleSwitch') {
1791
1792            var price = 0;
1793
1794            if (dis.is(':checked')) {
1795                var value = dis.val();
1796                price = dis.data("price");
1797            }
1798
1799        }
1800        else if (ftype == 'select') {
1801            var value = dis.val();
1802            if (priceOption == 'fixed_for_all') {
1803                var price = dis.data("price");
1804            }
1805            else {
1806                var price = dis.find(':selected').data('optionprice');
1807            }
1808        }
1809        else if (ftype == 'file') {
1810            var value = dis.siblings('.awcfe-file-value').val(),
1811                price = dis.data("price");
1812
1813        } else if (ftype == 'imageGroup' || ftype == 'colorGroup') {
1814            itype = dis.data('frp');
1815
1816            if (itype == 'radio') {
1817                var pname = dis.data("name");
1818                var value = jQuery('input[name="' + pname + '"]:checked').val();
1819
1820                if (priceOption == 'fixed_for_all') {
1821                    var price = dis.data("price");
1822                } else {
1823                    var price = jQuery('input[name="' + pname + '"]:checked').data('optionprice');
1824                }
1825            } else if (itype == 'checkboxGroup') {
1826                var pname = dis.data("name");
1827                var value = [];
1828                jQuery('input:checkbox[name="' + pname + '[]"]:checked').each(function () {
1829                    value.push(jQuery(this).val());
1830                });
1831                var total = 0;
1832                jQuery('input[name="' + pname + '[]"]:checked').each(function () {
1833                    total += isNaN(parseFloat(jQuery(this).data('optionprice'))) ? 0 : parseFloat(jQuery(this).data('optionprice'));
1834                });
1835                var price = total;
1836            }
1837        } else {
1838            var value = dis.val();
1839            var price = dis.data("price");
1840            if (value !== false && value !== '' && value !== null && price) {
1841                console.log('value:', value);
1842
1843                if (priceType === 'custom') {
1844                    var formula = price.replace(/{this.value}/g, value).replace(/{value}/g, value);
1845                    try {
1846                        price = eval(formula);
1847                    } catch (e) {
1848                        price = 0;
1849                    }
1850                }
1851            }
1852        }
1853
1854        priceInfo.ftype = ftype;
1855        priceInfo.itype = itype;
1856        priceInfo.name = pname;
1857        priceInfo.label = plabel;
1858        priceInfo.price = price;
1859        priceInfo.priceType = priceType;
1860        priceInfo.priceOption = priceOption;
1861        priceInfo.value = value;
1862        priceInfo.taxable = taxable;
1863        priceInfo.taxClass = taxClass;
1864
1865        priceInfoArr[pname] = priceInfo;
1866
1867
1868    });
1869
1870    if (jQuery('.awcfe_price_item').length > 0) {
1871        jQuery.ajax({
1872            type: 'POST',
1873            url: awcfeSettings.ajaxurl,
1874            data: {
1875                'action': 'awcfe_price_action',
1876                'price': JSON.stringify(priceInfoArr),
1877            },
1878            success: function (result) {
1879                jQuery('body').trigger('update_checkout');
1880            },
1881            error: function (error) {
1882                console.log(error);
1883            }
1884        });
1885    }
1886
1887}
1888
1889jQuery('body').on('country_to_state_changed', function () {
1890
1891    var elementID = 'billing_state';
1892    if ('#' + elementID.length > 0) {
1893        if (jQuery('#billing_state').attr('type') == 'hidden') {
1894            addCountryState(elementID);
1895        } else {
1896            removeCountryState(elementID);
1897        }
1898    }
1899    var elementIDs = 'shipping_state';
1900    if ('#' + elementIDs.length > 0) {
1901        if (jQuery('#shipping_state').attr('type') == 'hidden') {
1902            addCountryState(elementIDs)
1903        } else {
1904            removeCountryState(elementIDs);
1905        }
1906    }
1907
1908});
1909
1910function addCountryState(elementID) {
1911    var hidenFields = jQuery('#awcfe_disabled_fields').val();
1912    addHiddenFields(hidenFields, elementID);
1913}
1914
1915function removeCountryState(elementID) {
1916    var hidenFields = jQuery('#awcfe_disabled_fields').val();
1917    removeHiddenFields(hidenFields, elementID);
1918}
1919
1920function awcfeInitMap() {
1921    var componentForm = {
1922        street_number: 'short_name',
1923        route: 'long_name',
1924        locality: 'long_name',
1925        administrative_area_level_1: 'short_name',
1926        country: 'long_name',
1927        postal_code: 'short_name'
1928    };
1929    jQuery('.awcfe_placeselector_field').each(function () {
1930        var input = jQuery(this).find('.awcfe_google_place').get(0);
1931        var $that = jQuery(this);
1932        var autocomplete = new google.maps.places.Autocomplete(input);
1933        var geocoder = new google.maps.Geocoder();
1934        autocomplete.addListener('place_changed', function () {
1935            var place = autocomplete.getPlace();
1936
1937            for (var component in componentForm) {
1938                jQuery('.' + component, $that).val('');
1939                jQuery('.' + component, $that).removeAttr('disabled', 'disabled');
1940            }
1941            for (var i = 0; i < place.address_components.length; i++) {
1942                var addressType = place.address_components[i].types[0];
1943                if (componentForm[addressType]) {
1944                    var val = place.address_components[i][componentForm[addressType]];
1945                    jQuery('.' + addressType, $that).val(val);
1946
1947                }
1948            }
1949            if (place.geometry) {
1950                jQuery('.awcfe_lat', $that).val(place.geometry.location.lat());
1951                jQuery('.awcfe_lng', $that).val(place.geometry.location.lng());
1952            }
1953        });
1954        if ($that.find('.awcfe_map').length) {
1955            var map = new google.maps.Map($that.find('.awcfe_map').get(0), {
1956                center: { lat: 0, lng: 0 },
1957                zoom: 15
1958            });
1959            var marker;
1960            autocomplete.bindTo('bounds', map);
1961
1962            var marker = new google.maps.Marker({
1963                map: map,
1964                draggable: true,
1965                anchorPoint: new google.maps.Point(0, -29)
1966            });
1967            jQuery.post("https://www.googleapis.com/geolocation/v1/geolocate?key=" + awcfeSettings.google_map_api, function (success) {
1968                map.setCenter(success.location);
1969                marker.setVisible(false);
1970                marker.setPosition(success.location);
1971                marker.setVisible(true);
1972            })
1973            google.maps.event.addListener(marker, 'dragend', function () {
1974                jQuery('.awcfe_lat', $that).val(marker.getPosition().lat());
1975                jQuery('.awcfe_lng', $that).val(marker.getPosition().lng());
1976                geocoder.geocode({
1977                    latLng: marker.getPosition()
1978                }, function (responses) {
1979                    for (var component in componentForm) {
1980                        jQuery('.' + component, $that).val('');
1981                        jQuery('.' + component, $that).removeAttr('disabled', 'disabled');
1982                    }
1983                    if (responses && responses.length > 0) {
1984                        jQuery('.awcfe_google_place', $that).val(responses[0].formatted_address);
1985                        // jQuery.wcpaIterate();
1986                        for (var i = 0; i < responses[0].address_components.length; i++) {
1987                            var addressType = responses[0].address_components[i].types[0];
1988                            if (componentForm[addressType]) {
1989                                var val = responses[0].address_components[i][componentForm[addressType]];
1990                                jQuery('.' + addressType, $that).val(val);
1991
1992                            }
1993                        }
1994                    }
1995                });
1996            });
1997            autocomplete.addListener('place_changed', function () {
1998                marker.setVisible(false);
1999                var place = autocomplete.getPlace();
2000                if (!place.geometry) {
2001                    // User entered the name of a Place that was not suggested and
2002                    // pressed the Enter key, or the Place Details request failed.
2003                    window.alert("No details available for input
2003: '" + place.name + "'");
2004                    return;
2005                }
2006                // If the place has a geometry, then present it on a map.
2007                if (place.geometry.viewport) {
2008                    map.fitBounds(place.geometry.viewport);
2009                } else {
2010                    map.setCenter(place.geometry.location);
2011                    map.setZoom(17);  // Why 17? Because it looks good.
2012                }
2013                marker.setPosition(place.geometry.location);
2014                marker.setVisible(true);
2015
2016            });
2017        }
2018
2019    })
2020}
2021
2022jQuery('body.woocommerce-checkout span.description').removeClass('description').addClass('awcfe_show_description').removeAttr('aria-hidden');
2023
2024jQuery(document.body).on('updated_checkout', function () {
2025    jQuery('[data-rules]').each(function () {
2026        var elmnt = jQuery(this).attr('id');
2027        var itemType = jQuery(this).data('type');
2028        var isSec = jQuery(this).hasClass('awcfe_cl_sec_parent') || jQuery(this).hasClass('awcfe_condSec') || jQuery(this).hasClass('awcfe_has_sec_rules') ? 'section' : 'field';
2029        exc_relations(elmnt, itemType, isSec, '');
2030    });
2031    jQuery('.awcfe_condSec').each(function () {
2032        var itemType = jQuery(this).data('type');
2033        var elmnt = jQuery(this).attr('id');
2034        exc_relations(elmnt, itemType, 'section', '');
2035    });
2036    jQuery('.awcfe_condField').each(function () {
2037        var itemType = jQuery(this).find('.awcfe_cl_fields').data('type');
2038        var elmnt = (itemType == 'checkboxGroup' || itemType == 'radio' || itemType == 'imageGroup' || itemType == 'colorGroup') ? jQuery(this).find('.awce-check-param').attr('id') : jQuery(this).find('.awcfe_cl_fields').attr('id');
2039        exc_relations(elmnt, itemType, 'field', '');
2040    });
2041    jQuery('.awcfe_has_sec_rules').each(function () {
2042        var itemType = jQuery(this).data('type');
2043        var elmnt = jQuery(this).attr('id');
2044        exc_relations(elmnt, itemType, 'section', '');
2045    });
2046    jQuery(' .awcfe_has_relation').each(function () {
2047        var itemType = jQuery(this).find('.awcfe_cl_fields').data('type');
2048        var related = (itemType == 'checkboxGroup' || itemType == 'radio' || itemType == 'imageGroup' || itemType == 'colorGroup') ? jQuery(this).find('.awce-check-param').data('related') : jQuery(this).find('.awcfe_cl_fields').data('related');
2049        if (related != null) {
2050            related.forEach(function (el) {
2051                exc_relations(el, itemType, 'field', '');
2052            });
2053        }
2054    });
2055});

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.