Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> url404 [in template "10154#10192#18372600" at line 82, column 28] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${url404} [in template "10154#10192#18372600" at line 82, column 26] ----
1<#assign uniqueID = randomNamespace />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign basePath = "/web/branchoffer">
5<#assign environment = url?substring(0, url?index_of(basePath) + basePath?length)>
6<#assign oadURL = propsUtil.get('elan.oad.url')>
7<#assign oadURL_TC = propsUtil.get('elan.oad.tac.url') >
8<#assign prcaURL = propsUtil.get('elan.prca.url') >
9<#assign rewardsCalculatorURL = propsUtil.get('cclm.rewards.calculator.url') >
10<#assign applyNowText = "Apply Now" >
11<#assign learnMoreText = "Learn More" >
12<#assign applicationType = "saa" >
13<#assign projectIds = ["12", "13", "14", "15", "16"]>
14<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! >
15
16<#assign text_to_apply_source = "vanity url" >
17<#if qstringmap["sms"]?has_content>
18 <#assign sms = 1 >
19 <#assign text_to_apply_source = "sms" >
20</#if>
21<#if qstringmap["qrCode"]?has_content>
22 <#assign text_to_apply_source = "qr code" >
23</#if>
24
25<#if qstringmap["ecid"]?has_content>
26 <#assign ecidExt = qstringmap["ecid"]?first>
27 <#assign ecidExt = htmlUtil.escape(ecidExt)>
28 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
29 <#assign ecidExt = "&ecid=" + ecidExt>
30
31 <#assign campaignId = qstringmap["ecid"]?first >
32 <#assign campaignId = htmlUtil.escape(campaignId)>
33 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
34<#else>
35 <#assign ecidExt="">
36 <#assign campaignId = "" >
37</#if>
38
39<#if qstringmap["bankercode"]?has_content>
40 <#assign bCode= qstringmap["bankercode"]?first>
41 <#assign bCode= htmlUtil.escapeJS(bCode)>
42 <#assign bCode= htmlUtil.escape(bCode)>
43 <#assign isEmployee = false>
44
45
46 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
47 <#if fiData?first?has_content>
48 <#assign fi = fiData?first>
49 <#if projectIds?seq_index_of(fi.projectId) != -1>
50 <#assign subbu_special = fi.offerId>
51 </#if>
52 <#if fi.projectType == "emp">
53 <#assign isEmployee = true>
54 </#if>
55 <#else>
56 <script>
57 console.log("fiData missing");
58 location.href = '${url404}';
59 </script>
60 </#if>
61
62 <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
63 <#if !bData?first?has_content>
64 <script>
65 console.log("bData missing");
66 location.href = '${url404}';
67 </script>
68 </#if>
69 <#list bData as b>
70 <#assign lc = b.locationcode >
71 <#assign bName = b.branch >
72 <#assign bPhone = b.businessphone >
73 <#assign boeid = b.oeid?trim>
74 <#assign fName = b.firstname?trim>
75 <#assign lName = b.lastname?trim>
76 <#assign rLC = b.reallocationcode >
77 <#assign mappedLC = b.mappedLocationCode >
78 </#list>
79<#else>
80 <script>
81 console.log("MainProductBcode missing");
82 location.href = '${url404}';
83 </script>
84</#if>
85
86
87<#if mappedLC?has_content>
88 <#assign lc = mappedLC >
89</#if>
90
91<#if lc?has_content>
92 <#assign firstNameLength = fName?length >
93 <#assign lastNameLength = lName?length >
94 <#if firstNameLength + lastNameLength > 19 >
95 <#if lastNameLength > 18 >
96 <#assign bLName = lName?substring(0,18)>
97 <#else>
98 <#assign bLName = lName>
99 </#if>
100 <#assign maxFirstName = 19 - bLName?length >
101 <#if firstNameLength > maxFirstName >
102 <#assign bFName = fName?substring(0,maxFirstName)>
103 <#else>
104 <#assign bFName = fName>
105 </#if>
106 <#else>
107 <#assign bFName = fName>
108 <#assign bLName = lName>
109 </#if>
110</#if>
111
112<#assign prefix = "00000" >
113<#assign lcWithPrefix = prefix + lc >
114<#assign withPrefixLength = lcWithPrefix?length >
115<#assign startHere = withPrefixLength - 5>
116<#assign lc = lcWithPrefix?substring(startHere)>
117
118<#assign balanceTransferCalculatorOfferTypes = ["108", "109"] >
119<#assign calculatorOfferTypes = ["101", "104", "138", "154", "144", "143", "128"] >
120
121<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
122<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
123<#assign clientProfile = clientProfileList?first>
124<#assign partnerName = clientProfile.getMarketingNameLong()>
125<#assign pbu = clientProfile.getPbu()>
126<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
127<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
128
129<#if (subbu_special?has_content)>
130 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
131<#else>
132 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
133</#if>
134
135<#if (fiCardsData?size > 0)>
136 <#if (subbu_special?has_content)>
137 <#assign lc_used = fiCardsData?first.WebLocationCode>
138 <#else>
139 <#assign lc_used = lc>
140 </#if>
141</#if>
142
143<#assign marketingChannel = 'SAT2A'>
144<#if isEmployee>
145 <#assign marketingChannel = 'EMPL'>
146</#if>
147
148<#assign fultonBankpbu = "0727491">
149<#if pbu == fultonBankpbu>
150 <style>
151 #hideFultonInfo {
152 display: none;
153 }
154 </style>
155</#if>
156
157<#function getSaaOfferIdOREmpOfferId offerType isEmp>
158 <#list fiCardsData as fiData>
159 <#if fiData.offerType == offerType>
160 <#if isEmp>
161 <#return fiData.empofferId>
162 </#if>
163 <#return fiData.saaofferId>
164 </#if>
165 </#list>
166 <#return "" />
167</#function>
168
169<#function getFileNameByOfferType offerType>
170 <#list fiCardsData as fiData>
171 <#if fiData.offerType == offerType>
172 <#return fiData.filename>
173 </#if>
174 </#list>
175 <#return "" />
176</#function>
177
178<#function getUsePRCA offerType>
179 <#list fiCardsData as fiData>
180 <#if fiData.offerType == offerType>
181 <#return fiData.useprca!"">
182 </#if>
183 </#list>
184 <#return "" />
185</#function>
186
187<#function replacePlaceholders(input, APRValue, AMFValue, BALValue, TCLinkValue)>
188 <#return input
189 ?replace("{APR}", APRValue)
190 ?replace("{AMF}", AMFValue)
191 ?replace("{BAL}", BALValue)
192 ?replace("{TC}", TCLinkValue)>
193</#function>
194
195<#assign productOfferTypeValue = "">
196<#assign productOfferTypeName = "">
197<#if (productOfferType.getData())??>
198 <#assign productOfferTypeValue = productOfferType.getData()>
199 <#assign productOfferTypeName = productOfferType.optionsMap[productOfferType.getData()]>
200</#if>
201
202<#assign productOfferTypeName = productOfferTypeName?substring(productOfferTypeName?index_of(" - ") + 3)?upper_case!>
203
204
205<#assign offerId = getSaaOfferIdOREmpOfferId(productOfferTypeValue, isEmployee)>
206<#assign cardArtImage = cdnCardArtUrl + "/" + getFileNameByOfferType(productOfferTypeValue) + ".png" >
207<#assign cardArtImageAlt = cdnCardArtUrl + "/" + getFileNameByOfferType(productOfferTypeValue) + ".jpg" >
208<#assign cardArtImageAltText = partnerName + " " + productOfferTypeName?capitalize>
209
210
211<#assign hasBalanceTransferCalculator = balanceTransferCalculatorOfferTypes?seq_contains(productOfferTypeValue)>
212<#assign hasCalculatorRewards = calculatorOfferTypes?seq_contains(productOfferTypeValue)>
213<#assign useprcaValue = getUsePRCA(productOfferTypeValue)>
214
215<#assign APR="" AMF="" BAL="">
216<#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId)>
217<#if scrapedData?? && scrapedData?has_content && (scrapedData?size > 0)>
218
219<#list scrapedData as sItem>
220 <#if sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases") && sItem.scrapedValue?has_content>
221 <#if !APR?has_content><#assign APR = sItem.scrapedValue></#if>
222 <#elseif sItem.scrapedLabel?contains("Annual Membership Fee") && sItem.scrapedValue?has_content>
223 <#if !AMF?has_content><#assign AMF = sItem.scrapedValue></#if>
224 <#elseif sItem.scrapedLabel?contains("APR for Balance Transfers") && sItem.scrapedValue?has_content>
225 <#if !BAL?has_content><#assign BAL = sItem.scrapedValue></#if>
226 </#if>
227 <#if APR?has_content && AMF?has_content && BAL?has_content>
228 <#break>
229 </#if>
230 </#list>
231</#if>
232
233 <#assign APRValue = APR!'' />
234 <#assign AMFValue = AMF!'' />
235 <#assign BALValue = BAL!'' />
236
237 <#assign termsAndConditionsLink =
238 '<a href="' + oadURL_TC + '?step=display&offerId=' + offerId + '&locationCode=' + lc_used +
239 '" target="_blank" class="t_c_link">' +
240 'See Terms & Conditions' +
241 '</a>'
242 />
243 <#assign TCLinkValue = termsAndConditionsLink!'' />
244
245<#assign primaryOfferCopyRaw = primaryOfferCopy.getData()!'' />
246<#assign updatedPrimaryOfferCopy = replacePlaceholders(primaryOfferCopyRaw, APRValue, AMFValue, BALValue, TCLinkValue) />
247<#assign employeePrimaryOfferCopyRaw = employeePrimaryOfferCopy.getData()!'' />
248<#assign updatedEmployeePrimaryOfferCopy = replacePlaceholders(employeePrimaryOfferCopyRaw, APRValue, AMFValue, BALValue, TCLinkValue) />
249
250<#assign benefits = []>
251 <#if benefit.getSiblings()?has_content>
252 <#list benefit.getSiblings() as benefit>
253 <#assign primaryBenefitCopyRaw = benefit.primaryBenefitCopy.getData()!'' />
254 <#assign updatedPrimaryBenefitCopy = replacePlaceholders(primaryBenefitCopyRaw, APRValue, AMFValue, BALValue, TCLinkValue) />
255 <#assign employeeprimaryBenefitCopyRaw = benefit.employeePrimaryBenefitCopy.getData()!'' />
256 <#assign updatedEmployeePrimaryBenefitCopy = replacePlaceholders(employeeprimaryBenefitCopyRaw, APRValue, AMFValue, BALValue, TCLinkValue) />
257
258 <#assign benefitObject = {
259 "svgIcon": benefit.primaryBenefitSVGIcon.getData(),
260 "primaryBenefitCopy": updatedPrimaryBenefitCopy,
261 "employeePrimaryBenefitCopy": updatedEmployeePrimaryBenefitCopy
262 } />
263 <#assign benefits += [benefitObject] />
264 </#list>
265</#if>
266
267<#assign additionalBenefits = []>
268<#if additionalBenefit.getSiblings()?has_content>
269 <#list additionalBenefit.getSiblings() as additionalBenefit>
270
271 <#assign additionalBenefitCopyRaw = additionalBenefit.additionalBenefitCopy.getData()!'' />
272 <#assign updatedAdditionalBenefitCopy = replacePlaceholders(additionalBenefitCopyRaw, APRValue, AMFValue, BALValue, TCLinkValue) />
273 <#assign employeeAdditionalBenefitCopyRaw = additionalBenefit.employeeAdditionalBenefitCopy.getData()!'' />
274 <#assign updatedEmployeeAdditionalBenefitCopy = replacePlaceholders(employeeAdditionalBenefitCopyRaw, APRValue, AMFValue, BALValue, TCLinkValue) />
275
276
277 <#assign additionalBenefitObject = {
278 "additionalBenefitSVGIcon": additionalBenefit.additionalBenefitSVGIcon.getData(),
279 "additionalBenefitCopy": updatedAdditionalBenefitCopy,
280 "employeeAdditionalBenefitCopy": updatedEmployeeAdditionalBenefitCopy
281 } />
282 <#assign additionalBenefits += [additionalBenefitObject] />
283 </#list>
284</#if>
285<#assign renderApplyNowButtonCount = 0>
286<#macro renderApplyNowButton>
287 <#assign renderApplyNowButtonCount = renderApplyNowButtonCount +1>
288 <#if useprcaValue == "1">
289 <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}&applicationType=${applicationType}" method="post" class="BAAForm" id="BAAForm">
290 <label for="${uniqueID}appDataBAA-${offerId}-${renderApplyNowButtonCount}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
291 <textarea aria-hidden="true" rows="20" cols="100" name="applicationData" id="${uniqueID}appDataBAA-${offerId}-${renderApplyNowButtonCount}" class="appDataBAA" style="display:none;" title="application data"></textarea>
292 <a
293 class="apply-now-link apply-now-button"
294 href="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}&applicationType=${applicationType}"
295 data-button-name="apply-now-link"
296 data-product-name="${productOfferTypeName!''}"
297 >
298 ${applyNowText}
299 </a>
300 </form>
301 <#else>
302 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}" method="post" class="BAAForm" id="BAAForm">
303 <label for="${uniqueID}appDataBAA-${offerId}-${renderApplyNowButtonCount}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
304 <textarea aria-hidden="true" rows="20" cols="100" name="applicationData" id="${uniqueID}appDataBAA-${offerId}-${renderApplyNowButtonCount}" class="appDataBAA" style="display:none;" title="application data"></textarea>
305 <a
306 class="apply-now-link apply-now-button"
307 href="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}"
308 data-button-name="apply-now-link"
309 data-product-name="${productOfferTypeName!''}"
310 >
311 ${applyNowText}
312 </a>
313 </form>
314 </#if>
315</#macro>
316
317<div id="product-card-id" class="SAA-Product-Detail-2024">
318 <div class="tab-card">
319 <div class="tab-card__left">
320 <h1 class="super-head">
321 ${productOfferTypeName}
322 <#if (cardNameFootnotes.getData())??>
323 <sup class="super-head--super-script">${cardNameFootnotes.getData()}</sup>
324 </#if>
325 </h1>
326 <img src="${cardArtImage}" alt="${cardArtImageAltText!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" />
327 <@renderApplyNowButton />
328 <#if (hasBalanceTransferCalculator)>
329 <a href="javascript:void(0);" class="transfer-modal-link" data-micromodal-trigger="modal-2">See how much you could save with a balance transfer</a>
330 </#if>
331 <#if (hasCalculatorRewards)>
332 <a class="reward-calculator-link" target="_blank" href="${rewardsCalculatorURL}?ecdma-lc=${lc}">Calculate Rewards</a>
333 </#if>
334 </div>
335
336 <div class="tab-card__right">
337 <h1 class="super-head">
338 ${productOfferTypeName}
339 <#if (cardNameFootnotes.getData())??>
340 <sup class="super-head--super-script">${cardNameFootnotes.getData()}</sup>
341 </#if>
342 </h1>
343 <#if isEmployee>
344 <div class="offer-copy">
345 <#if updatedEmployeePrimaryOfferCopy?has_content>
346 ${updatedEmployeePrimaryOfferCopy}
347 <#else>
348 ${updatedPrimaryOfferCopy!''}
349 </#if>
350 </div>
351 <#else>
352 <div class="offer-copy">${updatedPrimaryOfferCopy!''}</div>
353 </#if>
354 <div class="benefits">
355 <#list benefits as benefit>
356 <div class="benefits__item">
357 <#if benefit.svgIcon?has_content>
358 <div class="svg-container">
359 <img loading="lazy" src="${benefit.svgIcon}" alt="" class="<#if benefit.svgIcon?contains('svg')>dynamic-svg</#if>" />
360 </div>
361 </#if>
362 <#if isEmployee>
363 <div>
364 <#if benefit.employeePrimaryBenefitCopy?has_content>
365 ${benefit.employeePrimaryBenefitCopy}
366 <#else>
367 ${benefit.primaryBenefitCopy!''}
368 </#if>
369 </div>
370 <#else>
371 <div>
372 ${benefit.primaryBenefitCopy!''}
373 </div>
374 </#if>
375 </div>
376 </#list>
377 </div>
378 </div>
379
380 </div>
381
382 <div class="additional-benefit-container">
383 <div class="additional-benefit">
384 <h2 class="additional-benefit__header">Additional Benefits </h2>
385 <div class="additional-benefit__layout">
386 <#list additionalBenefits as additionalBenefit>
387 <div class="additional-benefit__item">
388 <#if additionalBenefit.additionalBenefitSVGIcon?has_content>
389 <div class="svg-container">
390 <img loading="lazy" src="${additionalBenefit.additionalBenefitSVGIcon}" alt="" class="dynamic-svg" />
391 </div>
392 </#if>
393 <#if isEmployee>
394 <div>
395 <#if additionalBenefit.employeeAdditionalBenefitCopy?has_content>
396 ${additionalBenefit.employeeAdditionalBenefitCopy}
397 <#else>
398 ${additionalBenefit.additionalBenefitCopy!''}
399 </#if>
400 </div>
401 <#else>
402 <div>${additionalBenefit.additionalBenefitCopy!''}</div>
403 </#if>
404 </div>
405 </#list>
406 </div>
407 <div class="additional-benefit__button">
408 <@renderApplyNowButton />
409 </div>
410 </div>
411 </div>
412</div>
413
414
415
416<!-- https://micromodal.vercel.app/ -->
417<script src="https://unpkg.com/micromodal/dist/micromodal.min.js" async></script>
418<script async>
419 function submitForm(event) {
420 event.preventDefault();
421 var offerId = event.target.getAttribute("offerId");
422 console.log("offerId::::::::::::::"+offerId);
423 var lc = document.getElementById('locationCode').value;
424
425 var url = "${prcaURL}?locationCode=" + lc + "&offerId=" + offerId + "&preparerType=customer";
426
427 document.getElementById('applyForm').action = url;
428 postCreditcardLearnMore(url);
429
430 }
431
432 function postCreditcardLearnMore(path, method='post') {
433 const form = document.createElement('form');
434 form.method = method;
435 //form.target = '_blank';
436 form.action = path;
437 document.body.appendChild(form);
438 form.submit();
439 }
440 AUI().ready(function() {
441 MicroModal.init();
442
443 setTimeout(() => {
444 const svgImages = document.querySelectorAll(".SAA-Product-Detail-2024 .dynamic-svg");
445 svgImages.forEach(function (image) {
446 const svgUrl = image.src;
447 fetch(svgUrl)
448 .then(response => response.text())
449 .then(svgContent => {
450 const parser = new DOMParser();
451 const svgElement = parser.parseFromString(svgContent, "image/svg+xml").querySelector("svg");
452 if (svgElement) {
453 image.replaceWith(svgElement); // Replace <img> with the <svg>
454 }
455 })
456 .catch(err => console.error("Error loading SVG:", err));
457
458 });
459 }, 1);
460 });
461</script>
462
463<script>
464
465 document.addEventListener('DOMContentLoaded', function() {
466 var locationCode = "${rLC!lc}";
467 var lc = '${lc!0}';
468
469 var regex = /\d+/g;
470 var bdNumber = "${bPhone!''}";
471 var phoneNum = bdNumber.match(regex);
472 var areaCode = "";
473 var exchangeCode = "";
474 var num = "";
475 if(phoneNum != null) {
476 phoneNum = phoneNum.join("");
477 areaCode = phoneNum.substring(0,3);
478 exchangeCode = phoneNum.substring(3,6);
479 num = phoneNum.substring(6,10);
480 }
481
482 jQuery('.apply-now-link').on('click', function(e) {
483 $(this).closest('.BAAForm').submit();
484 const bankerId = '${boeid}';
485 const employeeId = "";
486 let visitorId = bankerId;
487
488 if('${isEmployee?string("yes", "no")}' == "yes") {
489 visitorId = employeeId;
490 }
491 const htmlElementName = e.target.nodeName;
492 const isButton = (htmlElementName ==='BUTTON');
493 // gets href of clicked anchor tag
494 let href = e.target.href;
495
496 // get action url of form submit button
497 if(isButton) {
498 href = document.getElementById('BAAForm').action;
499 }
500
501 const urlParams = new URLSearchParams(href);
502 let offerId = "";
503
504 if(urlParams.has('offerid')) {
505 offerId = urlParams.get('offerid');
506 }
507
508 if(urlParams.has('offerId')) {
509 offerId = urlParams.get('offerId');
510 }
511
512 window.dataLayer.push({
513 'event' : 'apply_payload',
514 'location_code': locationCode,
515 'banker_code': '${bCode}',
516 'offer_id': offerId,
517 'visitor_id': visitorId,
518 });
519 return false;
520 });
521 jQuery(".BAAForm").on("submit", function(e){
522 e.preventDefault();
523 var xmlData;
524
525 if ('${isEmployee?string("yes", "no")}' == "yes") {
526 xmlData = '<?xml version="1.0"?>'+
527 "<prefillData>"+
528 "<versionNumber>1.0</versionNumber>"+
529 "<applicationData>"+
530 "<bankerInformation>"+
531 "<employeeFullName>Employee Product</employeeFullName>"+
532 "<employeeId>EMPPROD</employeeId>"+
533 "<employeePhoneNumber></employeePhoneNumber>"+
534 "<locationCode>" + locationCode + "</locationCode>"+
535 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
536 "<originatingBranchId></originatingBranchId>"+
537 "<name>" +
538 "<first>${bFName!'0'}</first>" +
539 "<last>${bLName!'0'}</last>" +
540 "</name>"+
541 "<phone>"+
542 "<areaCode>" + areaCode + "</areaCode>"+
543 "<exchange>" + exchangeCode + "</exchange>"+
544 "<number>" + num + "</number>"+
545 "</phone>"+
546 "</bankerInformation>"+
547 "<referral>" +
548 "<divisionNumber></divisionNumber>" +
549 "<partnerLocationID>" + locationCode + "</partnerLocationID>" +
550 "<referralId>EMPPROD</referralId>" +
551 "</referral>" +
552 "</applicationData>"+
553 "</prefillData>";
554 } else {
555 xmlData = '<?xml version="1.0"?>'+
556 "<prefillData>"+
557 "<versionNumber>1.0</versionNumber>"+
558 "<applicationData>"+
559 "<bankerInformation>"+
560 "<locationCode>" + locationCode + "</locationCode>"+
561 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
562 "<employeeID>${boeid!0}</employeeID>"+
563 "<name>" +
564 "<first>${bFName!'0'}</first>" +
565 "<last>${bLName!'0'}</last>" +
566 "</name>"+
567 "<phone>"+
568 "<areaCode>"+areaCode+"</areaCode>"+
569 "<exchange>"+exchangeCode+"</exchange>"+
570 "<number>"+num+"</number>"+
571 "</phone>"+
572 "</bankerInformation>"+
573 "</applicationData>"+
574 "</prefillData>"
575 }
576 console.log("useprcaValue---->"+${useprcaValue})
577 if('${useprcaValue}' =='1'){
578 if('${isEmployee?string("yes", "no")}' == "yes"){
579 var employeeFullName = "${fName!'0'}" + ' ' + "${lName!'0'}";
580 var firstName = "${fName!'0'}".trim();
581 var lastName = "${lName!'0'}".trim();
582 var fullName = employeeFullName.trim();
583
584 if (fullName.length <= 19) {
585 employeeFullName = fullName;
586 } else if (firstName.charAt(0) + ' ' + lastName.length <= 19) {
587 employeeFullName = firstName.charAt(0) + ' ' + lastName;
588 } else {
589 employeeFullName = firstName.charAt(0) + ' ' + lastName.substring(0, 17);
590 }
591 var applicationJsonData = {
592 "prefillData": {
593 "versionNumber": "1.0",
594 "applicationData": {
595 "bankerInformation": {
596 "locationCode": locationCode,
597 "originatingBranchId": "${bName!'0'}",
598 "employeeId": "EMPPROD",
599 "employeeFullName": "Employee Product",
600 "employeePhoneNumber": phoneNum
601 }
602 }
603 }
604 };
605 }else{
606 var employeeFullName = "${fName!'0'}" + ' ' + "${lName!'0'}";
607 var firstName = "${fName!'0'}".trim();
608 var lastName = "${lName!'0'}".trim();
609 var fullName = employeeFullName.trim();
610
611 if (fullName.length <= 19) {
612 employeeFullName = fullName;
613 } else if (firstName.charAt(0) + ' ' + lastName.length <= 19) {
614 employeeFullName = firstName.charAt(0) + ' ' + lastName;
615 } else {
616 employeeFullName = firstName.charAt(0) + ' ' + lastName.substring(0, 17);
617 }
618 var applicationJsonData = {
619 "prefillData": {
620 "versionNumber": "1.0",
621 "applicationData": {
622 "bankerInformation": {
623 "locationCode": locationCode,
624 "originatingBranchId": "${bName!'0'}",
625 "employeeId": "${boeid!0}",
626 "employeeFullName": employeeFullName,
627 "employeePhoneNumber": phoneNum
628 }
629 }
630 }
631 };
632 }
633 var jsonData = JSON.stringify(applicationJsonData);
634 $(this).children(".appDataBAA").val(jsonData);
635 }else{
636 $(this).children(".appDataBAA").val(xmlData);
637 }
638
639 this.submit();
640 });
641 });
642 function resizeImg(img) {
643 img.addEventListener("load", function() {
644 var cardImgWidth = img.width;
645 var cardImgHeight = img.height;
646 if(cardImgWidth > cardImgHeight) {
647 img.style.width = "285px";
648 } else {
649 img.style.width = "150px";
650 }
651 });
652 }
653</script>
654
655<style>
656 :root {
657 --card-image-size: 280px;
658 --left-padding: 30px;
659 --left-width: calc(var(--card-image-size) + var(--left-padding));
660 --addition-benefits-gap-desktop: 30px;
661 }
662 .SAA-Product-Detail-2024 .tab-card {
663 align-items: flex-start;
664 display: flex;
665 flex-wrap: wrap;
666 justify-content: center;
667 max-width: 1336px;
668 margin: 0 20px;
669 }
670 @media (min-width: 870px) {
671 .SAA-Product-Detail-2024 .tab-card {
672 flex-wrap: nowrap;
673 padding-bottom: 45px;
674 }
675 }
676 @media (min-width: 1376px) {
677 .SAA-Product-Detail-2024 .tab-card {
678 margin: 0 auto;
679 }
680 }
681 @media (min-width: 1336px) {
682 .SAA-Product-Detail-2024 .tab-card {
683 align-items: stretch;
684 }
685 }
686
687 .SAA-Product-Detail-2024 .tab-card__left {
688 display: flex;
689 align-items: center;
690 flex-direction: column;
691 flex-shrink: 0;
692 width: 100%;
693 padding: 40px 0 10px 0;
694 }
695 @media (min-width: 870px) {
696 .SAA-Product-Detail-2024 .tab-card__left {
697 display: block;
698 width: var(--left-width);
699 padding-right: var(--left-padding);
700 }
701 .SAA-Product-Detail-2024 .tab-card__left .super-head {
702 display: none;
703 }
704 }
705 .SAA-Product-Detail-2024 .tab-card__left img {
706 height: auto;
707 margin: auto;
708 margin-bottom: 20px;
709 display: block;
710 max-height: var(--card-image-size);
711 object-fit: contain;
712 max-width: var(--card-image-size);
713 }
714 #content .SAA-Product-Detail-2024 .BAAForm {
715 width: 100%;
716 }
717 #content .SAA-Product-Detail-2024 .apply-now-link {
718 width: 168px;
719 padding: 10px 30px;
720 margin-right: auto;
721 margin-left: auto;
722 background-color: var(--ecdma-btn-color);
723 color: #fff;
724 text-transform: capitalize;
725 text-align: center;
726 text-decoration: none;
727 }
728 #content .SAA-Product-Detail-2024 .apply-now-link:hover {
729 background-color: var(--ecdma-hover-color);
730 }
731 .SAA-Product-Detail-2024 .apply-now-link,
732 .SAA-Product-Detail-2024 .reward-calculator-link,
733 .SAA-Product-Detail-2024 .transfer-modal-link {
734 display: block;
735 text-align: center;
736 margin-bottom: 10px;
737 }
738
739 .SAA-Product-Detail-2024 .tab-card__right {
740 flex-grow: 1;
741 padding: 0 0 40px 0;
742 }
743 @media (min-width: 870px) {
744 .SAA-Product-Detail-2024 .tab-card__right {
745 padding: 30px 0 30px 0;
746 }
747 }
748 .SAA-Product-Detail-2024 .tab-card__right .super-head {
749 display: none;
750 }
751 @media (min-width: 870px) {
752 .SAA-Product-Detail-2024 .tab-card__right .super-head {
753 display: block;
754 }
755 }
756 #content .SAA-Product-Detail-2024 .super-head {
757 color: #000;
758 margin-bottom: 18px;
759 }
760 #content .SAA-Product-Detail-2024 .super-head--super-script {
761 font-size: 10px;
762 line-height: 13px;
763 }
764 #content .SAA-Product-Detail-2024 .tab-card__right .offer-copy p {
765 margin-bottom: 10px;
766 }
767 .SAA-Product-Detail-2024 .tab-card__right .offer-copy {
768 color: #000;
769 margin-bottom: 20px;
770 }
771 #content .SAA-Product-Detail-2024 .tab-card__right .offer-copy h1,
772 #content .SAA-Product-Detail-2024 .tab-card__right .offer-copy h2,
773 #content .SAA-Product-Detail-2024 .tab-card__right .offer-copy h3,
774 #content .SAA-Product-Detail-2024 .tab-card__right .offer-copy h4,
775 #content .SAA-Product-Detail-2024 .tab-card__right .offer-copy h5,
776 #content .SAA-Product-Detail-2024 .tab-card__right .offer-copy h6 {
777 color: var(--ecdma-text-color);
778 font-size: 25px;
779 font-style: normal;
780 font-weight: 400;
781 line-height: 1.3;
782 margin-bottom: 8px;
783 }
784 .SAA-Product-Detail-2024 .benefits {
785 display: flex;
786 flex-wrap: wrap;
787 gap: 20px;
788 }
789 .SAA-Product-Detail-2024 .benefits__item {
790 display: flex;
791 flex-wrap: none;
792 gap: 10px;
793 flex: 1;
794 flex-basis: 100%;
795 }
796 @media (min-width: 870px) {
797 .SAA-Product-Detail-2024 .benefits__item {
798 flex-basis: calc(50% - 20px);
799 }
800 }
801 .SAA-Product-Detail-2024 .benefits__item .benefitfootnote {
802 font-size: 85%;
803 }
804 #content .SAA-Product-Detail-2024 .tab-card__right .offer-copy h2 sup,
805 #content .SAA-Product-Detail-2024 .benefits__item h3 sup {
806 font-size: 75%;
807 font-weight: normal;
808 }
809
810 .SAA-Product-Detail-2024 .benefits__item img {
811 width: 20px;
812 height: 20px;
813 margin-right: 5px;
814 }
815 #content .SAA-Product-Detail-2024 .benefits__item h1,
816 #content .SAA-Product-Detail-2024 .benefits__item h2,
817 #content .SAA-Product-Detail-2024 .benefits__item h3,
818 #content .SAA-Product-Detail-2024 .benefits__item h4,
819 #content .SAA-Product-Detail-2024 .benefits__item h5,
820 #content .SAA-Product-Detail-2024 .benefits__item h6 {
821 color: var(--ecdma-text-color);
822 font-size: 20px;
823 font-style: normal;
824 font-weight: 700;
825 line-height: 1.3;
826 margin-bottom: 8px;
827 }
828 .SAA-Product-Detail-2024 .svg-container,
829 .SAA-Product-Detail-2024 .benefits__item h1,
830 .SAA-Product-Detail-2024 .benefits__item h2,
831 .SAA-Product-Detail-2024 .benefits__item h3,
832 .SAA-Product-Detail-2024 .benefits__item h4,
833 .SAA-Product-Detail-2024 .benefits__item h5,
834 .SAA-Product-Detail-2024 .benefits__item h6 {
835 display: inline-block;
836 }
837 .SAA-Product-Detail-2024 .svg-container svg,
838 .SAA-Product-Detail-2024 .svg-container svg rect,
839 .SAA-Product-Detail-2024 .svg-container svg circle,
840 .SAA-Product-Detail-2024 .svg-container svg ellipse,
841 .SAA-Product-Detail-2024 .svg-container svg line,
842 .SAA-Product-Detail-2024 .svg-container svg polygon,
843 .SAA-Product-Detail-2024 .svg-container svg polyline,
844 .SAA-Product-Detail-2024 .svg-container svg path,
845 .SAA-Product-Detail-2024 .svg-container svg text,
846 .SAA-Product-Detail-2024 .svg-container svg tspan,
847 .SAA-Product-Detail-2024 .svg-container svg textPath
848 .SAA-Product-Detail-2024 .svg-container svg g,
849 .SAA-Product-Detail-2024 .svg-container svg use {
850 fill: var(--ecdma-bg-color) !important;
851 stroke: var(--ecdma-bg-color) !important;
852 }
853 .SAA-Product-Detail-2024 .svg-container svg,
854 .SAA-Product-Detail-2024 .svg-container img {
855 margin: 0;
856 max-width: 30px;
857 height: 30px;
858 }
859 .additional-benefit-container {
860 background-color: #F7F7F7;
861 padding: 30px 0;
862 margin-bottom: 30px;
863 }
864 .SAA-Product-Detail-2024 .additional-benefit {
865 max-width: 1336px;
866 margin: 0 20px;
867 }
868 @media (min-width: 1376px) {
869 .SAA-Product-Detail-2024 .additional-benefit {
870 margin: 0 auto;
871 }
872 }
873 .SAA-Product-Detail-2024 .additional-benefit__layout {
874 display: flex;
875 flex-wrap: wrap;
876 margin: 20px 0;
877 gap: 20px;
878 }
879 @media (min-width: 870px) {
880 .SAA-Product-Detail-2024 .additional-benefit__layout {
881 margin: 40px 0;
882 gap: var(--addition-benefits-gap-desktop);
883 }
884 }
885 #content .SAA-Product-Detail-2024 .additional-benefit__header {
886 color: #000;
887 text-align: left;
888 font-size: 25px;
889 font-weight: 400;
890 line-height: 1.4;
891 }
892 @media (min-width: 870px) {
893 #content .SAA-Product-Detail-2024 .additional-benefit__header {
894 text-align: center;
895 }
896 }
897 .SAA-Product-Detail-2024 .additional-benefit__item {
898 display: flex;
899 flex-wrap: nowrap;
900 gap: 10px;
901 flex: 1;
902 flex-basis: 100%;
903 }
904 @media (min-width: 870px) {
905 .SAA-Product-Detail-2024 .additional-benefit__item {
906 flex-basis: calc(25% - var(--addition-benefits-gap-desktop));
907 }
908 }
909 #content .SAA-Product-Detail-2024 .additional-benefit__item h1,
910 #content .SAA-Product-Detail-2024 .additional-benefit__item h2,
911 #content .SAA-Product-Detail-2024 .additional-benefit__item h3,
912 #content .SAA-Product-Detail-2024 .additional-benefit__item h4,
913 #content .SAA-Product-Detail-2024 .additional-benefit__item h5,
914 #content .SAA-Product-Detail-2024 .additional-benefit__item h6 {
915 color: var(--ecdma-text-color);
916 font-size: 20px;
917 font-style: normal;
918 font-weight: 700;
919 line-height: 1.4;
920 margin-bottom: 10px;
921 }
922 .SAA-Product-Detail-2024 .additional-benefit__button .apply-now-link {
923 margin: auto;
924 }
925 @media (min-width: 870px) {
926 .SAA-Product-Detail-2024 .additional-benefit__button .apply-now-link {
927 max-width: var(--card-image-size);
928 }
929 }
930</style>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> url404 [in template "10154#10192#18386842" at line 37, column 30] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${url404} [in template "10154#10192#18386842" at line 37, column 28] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
4
5<#if qstringmap["bankercode"]?has_content>
6 <#assign bankercode = qstringmap["bankercode"]?first>
7 <#assign bankercode = htmlUtil.escape(bankercode)>
8 <#assign bankercode = htmlUtil.escapeJS(bankercode)>
9 <#assign bankercode = htmlUtil.escapeURL(bankercode)>
10
11 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bankercode)>
12 <#if fiData?first?has_content>
13 <#assign fi = fiData?first>
14 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14"))>
15 <#assign subbu_special = fi.offerId>
16 </#if>
17 </#if>
18
19 <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bankercode)>
20 <#list bData as b>
21 <#assign rLC = b.reallocationcode >
22 <#assign lc = b.locationcode >
23 <#assign mappedLC = b.mappedLocationCode >
24 </#list>
25
26 <#assign isEmployee = false>
27
28 <#if fiData?first?has_content>
29 <#assign fi = fiData?first>
30 <#if fi.projectType == "emp">
31 <#assign isEmployee = true>
32 </#if>
33 </#if>
34<#else>
35 <script>
36 console.log("MainProductBcode missing");
37 //location.href = '${url404}';
38 </script>
39</#if>
40
41<#if bankercode?starts_with("amp") && (url?contains("11t1m"))>
42 <#assign ameriprise = true>
43<#else>
44 <#assign ameriprise = false>
45</#if>
46
47<#if mappedLC?has_content && !ameriprise>
48 <#assign lc = mappedLC >
49</#if>
50
51
52<#if lc?has_content>
53 <#assign prefix = "00000" >
54 <#assign lcWithPrefix = prefix + lc >
55 <#assign withPrefixLength = lcWithPrefix?length >
56 <#assign startHere = withPrefixLength - 5>
57 <#assign lc = lcWithPrefix?substring(startHere)>
58 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
59 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
60
61 <#assign clientProfile = clientProfileList?first>
62 <#assign partnerName=clientProfile.getMarketingNameLong()>
63 <#assign pbu = clientProfile.getPbu()>
64 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
65
66 <#assign fultonBankpbu = "0727491">
67 <#if pbu == fultonBankpbu>
68 <style>
69 #hideFultonInfo {
70 display: none;
71 }
72 </style>
73 </#if>
74
75 <#assign optoutData = utilServ.makeCall('crc_DDCSAAOptOut',pbu+'&'+subbu)>
76 <#if (optoutData?size == 0)>
77 <#if (subbu_special?has_content)>
78 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
79 <script>
80 console.log('new subbu', '${subbu_special!''}');
81 </script>
82 <#else>
83 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
84 </#if>
85 <#if (fiCardsData?size > 0)>
86 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
87 <#assign cardProviderAbbreviated = ''>
88 <#if (cardProvider?size > 0)>
89 <#-- This will be V for visa or M for mastercard. -->
90 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
91 <#else>
92 <script>
93 console.log('No V or M data')
94 </script>
95 </#if>
96 <#list fiCardsData as fib>
97 <#switch fib.offerType>
98 <#case "101">
99 <#assign productURL = "consumer-edr2112">
100 <#assign productName = "Everyday Rewards+">
101 <#break>
102 <#case "104">
103 <#assign productURL = "max-cash">
104 <#assign productName = "Max Cash Preferred Card">
105 <#break>
106 <#case "108">
107 <#assign productURL="consumer-platinum2103">
108 <#assign productName="Platinum Card">
109 <#break>
110 <#case "109">
111 <#assign productURL="consumer-platinum2103">
112 <#assign productName="Platinum Card">
113 <#break>
114 <#case "115">
115 <#assign productURL = "secured">
116 <#assign productName = "Secured Card" >
117 <#break>
118 <#case "138">
119 <#assign productURL = "travel-rewards-plus">
120 <#assign productName = "Travel Rewards+" >
121 <#break>
122 <#case "141">
123 <#assign productURL = "college-real-rewards">
124 <#assign productName = "College Real Rewards" >
125 <#break>
126 <#case "147">
127 <#assign productURL = "max-cash-secured">
128 <#assign productName = "Max Cash Secured Card" >
129 <#break>
130 <#case "154">
131 <#assign productURL = "reserve-rewards-plus">
132 <#assign productName = "Reserve Rewards+" >
133 <#break>
134 <#case "121">
135 <#assign productURL = "business-platinum2103">
136 <#assign productName = "Business Card" >
137 <#break>
138 <#case "128">
139 <#assign productURL = "business-cash-preferred">
140 <#assign productName = "Business Cash Preferred" >
141 <#break>
142 <#case "143">
143 <#assign productURL = "business-real-rewards">
144 <#assign productName = "Business Real Rewards Card" >
145 <#break>
146 <#case "144">
147 <#assign productURL = "smart-business-rewards">
148 <#assign productName = "Smart Business Rewards Card" >
149 <#break>
150 <#default>
151 </#switch>
152 <#if productURL?has_content && url?matches(".*/${productURL}\\?.*")>
153 <#list product.getSiblings() as card>
154 <#if (card.offerType.getData() == fib.offerType)>
155 <div class="page-disclaimer" title="${partnerName!''} - Disclaimer">
156 <div class="page-disclaimer__content">
157 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && card.disclaimerAssociatedBank.getData()?has_content>
158 <#if isEmployee && card.employeeDisclaimerAssociatedBank?has_content>
159 ${card.employeeDisclaimerAssociatedBank.getData()}
160 <#else>
161 ${card.disclaimerAssociatedBank.getData()}
162 </#if>
163 <#else>
164 <#if isEmployee && card.employeeDisclaimerVisa?has_content && cardProviderAbbreviated?contains('V')>
165 ${card.employeeDisclaimerVisa.getData()}
166 <#elseif isEmployee && card.employeeDisclaimerMasterCard?has_content && cardProviderAbbreviated?contains('M')>
167 ${card.employeeDisclaimerMasterCard.getData()}
168 <#elseif (card.disclaimerVisa?has_content && cardProviderAbbreviated?contains('V'))>
169 ${card.disclaimerVisa.getData()}
170 <#elseif (card.disclaimerMasterCard?has_content && cardProviderAbbreviated?contains('M')) >
171 ${card.disclaimerMasterCard.getData()}
172 </#if>
173 </#if>
174 </div>
175 </div>
176 <#break>
177 </#if>
178 </#list>
179 <#break>
180 </#if>
181 </#list>
182 <#else>
183 <script>
184 console.log("Empty card data");
185 </script>
186 </#if>
187 <#else>
188 <script>
189 console.log("FI opt out");
190 </script>
191 </#if>
192
193<#else>
194 <script>
195 console.log("No lc for disclaimer");
196 </script>
197</#if>
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10154#10192#18386837" at line 14, column 17] ---- Tip: It's the final [] step that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign bCode = qstringmap["bankercod... [in template "10154#10192#18386837" at line 14, column 1] ----
1<#--
2Web content templates are used to lay out the fields defined in a web
3content structure.
4
5Please use the left panel to quickly add commonly used variables.
6Autocomplete is also available and can be invoked by typing "${".
7--><#assign aDateTime = .now>
8<#assign currentYear = aDateTime?string.yyyy>
9<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
10<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
11<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
12<#assign url404 = '/error/404.html'>
13
14<#assign bCode= qstringmap["bankercode"]?first>
15<#assign bCode = htmlUtil.escape(bCode)>
16<#assign bCode = htmlUtil.escapeJS(bCode)>
17
18<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
19<#list bData as b>
20 <#assign lc = b.locationcode >
21 <#assign rLC = b.reallocationcode >
22 <#assign mappedLC = b.mappedLocationCode >
23</#list>
24
25<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
26 <#assign ameriprise = true>
27<#else>
28 <#assign ameriprise = false>
29</#if>
30<#if mappedLC?has_content && !ameriprise>
31 <#assign lc = mappedLC >
32</#if>
33
34<#if lc?has_content>
35
36 <#assign prefix = "00000" >
37 <#assign lcWithPrefix = prefix + lc >
38 <#assign withPrefixLength = lcWithPrefix?length >
39 <#assign startHere = withPrefixLength - 5>
40 <#assign lc = lcWithPrefix?substring(startHere)>
41<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
42 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
43
44 <#assign clientProfile = clientProfileList?first>
45 <#assign pbu = clientProfile.getPbu()>
46 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
47 <#assign partnerName=clientProfile.getMarketingNameLong()>
48 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
49 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
50 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
51 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
52 <#-- add protocal if missing -->
53 <#assign partnerUrl = 'https://' + partnerUrl>
54 </#if>
55 <footer class="page-footer">
56 <div class="page-footer__content">
57 ${footerContent.getData()}
58 </div>
59 </footer>
60
61 <!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
62 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
63 <style>
64 #opt-out-button,
65 .modal__btn.learn-more {
66 background: #0C2074;
67 border: 1px solid #0C2074;
68 color: white;
69 text-transform: uppercase;
70 text-decoration: none;
71 font-size: 16px;
72 padding: 0.5rem 2rem;
73 display: inline-block;
74 border-radius: 0;
75 }
76 #opt-out-button:hover,
77 .modal__btn.learn-more:hover {
78 color: white;
79 border-color: #2C76AF !important;
80 background-color: #2C76AF !important;
81 }
82 .modal__btn.learn-more {
83 background: white;
84 border: 1px solid #0C2074;
85 color: #0C2074;
86 }
87 #opt-out-button[disabled="true"] {
88 background-color: rgba(0,0,0,.15);
89 color: rgba(0,0,0,.45);
90 border-color: rgba(0,0,0,.25);
91 }
92 #opt-out-button:hover[disabled="true"] {
93 background-color: rgba(0,0,0,.15) !important;
94 color: rgba(0,0,0,.45) !important;
95 border-color: rgba(0,0,0,.25) !important;
96 }
97 #opt-out-button:focus {
98 outline-style: solid;
99 outline-color: white;
100 outline-offset: -3px;
101 outline-width: 1px;
102 }
103 .opt-out-link svg {
104 width: 30px;
105 height: 14px;
106 width: auto;
107 vertical-align: middle;
108 }
109 .modal__overlay {
110 position: fixed;
111 top: 0;
112 left: 0;
113 right: 0;
114 bottom: 0;
115 background: rgba(0,0,0,0.6);
116 display: flex;
117 justify-content: center;
118 align-items: center;
119 }
120
121 .modal__container {
122 background-color: #fff;
123 padding: 30px;
124 max-width: 500px;
125 max-height: 100vh;
126 border-radius: 4px;
127 overflow-y: auto;
128 box-sizing: border-box;
129 }
130
131 .modal__header {
132 display: flex;
133 justify-content: space-between;
134 align-items: center;
135 }
136
137 .modal__title {
138 margin-top: 0;
139 margin-bottom: 0;
140 font-weight: 600;
141 font-size: 20px;
142 line-height: 1.25;
143 color: #00449e;
144 box-sizing: border-box;
145 }
146
147 .modal__close {
148 background: transparent;
149 border: 1px solid white;
150 padding: 4px 8px;
151 }
152 .modal__close:hover {
153 border: 1px solid black;
154 }
155
156 .modal__header .modal__close:before { content: "\2715"; }
157
158 .modal__content {
159 margin-top: 2rem;
160 margin-bottom: 2rem;
161 line-height: 1.5;
162 }
163
164 @keyframes mmfadeIn {
165 from { opacity: 0; }
166 to { opacity: 1; }
167 }
168
169 @keyframes mmfadeOut {
170 from { opacity: 1; }
171 to { opacity: 0; }
172 }
173
174 @keyframes mmslideIn {
175 from { transform: translateY(15%); }
176 to { transform: translateY(0); }
177 }
178
179 @keyframes mmslideOut {
180 from { transform: translateY(0); }
181 to { transform: translateY(-10%); }
182 }
183
184 .micromodal-slide {
185 display: none;
186 }
187
188 .micromodal-slide.is-open {
189 display: block;
190 }
191
192 .micromodal-slide[aria-hidden="false"] .modal__overlay {
193 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
194 }
195
196 .micromodal-slide[aria-hidden="false"] .modal__container {
197 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
198 }
199
200 .micromodal-slide[aria-hidden="true"] .modal__overlay {
201 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
202 }
203
204 .micromodal-slide[aria-hidden="true"] .modal__container {
205 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
206 }
207
208 .micromodal-slide .modal__container,
209 .micromodal-slide .modal__overlay {
210 will-change: transform;
211 }
212 </style>
213
214 <div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
215 <div class="modal__overlay" tabindex="-1" data-micromodal-close>
216 <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
217 <header class="modal__header">
218 <h2 class="modal__title" id="modal-1-title">
219 Your California privacy choices
220 </h2>
221 <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
222 </header>
223 <div class="modal__content" id="modal-1-content">
224 <div id="message-no-cookie">
225 <p>
226 We use technologies, such as cookies, that gather information on our website. That information is used for a variety of purposes, such as to understand how visitors interact with our websites, or to serve advertisements on our websites or on other websites. The use of technologies, such as cookies, constitutes a ‘share’ or ‘sale’ of personal information under the California Privacy Rights Act. You can stop the use of certain third-party tracking technologies that are not considered our service providers by clicking on “Opt-Out” below or by broadcasting the global privacy control signal.</p>
227
228 <p> </p>
229
230 <p>Note that due to technological limitations, if you visit our website from a different computer or device, or clear cookies on your browser that store your preferences, you will need to return to this screen to opt-out and/or rebroadcast the signal. You can find a description of the types of tracking technologies, and your options with respect to those technologies, by clicking “Learn more” below.</p>
231 </div>
232 <div id="message-with-cookie">
233 <p>You have successfully opted-out.</p>
234 </div>
235 </div>
236 <div class="modal__footer">
237 <a href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a>
238 <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button>
239 </div>
240 </div>
241 </div>
242 </div>
243 <!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
244 <script>
245 const fdicNode = document.querySelector('.page-footer .fdic');
246 </script>
247 <script>
248 const copyrightNode = document.querySelector('.page-footer .copyright');
249 if (copyrightNode) {
250 copyrightNode.innerHTML = '© Elan Financial Services ' + ${currentYear};
251 }
252
253 </script>
254 <#if url?contains("11t1m")>
255 <script>
256 copyrightNode.classList.add("ecdma-footer-client-name-copyright");
257 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
258 </script>
259 <#else>
260 <script>
261 copyrightNode.classList.add("ecdma-footer-client-name-copyright");
262 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
263 var newNode = document.createElement("div");
264 newNode.classList.add("member-agreement");
265 newNode.innerHTML='<a class="text-color-white" href="https://onboarding.elancreditcard.com/usl/generic/credit-card/application/card-member-agreements?locationCode=${lc!0}" target="_blank">Cardmember Agreements</a>';
266 var parent = fdicNode.parentNode;
267 parent.insertBefore(newNode, fdicNode);
268 </script>
269 </#if>
270
271 <#if partnerUrl?has_content>
272 <script>
273 const homeLink = document.querySelector('.copyright .homelink');
274 if(homeLink) {
275 homeLink.innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>";
276 }
277 </script>
278 </#if>
279
280 <script>
281 /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */
282 fdicNode.insertAdjacentHTML('afterend', '<div class="opt-out-container"><a href="javascript:void(0);" class="opt-out-link text-color-white" data-micromodal-trigger="modal-1">Your California privacy choices <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve"><path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#fff"/><path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#06f"/><path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" fill="#fff"/><path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" fill="#06f"/></svg></a></div>');
283 /* END CALIFORNIA OPT-OUT MODAL TRIGGER */
284 </script>
285 <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC -->
286
287 <script>
288 window.getCookieDomain = function() {
289 var hostname = window.location.hostname.split(".");
290 return hostname && hostname.slice(hostname.length - 2).join(".");
291 }
292 window.setToOptOut = function() {
293 if (window.getCookie('privacy_optout')) {
294 document.getElementById('message-no-cookie').style.display = 'none';
295 document.getElementById('message-with-cookie').style.display = 'block';
296 document.getElementById('opt-out-button').setAttribute('disabled', true)
297 } else {
298 document.getElementById('message-no-cookie').style.display = 'block';
299 document.getElementById('message-with-cookie').style.display = 'none';
300 }
301 }
302 window.getCookie = function(name) {
303 var value = '; ' + document.cookie;
304 var parts = value.split('; ' + name + '=');
305 if (parts.length === 2) return parts.pop().split(';').shift();
306 }
307 window.californiaOptOut = function() {
308 if (!window.getCookie('privacy_optout')) {
309 document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;';
310 try {
311 if (window.CustomEvent) {
312 window.dispatchEvent(new CustomEvent('privacy_optout'));
313 } else {
314 var privacyOptoutEvent = document.createEvent('Event');
315 privacyOptoutEvent.initEvent('privacy_optout', true, true);
316 window.dispatchEvent(privacyOptoutEvent);
317 }
318 window.setToOptOut();
319 } catch (err) {
320 console.error(err);
321 }
322 }
323 }
324 MicroModal.init({
325 onShow: window.setToOptOut
326 });
327 AUI().ready(function() {
328 // user browser setting for Global Privacy Control to opt out of sharing information with third parties
329 const isBrowserGpcOptOut = navigator.globalPrivacyControl;
330 if(isBrowserGpcOptOut === true) {
331 window.californiaOptOut();
332 }
333 });
334 </script>
335 <!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->
336
337</#if>