PageSourceSearch

https://www.emiratesnbdsecurities.com/assets/securities/js/campaign/form-fields.js

js emiratesnbdsecurities.com collected 2026-10-01 16:39:19 UTC 98,425 bytes, 2,077 lines download raw bytes

1$(document).ready(function () {
2    FormFields.Init();
3});
4
5window.Parsley.on('form:validate', function (formInstance) {
6
7    $('[data-bankcode]').each(function () {
8        var $field = $(this),
9            parsleyField = $field.parsley(),
10            fieldValue = $field.val();
11
12        window.ParsleyUI.removeError(parsleyField, "BankCodeError");
13
14        if (fieldValue) { // validate only if not empty
15            var $bankCode = $('select[name="' + $field.data('bankcode') + '"]');
16            if ($bankCode.length > 0) {
17                if (fieldValue.substr(4, 3) !== $bankCode.val()) {
18                    var invalidBankCodeMessage = $field.data('bankcodemessage') || 'Invalid IBAN for selected bank';
19
20                    window.ParsleyUI.addError(parsleyField, "BankCodeError", invalidBankCodeMessage);
21                    formInstance.validationResult = false;
22                    return false; // skip the rest
23                }
24            }
25        }
26
27        return true;
28    });
29});
30
31window.Parsley.addValidator('validateiban', {
32    validateString: function (value, maxSize, instance) {
33        return FormFields.IsValidIBANNumber(value) == "Valid IBAN";
34    }
35});
36//window.Parsley.on('field:error', function () {
37//    // This global callback will be called for any field that fails validation.
38//    console.log('Validation failed for: ', this.$element);
39//});
40function forceInputUppercase(e) {
41    var start = e.target.selectionStart;
42    var end = e.target.selectionEnd;
43    e.target.value = e.target.value.toUpperCase();
44    e.target.setSelectionRange(start, end);
45}
46
47var CODE_LENGTHS = {
48
49    AD: 24,
50    AE: 23,
51    AT: 20,
52    AZ: 28,
53    BA: 20,
54    BE: 16,
55    BG: 22,
56    BH: 22,
57    BR: 29,
58    CH: 21,
59    CR: 21,
60    CY: 28,
61    CZ: 24,
62    DE: 22,
63    DK: 18,
64    DO: 28,
65    EE: 20,
66    ES: 24,
67    FI: 18,
68    FO: 18,
69    FR: 27,
70    GB: 22,
71    GI: 23,
72    GL: 18,
73    GR: 27,
74    GT: 28,
75    HR: 21,
76    HU: 28,
77    IE: 22,
78    IL: 23,
79    IS: 26,
80    IT: 27,
81    JO: 30,
82    KW: 30,
83    KZ: 20,
84    LB: 28,
85    LI: 21,
86    LT: 20,
87    LU: 20,
88    LV: 21,
89    MC: 27,
90    MD: 24,
91    ME: 22,
92    MK: 19,
93    MR: 27,
94    MT: 31,
95    MU: 30,
96    NL: 18,
97    NO: 15,
98    PK: 24,
99    PL: 28,
100    PS: 29,
101    PT: 25,
102    QA: 29,
103    RO: 24,
104    RS: 22,
105    SA: 24,
106    SE: 24,
107    SI: 19,
108    SK: 24,
109    SM: 27,
110    TN: 24,
111    TR: 26,
112    AL: 28,
113    BY: 28,
114    CR: 22,
115    EG: 29,
116    GE: 22,
117    IQ: 23,
118    LC: 32,
119    SC: 31,
120    ST: 25,
121    SV: 28,
122    TL: 23,
123    UA: 29,
124    VA: 22,
125    VG: 24,
126    XK: 20
127
128};
129
130var FormFields = FormFields || {
131    Init: function () {
132        $('.option-field').click(function () {
133            var formfield = $('.form-group[data-fieldid="' + $(this).data('fieldid') + '"]');
134            if (formfield.is(':visible')) {
135                formfield.addClass('d-none');
136                $(this).find('span').text($(this).data('show-text'));
137                $('.add-more-field[data-fieldid="' + $(this).data('fieldid') + '"]').addClass('d-none');
138            } else {
139                formfield.removeClass('d-none');
140                $(this).find('span').text($(this).data('hide-text'));
141                $('.add-more-field[data-fieldid="' + $(this).data('fieldid') + '"]').removeClass('d-none');
142                if (formfield.hasClass('upload-form-group') && formfield.data('required')) {
143                    if (formfield.hasClass('upload-show-both')) {
144                        formfield.find('.upload-documents-group .upload-input-file').attr('required', 'required');
145                    } else {
146                        formfield.find('.upload-both .upload-input-file').attr('required', 'required');
147                    }
148                }
149            }
150        });
151        $('.add-more-field').click(function () {
152            var formfield = $('.form-group[data-fieldid="' + $(this).data('fieldid') + '"]');
153            var limit = $(this).data('limit');
154            var formfieldCount = formfield.length;
155            if (formfieldCount < parseInt(limit)) {
156                $(this).before(formfield.clone());
157                formfieldCount += 1;
158                if (formfieldCount >= parseInt(limit)) {
159                    $(this).hide();
160                }
161                if (typeof (nbdUploadDocuments) != "undefined") {
162                    nbdUploadDocuments.init();
163                    FormFields.UpdateDependentField();
164                }
165            }
166        });
167        //Add multiplre fields
168        $('.add-more-group-field').on('click', function (e) {
169            var groupfieldId = $(this).data('group-fieldid');
170            var showtext = $(this).data('show-text');
171            e.preventDefault();
172            var formgroupfield = $('.form-group[data-group-fieldid="' + groupfieldId + '"]');
173            var currentindex = formgroupfield.attr('data-group-current-index')
174            var fieldIndex = currentindex ? parseInt(currentindex) : parseInt(formgroupfield.data('group-index'));
175            var addButton = $(this);
176            var limit = $(this).data('limit');
177            var formfieldCount = fieldIndex;
178            if (formfieldCount < (parseInt(limit) - 1)) {
179                $(this).before(formgroupfield.clone());
180                formfieldCount += 1;
181                if (formfieldCount >= (parseInt(limit) - 1)) {
182                    $(this).hide();
183                }
184                if (typeof (nbdUploadDocuments) != "undefined") {
185                    nbdUploadDocuments.init();
186                    FormFields.UpdateDependentField();
187                }
188                var newIndex = fieldIndex + 1;
189                formgroupfield.attr('data-group-current-index', newIndex);
190                var indextext = addButton.data('group-' + (newIndex + 1) + '-text');
191                var removeOption = '<a style="float:right;margin-top:-30px" class="text-danger fw-600 remove-group-field" data-limit="' + limit + '" data-group-fieldid="' + groupfieldId + '" onclick="FormFields.RemoveGroupField(this);"><i class="icomoon icon-close mr-2"></i></a>';
192                var grouplabel = '<h5 class="fs-16 mb-3">' + showtext.replace('{0}', indextext) + '</h5>'
193                var previousFieldGroup = $('.form-group[data-group-fieldid="' + groupfieldId + '-' + (newIndex - 1) + '"]');
194                if (previousFieldGroup.length > 0) {
195                    previousFieldGroup.find('.remove-group-field').hide();
196                }
197                var addedFieldGroup = $('.form-group[data-group-fieldid="' + groupfieldId + '"]').last();
198                addedFieldGroup.attr('data-group-index', newIndex);
199                addedFieldGroup.removeAttr('data-group-current-index');
200                addedFieldGroup.prepend(removeOption);
201                addedFieldGroup.prepend(grouplabel);
202                addedFieldGroup.attr('data-group-fieldid', groupfieldId + '-' + newIndex);
203                var fieldInGroup = addedFieldGroup.find('.form-group');
204                fieldInGroup.each(function (i, element) {
205                    var fieldId = $(element).data('fieldid');
206                    if (fieldId) {
207                        $(field).attr('data-fieldid', fieldId + '-option-' + newIndex);
208                        var field = $(element).find('[name=' + fieldId + ']');
209                        if (field.length > 0) {
210                            $(field).attr('name', fieldId + '-option-' + newIndex)
211                                .attr('id', fieldId + '-option-' + newIndex);
212                            var newfield = $('[name=' + fieldId + '-option-' + newIndex + ']');
213                            if (newfield.hasClass('js-select-custom')) {
214                                FormFields.SelectizeDropdown(newfield, $(element));
215                            }
216                            var errorContainer = newfield.attr('data-parsley-errors-container');
217                            if (errorContainer) {
218                                newfield.attr('data-parsley-errors-container', errorContainer + '-' + newIndex);
219                                var newerrorid = errorContainer.replace('#', '') + '-' + newIndex;
220                                $(newfield).parent().find(errorContainer).attr('id', newerrorid);
221                            }
222                            $(newfield).parent().find('.parsley-error-list').remove();
223                        }
224                        var label = $(element).find('[for=' + fieldId + ']');
225                        if (label.length > 0) {
226                            $(label).attr('for', fieldId + '-option-' + newIndex);
227                        }
228                    }
229                });
230            }
231        });
232
233        $('.autofill-selection').on('change', function () {
234            var autofillData = '';
235            if ($(this).attr('type') == 'radio') {
236                autofillData = $(this).attr('data-autofill')
237            } else {
238                autofillData = $(this).find("option:selected").attr('data-autofill');
239            }
240            if (autofillData) {
241                var jsonData = JSON.parse(autofillData);
242                $.each(jsonData, function (i, data) {
243                    var element = $("[name='" + data.name + "']")
244                    if (element.attr('type') == 'radio') {
245                        if (data.value == '-') {
246                            $("input[name='" + data.name + "']").prop("checked", false);
247                        } else {
248                            $("input[name='" + data.name + "'][value='" + data.value + "']").prop("checked", true);
249                        }
250                    }
251                    else if (element.is("select")) {
252                        element.val(data.value);
253                        element.trigger('change');
254                        element.parent().addClass('success');
255                    } else {
256                        element.val(data.value);
257                    }
258                });
259            }
260        });
261
262        $(".autofill-field").keyup(function (e) {
263            var autofillData = $(this).attr('data-autofill');
264            var fieldvalue = $(this).val();
265            if (autofillData) {
266                var autofillArray = autofillData.split(",");
267                $.each(autofillArray, function (i, id) {
268                    var element = $("[name='" + id + "']");
269                    var elementMaxLength = element.data('parsley-maxlength');
270                    var autofillFormat = $(element).attr('autofill-format');
271                    if (autofillFormat) {
272                        var expression = autofillFormat;
273                        var fieldIds = [], // an array to collect the strings that are found
274                            rxp = /{([^}]+)}/g,
275                            curMatch;
276
277                        while (curMatch = rxp.exec(autofillFormat)) {
278                            fieldIds.push(curMatch[1]);
279                        }
280                        if (fieldIds.length > 0) {
281                            for (var i = 0; i < fieldIds.length; i++) {
282                                var conditionValue = $('[name="' + fieldIds[i] + '"]').val();
283                                expression = expression.replace(fieldIds[i], conditionValue);
284                            }
285                            expression = expression.replaceAll('{', "").replaceAll('}', "");
286                            if (elementMaxLength) {
287                                var maxlength = ENBD.TryParseInt(elementMaxLength, 0);
288                                if (maxlength > 0) {
289                                    expression.substring(0, length);
290                                }
291                            }
292                            element.val(expression)
293                        }
294                    } else {
295                        if (elementMaxLength) {
296                            var maxlength = ENBD.TryParseInt(elementMaxLength, 0);
297                            if (maxlength > 0) {
298                                expression.substring(0, length);
299                            }
300                        }
301                        element.val(fieldvalue);
302                    }
303                });
304            }
305        });
306
307        $('.dependent-field-selection').on('change', function () {
308            FormFields.InitalizeDependentField(this);
309        });
310        $('.dependent-field-number').on('focusout', function () {
311            FormFields.InitalizeDependentField(this);
312        });
313        $('.dependent-option-selection').on('change', function () {
314            FormFields.InitalizeDependentOption(this);
315        });
316        if ($(".auto-capitalize").length > 0) {
317            $(".auto-capitalize").keyup(function (e) {
318                forceInputUppercase(e);
319            });
320        }
321        ENBD.LazyLoad();
322        this.DatePicker();
323        this.NumberField();
324        this.PickRadio();
325        this.Selectize();
326        this.CheckBox();
327        this.RangeSlider();
328        this.RadioWithInput();
329        if (typeof (nbdUploadDocuments) != "undefined") {
330            nbdUploadDocuments.init();
331        }
332        this.Recaptcha();
333        this.LoadBranches();
334        this.FLoatLabel();
335        this.AcceptAlphaOnly();
336        this.AcceptAlphaNumericOnly();
337        this.AcceptNumericOnly();
338        this.MaskEmailInput();
339        this.MaskPhoneInput();
340        this.MaskInputField();
341        //this.LoadPuzzleCaptcha();
342        this.ErrorDialog.Init();
343        this.ProgressLoader.Init();
344        this.UpdateDependentField();
345        this.TriggerMethod();
346        $('.quick-help__trigger').on('click', function (e) {
347            e.preventDefault();
348            FormFields.TriggerQuickHelp();
349            return false;
350        });
351
352        $('.form-group input[readonly]').each(function () {
353            var self = $(this);
354
355            if (self.attr('readonly') && self.val() == '') {
356                self.removeAttr('readonly');
357                self.parents('.form-group').removeClass('form-group-disabled');
358            }
359        });
360        $('.js-select-phone-code').each(function () {
361            var self = $(this);
362
363            if (self[0].selectize && Object.keys(self[0].selectize.options).length <= 1 && !self[0].selectize.isLocked) {
364                self[0].selectize.lock();
365            }
366        });
367    },
368    RemoveGroupField: function (eventField) {
369        $(eventField).parent().remove();
370        var groupfieldId = $(eventField).data('group-fieldid');
371        var mainFieldGroup = $('.form-group[data-group-fieldid="' + groupfieldId + '"]');
372        var fieldGroup = $('.form-group[data-fieldid="' + groupfieldId + '"]')
373        var fieldGroupLength = fieldGroup.find('.child-group').length;
374        if (mainFieldGroup) {
375            mainFieldGroup.attr('data-group-current-index', fieldGroupLength - 1);
376        }
377        var limit = $(eventField).data('limit');
378        if (fieldGroupLength < (parseInt(limit))) {
379            fieldGroup.find('.add-more-group-field').show();
380        }
381        fieldGroup.find('.child-group').last().find('.remove-group-field').show();
382    },
383    InitalizeDependentField: function (eventField) {
384        var dependentData = $(eventField).data('dependent');
385        var fieldValue = $(eventField).val();
386        if ($(eventField).is(':radio') && !$(eventField).is(':checked')) {
387            return;
388        }
389        if ($(eventField).hasClass('group-checkbox')) {
390            var groupValue = [];
391            $.each($("input[name='" + $(eventField).attr("name") + "']:checked"), function () {
392                groupValue.push($(this).val());
393            });
394            fieldValue = groupValue.join(',');
395        }
396        var dependentField = $(eventField);
397        var allowedCheck = dependentField.is(':visible');
398        if (dependentData) {
399            $.each(dependentData, function (i, data) {
400                var formGroup = $('.form-group[data-fieldid="' + data.name + '"]');
401                var expressionFromat = /[!=<>]+/;
402                allowedCheck = (allowedCheck || data.skipvisible);
403                if (allowedCheck && data.value && (expressionFromat.test(data.value))) {
404                    if (FormFields.GetMultiCondition(data.value)) {
405                        formGroup.removeClass('d-none');
406                        if (formGroup.hasClass('upload-form-group') && formGroup.data('required')) {
407                            if ($(formGroup).find(".upload-documents-group").attr("data-upload-both") == "false") {
408                                formGroup.find('.upload-documents-group .upload-input-file').attr('required', 'required');
409                            } else {
410                                formGroup.find('.upload-both .upload-input-file').attr('required', 'required');
411                            }
412                        }
413                        else if (formGroup.data('required')) {
414                            $('[name="' + data.name + '"]').attr('required', 'required');
415                        }
416
417                    } else {
418                        formGroup.addClass('d-none');
419                        if (formGroup.hasClass('upload-form-group')) {
420                            if ($(formGroup).find(".upload-documents-group").attr("data-upload-both") == "false") {
421                                formGroup.find('.upload-documents-group .upload-input-file').removeAttr('required', 'required');
422                            } else {
423                                formGroup.find('.upload-both .upload-input-file').removeAttr('required', 'required');
424                            }
425                        } else {
426                            $('[name="' + data.name + '"]').removeAttr('required');
427                        }
428                    }
429                } else if (allowedCheck && fieldValue && data.value && ((data.exact && data.value == fieldValue) || (!data.exact && data.value.indexOf(fieldValue) > -1))) {
430                    formGroup.removeClass('d-none');
431                    if (formGroup.hasClass('upload-form-group') && formGroup.data('required')) {
432                        if ($(formGroup).find(".upload-documents-group").attr("data-upload-both") == "false") {
433                            formGroup.find('.upload-documents-group .upload-input-file').attr('required', 'required');
434                        } else {
435                            formGroup.find('.upload-both .upload-input-file').attr('required', 'required');
436                        }
437                    }
438                    else if (formGroup.data('required')) {
439                        $('[name="' + data.name + '"]').attr('required', 'required');
440                    }
441
442                }
443                else if (allowedCheck && $(eventField).hasClass('group-checkbox') && fieldValue && data.value && fieldValue.indexOf(data.value) > -1) {
444                    formGroup.removeClass('d-none');
445                    if (formGroup.data('required')) {
446                        $('[name="' + data.name + '"]').attr('required', 'required');
447                    }
448                } else {
449                    formGroup.addClass('d-none');
450                    if (formGroup.hasClass('upload-form-group')) {
451                        if ($(formGroup).find(".upload-documents-group").attr("data-upload-both") == "false") {
452                            formGroup.find('.upload-documents-group .upload-input-file').removeAttr('required', 'required');
453                        } else {
454                            formGroup.find('.upload-both .upload-input-file').removeAttr('required', 'required');
455                        }
456                    } else {
457                        $('[name="' + data.name + '"]').removeAttr('required');
458                    }
459                }
460                var childDependets = $(formGroup).find('[data-dependent]');
461                if (childDependets) {
462                    $.each(childDependets, function (i, childItem) {
463                        var childdependentData = $(this).data('dependent');
464                        var childfieldValue = $(this).val();
465                        if ($(this).is(':radio') && !$(this).is(':checked')) {
466                            return;
467                        }
468                        var childField = $(this);
469                        if (childField.hasClass('group-checkbox')) {
470                            var groupValue = [];
471                            $.each($("input[name='" + childField.attr("name") + "']:checked"), function () {
472                                groupValue.push($(this).val());
473                            });
474                            childfieldValue = groupValue.join(',');
475                        }
476                        var childAllowedCheck = childField.is(':visible');
477                        if (childdependentData) {
478                            $.each(childdependentData, function (i, childdata) {
479                                childAllowedCheck = (childAllowedCheck || childdata.skipvisible);
480                                var childformGroup = $('.form-group[data-fieldid="' + childdata.name + '"]');
481                                if (childdata.value && (expressionFromat.test(childdata.value))) {
482                                    if (childAllowedCheck && FormFields.GetMultiCondition(childdata.value)) {
483                                        childformGroup.removeClass('d-none');
484                                        if (childformGroup.hasClass('upload-form-group') && childformGroup.data('required')) {
485                                            if ($(childformGroup).find(".upload-documents-group").attr("data-upload-both") == "false") {
486                                                childformGroup.find('.upload-documents-group .upload-input-file').attr('required', 'required');
487                                            } else {
488                                                childformGroup.find('.upload-both .upload-input-file').attr('required', 'required');
489                                            }
490                                        }
491                                        else if (childformGroup.data('required')) {
492                                            $('[name="' + childdata.name + '"]').attr('required', 'required');
493                                        }
494
495                                    } else {
496                                        childformGroup.addClass('d-none');
497                                        if (childformGroup.hasClass('upload-form-group')) {
498                                            if ($(childformGroup).find(".upload-documents-group").attr("data-upload-both") == "false") {
499                                                childformGroup.find('.upload-documents-group .upload-input-file').removeAttr('required', 'required');
500                                            } else {
501                                                childformGroup.find('.upload-both .upload-input-file').removeAttr('required', 'required');
502                                            }
503                                        } else {
504                                            $('[name="' + childdata.name + '"]').removeAttr('required');
505                                        }
506                                    }
507                                } else if (childAllowedCheck && childfieldValue && childdata.value && ((data.exact && childdata.value == childfieldValue) || (!data.exact && childdata.value.indexOf(childfieldValue) > -1))) {
508
509                                    childformGroup.removeClass('d-none');
510                                    if (childformGroup.hasClass('upload-form-group') && childformGroup.data('required')) {
511                                        if ($(childformGroup).find(".upload-documents-group").attr("data-upload-both") == "false") {
512                                            childformGroup.find('.upload-documents-group .upload-input-file').attr('required', 'required');
513                                        } else {
514                                            childformGroup.find('.upload-both .upload-input-file').attr('required', 'required');
515                                        }
516                                    }
517                                    else if (childformGroup.data('required')) {
518                                        $('[name="' + childdata.name + '"]').attr('required', 'required');
519                                    }
520
521                                } else {
522                                    childformGroup.addClass('d-none');
523                                    if (childformGroup.hasClass('upload-form-group')) {
524                                        if ($(childformGroup).find(".upload-documents-group").attr("data-upload-both") == "false") {
525                                            childformGroup.find('.upload-documents-group .upload-input-file').removeAttr('required', 'required');
526                                        } else {
527                                            childformGroup.find('.upload-both .upload-input-file').removeAttr('required', 'required');
528                                        }
529                                    } else {
530                                        $('[name="' + childdata.name + '"]').removeAttr('required');
531                                    }
532                                }
533                            });
534                        }
535                    });
536                }
537            });
538        }
539    },
540    InitalizeDependentOption: function (eventField) {
541        var dependentOptionData = $(eventField).data('option-dependent');
542        var fieldValue = $(eventField).val();
543        if ($(eventField).is(':radio') && !$(eventField).is(':checked')) {
544            return;
545        }
546        if ($(eventField).hasClass('group-checkbox')) {
547            var groupValue = [];
548            $.each($("input[name='" + $(eventField).attr("name") + "']:checked"), function () {
549                groupValue.push($(this).val());
550            });
551            fieldValue = groupValue.join(',');
552        }
553        if (dependentOptionData) {
554            $.each(dependentOptionData, function (i, data) {
555                var optionItem = $('.option-item[data-optionid="' + data.name + '"]');
556                var isSelectizeItem = $(optionItem).parent().hasClass('select-selectize');
557                var expressionFromat = /[!=<>]+/;
558                if (data.value && (expressionFromat.test(data.value))) {
559                    if (FormFields.GetMultiCondition(data.value)) {
560                        if (isSelectizeItem) {
561                            optionItem.prop("disabled", false);
562                        } else {
563                            optionItem.removeClass('d-none');
564                        }
565                    } else {
566                        if (isSelectizeItem) {
567                            optionItem.prop("disabled", true);
568                        } else {
569                            optionItem.addClass('d-none');
570                        }
571                    }
572                } else if (fieldValue && data.value &&
573                    ((data.exact && data.value == fieldValue) || (!data.exact && data.value.indexOf(fieldValue) > -1))) {
574                    if (isSelectizeItem) {
575                        optionItem.prop("disabled", false);
576                    } else {
577                        optionItem.removeClass('d-none');
578                    }
579                }
580                else {
581                    if (isSelectizeItem) {
582                        optionItem.prop("disabled", true);
583                    } else {
584                        optionItem.addClass('d-none');
585                    }
586                }
587            });
588        }
589    },
590    UpdateDependentField: function () {
591        this.UpdateSelectionDependentField();
592        this.UpdateNumberDependentField();
593        this.UpdateDependentOption();
594    },
595    UpdateSelectionDependentField: function () {
596        $('.dependent-field-selection').each(function () {
597            FormFields.InitalizeDependentField(this);
598        });
599    },
600    UpdateNumberDependentField: function () {
601        $('.dependent-field-number').each(function () {
602            FormFields.InitalizeDependentField(this);
603        });
604    },
605    UpdateDependentOption: function () {
606        $('.dependent-option-selection').each(function () {
607            FormFields.InitalizeDependentOption(this);
608        });
609    },
610    UpdateReviewDependentField: function () {
611        $('.dependent-field-selection').each(function () {
612            var dependentData = $(this).data('dependent');
613            var fieldValue = $(this).val();
614            if ($(this).is(':radio') && !$(this).is(':checked')) {
615                return;
616            }
617            var dependentField = $(this);
618            if (dependentField.hasClass('group-checkbox')) {
619                var groupValue = [];
620                $.each($("input[name='" + $(dependentField).attr("name") + "']:checked"), function () {
621                    groupValue.push($(this).val());
622                });
623                fieldValue = groupValue.join(',');
624            }
625            if (dependentData) {
626                $.each(dependentData, function (i, data) {
627                    if (data && data.value && data.name) {
628                        var formGroup = $('.review-field-group[data-fieldid="' + data.name + '"]');
629                        var expressionFromat = /[!=<>]+/;
630                        if ((expressionFromat.test(data.value))) {
631                            if (FormFields.GetMultiCondition(data.value)) {
632                                formGroup.removeClass('d-none');
633                            } else {
634                                formGroup.addClass('d-none');
635                            }
636                        }
637                        else if (fieldValue && ((data.exact && data.value == fieldValue)
638                            || (!data.exact && data.value.indexOf(fieldValue) > -1))) {
639                            formGroup.removeClass('d-none');
640                        }
641                        else {
642                            formGroup.addClass('d-none');
643                        }
644                        var childDependets = $(formGroup).find('[data-dependent]');
645                        if (childDependets) {
646                            $.each(childDependets, function (i, childItem) {
647                                var childdependentData = $(this).data('dependent');
648                                var childfieldValue = $(this).val();
649                                if ($(this).is(':radio') && !$(this).is(':checked')) {
650                                    return;
651                                }
652                                if (!$(this).is(':visible')) {
653                                    return;
654                                }
655                                var childField = $(this);
656
657                                if (childdependentData) {
658                                    $.each(childdependentData, function (i, childdata) {
659                                        if (childdata && childdata.value && childdata.name) {
660                                            var childformGroup = $('.review-field-group[data-fieldid="' + childdata.name + '"]');
661                                            if (FormFields.GetMultiCondition(childdata.value)) {
662                                                childformGroup.removeClass('d-none');
663                                            }
664                                            else if (childfieldValue &&
665                                                ((data.exact && childdata.value == childfieldValue)
666                                                    || (!data.exact && childdata.value.indexOf(childfieldValue) > -1))) {
667                                                childformGroup.removeClass('d-none');
668                                            } else {
669                                                childformGroup.addClass('d-none');
670                                            }
671                                        }
672                                    });
673                                }
674                            });
675                        }
676                    }
677                });
678            }
679        });
680    },
681    GetMultiCondition: function (value) {
682        var expression = value;
683        var fieldIds = [], // an array to collect the strings that are found
684            rxp = /{([^}]+)}/g,
685            curMatch;
686
687        while (curMatch = rxp.exec(value)) {
688            fieldIds.push(curMatch[1]);
689        }
690        if (fieldIds.length > 0) {
691            for (var i = 0; i < fieldIds.length; i++) {
692                var $field = $('[name="' + fieldIds[i] + '"]');
693                var conditionValue = $field.is(':radio') ?
694                    $('[name="' + fieldIds[i] + '"]:checked').val() : $('[name="' + fieldIds[i] + '"]').val();
695                if ($field.hasClass('group-checkbox')) {
696                    var groupValue = [];
697                    $.each($("input[name='" + fieldIds[i] + "']:checked"), function () {
698                        groupValue.push($(this).val());
699                    });
700                    conditionValue = groupValue.join(',');
701                }
702                conditionValue = conditionValue == undefined ? "" : conditionValue;
703                if (!(/^[0-9.]+$/.test(conditionValue))) {
704                    conditionValue = "'" + conditionValue + "'";
705                }
706                var regex = /\[#Contains.*?\]/g;
707                var regexGroup = ENBD.MatchAllRegex(expression, regex);
708                if (regexGroup && regexGroup.length > 0 && (conditionValue.indexOf(',') > -1 || $field.hasClass('group-checkbox'))) {
709                    for (var j = 0; j < regexGroup.length; j++) {
710                        var matchValue = regexGroup[j].toString();
711                        if (matchValue.indexOf(fieldIds[i]) > -1) {
712                            var splitValue = matchValue.toString().split(',');
713                            if (splitValue && splitValue.length > 1) {
714                                var compareValue = splitValue[1].replace(')]', '')
715                                expression = expression.replace(matchValue, conditionValue + ".indexOf(" + compareValue + ")>-1");
716                            }
717                        }
718                    }
719                }
720                expression = expression.replace(fieldIds[i], conditionValue);
721            }
722
723            expression = expression.replaceAll('{', "").replaceAll('}', "");
724        }
725
726        try {
727            return eval(expression);
728        } catch (e) {
729            return false
730        }
731        return false;
732    },
733
734    BuildIBAN: function (countryCode, accountNumber, bankCode) {
735
736
737        accountNumber = accountNumber.toString();
738
739        let accountNumberPadded = accountNumber;
740        if (accountNumber.length < 16) {
741            accountNumberPadded = accountNumber.padStart(16, '0');
742        }
743
744        accountNumberPadded = (bankCode || '') + accountNumberPadded;
745
746        let BBAN2 = accountNumberPadded + countryCode + '00';
747        let BBAN_digits = digits = (BBAN2).replace(/[A-Z]/g, function (letter) {
748            return letter.charCodeAt(0) - 55;
749        });
750
751        var checksum = BBAN_digits.slice(0, 2),
752            fragment;
753
754        for (var offset = 2; offset < BBAN_digits.length; offset += 7) {
755
756            fragment = String(checksum) + BBAN_digits.substring(offset, offset + 7);
757            checksum = parseInt(fragment, 10) % 97;
758        }
759
760        checksum = 98 - checksum;
761
762        if (checksum.toString().length == 1) {
763            checksum = '0' + checksum;
764        }
765        return countryCode + checksum + accountNumberPadded;
766    },
767    IsValidIBANNumber: function (input) {
768        var iban = String(input).toUpperCase().replace(/[^A-Z0-9]/g, ''),
769            code = iban.match(/^([A-Z]{2})(\d{2})([A-Z\d]+)$/),
770            digits;
771        if (!code || iban.length !== CODE_LENGTHS[code[1]]) {
772
773            return "Lenght/Country code mismatch";
774        }
775        digits = (code[3] + code[1] + code[2]).replace(/[A-Z]/g, function (letter) {
776            return letter.charCodeAt(0) - 55;
777        });
778        return this.Mod97(digits);
779    },
780    Mod97: function (string) {
781
782        var checksum = string.slice(0, 2),
783            fragment;
784        for (var offset = 2; offset < string.length; offset += 7) {
785            fragment = String(checksum) + string.substring(offset, offset + 7);
786            checksum = parseInt(fragment, 10) % 97;
787        }
788
789        if (checksum == 1)
790            return "Valid IBAN";
791        else
792            return "Invalid Checksum :" + checksum;
793
794    },
795    Branches: [],
796    RenderBranches: function (data) {
797        if (data) {
798            $('#branch-selector-list').html('');
799            var template = $('#branch-listing-template').html();
800            var templateScript = Handlebars.compile(template);
801            var html = templateScript(data);
802            $('#branch-selector-list').html(html);
803            nbdBranchSelector.handleSelectList();
804        }
805    },
806    ApplyBranchFilter: function () {
807        var query = $("#branch-search").val();
808        var emirateField = $(".emirate-field").data("fieldid");
809        var selectedEmirate = $("[name='" + emirateField + "'] option:selected").data('optionid');
810        var branchItems = JSLINQ(FormFields.Branches);
811        if (branchItems.items.length > 0) {
812            if (selectedEmirate) {
813                branchItems = branchItems.Where(function (item) {
814                    return item.EmirateId && item.EmirateId == selectedEmirate
815                });
816            }
817            if (query) {
818                branchItems = JSLINQ(FormFields.Branches).Where(function (item) {
819                    return item.Title.toLowerCase().indexOf(query.toLowerCase()) > -1
820                });
821            }
822            this.RenderBranches(branchItems.items);
823            nbdBranchSelector.initMap(branchItems.items);
824        }
825    },
826    LoadBranches: function () {
827        if ($('.branch-selector').length > 0) {
828            var settingsId = $('.branch-selector').data('settingsid');
829            if (settingsId) {
830                $.ajax({
831                    type: 'POST',
832                    url: '/enbdsecurities/v1/branchatm/getbranchandatms',
833                    data: {
834                        'ParentId': settingsId,
835                        'IsBranchOnly': true
836                    },
837                    success: function (data) {
838                        FormFields.Branches = data.BranchAtms;
839                        FormFields.RenderBranches(data.BranchAtms);
840                        nbdBranchSelector.init();
841                        nbdBranchSelector.initMap(data.BranchAtms);
842                        $("#branch-search").on('change keyup paste', function () {
843                            FormFields.ApplyBranchFilter();
844                        });
845                        $(".emirate-field").on('change', function () {
846                            FormFields.ApplyBranchFilter();
847                        });
848                    }
849                });
850            }
851        }
852    },
853    PickRadio: function () {
854        const radioBtn = $('.radio-card-btn-checker'),
855            radioWrapperCard = $('.pick-cards__item');
856
857        if (radioBtn) {
858            radioBtn.each(function () {
859                $(this).on('change', function () {
860                    // alert();
861                    //if ($(this).is(':checked')) {
862                    //    let currentCard = $(this).closest(radioWrapperCard);
863                    //    radioWrapperCard.removeClass('is-active');
864                    //    currentCard.addClass('is-active');
865                    //}
866                    //if ($(this).hasClass('iban-account-no')) {
867                    //    var fieldId = $(this).data('fieldid');
868                    //    if (fieldId) {
869                    //        var oldValue = $('[name="' + fieldId + '"]').val();
870                    //        $('[name="' + fieldId + '"]').val(oldValue + "," + $(this).val());
871                    //    }
872                    //}
873                });
874
875                if ($(this).is(':checked')) {
876                    let currentCard = $(this).closest(radioWrapperCard);
877                    currentCard.addClass('is-active');
878                }
879            })
880        }
881        $('.radio-card-pickup-valid').each(function () {
882            $(this).on('click', function () {
883                if ($(this).is(':checked')) {
884                    let currentCard = $(this).closest(radioWrapperCard);
885                    radioWrapperCard.removeClass('is-active');
886                    currentCard.addClass('is-active');
887                } else {
888                    currentCard.removeClass('is-active');
889                }
890                if ($(this).hasClass('iban-account-no')) {
891                    var fieldId = $(this).data('fieldid');
892                    if (fieldId) {
893                        var oldValue = $('[name="' + fieldId + '"]').val();
894                        $('[name="' + fieldId + '"]').val(oldValue + "," + $(this).val());
895                    }
896                }
897            });
898
899        });
900    },
901    CheckBox: function () {
902        $('.custom-checkbox input[type="checkbox"]').each(function () {
903            if ($(this).data('trigger-method')) {
904                $(this).change(function () {
905                    if ($(this).is(':checked')) {
906                        eval($(this).data('trigger-method'))
907                    }
908                })
909            }
910        });
911    },
912    FLoatLabel: function () {
913        var floatContainers = document.querySelectorAll('.float-label');
914        const handleFocus = (e) => {
915            const target = e.target;
916            target.parentNode.classList.add('active');
917            if (target.getAttribute('data-placeholder')) {
918                target.setAttribute('placeholder', target.getAttribute('data-placeholder'));
919            }
920        };
921
922        const handleHover = (e) => {
923            const target = e.target;
924            if ($(target).hasClass('input-mask-field')) {
925                target.parentNode.classList.add('active');
926                if (target.getAttribute('data-placeholder')) {
927                    target.setAttribute('placeholder', target.getAttribute('data-placeholder'));
928                }
929            }
930        };
931
932        // remove active class and placeholder
933        const handleBlur = (e) => {
934            const target = e.target;
935            if (!target.value) {
936                target.parentNode.classList.remove('active');
937            }
938            target.removeAttribute('placeholder');
939        };
940        // register events
941        const bindEvents = (element) => {
942            const floatField = element.querySelector('.float-label__input');
943            floatField.addEventListener('focus', handleFocus);
944            floatField.addEventListener('blur', handleBlur);
945            floatField.addEventListener("mouseover", handleHover);
946        };
947
948        floatContainers.forEach((element) => {
949            if (element.querySelector('.float-label__input').value) {
950                element.classList.add('active');
951            }
952
953            bindEvents(element);
954        });
955        $('textarea').each(function () {
956            $(this).on('focus', function () {
957                $(this).parent('.float-label-textarea').addClass("active");
958            })
959            $(this).on('blur', function () {
960                if (!$(this).val()) {
961                    $(this).parent('.float-label-textarea').removeClass("active");
962                }
963
964            })
965        });
966    },
967    OTPInput: function () {
968        const $inp = $(".otp-input .form-control");
969        $inp.on('paste', function (ev) {
970            const clip = ev.originalEvent.clipboardData.getData('text').trim();
971            // Allow numbers only
972            //if (!/\d{5}/.test(clip)) return ev.preventDefault(); // Invalid. Exit here
973            // Split string to Array or characters
974            const s = [...clip];
975            // Populate inputs. Focus last input.
976            $inp.val(i => s[i]).eq(4).focus();
977        });
978        $inp.on('keydown', function (ev) {
979            const i = $inp.index(this);
980            if (!this.value && ev.key === "Backspace" && i) $inp.eq(i - 1).focus();
981        });
982        $inp.on('input', function (ev) {
983            const i = $inp.index(this);
984            if (this.value) $inp.eq(i + 1).focus();
985        });
986    },
987    Selectize: function () {
988        $('body').find('.select-selectize').on('select2:closing', function (evt) {
989            var $select = $(this),
990                $formGroup = $select.parents('.form-group-select');
991
992            $select.parsley().validate();
993
994            if ($select.val() == "") {
995                $formGroup.removeClass('select2-has-value');
996            }
997            else {
998                $formGroup.addClass('select2-has-value');
999            }
1000        });
1001
1002        $('body').find('.select-selectize').on('select2:select', function (evt) {
1003            var $select = $(this),
1004                $formGroup = $select.parents('.form-group-select');
1005
1006            if ($(this).attr('multiple')) {
1007                if ($select.val() == "") {
1008                    $formGroup.removeClass('select2-has-value');
1009                }
1010                else {
1011                    $formGroup.addClass('select2-has-value');
1012                }
1013            }
1014        });
1015
1016        $(".select-selectize").each(function () {
1017            var self = $(this),
1018                parent = self.parents('.form-group-select'),
1019                parentIsDisabled = parent.data('disabled') || false;
1020
1021            if (parentIsDisabled) {
1022                var optionsWithValue = self.find('option').filter(function () {
1023                    return $(this).attr('value') != "";
1024                });
1025
1026                if (optionsWithValue.length <= 1) { // disabled only if there's more than 1 valid value
1027                    parent.addClass('disabled');
1028                }
1029            }
1030
1031            if ($(this).data('select-search')) {
1032                $(this).select2({
1033                    theme: 'bootstrap4',
1034                    width: $(this).data('width') ? $(this).data('width') : $(this).hasClass('w-100') ? '100%' : 'style',
1035                    placeholder: $(this).data('placeholder'),
1036                    allowClear: Boolean($(this).data('allow-clear')),
1037                    closeOnSelect: !$(this).attr('multiple')
1038                });
1039            } else {
1040                $(this).select2({
1041                    theme: 'bootstrap4',
1042                    width: $(this).data('width') ? $(this).data('width') : $(this).hasClass('w-100') ? '100%' : 'style',
1043                    placeholder: $(this).data('placeholder'),
1044                    allowClear: Boolean($(this).data('allow-clear')),
1045                    closeOnSelect: !$(this).attr('multiple'),
1046                    minimumResultsForSearch: Infinity
1047                });
1048            }
1049            if ($(this).attr('multiple')) {
1050                $(this).parents('.form-group-select').find('textarea.select2-search__field').attr('placeholder', '')
1051            }
1052        });
1053    },
1054    RangeSlider: function () {
1055        $(".js-range-slider").ionRangeSlider({
1056            hide_min_max: true,
1057        });
1058    },
1059    Recaptcha: function () {
1060        var $captcha = $('#recaptcha');
1061        if ($captcha.length > 0 && $captcha.data('clientid') == undefined) { // prevent it from reinitializing
1062            grecaptcha.ready(function () {
1063                var captchafieldId = $captcha.data('fieldid')
1064                var clientId = grecaptcha.render('recaptcha', {
1065                    'size': 'invisible'
1066                });
1067                grecaptcha.execute(clientId, {
1068                    action: 'action_name'
1069                })
1070                    .then(function (token) {
1071                        $('[name="' + captchafieldId + '"]').val(token);
1072                    });
1073
1074                $captcha.data('clientid', clientId);
1075                setTimeout(function () {
1076                    FormFields.RecaptchaReset()
1077                }, 60000);
1078            });
1079
1080        }
1081    },
1082    RecaptchaReset: function (targetId) {
1083        targetId = targetId || '#recaptcha';
1084
1085        var $captcha = $(targetId);
1086        if ($captcha.length > 0 && typeof grecaptcha !== 'undefined') {
1087            var captchafieldId = $captcha.data('fieldid')
1088            var clientId = $captcha.data('clientid');
1089
1090            grecaptcha.execute(clientId, {
1091                action: 'action_name'
1092            }).then(function (token) {
1093                $('[name="' + captchafieldId + '"]').val(token);
1094            });
1095        }
1096    },
1097    DatePicker: function () {
1098        $('.datepicker-field').each(function (i, element) {
1099            var datepicker;
1100            if ($(element).data('date-start-date')) {
1101                datepicker = new Datepicker(element, {
1102                    autohide: true,
1103                    format: "dd/mm/yyyy",
1104                    language: ENBD.CurrentLanguage,
1105                    minDate: new Date(),
1106
1107                });
1108            }
1109            if ($(element).data('date-end-date')) {
1110                datepicker = new Datepicker(element, {
1111                    autohide: true,
1112                    format: "dd/mm/yyyy",
1113                    language: ENBD.CurrentLanguage,
1114                    maxDate: new Date(),
1115                });
1116            }
1117            if ($(element).data('date-default-date')) {
1118                var defaultDate = parseInt($(element).data('date-default-date'));
1119                if (datepicker) {
1120                    datepicker.setDate(defaultDate);
1121                } else {
1122                    datepicker = new Datepicker(element, {
1123                        autohide: true,
1124                        format: "dd/mm/yyyy",
1125                        language: ENBD.CurrentLanguage,
1126                        defaultViewDate: defaultDate,
1127                    });
1128                }
1129            }
1130        })
1131
1132    },
1133    NumberField: function () {
1134        $('.js-inputmask-number').inputmask({
1135            regex: "\\d*",
1136            showMaskOnHover: false,
1137        });
1138    },
1139    MaskInputField: function () {
1140        $('[data-custominputmask]').each(function (e) {
1141            try {
1142                var maskFormat = $(this).data('custominputmask');
1143                if ((maskFormat && typeof maskFormat !== 'string') ||
1144                    (maskFormat && typeof maskFormat === 'string' && maskFormat.indexOf('yearrange') < 0)) {
1145                    $(this).inputmask(maskFormat);
1146                }
1147            } catch (ex) {
1148
1149            }
1150        });
1151    },
1152    RadioWithInput: function () {
1153        var radios = $('.verify-user__field input[type="radio"]');
1154
1155        radios.on('change', function () {
1156            radios.each(function () {
1157                var radio = $(this);
1158
1159                if (radio.is(':checked')) return;
1160
1161                var inpContainer = radio.parents('.pick-cards__item').find('.pick-cards__lists');
1162
1163                inpContainer.find('input').each(function () {
1164                    var inp = $(this);
1165
1166                    switch (inp.attr('type')) {
1167                        case 'radio':
1168                        case 'checkbox':
1169                            inp.prop('checked', false);
1170                            break;
1171                        default:
1172                            inp.val('');
1173                    }
1174
1175                    inp.parsley().reset();
1176                    inp.parents('.float-label').removeClass('active');
1177                });
1178
1179                inpContainer.find('select').each(function () {
1180                    var sel = $(this);
1181
1182                    if (sel.hasClass('selectized')) {
1183                        var selectize = sel[0].selectize,
1184                            value = '';
1185
1186                        for (var key in selectize.options) {
1187                            var option = selectize.options[key];
1188                            if (option && option.$order == 1) {
1189                                value = key;
1190                                break;
1191                            }
1192                        }
1193
1194                        if (value) {
1195                            selectize.clear(true);
1196                            selectize.setValue(value);
1197                        }
1198                    } else {
1199                        sel.val();
1200                    }
1201
1202                    sel.parsley().reset();
1203                    sel.parents('.float-label').removeClass('active');
1204                })
1205            });
1206        });
1207    },
1208    AcceptAlphaOnly: function () {
1209        $('.accept-alpha-only').keypress(function (e) {
1210            var regex = new RegExp("^[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FFa-zA-Z]+[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FFa-zA-Z-_]*$");
1211            var strigChar = String.fromCharCode(!e.charCode ? e.which : e.charCode);
1212            if (regex.test(strigChar)) {
1213                return true;
1214            }
1215            return false
1216        });
1217    },
1218    AcceptAlphaNumericOnly: function () {
1219        $('.accept-alphanumeric-only').keypress(function (e) {
1220            var regex = new RegExp("^[a-zA-Z0-9]+$");
1221            var strigChar = String.fromCharCode(!e.charCode ? e.which : e.charCode);
1222            if (regex.test(strigChar)) {
1223                return true;
1224            }
1225            return false
1226        });
1227    },
1228    AcceptNumericOnly: function () {
1229        $('.accept-numeric-only').keypress(function (e) {
1230            var specialKeys = new Array();
1231            specialKeys.push(8); //Backspace
1232            var keyCode = e.which ? e.which : e.keyCode
1233            if (((keyCode >= 48 && keyCode <= 57) || specialKeys.indexOf(keyCode) != -1)) {
1234                return true;
1235            }
1236            return false
1237        });
1238    },
1239    MaskEmailInput: function () {
1240        var $mainInput = $(".mainemailmaskinput");
1241        var $maskInput = $('input[name="' + $mainInput.data('target') + '"]');
1242        $('.maskemailinput').keydown(function (e) {
1243            var key = e.keyCode || e.charCode
1244
1245            if (key == 46) return false;
1246        });
1247
1248        $('.maskemailinput').keyup(function (e) {
1249            var a = $maskInput.val(); //ge
1250
1251            if (e.keyCode != 8) {
1252                var index = e.target.selectionStart;
1253                var curentchar = a.substring($mainInput.val().length);
1254                $mainInput.val($mainInput.val() + curentchar);
1255            }
1256            else {
1257                var index = e.target.selectionStart;
1258                var finalString = $mainInput.val().slice(0, index) + $mainInput.val().slice(index + 1);
1259
1260                $mainInput.val(finalString);
1261            }
1262
1263            var emailValid = new RegExp(/(.{2})(.*)(?=@)/);
1264
1265            if (emailValid.test(a)) {
1266                var t = $maskInput.val().replace(/(.{2})(.*)(?=@)/, function (gp1, gp2, gp3) {
1267                    for (let i = 0; i < gp3.length; i++) {
1268                        gp2 += "*";
1269                    }
1270
1271                    return gp2;
1272                });
1273
1274                $maskInput.val(t);
1275            }
1276            else {
1277                var t = $maskInput.val().replace(/(.{2})(.*)/, function (gp1, gp2, gp3) {
1278                    for (let i = 0; i < gp3.length; i++) {
1279                        gp2 += "*";
1280                    }
1281
1282                    return gp2;
1283                });
1284
1285
1286                $maskInput.val(t);
1287            }
1288
1289            if ($maskInput.val().length == 0) {
1290                $mainInput.val('');
1291            }
1292
1293
1294        });
1295    },
1296    MaskPhoneInput: function () {
1297        var $mainInput = $(".mainphonemaskinput");
1298        var $maskInput = $('input[name="' + $mainInput.data('target') + '"]');
1299        $('.maskphoneinput').keydown(function (e) {
1300            var key = e.keyCode || e.charCode
1301
1302            if (key == 46) return false;
1303        });
1304
1305        $('.maskphoneinput').keyup(function (e) {
1306            var a = $maskInput.val(); //ge
1307
1308            if (e.keyCode != 8) {
1309                var index = e.target.selectionStart;
1310                var curentchar = a.substring($mainInput.val().length);
1311                $mainInput.val($mainInput.val() + curentchar);
1312            }
1313            else {
1314                var index = e.target.selectionStart;
1315                var finalString = $mainInput.val().slice(0, index) + $mainInput.val().slice(index + 1);
1316
1317                $mainInput.val(finalString);
1318            }
1319
1320            var emailValid = new RegExp(/(.{2})(.*)(?=@)/);
1321
1322            if (emailValid.test(a)) {
1323                var t = $maskInput.val().replace(/(.{2})(.*)(?=@)/, function (gp1, gp2, gp3) {
1324                    for (let i = 0; i < gp3.length; i++) {
1325                        gp2 += "*";
1326                    }
1327
1328                    return gp2;
1329                });
1330
1331                $maskInput.val(t);
1332            }
1333            else {
1334                var t = $maskInput.val().replace(/(.{2})(.*)/, function (gp1, gp2, gp3) {
1335                    for (let i = 0; i < gp3.length; i++) {
1336                        if (i >= 5) {
1337                            gp2 += gp3[i];
1338                        }
1339                        else {
1340                            gp2 += "*";
1341                        }
1342                    }
1343
1344                    return gp2;
1345                });
1346
1347
1348                $maskInput.val(t);
1349            }
1350
1351
1352            if ($maskInput.val().length == 0) {
1353                $mainInput.val('');
1354            }
1355
1356        });
1357    },
1358    UpdateReviewFieldValues: function () {
1359        $('.review-field-value').each(function (i, element) {
1360            var field = $("[name='" + $(element).data('fieldid') + "']");
1361            var fileFields = $('[name^=' + $(element).data('fieldid') + '][type=file]');
1362            var fieldValue = field.val();
1363            if (field.hasClass('select-with-input')) {
1364                var selectfield = $("[name='" + $(element).data('fieldid') + "-select']")
1365                if (selectfield)
1366                    fieldValue = selectfield.val() + ' ' + field.val().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
1367            }
1368            else if (field.hasClass('phone-field')) {
1369                var selectfield = $("[name='phonecode-" + $(element).data('fieldid') + "']")
1370                if (selectfield)
1371                    fieldValue = selectfield.val() + field.val();
1372
1373            } else if (field.hasClass('js-range-slider')) {
1374                fieldValue = field.val() + field.data('postfix');
1375            }
1376            else if (field.hasClass('branch-selector__item-input')) {
1377                var selectedBranch = $("[name='" + $(element).data('fieldid') + "']:checked").parent().find('.branch-selector__item-title').text()
1378                if (selectedBranch) {
1379                    fieldValue = selectedBranch.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "");
1380                }
1381            }
1382            else if (field.is("select")) {
1383                var selectedOption = $("[name='" + $(element).data('fieldid') + "'] option:selected").text()
1384                if (selectedOption) {
1385                    fieldValue = selectedOption.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "");
1386                }
1387            }
1388            else if (field.is(':radio')) {
1389                if (field.filter(':checked').val() != '') {
1390                    fieldValue = field.filter(':checked').val();
1391                }
1392            }
1393            else if (field.hasClass('group-checkbox')) {
1394                var groupValue = [];
1395                $.each($("input[name='" + field.attr("name") + "']:checked"), function () {
1396                    groupValue.push($(this).val());
1397                });
1398                fieldValue = groupValue.join(',');
1399            }
1400            if (fileFields && fileFields.length > 0) {
1401                //uploaded as two
1402                var fileFieldList1 = $("[name^='" + $(element).data('fieldid') + "-file-1']");
1403                var fileFieldToggle = $("[name^='" + $(element).data('fieldid') + "-toggle']");
1404                var reviewParent = $(element).parent().parent().find("[data-filefieldid='" + $(element).data('fieldid') + "']");
1405                if (fileFieldToggle.length > 0) {
1406                    if (fileFieldToggle.is(":checked")) {
1407                        //One file Uploaded
1408                        var oneFileFieldList = $("[name='" + $(element).data('fieldid') + "']");
1409                        if (oneFileFieldList.length > 0) {
1410                            var oneFileField = oneFileFieldList.first();
1411                            var files = oneFileField[0].files;
1412                            if (files.length > 0 && reviewParent.length == 3) {
1413                                $(reviewParent[2]).find('.docname3').text(files[0].name);
1414                                $(reviewParent[2]).next('.text-splite-link').find('.review-field-value-3').attr('data-doctitle', files[0].name);
1415                                $(reviewParent[2]).find('.review-field-value-3').attr('data-doclink', URL.createObjectURL(files[0]));
1416                                $(reviewParent[2]).removeClass('d-none');
1417                                $(reviewParent[0]).addClass('d-none')
1418                                $(reviewParent[1]).addClass('d-none')
1419                            }
1420                        }
1421                    } else {
1422                        //Add field
1423                        //check visible in review fields
1424                        if (fileFieldList1.length > 0) {
1425                            var fileField = fileFieldList1.first();
1426                            var files = fileField[0].files
1427                            if (files.length > 0) {
1428                                $(element).parent().find('.docname').text(files[0].name);
1429                                $(element).attr('data-doctitle', files[0].name);
1430                                $(element).attr('data-doclink', URL.createObjectURL(files[0]));
1431                                $(element).parent().removeClass('d-none');
1432                            }
1433                            else {
1434                                $(element).parent().addClass('d-none')
1435                            }
1436                        }
1437                        var fileFieldList2 = $("[name^='" + $(element).data('fieldid') + "-2']");
1438                        if (fileFieldList2.length > 0) {
1439                            var fileField2 = fileFieldList2.first();
1440                            var files2 = fileField2[0].files;
1441                            if (files2.length > 0) {
1442                                $(element).parent().next('.text-splite-link').find('.docname2').text(files2[0].name);
1443                                $(element).parent().next('.text-splite-link').find('.review-field-value-2').attr('data-doctitle', files2[0].name);
1444                                $(element).parent().next('.text-splite-link').find('.review-field-value-2').attr('data-doclink', URL.createObjectURL(files2[0]));
1445                                $(element).parent().next('.text-splite-link').removeClass('d-none');
1446                            }
1447                            else {
1448                                $(element).parent().next('.text-splite-link').addClass('d-none')
1449                            }
1450                        }
1451                        if (reviewParent.length == 3) {
1452                            $(reviewParent[2]).addClass('d-none')
1453                        }
1454                    }
1455                } else {
1456                    //One file Uploaded
1457                    var oneFileFieldList = $("[name='" + $(element).data('fieldid') + "']");
1458                    if (oneFileFieldList.length > 0) {
1459                        var oneFileField = oneFileFieldList.first();
1460                        var files = oneFileField[0].files;
1461                        if (files.length > 0) {
1462                            $(element).parent().find('.docname').text(files[0].name);
1463                            $(element).attr('data-doctitle', files[0].name);
1464                            $(element).attr('data-doclink', URL.createObjectURL(files[0]));
1465                            $(element).parent().removeClass('d-none');
1466                        }
1467                    }
1468                }
1469            }
1470            else if (field.hasClass('radio-selector-field')) {
1471                var selectedOption = $("[name='" + $(element).data('fieldid') + "']:checked");
1472                if (selectedOption) {
1473                    $(element).find('.review-image').attr('src', selectedOption.data('image'));
1474                    $(element).find('.review-field-title').text(selectedOption.data('title'));
1475                    $(element).find('.review-field-description').text(selectedOption.data('description'));
1476                }
1477                else {
1478                    $(element).addClass('d-none')
1479                }
1480            }
1481            else if (fieldValue !== undefined && fieldValue !== '') {
1482                $(element).text(fieldValue);
1483            }
1484            else {
1485                $(element).parent().addClass('d-none');
1486            }
1487        });
1488    },
1489    ErrorDialog: {
1490        Init: function () {
1491            if (this.__isInitialized) return;
1492
1493            var $modal = $('#errorModal');
1494            var title = $modal.find('h2');
1495            var message = $modal.find('p');
1496            var button = $modal.find('.modal-footer > button');
1497
1498            this.__defaultTitle = $modal.data('defaulttitle');
1499            this.__defaultMessage = $modal.data('defaultmessage');
1500            this.__defaultButtonLabel = button.data('label');
1501
1502            $modal.removeAttr('data-defaulttitle').removeData('defaulttitle');
1503            $modal.removeAttr('data-defaultmessage').removeData('defaultmessage');
1504            button.removeAttr('data-label').removeData('label');
1505
1506            this.__isInitialized = true;
1507            this.__$modal = $modal;
1508            this.__title = title;
1509            this.__message = message;
1510            this.__button = button;
1511        },
1512        Show: function (message, title, button, showAsHTML) {
1513            this.__button.off('click');
1514            this.__Show(message, title, button, showAsHTML);
1515        },
1516        ShowAndReload: function (message, title, button, showAsHTML) {
1517            var that = this;
1518
1519            this.__$modal.on('hidden.bs.modal', function () {
1520                window.location.reload();
1521            });
1522
1523            this.__Show(message, title, button);
1524        },
1525        __Show: function (message, title, button, showAsHTML) {
1526            if (!title) title = this.__defaultTitle;
1527            if (!message) message = this.__defaultMessage;
1528            if (!button) button = this.__defaultButtonLabel;
1529
1530            this.__title.text(title);
1531            if (showAsHTML) this.__message.html(message);
1532            else this.__message.text(message);
1533            this.__button.text(button);
1534            this.__$modal.modal('show');
1535        }
1536    },
1537    ProgressLoader: {
1538        Init: function () {
1539
1540        },
1541        Show: function () {
1542            $('body').addClass('overflow-hidden');
1543            $(".progresser-loader").fadeIn();
1544            $(".progresser-loader__text-list--item").hide();
1545            var count = $(".progresser-loader__text-list--item").length;
1546            var counter = 0;
1547            $($(".progresser-loader__text-list--item")[counter]).fadeIn();
1548            var check = setInterval(function () {
1549                $($(".progresser-loader__text-list--item")[counter]).fadeOut(
1550                    function () {
1551                        counter++;
1552                        $($(".progresser-loader__text-list--item")[counter]).fadeIn(750);
1553                    }
1554                );
1555                if (counter + 2 == count) {
1556                    clearInterval(check);
1557                    return;
1558                }
1559            }, 3000);
1560        },
1561        Hide: function (message, title, button) {
1562            $('body').removeClass('overflow-hidden');
1563            $(".progresser-loader").fadeOut();
1564        }
1565    },
1566    SelectizeDropdown: function (selectizeField, addedFieldGroup) {
1567        //Destroy selectize
1568        selectizeField.removeClass('select2-hidden-accessible');
1569        addedFieldGroup.find('.select2-container').remove();
1570        // Reinitialize selectize
1571        if (selectizeField.data('select-search')) {
1572            selectizeField.select2({
1573                theme: 'bootstrap4',
1574                width: selectizeField.data('width') ? selectizeField.data('width') : selectizeField.hasClass('w-100') ? '100%' : 'style',
1575                placeholder: selectizeField.data('placeholder'),
1576                allowClear: Boolean(selectizeField.data('allow-clear')),
1577                closeOnSelect: !selectizeField.attr('multiple')
1578            });
1579        } else {
1580            selectizeField.select2({
1581                theme: 'bootstrap4',
1582                width: selectizeField.data('width') ? selectizeField.data('width') : selectizeField.hasClass('w-100') ? '100%' : 'style',
1583                placeholder: selectizeField.data('placeholder'),
1584                allowClear: Boolean(selectizeField.data('allow-clear')),
1585                closeOnSelect: !selectizeField.attr('multiple'),
1586                minimumResultsForSearch: Infinity
1587            });
1588        }
1589        FormFields.Selectize();
1590
1591    },
1592    AddMoreGroupFields: function (optionField) {
1593        var groupId = optionField.data('group-fieldid');
1594        var groupFields = $(".form-group[group-fieldid='" + groupId + "']");
1595        var limit = optionField.data('limit');
1596        groupFields.each(function () {
1597            var fieldId = $(this).data('group-fieldid');
1598            var formfieldGroup = $('.form-group[data-fieldid="' + fieldId + '"]');
1599            var formfieldCount = formfieldGroup.length;
1600            var formField = formfieldGroup.first();
1601            if (formfieldCount < parseInt(limit)) {
1602                //Remove option field btn
1603                var removeOptionLastGroupField = $('.remove-more-group[data-field-group-remove="' + groupId + '"]').last();
1604                removeOptionLastGroupField.after(formField.clone());
1605                //Newly added form field group
1606                var addedFieldGroup = $('.form-group[data-fieldid="' + fieldId + '"]').last();
1607                var removeOptionField = $('.remove-more-group[data-field-group-remove="' + groupId + '"][data-fieldid=' + fieldId + ']').last();
1608                if (removeOptionField.length > 0) {
1609                    var fieldIndex = parseInt(removeOptionField.data('group-field-index'));
1610                    addedFieldGroup.after(removeOptionField.clone());
1611                    var newIndex = fieldIndex + 1;
1612                    var addedRemoveFieldOption = $('.remove-more-group[data-field-group-remove="' + groupId + '"][data-fieldid=' + fieldId + ']').last();
1613                    addedRemoveFieldOption.attr('data-group-field-index', newIndex);
1614                    if (addedRemoveFieldOption.hasClass('remove-more-group-field')) {
1615                        if (addedRemoveFieldOption.data('isnoremovegroup') != 'True') {
1616                            addedRemoveFieldOption.removeClass('d-none');
1617                        }
1618                    }
1619                    //handle for file type and radio
1620                    //Update name and id for cloned field
1621                    var fieldInGroup = addedFieldGroup.find('[name^=' + fieldId + ']');
1622                    if (fieldInGroup.attr('type') == 'file') {
1623                        fieldInGroup.each(function () {
1624                            var fieldName = $(this).attr('name');
1625                            $(this).attr('name', fieldName + '-option-' + newIndex)
1626                                .attr('id', fieldName + '-option-' + newIndex);
1627                            var $parent = $(this).closest('.upload-documents-side');
1628                            $parent.find('label').attr('for', fieldName + '-option-' + newIndex);
1629                            const $progressBar = $parent.find(".progress-bar-file");
1630                            $progressBar.attr('value', "100");
1631                            const $dropInputText = $parent.find(".upload-input-text");
1632                            const $dropInputEmpty = $parent.find('.upload-documents__empty');
1633                            const $dropInputAdded = $parent.find('.upload-documents__added');
1634                            $dropInputText.text($dropInputText.data('text'));
1635                            $dropInputEmpty.css('display', 'flex');
1636                            $dropInputAdded.css('display', 'none');
1637                            $parent.removeClass('loading');
1638                            $dropInputAdded.removeClass('complete');
1639                        });
1640                    } else {
1641                        fieldInGroup.attr('name', fieldId + '-option-' + newIndex)
1642                            .attr('id', fieldId + '-option-' + newIndex);
1643                    }
1644                    var addedField = addedFieldGroup.find('[name=' + fieldId + '-option-' + newIndex + ']');
1645                    addedField.val('');
1646                    //Reinitialize if a selectize field
1647                    if (addedField.length > 0 && addedField.hasClass('js-select-custom')) {
1648                        //Update parent                        
1649                        //Reinitialize Selectize
1650                        FormFields.SelectizeDropdown(fieldId);
1651                        //FormFields.InitializeSelectizeDropdown(fieldId);
1652                    }
1653                    else if (addedField.length > 0 && addedField.hasClass('datepicker-field')) {
1654                        //Destroy datepicker
1655                        addedField.removeClass('datepicker-input');
1656                        addedField.parent().find('datepicker-dropdown').remove();
1657                        //Reinitialize datepicker
1658                        FormFields.DatePicker();
1659                    }
1660                    else if (addedField.attr('type') == 'file') {
1661                        var additonalAddedField = addedFieldGroup.find('[name=' + fieldId + '-file-1-option-' + newIndex + ']');
1662                        additonalAddedField.val('');
1663                        var additonalAddedField2 = addedFieldGroup.find('[name=' + fieldId + '-2-option-' + newIndex + ']');
1664                        additonalAddedField2.val('');
1665                    }
1666                }
1667                //Reset Label
1668                addedField.parent('.float-label').removeClass('active')
1669                //$('.remove-more-group-field[data-field-group-remove="' + groupId + '"]').removeClass('d-none');
1670                formfieldCount += 1;
1671                if (typeof (nbdUploadDocuments) != "undefined") {
1672                    nbdUploadDocuments.init();
1673                }
1674            }
1675            if (formfieldCount >= parseInt(limit)) {
1676                optionField.addClass('d-none');
1677            }
1678        });
1679    },
1680    // override these function if this has custom functionality on some other forms.
1681    // for example:
1682    // FormFields.TriggerQuickHelp = function() {
1683    //    .. your function body
1684    // }
1685    TriggerQuickHelp: function () {
1686        // function body
1687    },
1688    TriggerMethod: function () {
1689        if ($('.form-control[data-trigger-fields]').length > 0) {
1690            $('.form-control[data-trigger-fields]').each(function () {
1691                var targetField = $(this);
1692                var triggerFields = targetField.data("trigger-fields");
1693                var triggerMethod = targetField.data('trigger-method')
1694                if (triggerFields && triggerMethod) {
1695                    var triggerFieldItems = triggerFields.split(',');
1696                    $(triggerFieldItems).each(function (i, element) {
1697                        if ($('[name="' + element + '"]').length > 0) {
1698                            $('[name="' + element + '"]').off('click').on('keyup change', function () {
1699                                eval(triggerMethod);
1700                            });
1701                        }
1702                    });
1703                }
1704            })
1705        }
1706    },
1707    CalculateHomeLoanEligibleAmount: function (currentField, dateofBirthField, nationalityField, employmentField,
1708        ccLimitField, plMonthlyField, incomeField, monthlyliabitiesField, eligibleLoanField, tenorField, expiryDateField) {
1709
1710        var dateofBirth = $('[name="' + dateofBirthField + '"]').val();
1711        var nationality = $('[name="' + nationalityField + '"]').val();
1712        var employment = $('[name="' + employmentField + '"]').val();
1713        var ccLimit = $('[name="' + ccLimitField + '"]').val();
1714        var plMonthly = $('[name="' + plMonthlyField + '"]').val();
1715        var income = $('[name="' + incomeField + '"]').val();
1716        var currentFieldElement = $('[name="' + currentField + '"]');
1717        var monthlyliabitiesElement = $('[name="' + monthlyliabitiesField + '"]');
1718        var eligibleLoanElement = $('[name="' + eligibleLoanField + '"]');
1719        var tenorElement = $('[name="' + tenorField + '"]');
1720        var expiryDateElement = $('[name="' + expiryDateField + '"]');
1721        const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
1722            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
1723        ]; var todayDate = new Date();
1724        var expiryDate = new Date(todayDate.setDate(todayDate.getDate() + 15));
1725        var date, month, year;
1726        date = expiryDate.getDate();
1727        month = expiryDate.getMonth();
1728        year = expiryDate.getFullYear();
1729        var eligibilityLetter_expiry_date = date + "/" + monthNames[month] + "/" + year;
1730
1731        if (dateofBirth && nationality && employment && ccLimit && plMonthly && income && currentFieldElement.length > 0) {
1732            var dateParts = dateofBirth.split("/");
1733            // month is 0-based, that's why we need dataParts[1] - 1
1734            var dateOfBirthObject = new Date(+dateParts[2], dateParts[1] - 1, +dateParts[0]);
1735            var currentAgeYears = new Date().getFullYear() - dateOfBirthObject.getFullYear();
1736            var maxTenor, tenor, multipliers, eligible_loan_installment = 0;
1737            var nonUAEAge = parseInt(homeLoanConst.nonUAEAge);
1738            var defaultAge = parseInt(homeLoanConst.defaultAge);
1739            if (nationality != 'UAE NATIONAL') {
1740                maxTenor = 12 * (nonUAEAge - currentAgeYears)
1741            } else {
1742                maxTenor = 12 * (defaultAge - currentAgeYears)
1743            }
1744            var tenorLimit = parseInt(homeLoanConst.tenorLimit);
1745            if (maxTenor > tenorLimit) {
1746                tenor = tenorLimit
1747            } else {
1748                tenor = maxTenor
1749            }
1750            if (nationality == 'UAE NATIONAL' && employment == 'Salaried') {
1751                multipliers = parseFloat(homeLoanConst.homeLoanMultipliers.salariedUAENational);
1752            }
1753            else if (nationality != 'UAE NATIONAL' && employment == 'Salaried') {
1754                multipliers = parseFloat(homeLoanConst.homeLoanMultipliers.salariedNonUAE);
1755            }
1756            else if (employment == 'SelfEmployed') {
1757                multipliers = parseFloat(homeLoanConst.homeLoanMultipliers.selfEmployed);
1758            } else {
1759                multipliers = parseFloat(homeLoanConst.homeLoanMultipliers.default);;
1760            }
1761            var interest = parseFloat(homeLoanConst.interest);
1762            var cc_value = parseFloat(homeLoanConst.cc_value);
1763            var max_Loan = parseFloat(homeLoanConst.max_Loan);
1764            var cc_limit = parseFloat(ccLimit);
1765            var pl_month_pay = parseFloat(plMonthly);
1766            var cust_income = parseFloat(income);
1767
1768            var monthly_liabities = (cc_limit * cc_value) + pl_month_pay;
1769            var cust_income_pct = cust_income * 0.5;
1770            if (monthly_liabities <= cust_income_pct) {
1771                eligible_loan_installment = cust_income_pct - monthly_liabities;
1772            } else {
1773                eligible_loan_installment = 0;
1774            }
1775            var total_installment = eligible_loan_installment * tenor;
1776            var eligible_loan_sal = multipliers * cust_income;
1777            var pv_int = (interest) / 12;
1778            var pVal = 1 + pv_int;
1779            var x = Math.pow(pVal, - tenor);
1780            var y = Math.pow(pVal, tenor);
1781            var pv_value = (x * (pv_int - eligible_loan_installment + y * eligible_loan_installment)) / pv_int;
1782            var loanAmt_calc = Math.round(pv_value);
1783            var eligible_loan = 0;
1784            if (eligible_loan_installment != 0) {
1785                if (eligible_loan_sal > max_Loan) {
1786                    eligible_loan = max_Loan
1787                } else {
1788                    if (loanAmt_calc < eligible_loan_sal && loanAmt_calc < max_L
1788oan) {
1789                        eligible_loan = loanAmt_calc
1790                    } else if (loanAmt_calc > eligible_loan_sal && eligible_loan_sal < max_Loan) {
1791                        eligible_loan = loanAmt_calc;
1792                    } else {
1793                        eligible_loan = max_Loan;
1794                    }
1795                }
1796            } else {
1797                eligible_loan = 0;
1798            }
1799            var monthly_emi = total_installment / tenor
1800            currentFieldElement.val(monthly_emi);
1801            monthlyliabitiesElement.val(monthly_liabities);
1802            eligibleLoanElement.val(eligible_loan);
1803            tenorElement.val(tenor);
1804            expiryDateElement.val(eligibilityLetter_expiry_date);
1805        }
1806    },
1807    CalculatePersonalLoanEligibleAmount: function (employerNameField, organizationTypeField, monthlyIncomeField, aecbScoreField, countryNameField, monthofBankingField, lengthofServiceField, loanTenorField, creditcardLimitField, plmonthPayField, otherLoanField, nonaleEmployerNameField, interestRateField, emiField, eligibleAmountField, employerField, employerCategoryField, loanTypeField) {
1808        var employer_name = $('[name="' + employerNameField + '"]').val();//Input field from form.
1809        var organization_type = $('[name="' + organizationTypeField + '"]').val();//Input field from form.
1810        var monthly_income = parseInt($('[name="' + monthlyIncomeField + '"]').val());//Input field from form.
1811        var aecb_score = parseInt($('[name="' + aecbScoreField + '"]').val());//Input field from form.
1812        var country_name = $('[name="' + countryNameField + '"]').val();//Input field from form.
1813        var month_of_banking = parseInt($('[name="' + monthofBankingField + '"]').val());//Input field from form.
1814        var length_of_service = parseInt($('[name="' + lengthofServiceField + '"]').val());//Input field from form.
1815        var loan_tenor = parseInt($('[name="' + loanTenorField + '"]').val());
1816        var cc_limit = parseInt($('[name="' + creditcardLimitField + '"]').val());//Input field from form.
1817        var pl_month_pay = parseInt($('[name="' + plmonthPayField + '"]').val());//Input field from form.
1818        var other_loan = parseInt($('[name="' + otherLoanField + '"]').val());//Input field from form.
1819        var loan_type = $('[name="' + loanTypeField + '"]').val();//Input field from form.
1820        var interest = "";
1821        var category = "";
1822        var company_group = "";
1823        var country_filter = "";
1824        var nationality_risk = "";
1825        var interest_rate = ""
1826        var nationality_seg = "";
1827        var class_category = "";
1828        var multiples_reduce = 0;
1829        var exposure_reduce = 0;
1830        var eligible_loan = 0;
1831
1832        //check organization group based on type
1833        if (organization_type == "PRIVATE" || organization_type == "OTHERS") {
1834            company_group = "Group2";
1835        }
1836        else {
1837            company_group = "Group1";
1838        }
1839
1840        //check nationlity risk based on country    
1841        if (country_list.length > 0) {
1842            var country_Data = JSLINQ(country_list);
1843            country_filter = country_Data.Where(function (item) {
1844                return item.countryNationality.trim() == country_name.toUpperCase().trim()
1845            });
1846            if (country_filter.items.length > 0) {
1847                nationality_risk = country_filter.firstOrDefault().nationalityRisk.trim();
1848                nationality_seg = country_filter.firstOrDefault().nationalitySeg.trim();
1849            }
1850        }
1851
1852        //check company
1853        if (employer_list.length > 0 && employer_name && employer_name != undefined && employer_name != "") {
1854            var employer_Data = JSLINQ(employer_list);
1855            var employer_filter = employer_Data.Where(function (item) {
1856                return item.name_company.trim() == employer_name.trim()
1857            });
1858
1859            //check selected employer is available or not from employer list.
1860            if (employer_filter.count() == 0) {
1861                category = "NON ALE";
1862                class_category = "NON ALE";
1863                employer_name = $('[name="' + nonaleEmployerNameField + '"]').val();
1864            }
1865            else {
1866                category = employer_filter.firstOrDefault().category_employer;
1867                class_category = employer_filter.firstOrDefault().class_category;
1868            }
1869        }
1870        $('[name="' + employerField + '"]').val(employer_name);
1871        $('[name="' + employerCategoryField + '"]').val(category);
1872        // $('[name="' + monthofBankingField + '"]').val(month_of_banking);
1873
1874        if (pl_criteria.length > 0) {
1875            var pl_criteria_data = JSLINQ(pl_criteria);
1876            //calculate multiples
1877            var criteria_filter = pl_criteria_data.Where(function (item) {
1878                return item.nationality == nationality_seg && item.minSalary <= monthly_income && item.maxSalary >= monthly_income && item.minLOS <= length_of_service && item.maxLOS >= length_of_service && item.class_category == class_category && item.loanType == loan_type && item.minTenor <= loan_tenor && item.maxTenor >= loan_tenor && item.minMOB <= month_of_banking && item.maxMOB >= month_of_banking
1879            });
1880
1881            multiples_reduce = criteria_filter.items.reduce(function (total, record) {
1882                return parseInt(record.multiples) + parseInt(total);
1883            }, 0);
1884
1885            //calculate max exposure
1886            exposure_reduce = criteria_filter.items.reduce(function (total, record) {
1887                return parseInt(record.exposure) + parseInt(total);
1888            }, 0);
1889        }
1890
1891        if (pl_criteria_intrest.length > 0) {
1892            var pl_criteria_intrest_data = JSLINQ(pl_criteria_intrest);
1893            var pl_criteria_intrest_filter = pl_criteria_intrest_data.Where(function (item) {
1894                return item.aleFlag.trim() == category.trim() && item.nationalityRisk.trim() == nationality_risk && parseInt(item.mnAECB) <= aecb_score && parseInt(item.maxAECB) >= aecb_score && parseInt(item.minLos.split(',').join('')) <= length_of_service && parseInt(item.maxLOS.split(',').join('')) >= length_of_service && parseInt(item.minSalary.split(',').join('')) <= monthly_income && parseInt(item.maxSalary.split(',').join('')) >= monthly_income && item.companyGroup == company_group && parseInt(item.minMOB.split(',').join('')) <= month_of_banking && parseInt(item.maxMOB.split(',').join('')) >= month_of_banking
1895            });
1896
1897            //calculate monthly liabities
1898            var monthly_liabities = (cc_limit * cc_value) + pl_month_pay + other_loan;
1899
1900            //calculate emi
1901            var cust_income_pct = parseInt(monthly_income) * 0.5;
1902            var eligible_loan_installment = 0;
1903            if (monthly_liabities <= cust_income_pct) {
1904                eligible_loan_installment = cust_income_pct - monthly_liabities;
1905            }
1906            else {
1907                eligible_loan_installment = 0;
1908            }
1909
1910            //loan eligible amount
1911            if (loan_tenor == 12 && pl_criteria_intrest_filter.items.length > 0) {
1912                interest_rate = pl_criteria_intrest_filter.firstOrDefault().M12;
1913                interest = parseFloat(interest_rate) / 100;
1914            }
1915            else if (loan_tenor == 24 && pl_criteria_intrest_filter.items.length > 0) {
1916                interest_rate = pl_criteria_intrest_filter.firstOrDefault().M24;
1917                interest = parseFloat(interest_rate) / 100;
1918            }
1919            else if (loan_tenor == 36 && pl_criteria_intrest_filter.items.length > 0) {
1920                interest_rate = pl_criteria_intrest_filter.firstOrDefault().M36;
1921                interest = parseFloat(interest_rate) / 100;
1922            }
1923            else if (loan_tenor == 48 && pl_criteria_intrest_filter.items.length > 0) {
1924                interest_rate = pl_criteria_intrest_filter.firstOrDefault().M48;
1925                interest = parseFloat(interest_rate) / 100;
1926            }
1927            else if (loan_tenor == 60 && pl_criteria_intrest_filter.items.length > 0) {
1928                interest_rate = pl_criteria_intrest_filter.firstOrDefault().M60;
1929                interest = parseFloat(interest_rate) / 100;
1930            }
1931            $('[name="' + interestRateField + '"]').val(interest_rate);
1932        }
1933        var rate = parseFloat(interest / 12);
1934        var pmt = parseFloat(eligible_loan_installment);
1935        var fv = parseFloat(0);
1936        var x = Math.pow((1 + rate), (-loan_tenor));
1937        var y = Math.pow((1 + rate), loan_tenor);
1938        var pv_value = Math.abs(- (x * (fv * rate - pmt + y * pmt)) / rate);
1939        var loanAmt_calc = Math.round(pv_value);
1940        if (eligible_loan_installment != 0) {
1941            //calculate lowest of the 3 amounts
1942            eligible_loan = Math.min(monthly_income * multiples_reduce, Math.min(loanAmt_calc, exposure_reduce));
1943        }
1944        else {
1945            eligible_loan = 0
1946        }
1947        $('[name="' + eligibleAmountField + '"]').val(eligible_loan.toLocaleStr
1947ing());
1948        var monthly_emi = (rate * eligible_loan);
1949        var monthly_emi1 = Math.pow((1 + rate), loan_tenor);
1950        var monthly_emi2 = Math.pow((1 + rate), loan_tenor) - 1;
1951        var monthly_emi3 = monthly_emi * monthly_emi1;
1952        var monthly_emitotal = Math.round(monthly_emi3 / monthly_emi2);
1953        $('[name="' + emiField + '"]').val(monthly_emitotal.toLocaleString());
1954    },
1955
1956    CalculateAutoLoanEligibleAmount: function (ccLimitField, plMonthlyField, carTypeField, incomeField, eligibleLoanAmountField,
1957        emiFixedField, emiFlexiField, emiBalloonField) {
1958        var ccLimit = $('[name="' + ccLimitField + '"]').val();
1959        var plMonthly = $('[name="' + plMonthlyField + '"]').val();
1960        var income = $('[name="' + incomeField + '"]').val();
1961        var carType = $('input[name="' + carTypeField + '"]:checked').val();
1962        var eligibleLoanFieldElement = $('[name="' + eligibleLoanAmountField + '"]');
1963        var emiFixedFieldElement = $('[name="' + emiFixedField + '"]');
1964        var emiFlexiFieldElement = $('[name="' + emiFlexiField + '"]');
1965        var emiBalloonFieldElement = $('[name="' + emiBalloonField + '"]');
1966
1967        if (ccLimit && plMonthly && income && carType && eligibleLoanFieldElement.length > 0) {
1968            var tenor, multipliers, interest, eligible_loan_installment = 0;
1969            tenor = parseFloat(autoLoanConst.tenor);
1970            multipliers = parseFloat(autoLoanConst.multipliers);
1971            var cc_value = parseFloat(autoLoanConst.cc_value);
1972            var max_Loan = parseFloat(autoLoanConst.max_Loan);
1973            var cc_limit = parseFloat(ccLimit);
1974            var pl_month_pay = parseFloat(plMonthly);
1975            var cust_income = parseFloat(income);
1976            if (carType == 'New') {
1977                // interest = 0.0289;
1978                interest = parseFloat(autoLoanConst.carTypeFixedInterest.newCarInt);
1979            }
1980            else if (carType == 'Used') {
1981                //interest = 0.0299;
1982                interest = parseFloat(autoLoanConst.carTypeFixedInterest.usedCarInt);
1983            }
1984            interest = parseFloat(interest);
1985            var monthly_liabities = (cc_limit * cc_value) + pl_month_pay;
1986            var cust_income_pct = cust_income * 0.5;
1987            if (monthly_liabities <= cust_income_pct) {
1988                eligible_loan_installment = cust_income_pct - monthly_liabities;
1989            } else {
1990                eligible_loan_installment = 0;
1991            }
1992            // var total_installment = eligible_loan_installment * tenor;
1993            var eligible_loan_sal = multipliers * cust_income;
1994
1995            //Eligible Fixed
1996            var pv_int = (interest) / 12;
1997            var pVal = 1 + pv_int;
1998            var x = Math.pow(pVal, - tenor);
1999            var y = Math.pow(pVal, tenor);
2000            var fv = 0;
2001            //var pv_value = (x * (pv_int - eligible_loan_installment + y * eligible_loan_installment)) / pv_int;
2002            var pv_value = (x * (fv * pv_int - eligible_loan_installment + y * eligible_loan_installment)) / pv_int;
2003            var loanAmt_calc = Math.round(pv_value);
2004            var eligible_loan = 0;
2005            if (eligible_loan_installment != 0) {
2006                if (eligible_loan_sal > max_Loan) {
2007                    eligible_loan = max_Loan
2008                } else {
2009                    if (loanAmt_calc < eligible_loan_sal && loanAmt_calc < max_Loan) {
2010                        eligible_loan = loanAmt_calc
2011                    } else if (loanAmt_calc > eligible_loan_sal && eligible_loan_sal < max_Loan) {
2012                        eligible_loan = loanAmt_calc;
2013                    } else {
2014                        eligible_loan = max_Loan;
2015                    }
2016                }
2017            } else {
2018                eligible_loan = 0;
2019            }
2020            var netEligibleLoan = eligible_loan * 0.8;
2021            var calculatedEligibleLoan = Math.ceil(netEligibleLoan);
2022            console.log(netEligibleLoan);
2023            eligibleLoanFieldElement.val(calculatedEligibleLoan);
2024            //EMI calculations
2025            //var downPayment = (eligible_loan * 0.2);
2026            //var autoProtectValue = eligible_loan - downPayment;
2027            var autoProtectValue = netEligibleLoan;
2028            var autoProtect = 0;
2029            var totalLoanAmount = (autoProtectValue + autoProtect);
2030            var totalInterest = (totalLoanAmount * interest) * tenor / 12;
2031            var totalRecovery = (totalInterest + totalLoanAmount);
2032            var emi_fixed = Math.ceil(totalRecovery / tenor);
2033            console.log(emi_fixed);
2034            emiFixedFieldElement.val(emi_fixed);
2035
2036            //Flexi
2037            var eibor = parseFloat(autoLoanConst.eibor);
2038            var margin;
2039            if (carType == 'New') {
2040                //margin = 4.25;
2041                margin = parseFloat(autoLoanConst.carTypeFlexiMargin.newCarMargin);
2042            }
2043            else if (carType == 'Used') {
2044                //margin = 5.25;
2045                margin = parseFloat(autoLoanConst.carTypeFlexiMargin.usedCarMargin);
2046            }
2047            var totalInterest = parseFloat(margin) + eibor;
2048            var flexiConst = parseFloat(autoLoanConst.flexiConstant);
2049            var flatInterest = (totalInterest / flexiConst) / 100;
2050            var totalInterestAmount = Math.ceil((totalLoanAmount * flatInterest) * tenor / 12);
2051            var totalRecovery = (totalInterestAmount + totalLoanAmount);
2052            var emi_flexi = Math.ceil(totalRecovery / tenor);
2053            console.log(emi_flexi);
2054            emiFlexiFieldElement.val(emi_flexi);
2055
2056            //Balloon
2057            var amount = netEligibleLoan;
2058            var tenor = parseInt(autoLoanConst.balloonTenor);
2059            var interest = parseFloat(autoLoanConst.balloonInterest);
2060            var rvPct = parseFloat(autoLoanConst.rvPct);
2061
2062            //var downPayment = (amount * 0.2);
2063            //var autoProtectValue = (amount - downPayment);
2064            var autoProtectValue = netEligibleLoan;
2065            var autoProtect = 0;
2066            var totalLoanAmount = (autoProtectValue + autoProtect);
2067            var rvValue = (amount * rvPct);
2068            var loanAmount = ((amount - rvValue) + autoProtect);
2069
2070            var totalInterestAmount = (totalLoanAmount * interest * 2);
2071            var totalRecovery = (loanAmount + totalInterestAmount);
2072            console.log(Math.ceil(totalRecovery / tenor));
2073            var emiBalloon = Math.ceil(totalRecovery / tenor);
2074            emiBalloonFieldElement.val(emiBalloon);
2075        }
2076    }
2077}

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.