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.