PageSourceSearch

https://www.alinma.com/-/media/Themes/AlinmaNew/Portal/AlinmaNew/Scripts/eform-download.js

js alinma.com collected 2026-09-24 10:08:52 UTC 56,107 bytes, 947 lines download raw bytes

1$(document).ready(function () {
2
3    // ─────────────────────────────────────────────────────────────
4    // PDF.js worker path (Sitecore media library)
5    // ─────────────────────────────────────────────────────────────
6    if (typeof pdfjsLib !== 'undefined') {
7        pdfjsLib.GlobalWorkerOptions.workerSrc =
8            '/-/media/Themes/AlinmaNew/Portal/AlinmaNew/Scripts/pdf.worker.min.js';
9    }
10
11    // ─────────────────────────────────────────────────────────────
12    // i18n Translation Map
13    // ─────────────────────────────────────────────────────────────
14    var isArabic = $('html').attr('dir') === 'rtl' || $('html').attr('lang') === 'ar';
15    var i18n = {
16        en: {
17            fulfilledTitle:  'E-Form Fulfilled',
18            fulfilledDesc1:  'Your E-form has been fulfilled.',
19            fulfilledDesc2:  'The application will not be processed until the original copy of the document signed by the authorized signatory is received.',
20            referenceNumber: 'Reference Number',
21            preview:         'Preview',
22            save:            'Save',
23            print:           'Print',
24            backBtn:         'Back to Corporate E-Form',
25            pdfLoading:      'Loading preview...',
26            pdfError:        'Preview not available'
27        },
28        ar: {
29            fulfilledTitle:  'تم إتمام النموذج الإلكتروني',
30            fulfilledDesc1:  'تم إتمام نموذجك الإلكتروني بنجاح.',
31            fulfilledDesc2:  'لن تتم معالجة الطلب حتى يتم استلام النسخة الأصلية الموقعة من قِبل المفوض بالتوقيع.',
32            referenceNumber: 'الرقم المرجعي',
33            preview:         'معاينة',
34            save:            'حفظ',
35            print:           'طباعة',
36            backBtn:         'العودة إلى لوحة النماذج الإلكترونية',
37            pdfLoading:      'جاري تحميل المعاينة...',
38            pdfError:        'المعاينة غير متاحة'
39        }
40    };
41    var t = isArabic ? i18n.ar : i18n.en;
42
43    // ─────────────────────────────────────────────────────────────
44    // Shared PDF blob state (fetch once, reuse for save/print)
45    // ─────────────────────────────────────────────────────────────
46    var pdfBlobUrl = null;
47
48    // ─────────────────────────────────────────────────────────────
49    // Select2 float label: inject scoped styles once into <head>
50    // ─────────────────────────────────────────────────────────────
51   (function injectSelect2FloatStyles() {
52    if ($('#eform-select2-float-style').length) return;
53    var style = [
54
55        /* ── 1. The Select2 container must fill the form-floating
56               wrapper exactly like a native <input> would          ── */
57        '.form-floating > .select2-container {',
58        '    width: 100% !important;',
59        '}',
60
61        /* ── 2. The selection box: fixed two-line height, always   ── */
62        '.form-floating > .select2-container .select2-selection--single {',
63        '    height: 5rem;',          /* ~two lines + label room       */
64        '    min-height: 5rem;',
65        '    display: flex;',
66        '    align-items: flex-end;', /* text sits at bottom of box    */
67        '    border: 1px solid #ced4da;',
68        '    border-radius: 0.375rem;',
69        '    padding: 0 2.5rem 0.75rem 0.75rem;',
70        '    box-sizing: border-box;',
71        '    position: relative;',
72        '}',
73
74        /* ── 3. Arrow: pin to right-centre always                  ── */
75        '.form-floating > .select2-container .select2-selection__arrow {',
76        '    position: absolute;',
77        '    top: 50%;',
78        '    right: 0.75rem;',
79        '    transform: translateY(-50%);',
80        '    height: auto;',
81        '}',
82
83        /* ── 4. Rendered text: wrap, no clip                       ── */
84        '.form-floating > .select2-container .select2-selection__rendered {',
85        '    line-height: 1.5;',
86        '    padding: 0;',
87        '    white-space: normal;',
88        '    word-break: break-word;',
89        '    overflow: visible;',
90        '    text-overflow: unset;',
91        '    color: #212529;',
92        '    width: 100%;',
93        '}',
94
95        /* ── 5. Label DEFAULT: sit at top-left inside the box      ── */
96        /*    Mirrors exactly what Bootstrap does for its own inputs    */
97        '.form-floating > .select2-container ~ label {',
98        '    position: absolute;',
99        '    top: 0;',
100        '    left: 0;',
101        '    height: 100%;',
102        '    padding: 1rem 0.75rem;',
103        '    pointer-events: none;',
104        '    border: 1px solid transparent;',
105        '    transform-origin: 0 0;',
106        '    transition: opacity .1s ease-in-out, transform .1s ease-in-out;',
107        '    opacity: 1;',
108        '    transform: none;',         /* label at rest: full size inside box */
109        '}',
110
111        /* ── 6. Label ACTIVE (value selected): raise + shrink      ── */
112        '.form-floating.select2-float-active > .select2-container ~ label {',
113        '    opacity: .65;',
114        '    transform: scale(.85) translateY(-0.5rem) translateX(0.15rem);',
115        '    pointer-events: none;',
116        '}',
117
118        /* ── 7. Active: push rendered text down so it clears label ── */
119        '.form-floating.select2-float-active > .select2-container .select2-selection--single {',
120        '    align-items: flex-end;',
121        '    padding-bottom: 0.5rem;',
122        '    padding-top: 0;',
123        '}'
124
125    ].join('\n');
126    $('<style id="eform-select2-float-style">').text(style).appendTo('head');
127}());
128
129    // Toggle .select2-float-active on parent .form-floating
130    // based on whether the Select2 has a value.
131    function applySelect2FloatLabel($select) {
132        var $wrapper = $select.closest('.form-floating');
133        if (!$wrapper.length) return;
134
135        function refresh() {
136            var val = $select.val();
137            $wrapper.toggleClass('select2-float-active',
138                val !== null && val !== '' && val !== undefined);
139        }
140
141        refresh(); // run immediately for pre-selected values
142
143        $select.on('select2:select select2:unselect select2:clear change', function () {
144            refresh();
145        });
146    }
147
148    // ─────────────────────────────────────────────────────────────
149    // EXISTING: number-only input handling (UNCHANGED)
150    // ─────────────────────────────────────────────────────────────
151    var $inputs = $('.number-data-only');
152
153    $inputs.on('input', function () {
154        $(this).val($(this).val().replace(/[^0-9]/g, ''));
155    });
156
157    $inputs.on('keypress', function (e) {
158        var charCode = e.which || e.keyCode;
159        if (charCode < 48 || charCode > 57) { e.preventDefault(); }
160    });
161
162    $inputs.on('paste', function (e) {
163        var pastedData = (e.originalEvent || e).clipboardData.getData('text');
164        if (!/^[0-9]*$/.test(pastedData)) { e.preventDefault(); }
165    });
166
167    if($("input[data-sc-field-name='hidTType']").val() != "int")
168    {
169        const currencyData = [{ id: 'SAR', text: 'SAR' }];
170
171        $('.remit-currency').select2({
172            data: currencyData,
173            placeholder: '',
174            allowClear: true
175        });
176    }
177
178    if($("input[data-sc-field-name='hidTType']").val() == "in")
179    {
180        const bankDataForInternal = [{ id: 'Alinma Bank', text: 'Alinma Bank' }];
181       
182        $('.ben-bank').select2({
183            data: bankDataForInternal,
184            placeholder: '',
185            allowClear: true
186        });
187    }
188
189    // ─────────────────────────────────────────────────────────────
190    // EXISTING: Payment Purpose other field toggle (UNCHANGED)
191    // ─────────────────────────────────────────────────────────────
192    $("select[data-sc-field-name='PaymentPurpose']").on("change", function () {
193        if ($(this).val() == "o") {
194            $('.ppurpose-other-div').show();
195            $("input[data-sc-field-name='PaymentPurposeOther']").removeClass('opt');
196        } else {
197            $('.ppurpose-other-div').hide();
198            if (!$("input[data-sc-field-name='PaymentPurposeOther']").hasClass("opt")) {
199                $("input[data-sc-field-name='PaymentPurposeOther']").addClass('opt');
200            }
201        }
202    });
203
204    // ─────────────────────────────────────────────────────────────
205    // EXISTING: Swift Clear button (UNCHANGED)
206    // ─────────────────────────────────────────────────────────────
207    if ($(".btn-swift-clear").length == 1) {
208        $(".btn-swift-clear").on("click", function () {
209            $("div[data-sc-field-key='divBankDetails']").html('');
210            $("input[data-sc-field-name='hidBank']").val('');
211            $("input[data-sc-field-name='hidCurrency']").val('');
212            $("input[data-sc-field-name='hidCountryCode']").val('');
213            $(".row-bank").show("slow");
214            $("input[data-sc-field-name='SwiftCode']").val('');
215        });
216    }
217
218    if($(".btn-eform-back").length == 1){
219        $(".btn-eform-back").on("click", function (e) {
220            e.preventDefault();
221            $(".eform-confirm").hide();
222            $(".eform-input").show();
223            $('#eform-review-card').remove();
224        });
225    }
226
227    // ─────────────────────────────────────────────────────────────
228    // EXISTING: Swift Validate button (UNCHANGED)
229    // ─────────────────────────────────────────────────────────────
230    if ($('.btn-swift').length == 1) {
231        $(".btn-swift").on("click", function () {
232            if ($("input[data-sc-field-name='SwiftCode']").val() == "") {
233                $("input[data-sc-field-name='SwiftCode']").css('border-color', 'red');
234                return false;
235            }
236            $.ajax({
237                url: '/api/sitecore/EForm/gsc',
238                method: 'GET',
239                contentType: 'application/json',
240                data: { sc: $("input[data-sc-field-name='SwiftCode']").val() },
241                beforeSend: function () { $("#alinmaLoader").addClass("active"); },
242                success: function (data) {
243                    if (data != null) {
244                        if (data.bank_code != "") {
245                            $("#alinmaLoader").removeClass("active");
246                            $("div[data-sc-field-key='divBankDetails']").html(
247                                "<b> Bank Code: " + data.bank_code +
248                                " | Country Code: " + data.country_code +
249                                " | Currency: " + data.country_code
250                            );
251                            $("input[data-sc-field-name='hidBank']").val(data.bank_code);
252                            //$("input[data-sc-field-name='hidCurrency']").val(data.country_code);
253                            $("input[data-sc-field-name='hidCountryCode']").val(data.country_code);
254                            $(".row-bank").hide("slow");
255
256                            $.ajax({
257                                url: '/api/sitecore/EForm/gcu',
258                                method: 'GET',
259                                contentType: 'application/json',
260                                data: { cc: data.country_code },
261                                beforeSend: function () { $("#alinmaLoader").addClass("active"); },
262                                success: function (data) {
263                                    if (data != null && data.result.length > 0) {
264                                        $("#alinmaLoader").removeClass("active");
265        
266                                        // Append options — no .select2() re-call needed
267                                        $.each(data.result, function (i, item) {
268                                            $('.remit-currency').append(
269                                                $('<option>', { value: item.Code, text: item.cen })
270                                            );
271                                        });
272                                    } else {
273                                        $("#alinmaLoader").removeClass("active");
274                                    }
275        
276                                },
277                                error: function () { $("#alinmaLoader").removeClass("active"); }
278                            });
279        
280                        } else {
281                            $("div[data-sc-field-key='divBankDetails']").html(
282                                '<b> Invalid SWIFT Code. Please check again.</b>'
283                            );
284                            $("input[data-sc-field-name='hidBank']").val('');
285                            $("input[data-sc-field-name='hidCurrency']").val('');
286                            $("input[data-sc-field-name='hidCountryCode']").val('');
287                            $("#alinmaLoader").removeClass("active");
288                            $(".row-bank").show("slow");
289                        }
290                    } else {
291                        $("#alinmaLoader").removeClass("active");
292                    }
293                },
294                error: function () { $("#alinmaLoader").removeClass("active"); }
295            });
296        });
297    }
298
299    // ─────────────────────────────────────────────────────────────
300    // Countries / Banks / Currencies
301    // One clean block — no duplication, no re-initialisation
302    // ─────────────────────────────────────────────────────────────
303    if ($('select[data-sc-field-name="RemittanceCountry"]').length == 1) {
304
305        // Initialise ALL three Select2 instances ONCE on page load.
306        // Options are appended later via AJAX without re-calling .select2().
307        $(".remit-country").select2({ placeholder: '', allowClear: true, minimumInputLength: 0 });
308        applySelect2FloatLabel($(".remit-country"));
309
310        $(".remit-banks").select2({ placeholder: '', allowClear: true, minimumInputLength: 0 });
311        applySelect2FloatLabel($(".remit-banks"));
312
313        $(".remit-currency").select2({ placeholder: '', allowClear: true, minimumInputLength: 0 });
314        applySelect2FloatLabel($(".remit-currency"));
315
316        if($("input[data-sc-field-name='hidTType']").val() == "int")
317        {
318            LoadCountries();
319        }
320
321
322        // Country change: reset banks then load new ones
323        $(".remit-country").on("change", function () {
324
325            var countryCode = $(this).val();
326
327            // Clear all bank options, keep empty placeholder
328            $(".remit-banks").empty().append('<option label=" "></option>');
329            $(".remit-currency").empty().append('<option label=" "></option>');
330
331            // Reset Select2 value — no re-init, already initialised
332            $(".remit-banks").val(null).trigger('change');
333            $(".remit-currency").val(null).trigger('change');
334
335            // Reset float label
336            $(".remit-banks").closest('.form-floating').removeClass('select2-float-active');
337            $(".remit-currency").closest('.form-floating').removeClass('select2-float-active');
338
339            // If country was cleared, nothing more to do
340            if (!$(this).val()) { return; }
341
342            // Load banks for the selected country
343            $.ajax({
344                url: '/api/sitecore/EForm/gb',
345                method: 'GET',
346                contentType: 'application/json',
347                data: { cc: countryCode },
348                beforeSend: function () { $("#alinmaLoader").addClass("active"); },
349                success: function (data) {
350                    if (data != null && data.result.length > 0) {
351                        $("#alinmaLoader").removeClass("active");
352
353                        // Append options — no .select2() re-call needed
354                        $.each(data.result, function (i, item) {
355                            $('.remit-banks').append(
356                                $('<option>', { value: item.code, text: item.name })
357                            );
358                        });
359
360                         // Load currencies
361                            $.ajax({
362                                url: '/api/sitecore/EForm/gcu',
363                                method: 'GET',
364                                contentType: 'application/json',
365                                data: { cc: countryCode },
366                                beforeSend: function () { $("#alinmaLoader").addClass("active"); },
367                                success: function (data) {
368                                    if (data != null && data.result.length > 0) {
369                                        $("#alinmaLoader").removeClass("active");
370
371                                        // Append options — no .select2() re-call needed
372                                        $.each(data.result, function (i, item) {
373                                            $('.remit-currency').append(
374                                                $('<option>', { value: item.Code, text: item.cen })
375                                            );
376                                        });
377                                    } else {
378                                        $("#alinmaLoader").removeClass("active");
379                                    }
380
381                                },
382                                error: function () { $("#alinmaLoader").removeClass("active"); }
383                            });
384
385                    
386                    } else {
387                        $("#alinmaLoader").removeClass("active");
388                    }
389                },
390                error: function () { $("#alinmaLoader").removeClass("active"); }
391            });
392        });
393
394    } // end RemittanceCountry block
395
396    // ─────────────────────────────────────────────────────────────
397    // EXISTING: Transaction Type change (UNCHANGED)
398    // ─────────────────────────────────────────────────────────────
399    
400
401
402    // ─────────────────────────────────────────────────────────────
403    // MAIN FORM LOGIC
404    // ─────────────────────────────────────────────────────────────
405    if (document.querySelector('input[data-sc-field-key="A1F87972F7FB4137DBA28BC847F09C5E"]') != null) {
406
407        var rqType = '';
408        $(".eform-confirm").hide();
409        $(".ppurpose-other-div").hide();
410        $(".cust-bank-branch").prop('disabled', true);
411
412        /*$("select[data-sc-field-name='TransactionType']").on("change", function () {
413            if ($(this).val() == "internal") {
414                $("select[data-sc-field-name='BeneficiaryBank'] option[value='alinma']").prop('disabled', false);
415                $("select[data-sc-field-name='BeneficiaryBank']").val('alinma');
416            } else {
417                $("select[data-sc-field-name='BeneficiaryBank'] option[value='alinma']").prop('disabled', true);
418                $("select[data-sc-field-name='BeneficiaryBank']").val('');
419            }
420        });*/
421    
422        $(".remit-currency").on("change", function(){ 
423            $("input[data-sc-field-name='hidCurrency']").val($(this).val());
424        })
425    
426        $(".remit-country").on("change", function(){ 
427            $("input[data-sc-field-name='hidCountryCode']").val($(this).children("option").filter(":selected").text())
428        })
429    
430        $(".remit-banks").on("change", function(){ 
431            $("input[data-sc-field-name='hidBank']").val($(this).children("option").filter(":selected").text());
432        })
433
434        var submit = document.querySelector('input[data-sc-field-key="A1F87972F7FB4137DBA28BC847F09C5E"]');
435        var submitReqForDownload = document.querySelector('input[data-sc-field-key="A1F87972F7FB4137DBA28BB967F09C5E"]');
436
437        /*$('.form-check-input').on('input change', function () {
438            checkAndEnableButton(submitReqForDownload);
439        });*/
440
441        $('.form-control').on('input change', function () {
442            var $field = $(this);
443            if ($field.hasClass('opt')) { $field.css('border-color', ''); return; }
444            var value = $field.val();
445            if (typeof value === 'string') { value = value.trim(); }
446            $field.css('border-color', (value && value !== '') ? '' : 'red');
447        });
448
449        if (submit) {
450            $('.error-div').hide();
451
452            submit.onclick = function (e) {
453                e.preventDefault();
454
455                if ($("input[data-sc-field-name='hidTType']").val() == "int" &&
456                    $("input[data-sc-field-name='SwiftCode']").val() != "") {
457                    if ($("input[data-sc-field-name='hidBank']").val() == '' &&
458                        $("input[data-sc-field-name='hidCurrency']").val() == "" &&
459                        $("input[data-sc-field-name='hidCountryCode']").val() == "") {
460                        return false;
461                    }
462                }
463
464                if ($("input[data-sc-field-name='hidTType']").val() != "") {
465                    rqType = $("input[data-sc-field-name='hidTType']").val();
466                    if      (rqType == "in")  { rqType = "internal"; }
467                    else if (rqType == "s")   { rqType = "sarie"; }
468                    else if (rqType == "int") { rqType = "international"; }
469                }
470
471                if (!validateFormControls()) { return false; }
472
473                var requestType                   = rqType;
474                var CustomerBankBranch            = $("input[data-sc-field-name='CustomerBankBranch']").val();
475                var OrderingCustomerNameArabic    = $("input[data-sc-field-name='OrderingCustomerNameArabic']").val();
476                var CustomerAddress               = $("input[data-sc-field-name='CustomerAddress']").val();
477                var DebitAccount                  = $("input[data-sc-field-name='DebitAccount']").val();
478                var Amount                        = $("input[data-sc-field-name='Amount']").val();
479                var Currency                      = $("select[data-sc-field-name='Currency']").val();
480                var BeneficiaryBank               = $("select[data-sc-field-name='BeneficiaryBank'] option:selected").text();
481                var IntRemitBank                  = $("select[data-sc-field-name='RemittanceBanks'] option:selected").text();
482                var BeneficiaryBankCode           = $("select[data-sc-field-name='BeneficiaryBank']").val();
483                var BeneficiaryCustomerNameArabic = $("input[data-sc-field-name='BeneficiaryCustomerNameArabic']").val();
484                var BeneficiaryAddress            = $("input[data-sc-field-name='BeneficiaryAddress']").val();
485                var BeneficiaryAccountNumber      = $("input[data-sc-field-name='BeneficiaryAccountNumber']").val();
486                var RemittanceTransferDetailsInfo = $("input[data-sc-field-name='RemittanceTransferDetailsInfo']").val();
487                var PaymentPurpose                = $("select[data-sc-field-name='PaymentPurpose']").val();
488                var OtherReason                   = $("input[data-sc-field-name='PaymentPurposeOther']").val();
489                var BeneficiaryCountry            = $("select[data-sc-field-name='RemittanceCountry'] option:selected").text();
490                var IntRemitCurrency              = $("select[data-sc-field-name='RemittanceCurrency'] option:selected").text();
491                var IntRemitBankCode              = $("select[data-sc-field-name='RemittanceBanks'] option:selected").val();
492                var recaptchaText                 = $(".hid-recaptcha").val();
493
494                if (BeneficiaryBank == "") {
495                    BeneficiaryBank = IntRemitBank;
496                    if ($("input[data-sc-field-name='hidBank']").val() != "") {
497                        BeneficiaryBank = $("input[data-sc-field-name='hidBank']").val();
498                    }
499                    else if(rqType == "internal")
500                    {
501                        BeneficiaryBank = "Alinma Bank"
502                    }
503                }
504                if (Currency == "" || Currency == undefined) {
505                    Currency = IntRemitCurrency;
506                    if ($("input[data-sc-field-name='hidCurrency']").val() != "") {
507                        Currency = $("input[data-sc-field-name='hidCurrency']").val();
508                    }
509                }
510                if (BeneficiaryBankCode == "" || BeneficiaryBankCode == undefined) {
511                    BeneficiaryBankCode = IntRemitBankCode;
512                    if ($("input[data-sc-field-name='hidBank']").val() != "") {
513                        BeneficiaryBankCode = $("input[data-sc-field-name='hidBank']").val();
514                    }
515                }
516
517                if(recaptchaText == "")
518                {
519                    recaptchaText = "Test";
520                }
521
522                var CusteFormRqPrcMngRq = {
523                    Body: {
524                        RqType:          requestType,
525                        BranchName:      CustomerBankBranch,
526                        CustName:        OrderingCustomerNameArabic,
527                        CustAddr:        CustomerAddress,
528                        AcctNum:         DebitAccount,
529                        Amt:             Amount,
530                        CurCode:         Currency,
531                        BenName:         BeneficiaryCustomerNameArabic,
532                        BenBankCode:     BeneficiaryBankCode,
533                        BenAddr:         BeneficiaryAddress,
534                        BenAcctNum:      BeneficiaryAccountNumber,
535                        BenBankName:     BeneficiaryBank,
536                        FundXferPurpose: PaymentPurpose,
537                        FundXferDtls:    RemittanceTransferDetailsInfo,
538                        OtherReason:     OtherReason,
539                        BenCountry:      BeneficiaryCountry
540                    },
541                    CapText : recaptchaText
542                };
543
544                $.ajax({
545                    url: '/api/sitecore/EForm/EFDReq',
546                    method: 'POST',
547                    contentType: 'application/json',
548                    data: JSON.stringify(CusteFormRqPrcMngRq),
549                    beforeSend: function () { $("#alinmaLoader").addClass("active"); },
550                    success: function (data) {
551                        if (data != null) {
552                            if (data.Success == "Y") {
553                                $("#alinmaLoader").removeClass("active");
554                                $("input[data-sc-field-name='hidDocId']").val(data.DocId);
555                                $("input[data-sc-field-name='hidPortalRef']").val(data.portalReference);
556
557                                // Review card (international only)
558                               
559                                $('#eform-review-card').remove();
560
561                                var purposeLabel    = $("select[data-sc-field-name='PaymentPurpose'] option:selected").text();
562                                var displayBenBank  = $("input[data-sc-field-name='hidBank']").val() !== ''
563                                    ? $("input[data-sc-field-name='hidBank']").val()
564                                    : $("select[data-sc-field-name='RemittanceBanks'] option:selected").text();
565
566                                    if(displayBenBank == "")
567                                    {
568                                        displayBenBank = $("select[data-sc-field-name='BeneficiaryBank'] option:selected").text();
569                                    }
570                                var displayCurrency = $("input[data-sc-field-name='hidCurrency']").val() !== ''
571                                    ? $("input[data-sc-field-name='hidCurrency']").val()
572                                    : $("select[data-sc-field-name='RemittanceCurrency'] option:selected").text();
573
574                                function reviewRow(labelText, value) {
575                                    if (!value || value.trim() === '') return '';
576                                    return '<div class="col-md-6 mb-3">' +
577                                        '<div class="details-label">' + $('<div>').text(labelText).html() + '</div>' +
578                                        '<div class="details-txt">'   + $('<div>').text(value).html()     + '</div>' +
579                                        '</div>';
580                                }
581
582                                var lbl = {
583                                    custName:       $("label[for$='cb86948d-f762-464f-9c6e-cb5160619077__Value']").text().trim(),
584                                    custAddress:    $("label[for$='b1c9a763-1726-43f0-9e8d-a9dd20c326bd__Value']").text().trim(),
585                                    debitAcc:       $("label[for$='3a6bf48d-1118-4d94-b550-7ca52087e094__Value']").text().trim(),
586                                    amount:         $("label[for$='cb06132f-64c5-4408-9410-5b3e25c7bcdb__Value']").text().trim(),
587                                    debitCurrency:  $("label[for$='20985ee7-ef33-4206-b1ef-110774052d0e__Value']").text().trim(),
588                                    swiftCode:      $("label[for$='4354bb01-fdcf-4b3e-bb8a-1ba71ba930d8__Value']").text().trim(),
589                                    remitCountry:   $("label[for$='7167206b-7392-4cf4-bed9-96f2678136b0__Value']").text().trim(),
590                                    remitBanks:     $("label[for$='81a25c8c-c43c-41f3-9439-60eb772cf34b__Value']").text().trim(),
591                                    remitCurrency:  $("label[for$='64deb308-280f-4558-a373-e47aca3a2670__Value']").text().trim(),
592                                    benName:        $("label[for$='014b8d32-a860-41e7-9eed-e607eface426__Value']").text().trim(),
593                                    benAddress:     $("label[for$='2c7b2fc2-d7c2-44c1-a0d9-629b7d8347a5__Value']").text().trim(),
594                                    benAccNo:       $("label[for$='4b487615-db63-4a4b-92d9-76d47e9ab447__Value']").text().trim(),
595                                    remitDetails:   $("label[for$='adb1bb3c-e5ed-477c-bc59-61a33036cf1e__Value']").text().trim(),
596                                    paymentPurpose: $("label[for$='eff2fa24-ca3b-4b10-a347-f51c4f03f38f__V
596alue']").text().trim(),
597                                    otherReason:    $("label[for$='28b12e1c-1c72-4872-8ed9-01abd3629c38__Value']").text().trim()
598                                };
599
600                                var remitterHeading    = $(".eform-input .component-control:first h3").first().text().trim() || 'Remitter Details';
601                                var beneficiaryHeading = $(".eform-input .component-control:last h3").first().text().trim()  || 'Beneficiary Details';
602
603                                var remitterRows =
604                                    reviewRow(lbl.custName,      OrderingCustomerNameArabic) +
605                                    reviewRow(lbl.custAddress,   CustomerAddress) +
606                                    reviewRow(lbl.debitAcc,      DebitAccount) +
607                                    reviewRow(lbl.amount,        Amount) +
608                                    reviewRow(lbl.debitCurrency, $("select[data-sc-field-name='Currency'] option:selected").text());
609
610                                var swiftVal = $("input[data-sc-field-name='SwiftCode']").val();
611                                var beneficiaryRows =
612                                    (swiftVal ? reviewRow(lbl.swiftCode, swiftVal) : '') +
613                                    reviewRow(lbl.remitCountry,   BeneficiaryCountry) +
614                                    reviewRow(lbl.remitBanks,     displayBenBank) +
615                                    reviewRow(lbl.remitCurrency,  displayCurrency) +
616                                    reviewRow(lbl.benName,        BeneficiaryCustomerNameArabic) +
617                                    reviewRow(lbl.benAddress,     BeneficiaryAddress) +
618                                    reviewRow(lbl.benAccNo,       BeneficiaryAccountNumber) +
619                                    reviewRow(lbl.remitDetails,   RemittanceTransferDetailsInfo) +
620                                    reviewRow(lbl.paymentPurpose, purposeLabel) +
621                                    (PaymentPurpose === 'o' ? reviewRow(lbl.otherReason, OtherReason) : '');
622
623                                var reviewCard =
624                                    '<div id="eform-review-card" class="container my-3">' +
625                                        '<div class="details-card card">' +
626                                            '<div class="card-header"><span>Review Details</span></div>' +
627                                            '<div class="card-body"><div class="row">' +
628                                                '<div class="col-md-12 mb-3"><h3 class="color-accent">' + remitterHeading + '</h3></div>' +
629                                                remitterRows +
630                                                '<div class="col-md-12 mb-3 mt-2"><h3 class="color-accent">' + beneficiaryHeading + '</h3></div>' +
631                                                beneficiaryRows +
632                                            '</div></div>' +
633                                        '</div>' +
634                                    '</div>';
635
636                                $(".wizard--wrapper").after(reviewCard);
637                                
638
639                                $(".eform-confirm").show();
640                                $(".eform-input").hide();
641
642                            } else {
643                                
644                                if(data.portalReference != null)
645                                {
646                                    $('.error-div').html('');
647                                    if(data.portalReference == '500')
648                                    {
649                                        $('.error-div').html('<p> Error verifying the recaptcha security from Google');                                        
650                                    }
651                                    else if(data.portalReference == '404')
652                                    {
653                                        $('.error-div').html('<p> Captcha verification failed, kindly resubmit the form');  
654                                    }
655                                }
656
657                                $('.error-div').show();
658                                $("#alinmaLoader").removeClass("active");
659                            }
660                        } else {
661                            $("#alinmaLoader").removeClass("active");
662                            $('.error-div').show();
663                        }
664                    },
665                    error: function () {
666                        $("#alinmaLoader").removeClass("active");
667                        $('.error-div').show();
668                    }
669                });
670            };
671
672            $(submitReqForDownload).prop("disabled", true);
673        }
674
675        // Submit Request & Download Form button
676        if (submitReqForDownload) {
677            submitReqForDownload.onclick = function (e) {
678                e.preventDefault();
679                $('.error-div').hide();
680
681                var docId       = $("input[data-sc-field-name='hidDocId']").val();
682                var portalReqId = $("input[data-sc-field-name='hidPortalRef']").val();
683                var chkt = $("input[data-sc-field-name='chkTerms']").prop('checked');
684                var chkack = $("input[data-sc-field-name='chkAck']").prop('checked');
685               
686                var DocumentRs  = { portalReference: portalReqId, DocId: docId, chkAck : chkack, chkTerms : chkt };
687
688                $.ajax({
689                    url: '/api/sitecore/EForm/EFSubmit',
690                    method: 'POST',
691                    contentType: 'application/json',
692                    data: JSON.stringify(DocumentRs),
693                    beforeSend: function () { $("#alinmaLoader").addClass("active"); },
694                    success: function (data) {
695                        if (data.IsSuccess) {
696                            $.ajax({
697                                url: '/api/sitecore/EForm/EFDwnld',
698                                method: 'POST',
699                                contentType: 'application/json',
700                                data: JSON.stringify(DocumentRs),
701                                xhrFields: { responseType: 'blob' },
702                                beforeSend: function () { $("#alinmaLoader").addClass("active"); },
703                                success: function (blob) {
704                                    $("#alinmaLoader").removeClass("active");
705
706                                    if (pdfBlobUrl) { window.URL.revokeObjectURL(pdfBlobUrl); }
707                                    pdfBlobUrl = window.URL.createObjectURL(blob);
708
709                                    $(".eform-confirm").hide();
710                                    $('#eform-review-card').hide();
711
712                                    $('#eform-fulfilled').remove();
713                                    $(".eform-confirm").after(buildFulfilledScreen(portalReqId));
714
715                                    renderPdfPreview(pdfBlobUrl);
716
717                                    $('#eform-btn-save').on('click', function () {
718                                        var a = document.createElement('a');
719                                        a.style.display = 'none';
720                                        a.href = pdfBlobUrl;
721                                        a.download = portalReqId + '_request.pdf';
722                                        document.body.appendChild(a);
723                                        a.click();
724                                        a.remove();
725                                    });
726
727                                    $('#eform-btn-print').on('click', function () {
728                                        var w = window.open(pdfBlobUrl, '_blank');
729                                        if (w) { w.onload = function () { w.focus(); w.print(); }; }
730                                    });
731
732                                    $('#eform-btn-back').on('click', function () {
733                                        if (pdfBlobUrl) { window.URL.revokeObjectURL(pdfBlobUrl); pdfBlobUrl = null; }
734                                        window.location.href = '/corporate/e-form-dashboard';
735                                    });
736                                },
737                                error: function () {
738                                    $("#alinmaLoader").removeClass("active");
739                                    $('.error-div').show();
740                                }
741                            });
742                        }
743                        else
744                        {
745                            $("#alinmaLoader").removeClass("active");
746                            $('.error-div').show();
747                        }
748                    },
749                    error: function () {
750                        $("#alinmaLoader").removeClass("active");
751                        $('.error-div').show();
752                    }
753                });
754            };
755        }
756
757    } // end main form logic
758
759    // ─────────────────────────────────────────────────────────────
760    // Build fulfilled screen HTML (i18n + dir-aware)
761    // ─────────────────────────────────────────────────────────────
762    function buildFulfilledScreen(portalReqId) {
763        var dir = isArabic ? 'rtl' : 'ltr';
764        return (
765            '<div id="eform-fulfilled" dir="' + dir + '" class="container my-3 mt-5">' +
766                '<div class="row">' +
767                    '<div class="col-md-8">' +
768                        '<div class="wizard-confirmation--wrapper">' +
769                            '<svg width="230" height="177" viewBox="0 0 230 177" fill="none" xmlns="http://www.w3.org/2000/svg">' +
770                                '<path d="M1.21508 106.077L47.4551 61.3843L113.743 117.806L122.785 125.706L73.6365 175.782L1.21508 106.077Z" fill="url(#paint0_linear_263_1868)" fill-opacity="0.3"/>' +
771                                '<path d="M54.2935 68.2712L97.5698 112.802C104.601 120.037 116.246 119.945 123.163 112.601L218.847 11.0001" stroke="#BB7B6A" stroke-width="20.4896" stroke-linecap="round"/>' +
772                                '<defs><linearGradient id="paint0_linear_263_1868" x1="79.5399" y1="90.1537" x2="31.0193" y2="143.9" gradientUnits="userSpaceOnUse">' +
773                                    '<stop stop-color="#DF8C7A"/>' +
774                                    '<stop offset="1" stop-color="#DF8C7A" stop-opacity="0"/>' +
775                                '</linearGradient></defs>' +
776                            '</svg>' +
777                            '<h2>' + $('<div>').text(t.fulfilledTitle).html() + '</h2>' +
778                            '<p class="text-center">' +
779                                $('<div>').text(t.fulfilledDesc1).html() + '<br/>' +
780                                $('<div>').text(t.fulfilledDesc2).html() +
781                            '</p>' +
782                            '<p class="color-accent">' +
783                                $('<div>').text(t.referenceNumber).html() +
784                                ': #' + $('<div>').text(portalReqId).html() +
785                            '</p>' +
786                            '<div class="text-center">' +
787                                '<a id="eform-btn-back" class="btn-border" href="javascript:;">' +
788                                    $('<div>').text(t.backBtn).html() +
789                                '</a>' +
790                            '</div>' +
791                        '</div>' +
792                    '</div>' +
793                    '<div class="col-md-4">' +
794                        '<div class="details-card card">' +
795                            '<div class="card-header">' +
796                                '<span>' + $('<div>').text(t.preview).html() + '</span>' +
797                            '</div>' +
798                            '<div class="card-body">' +
799                                '<div class="eform--draft-wrapper">' +
800                                    '<div id="eform-pdf-preview-wrapper" class="eform--draft-img" ' +
801                                         'style="display:flex;align-items:center;justify-content:center;' +
802                                                'min-height:200px;background:#f5f5f5;overflow:hidden;">' +
803                                        '<span id="eform-pdf-loading-txt">' + $('<div>').text(t.pdfLoading).html() + '</span>' +
804                                        '<canvas id="eform-pdf-canvas" style="display:none;max-width:100%;height:auto;"></canvas>' +
805                                    '</div>' +
806                                    '<div class="btns-wrapper">' +
807                                        '<a id="eform-btn-save" class="btn-fourth" href="javascript:;">' +
808                                            '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20.5603 6.75001L17.25 3.43969C17.1112 3.2998 16.946 3.18889 16.764 3.11341C16.582 3.03792 16.3867 2.99938 16.1897 3.00001H4.5C4.10218 3.00001 3.72064 3.15804 3.43934 3.43935C3.15804 3.72065 3 4.10218 3 4.50001V19.5C3 19.8978 3.15804 20.2794 3.43934 20.5607C3.72064 20.842 4.10218 21 4.5 21H19.5C19.8978 21 20.2794 20.842 20.5607 20.5607C20.842 20.2794 21 19.8978 21 19.5V7.81032C21.0006 7.61326 20.9621 7.41805 20.8866 7.23602C20.8111 7.054 20.7002 6.88879 20.5603 6.75001ZM15.75 19.5H8.25V14.25H15.75V19.5ZM19.5 19.5H17.25V14.25C17.25 13.8522 17.092 13.4707 16.8107 13.1893C16.5294 12.908 16.1478 12.75 15.75 12.75H8.25C7.85218 12.75 7.47064 12.908 7.18934 13.1893C6.90804 13.4707 6.75 13.8522 6.75 14.25V19.5H4.5V4.50001H16.1897L19.5 7.81032V19.5ZM15 6.75001C15 6.94892 14.921 7.13969 14.7803 7.28034C14.6397 7.42099 14.4489 7.50001 14.25 7.50001H9C8.80109 7.50001 8.61032 7.42099 8.46967 7.28034C8.32902 7.13969 8.25 6.94892 8.25 6.75001C8.25 6.5511 8.32902 6.36033 8.46967 6.21968C8.61032 6.07903 8.80109 6.00001 9 6.00001H14.25C14.4489 6.00001 14.6397 6.07903 14.7803 6.21968C14.921 6.36033 15 6.5511 15 6.75001Z" fill="#002134"/></svg>' +
809                                            ' ' + $('<div>').text(t.save).html() +
810                                        '</a>' +
811                                        '<a id="eform-btn-print" class="btn-primary" href="javascript:;">' +
812                                            '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20.1253 6.75H18.75V3.75C18.75 3.55109 18.671 3.36032 18.5303 3.21967C18.3897 3.07902 18.1989 3 18 3H6C5.80109 3 5.61032 3.07902 5.46967 3.21967C5.32902 3.36032 5.25 3.55109 5.25 3.75V6.75H3.87469C2.565 6.75 1.5 7.75969 1.5 9V16.5C1.5 16.6989 1.57902 16.8897 1.71967 17.0303C1.86032 17.171 2.05109 17.25 2.25 17.25H5.25V20.25C5.25 20.4489 5.32902 20.6397 5.46967 20.7803C5.61032 20.921 5.80109 21 6 21H18C18.1989 21 18.3897 20.921 18.5303 20.7803C18.671 20.6397 18.75 20.4489 18.75 20.25V17.25H21.75C21.9489 17.25 22.1397 17.171 22.2803 17.0303C22.421 16.8897 22.5 16.6989 22.5 16.5V9C22.5 7.75969 21.435 6.75 20.1253 6.75ZM6.75 4.5H17.25V6.75H6.75V4.5ZM17.25 19.5H6.75V15H17.25V19.5ZM21 15.75H18.75V14.25C18.75 14.0511 18.671 13.8603 18.5303 13.7197C18.3897 13.579 18.1989 13.5 18 13.5H6C5.80109 13.5 5.61032 13.579 5.46967 13.7197C5.32902 13.8603 5.25 14.0511 5.25 14.25V15.75H3V9C3 8.58656 3.39281 8.25 3.87469 8.25H20.1253C20.6072 8.25 21 8.58656 21 9V15.75ZM18.75 10.875C18.75 11.0975 18.684 11.315 18.5604 11.5C18.4368 11.685 18.2611 11.8292 18.0555 11.9144C17.85 11.9995 17.6238 12.0218 17.4055 11.9784C17.1873 11.935 16.9868 11.8278 16.8295 11.6705C16.6722 11.5132 16.565 11.3127 16.5216 11.0945C16.4782 10.8762 16.5005 10.65 16.5856 10.4445C16.6708 10.2389 16.815 10.0632 17 9.9396C17.185 9.81598 17.4025 9.75 17.625 9.75C17.9234 9.75 18.2095 9.86853 18.4205 10.0795C18.6315 10.2905 18.75 10.5766 18.75 10.875Z" fill="#002134"/></svg>' +
813                                            ' ' + $('<div>').text(t.print).html() +
814                                        '</a>' +
815                                    '</div>' +
816                                '</div>' +
817                            '</div>' +
818                        '</div>' +
819                    '</div>' +
820                '</div>' +
821            '</div>'
822        );
823    }
824
825    // ─────────────────────────────────────────────────────────────
826    // Render PDF first page to canvas via PDF.js
827    // ─────────────────────────────────────────────────────────────
828    function renderPdfPreview(blobUrl) {
829        if (typeof pdfjsLib === 'undefined') {
830            $('#eform-pdf-loading-txt').text(t.pdfError);
831            return;
832        }
833        pdfjsLib.getDocument(blobUrl).promise
834            .then(function (pdfDoc) { return pdfDoc.getPage(1); })
835            .then(function (page) {
836                var canvas      = document.getElementById('eform-pdf-canvas');
837                var ctx         = canvas.getContext('2d');
838                var wrapper     = document.getElementById('eform-pdf-preview-wrapper');
839                var dpr         = window.devicePixelRatio || 1;
840                var desiredWidth = wrapper.clientWidth || 300;
841                var viewport    = page.getViewport({ scale: 1 });
842                var scale       = (desiredWidth / viewport.width) * dpr;
843                var scaledView  = page.getViewport({ scale: scale });
844
845                canvas.style.width  = desiredWidth + 'px';
846                canvas.style.height = Math.floor(scaledView.height / dpr) + 'px';
847                canvas.width        = scaledView.width;
848                canvas.height       = scaledView.height;
849
850                return page.render({ canvasContext: ctx, viewport: scaledView }).promise
851                    .then(function () {
852                        $('#eform-pdf-loading-txt').hide();
853                        $('#eform-pdf-canvas').show();
854                    });
855            })
856            .catch(function () {
857                $('#eform-pdf-loading-txt').text(t.pdfError);
858            });
859    }
860
861}); // end document.ready
862
863// ─────────────────────────────────────────────────────────────────
864// EXISTING: validateFormControls (UNCHANGED)
865// ─────────────────────────────────────────────────────────────────
866function validateFormControls() {
867    var hasError = false;
868    var swiftValidated = false;
869    $('.form-control').each(function () {
870        var $field = $(this);
871        var isOptional = $field.hasClass('opt');
872        var value = $field.val();
873        if (value !== null && typeof value === 'string') { value = value.trim(); }
874        if($("input[data-sc-field-name='SwiftCode']").val() == "")
875        {
876            if($("input[data-sc-field-name='hidBank']").val() != "" && $("input[data-sc-field-name='hidCurrency']").val() != ""
877            &&  $("input[data-sc-field-name='hidCountryCode']").val() != "" && $("input[data-sc-field-name='hidTType']").val() == "int")
878            {
879                swiftValidated = true;
880            }
881        }
882        if (isOptional || $field.is(":visible") == false || swiftValidated) {
883            $field.css('border-color', '');
884            return;
885        }
886       
887        if (!value || value === '' || value === null) {
888            $field.css('border-color', 'red');
889            hasError = true;
890        } else {
891            $field.css('border-color', '');
892        }
893    });
894    return !hasError;
895}
896
897// ─────────────────────────────────────────────────────────────────
898// EXISTING: checkAndEnableButton (UNCHANGED)
899// ─────────────────────────────────────────────────────────────────
900function checkAndEnableButton(subitBtn) {
901    var checkboxChecked = $('.form-check-input:checked').length > 1;
902    if (checkboxChecked) {
903        $(subitBtn).prop('disabled', false);
904    } else {
905        $(subitBtn).prop('disabled', true);
906    }
907}
908
909function LoadCountries()
910{
911    // Load countries
912        $.ajax({
913            url: '/api/sitecore/EForm/gc',
914            method: 'GET',
915            contentType: 'application/json',
916            beforeSend: function () { $("#alinmaLoader").addClass("active"); },
917            success: function (data) {
918                if (data != null && data.result.length > 0) {
919                    $("#alinmaLoader").removeClass("active");
920
921                    if($('html').attr('lang')=="en")
922                    {
923                        $.each(data.result, function (i, item) {
924                            $('.remit-country').append(
925                                $('<option>', { value: item.code, text: item.country_en })
926                            );
927                        });
928                    }
929                    else
930                    {
931                        $.each(data.result, function (i, item) {
932                            $('.remit-country').append(
933                                $('<option>', { value: item.code, text: item.country_ar })
934                            );
935                        });
936                    }
937                    // Append options — no .select2() re-call needed
938                   
939
940                   
941                } else {
942                    $("#alinmaLoader").removeClass("active");
943                }
944            },
945            error: function () { $("#alinmaLoader").removeClass("active"); }
946        });
947}

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.