An error occurred while processing the template.
The following has evaluated to null or missing: ==> isExcluded [in template "10154#10192#153417688" at line 922, column 23] ---- 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: ${isExcluded} [in template "10154#10192#153417688" at line 922, column 21] ----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
5<#assign url404 = '/error/404.html'>
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7<#assign currentEnvironment = 'prod' >
8<#assign prcaURL = propsUtil.get('elan.prca.url')>
9
10<#assign lc= qstringmap["ecdma-lc"]?first>
11<#assign lc = htmlUtil.escape(lc)>
12<#assign lc = htmlUtil.escapeJS(lc)>
13
14<#assign prefix = "00000" >
15<#assign lcWithPrefix = prefix + lc >
16<#assign withPrefixLength = lcWithPrefix?length >
17<#assign startHere = withPrefixLength - 5>
18<#assign lc = lcWithPrefix?substring(startHere)>
19
20
21<#if qstringmap["ecid"]?has_content>
22 <#assign ecidExt = qstringmap["ecid"]?first>
23 <#assign ecidExt = htmlUtil.escape(ecidExt)>
24 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
25 <#assign ecidExt = "&ecid=" + ecidExt>
26<#else>
27 <#assign ecidExt="">
28</#if>
29<#if oadURL?contains("uat-")>
30 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
31 <#assign currentEnvironment = 'uat' >
32<#else>
33 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
34</#if>
35 <script>
36 //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}');
37 </script>
38<#assign campaignId = "" >
39<#assign useprcaValue = "" >
40<#assign ecidExt="">
41<#if qstringmap["ecid"]?has_content>
42 <#assign campaignId = qstringmap["ecid"]?first >
43 <#assign campaignId = htmlUtil.escape(campaignId)>
44 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
45
46 <#assign ecidExt = qstringmap["ecid"]?first>
47 <#assign ecidExt = htmlUtil.escape(ecidExt)>
48 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
49 <#assign ecidExt = "&ecid=" + ecidExt>
50</#if>
51
52<#assign dcoSourceCode = "">
53<#assign dcoSourceCodeQueryParameter = "">
54
55<#if qstringmap["sourcecode"]?has_content>
56 <#assign dcoSourceCode = qstringmap["sourcecode"]?first>
57 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
58 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
59 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
60<#elseif qstringmap["sourceCode"]?has_content>
61 <#assign dcoSourceCode = qstringmap["sourceCode"]?first>
62 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
63 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
64 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
65</#if>
66
67<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
68<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
69<#assign clientProfile = clientProfileList?first>
70<#assign partnerName = clientProfile.getMarketingNameLong()>
71<#assign pbu = clientProfile.getPbu()>
72<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
73<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
74
75<#assign synExclusionMessageService = (serviceLocator.findService("com.elan.crc.quicklink.service.SYNExclusionMessageLocalService"))! />
76<#assign synExclusionMessageData = synExclusionMessageService.getClientProfileAndSyndicatedExclusionMsg(lc) />
77<#assign synExclusionMsg = "" />
78<#assign synExclusionMsgURL = "" />
79<#assign synExclusionMsgAriaLabel = "" />
80
81<#if synExclusionMessageData?exists && synExclusionMessageData?has_content>
82 <#assign synExclusionMsgObj = synExclusionMessageData[0]>
83 <#assign synExclusionMsg = synExclusionMsgObj[4]!"" />
84 <#assign synExclusionMsgURL = synExclusionMsgObj[5]!"" />
85 <#assign synExclusionMsgAriaLabel = synExclusionMsgObj[6]!"" />
86</#if>
87
88
89
90<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)>
91<#assign temp = []>
92<#assign consumerCards = []>
93<#assign businessCards = []>
94<#assign offerTypeList = []>
95<#assign index = 0>
96<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]>
97<#assign businessOfferTypes = ["128", "121", "143", "144"]>
98<#list fiCardsData as fib>
99 <#assign useprcaValue = fib.useprca!"">
100 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
101 <#assign offerTypeList = offerTypeList + [fib.offerType]>
102 <#if (consumerOfferTypes?seq_contains(fib.offerType))>
103 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
104 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
105 <#assign businessCards = businessCards + fiCardsData[index..index]>
106 </#if>
107 <#assign temp = temp + fiCardsData[index..index]>
108 </#if>
109 <#assign index = index + 1>
110</#list>
111
112<#assign fiCardsData = temp>
113 <script>
114 //console.log("fi card data count", ${fiCardsData?size})
115</script>
116
117<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
118<#if (clientdata?size > 0)>
119 <#assign backgroundColor = clientdata[0].backgroundHexColor>
120</#if>
121
122<#if (fiCardsData?size > 0)>
123 <style>
124 .excludeModal__overlay {
125 position: fixed;
126 top: 0;
127 left: 0;
128 right: 0;
129 bottom: 0;
130 background: rgba(0,0,0,0.6);
131 display: flex;
132 justify-content: center;
133 align-items: center;
134 }
135
136 .excludeModal__container {
137 background-color: #fff;
138 padding: 30px;
139 min-width: 500px;
140 max-width: 500px;
141 max-height: 100vh;
142 border-radius: 4px;
143 overflow-y: auto;
144 box-sizing: border-box;
145 }
146
147 .excludeModal__header {
148 display: block;
149 justify-content: space-between;
150 align-items: center;
151 }
152
153 .modal .excludeModal__container .excludeModal__title {
154 margin-top: 0;
155 margin-bottom: 0;
156 font-weight: 600;
157 font-size: 20px;
158 line-height: 1.25;
159 color: #00449e;
160 box-sizing: border-box;
161 }
162
163 .excludeModal__close {
164 background: transparent;
165 border: 1px solid white;
166 padding: 4px 8px;
167 float: right;
168 }
169
170 .excludeModal__close:hover {
171 border: 1px solid black;
172 }
173
174 .excludeModal__close:before { content: "\2715"; }
175
176 @keyframes mmfadeIn {
177 from { opacity: 0; }
178 to { opacity: 1; }
179 }
180
181 @keyframes mmfadeOut {
182 from { opacity: 1; }
183 to { opacity: 0; }
184 }
185
186 @keyframes mmslideIn {
187 from { transform: translateY(15%); }
188 to { transform: translateY(0); }
189 }
190
191 @keyframes mmslideOut {
192 from { transform: translateY(0); }
193 to { transform: translateY(-10%); }
194 }
195
196 .micromodal-slide {
197 display: none;
198 }
199
200 .micromodal-slide.is-open {
201 display: block;
202 }
203
204 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
205 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
206 }
207
208 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
209 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
210 }
211
212 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
213 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
214 }
215
216 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
217 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
218 }
219
220 .micromodal-slide .excludeModal__container,
221 .micromodal-slide .excludeModal__overlay {
222 will-change: transform;
223 }
224
225 .excludeModal__link {
226 font-size: 18px !important;
227 font-weight: bold;
228 color: #00449e !important;
229 text-decoration: underline !important;
230 }
231
232 .excludeModal__link a:hover {
233 text-decoration: underline !important;
234 }
235
236 #excludeModalDivLink {
237 margin-top: 20px
238 }
239 </style>
240 <#if url?contains("index")>
241 <#assign isExcluded = 0>
242 <#assign offerId = "">
243 <#assign sourceCode = "">
244 <#assign cardArtImage = "">
245 <#assign productUrlHero = "">
246 <#assign product = "">
247 <#assign cardIndex = 0>
248 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
249 <#if (offerTypeList?seq_contains("108")) || (offerTypeList?seq_contains("109"))>
250 <#list consumerCards as card>
251 <#if (card.offerType=="108") || (card.offerType=="109")>
252 <#assign isExcluded = 0>
253 <#if card.dmaexclude??>
254 <#assign isExcluded = card.dmaexclude?number!0>
255 </#if>
256 <#assign offerId = card.offerId>
257 <#assign sourceCode = card.sourceCode>
258 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
259 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
260
261 <#assign productUrlHero="consumer-platinum2103">
262 <#assign product="Platinum">
263 <#assign cardIndex = 1>
264 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)>
265 <#if (scrapedData?size > 0)>
266 <#list scrapedData as sItem>
267 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
268 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
269 <#break>
270 </#if>
271 </#list>
272 <script>
273 $(document).ready(function () {
274 var aprText = "${apr}";
275 //console.log('aprText: ${aprText!''}');
276 if (aprText) {
277 $(".apr-full-text").html(aprText);
278 try {
279 var matches= aprText.match(/\d+(\.\d+)?%?/g);
280 var billing_cycle = matches[1];
281 var apr_min = apr_min = matches[2];
282 var apr_max = apr_max = matches[3];
283 //console.log('billing_cycle', billing_cycle);
284 //console.log('apr_min', apr_min);
285 //console.log('apr_max', apr_max);
286 if (billing_cycle) {
287 //console.log($(".scraped-billing-cycle"));
288 $(".scraped-billing-cycle").html(billing_cycle);
289 }
290 if (apr_min) {
291 $(".scraped-apr-min").html(apr_min);
292 }
293 if (apr_max) {
294 $('.scraped-apr-max').html(apr_max);
295 }
296
297 } catch (e) {
298 console.log(e);
299 }
300 }
301 });
302 </script>
303 </#if>
304 <script>
305 $(document).ready(function () {
306 $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&offerId=${card.offerId}&locationCode=${lc}" target="_blank"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions</a>');
307 });
308 </script>
309 </#if>
310 </#list>
311 <#else>
312 <#assign isExcluded = 0>
313 <#if consumerCards[0].dmaexclude??>
314 <#assign isExcluded = consumerCards[0].dmaexclude?number!0>
315 </#if>
316 <#assign displayedCard = consumerCards[0]>
317 <#assign offerId = displayedCard.offerId>
318 <#assign sourceCode = displayedCard.sourceCode>
319 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
320 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
321 <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")>
322 <#assign productUrlHero="consumer-platinum">
323 <#assign product="Platinum">
324 <#assign cardIndex = 1>
325 <#elseif (displayedCard.offerType=="104")>
326 <#assign productUrlHero = "max-cash">
327 <#assign product="Max Cash Preferred">
328 <#assign cardIndex = 0>
329 <#elseif (displayedCard.offerType=="115")>
330 <#assign productUrlHero = "secured">
331 <#assign product="Secured">
332 <#assign cardIndex = 2>
333 </#if>
334 </#if>
335 <#if product?has_content && product != "">
336 <#assign card_text = product + " Card">
337 </#if>
338 </#if>
339 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
340 <#if (offerTypeList?seq_contains("128")) >
341 <#list businessCards as card>
342 <#if (card.offerType=="128")>
343 <#assign isExcluded = 0>
344 <#if card.dmaexclude??>
345 <#assign isExcluded = card.dmaexclude?number!0>
346 </#if>
347 <#assign offerId = card.offerId>
348 <#assign sourceCode = card.sourceCode>
349 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
350 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
351
352 <#assign productUrlHero="business-cash-preferred">
353 <#assign product="Business Cash Preferred">
354 <#assign cardIndex = 1>
355 </#if>
356 </#list>
357 <#else>
358 <#assign isExcluded = 0>
359 <#if businessCards[0].dmaexclude??>
360 <#assign isExcluded = businessCards[0].dmaexclude?number!0>
361 </#if>
362 <#assign displayedCard = businessCards[0]>
363 <#assign offerId = displayedCard.offerId>
364 <#assign sourceCode = displayedCard.sourceCode>
365 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
366 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
367 <#if (displayedCard.offerType=="143")>
368 <#assign productUrlHero="business-real-rewards">
369 <#assign product="Business Real Rewards">
370 <#assign cardIndex = 2>
371 <#elseif (displayedCard.offerType=="144")>
372 <#assign productUrlHero="smart-business-rewards">
373 <#assign product="Smart Business Rewards">
374 <#assign cardIndex = 0>
375 <#elseif (displayedCard.offerType=="121")>
376 <#assign productUrlHero = "business-platinum">
377 <#assign product="Business">
378 <#assign cardIndex = 3>
379 </#if>
380 </#if>
381 <#if product?has_content && product != "">
382 <#assign card_text = product + " Card">
383 </#if>
384 </#if>
385 <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}">
386 <div class="hero-main">
387 <div class="hero-main-container">
388 <div class="hero-main-offer">
389 <div class="offer-detail">
390 <div class="offer-detail-cardArt cardArtImg">
391 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
392 class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
393 <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }"
394 class="jn-img-responsive">-->
395 <p>${card_text!''}</p>
396 </div>
397 <div class="offer-detail-text text-color-default hide-desktop">
398 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
399 </div>
400 <#if isExcluded == 0>
401 <#if useprcaValue == "1">
402 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer" method="post">
403 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
404 <input id='offerId' type="hidden" name="offerId" value="${offerId}">
405 <input type="hidden" name="preparerType" value="customer">
406 </form>
407 <a
408 class="jn-button hide-desktop btn"
409 data-button-name="cta-button-top"
410 data-product-name="${productUrlHero!''}"
411 href="#"
412 offerId="${offerId!''}"
413 onclick="submitForm(event)"
414 >
415 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
416 </a>
417
418
419
420 <#else>
421 <a
422 class="jn-button hide-desktop btn"
423 data-button-name="cta-button-top"
424 data-product-name="${productUrlHero!''}"
425 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
426 >
427 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
428 </a>
429 </#if>
430
431 <#else>
432 <a
433 class="jn-button hide-desktop btn"
434 data-button-name="cta-button-top"
435 data-product-name="${productUrlHero!''}"
436 data-micromodal-trigger="modal-index-hero"
437 href="javascript:void(0);"
438 >
439 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
440 </a>
441 </#if>
442 </div>
443 <div class="offer-header">
444 <div class="offer-text-top">
445 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
446 </div>
447 <div class="offer-text-bottom hide-mobile">
448 <div class="offer-detail-text text-color-default ">
449 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
450 </div>
451
452 <#if isExcluded == 0>
453 <#if useprcaValue == "1">
454 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer" method="post">
455 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
456 <input id='offerId' type="hidden" name="offerId" value="${offerId!''}">
457 <input type="hidden" name="preparerType" value="customer">
458 </form>
459 <a
460 class="jn-button"
461 data-button-name="cta-button-top"
462 data-product-name="${productUrlHero!''}"
463 href="#"
464 offerId="${offerId!''}"
465 onclick="submitForm(event)"
466 >
467 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
468 </a>
469
470 <#else>
471 <a
472 class="jn-button"
473 data-button-name="cta-button-top"
474 data-product-name="${productUrlHero!''}"
475 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
476 >
477 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
478 </a>
479 </#if>
480 <#else>
481 <a
482 class="jn-button"
483 data-button-name="cta-button-top"
484 data-product-name="${productUrlHero!''}"
485 data-micromodal-trigger="modal-index-hero"
486 href="javascript:void(0);"
487 >
488 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
489 </a>
490 </#if>
491 </div>
492 </div>
493 </div>
494 </div>
495 </div>
496 </div>
497
498 <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" >
499 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
500 <div
501 aria-modal="true"
502 aria-labelledby="modal-index-hero-title"
503 class="excludeModal__container"
504 role="dialog"
505 >
506 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
507 <header class="excludeModal__header">
508 <div>
509 <h2 class="excludeModal__title" id="modal-index-hero-title">
510 <#if synExclusionMsg?has_content>
511 ${synExclusionMsg}
512 <#elseif productTitle.getSiblings()[cardIndex].excludedMessage?? >
513 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
514 </#if>
515 </h2>
516 </div>
517 <div id="excludeModalDivLink">
518 <#if synExclusionMsgURL?has_content>
519 <p>
520 <a href="${synExclusionMsgURL}" target="_blank" aria-label="${synExclusionMsgAriaLabel!''}" class="excludeModal__link">
521 Learn more
522 </a>
523 </p>
524 </#if>
525 </div>
526 </header>
527 </div>
528 </div>
529 </div>
530 <#else>
531 <#assign hasBalanceTransferCalculator = false>
532 <#list fiCardsData as fib>
533 <#switch fib.offerType>
534 <#case "101">
535 <#assign cardIndex = 3 >
536 <#assign productUrlHero = "consumer-edr">
537 <#assign product="Everyday Rewards+">
538 <#assign hasBalanceTransferCalculator = false>
539 <#break>
540 <#case "103">
541 <#assign cardIndex = 3 >
542 <#assign productUrlHero = "consumer-edr">
543 <#assign product="Everyday Rewards+">
544 <#assign hasBalanceTransferCalculator = false>
545 <#break>
546 <#case "104">
547 <#assign cardIndex = 0 >
548 <#assign productUrlHero="max-cash">
549 <#assign product="Max Cash Preferred">
550 <#assign hasBalanceTransferCalculator = false>
551 <#break>
552 <#case "108">
553 <#assign cardIndex = 1 >
554 <#assign productUrlHero = "consumer-platinum">
555 <#assign product="Platinum">
556 <#assign hasBalanceTransferCalculator = true>
557 <#break>
558 <#case "109">
559 <#assign cardIndex = 1 >
560 <#assign productUrlHero = "consumer-platinum">
561 <#assign product="Platinum">
562 <#assign hasBalanceTransferCalculator = true>
563 <#break>
564 <#case "141">
565 <#assign cardIndex = 4 >
566 <#assign productUrlHero = "college-real-rewards">
567 <#assign product = "College Real Rewards" >
568 <#assign hasBalanceTransferCalculator = false>
569 <#break>
570 <#case "147">
571 <#assign cardIndex = 5 >
572 <#assign productUrlHero = "max-cash-secured">
573 <#assign product = "Max Cash Secured" >
574 <#assign hasBalanceTransferCalculator = false>
575 <#break>
576 <#case "115">
577 <#assign cardIndex = 2 >
578 <#assign productUrlHero = "secured">
579 <#assign product="Secured">
580 <#assign hasBalanceTransferCalculator = false>
581 <#break>
582 <#case "138">
583 <#assign cardIndex = 6 >
584 <#assign productUrlHero = "travel-rewards-plus">
585 <#assign product="Travel Rewards+">
586 <#assign hasBalanceTransferCalculator = false>
587 <#break>
588 <#case "154">
589 <#assign cardIndex = 7 >
590 <#assign productUrlHero = "reserve-rewards-plus">
591 <#assign product="Reserve Rewards+">
592 <#assign hasBalanceTransferCalculator = false>
593 <#break>
594 <#case "128">
595 <#assign cardIndex = 1 >
596 <#assign productUrlHero = "business-cash-preferred">
597 <#assign product="Business Cash Preferred">
598 <#assign hasBalanceTransferCalculator = false>
599 <#break>
600 <#case "143">
601 <#assign cardIndex = 2 >
602 <#assign productUrlHero = "business-real-rewards">
603 <#assign product="Business Real Rewards">
604 <#assign hasBalanceTransferCalculator = false>
605 <#break>
606 <#case "144">
607 <#assign cardIndex = 0 >
608 <#assign productUrlHero = "smart-business-rewards">
609 <#assign product="Smart Business Rewards">
610 <#assign hasBalanceTransferCalculator = false>
611 <#break>
612 <#case "121">
613 <#assign cardIndex = 3 >
614 <#assign productUrlHero = "business-platinum">
615 <#assign product="Business">
616 <#assign hasBalanceTransferCalculator = false>
617 <#break>
618 <#default>
619 </#switch>
620 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
621 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
622
623 <script>
624 console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")
625 </script>
626
627 <#if url?matches(".*/${productUrlHero}\\?.*")>
628 <#assign isExcluded = 0>
629 <script>
630 console.log("fib.dmaexclude------>"+'${fib.dmaexclude}');
631 </script>
632 <#if fib.dmaexclude??>
633 <#assign isExcluded = fib.dmaexclude?number!0>
634 </#if>
635 <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")>
636
637 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')>
638 <#if (scrapedData?size > 0)>
639 <#list scrapedData as sItem>
640 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
641 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
642 <#break>
643 </#if>
644
645 </#list>
646 <script>
647 $(document).ready(function () {
648 var aprText = "${apr}";
649 //console.log('aprText',aprText);
650 if (aprText) {
651 $(".apr-full-text").html(aprText);
652 try {
653 var matches= aprText.match(/\d+(\.\d+)?%?/g);
654 var billing_cycle = matches[1];
655 var apr_min = apr_min = matches[2];
656 var apr_max = apr_max = matches[3];
657 //console.log('billing_cycle', billing_cycle);
658 //console.log('apr_min', apr_min);
659 //console.log('apr_max', apr_max);
660 if (billing_cycle) {
661 //console.log($(".scraped-billing-cycle"));
662 $(".scraped-billing-cycle").html(billing_cycle);
663 }
664 if (apr_min) {
665 $(".scraped-apr-min").html(apr_min);
666 }
667 if (apr_max) {
668 $('.scraped-apr-max').html(apr_max);
669 }
670
671 } catch (e) {
672 console.log(e);
673 }
674 }
675 });
676 </script>
677 </#if>
678 </#if>
679 <#if product?has_content && product != "">
680 <#assign card_text = product + " Card">
681 </#if>
682 <#assign tc_offerTypes = ['108', '109', '121', '144']>
683 <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']>
684 <div class="hero-container ${class.getData()}">
685 <div class="hero-main">
686 <div class="hero-main-container">
687 <div class="hero-main-offer">
688 <div class="offer-detail">
689 <div class="offer-detail-cardArt cardArtImg">
690 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
691 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive">
692 <p>${card_text!''}</p>
693 <#if (hasBalanceTransferCalculator)>
694 <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a>
695 </#if>
696 </div>
697 <div class="offer-detail-text text-color-default hide-desktop">
698 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
699
700 <#if (tc_offerTypes?seq_contains(fib.offerType))>
701 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
702 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
703 </a>
704 </#if>
705 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
706 <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a>
707 </#if>
708 </div>
709
710 <#if isExcluded == 0>
711 <#if useprcaValue == "1">
712 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId!''}&preparerType=customer" method="post">
713 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
714 <input id='offerId' type="hidden" name="offerId" value="${fib.offerId!''}">
715 <input type="hidden" name="preparerType" value="customer">
716 </form>
717
718 <a
719 class="jn-button hide-desktop btn"
720 data-button-name="cta-button-top"
721 data-product-name="${productUrlHero!''}"
722 href="#"
723 offerId="${fib.offerId!''}"
724 onclick="submitForm(event)" >
725 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
726 </a>
727
728 <#else>
729 <a
730 class="jn-button hide-desktop btn"
731 data-button-name="cta-button-top"
732 data-product-name="${productUrlHero!''}"
733 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
734 >
735 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
736
737 </a>
738 </#if>
739 <#else>
740 <a
741 class="jn-button hide-desktop btn"
742 data-button-name="cta-button-top"
743 data-product-name="${productUrlHero!''}"
744 data-micromodal-trigger="modal-product-hero"
745 href="javascript:void(0);"
746 >
747 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
748 </a>
749 </#if>
750 </div>
751 <div class="offer-header">
752 <div class="offer-text-top">
753 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
754 </div>
755 <div class="offer-text-bottom hide-mobile">
756 <div class="offer-detail-text text-color-default ">
757 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
758 <#if (tc_offerTypes?seq_contains(fib.offerType))>
759 <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
760 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
761 </a>
762 </#if>
763 </div>
764
765 <#if isExcluded == 0>
766 <#if useprcaValue == "1">
767 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer" method="post" >
768 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
769 <input id='offerId' type="hidden" name="offerId" value="${fib.offerId!''}">
770 <input type="hidden" name="preparerType" value="customer">
771 </form>
772 <a
773 class="jn-button"
774 data-button-name="cta-button-top"
775 data-product-name="${productUrlHero!''}"
776 href="#"
777 offerId="${fib.offerId!''}"
778 onclick="submitForm(event)" >
779 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
780 </a>
781
782 <#else>
783 <a
784 class="jn-button"
785 data-button-name="cta-button-top"
786 data-product-name="${productUrlHero!''}"
787 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
788 >
789 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
790
791 </a>
792 </#if>
793 <#else>
794 <a
795 class="jn-button"
796 data-button-name="cta-button-top"
797 data-product-name="${productUrlHero!''}"
798 data-micromodal-trigger="modal-product-hero"
799 href="javascript:void(0);"
800 >
801 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
802 </a>
803 </#if>
804 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
805 <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a>
806 </#if>
807 </div>
808 </div>
809
810 </div>
811 </div>
812 </div>
813 </div>
814
815 <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" >
816 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
817 <div
818 aria-modal="true"
819 aria-labelledby="modal-prodcut-hero-title"
820 class="excludeModal__container"
821 role="dialog"
822 >
823 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
824 <header class="excludeModal__header">
825 <div>
826 <h2 class="excludeModal__title" id="modal-prodcut-hero-title">
827 <#if synExclusionMsg?has_content>
828 ${synExclusionMsg}
829 <#elseif productTitle.getSiblings()[cardIndex].excludedMessage?? >
830 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
831 </#if>
832 </h2>
833 </div>
834 <div id="excludeModalDivLink">
835 <#if synExclusionMsgURL?has_content>
836 <p>
837 <a href="${synExclusionMsgURL}" target="_blank" aria-label="${synExclusionMsgAriaLabel!''}" class="excludeModal__link">
838 Learn more
839 </a>
840 </p>
841 </#if>
842 </div>
843 </header>
844 </div>
845 </div>
846 </div>
847 <#break />
848 </#if>
849 </#list>
850
851 </#if>
852</#if>
853<!-- https://micromodal.vercel.app/ -->
854<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
855
856<script>
857
858 AUI().ready(function(){
859 //The below script is there to add vertical card art in UAT only so that QA has an easier time auditing. Note that the script only applies to FI SouthState (location code 20419) which is currently the only bank with vertical card art at the moment
860 var locationCodeParam = '${lc}';
861 var currentEnvironmentParam = '${currentEnvironment}';
862 if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){
863 Array.prototype.slice.call(document.querySelectorAll('.cardArtImg')).map(function(e){e.firstElementChild.src = "https://39f6f821fa03de239594-9f1c16ccc3b26ce57656bb4af99947b6.ssl.cf2.rackcdn.com/f20cf80a-6aea-46ec-84fc-c2a6583773d9.png"})
864 }
865
866 MicroModal.init();
867 });
868</script>
869<script>
870 if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};}
871 setHeaderBackground = () => {
872 // Makes the Header subtitle work if there is two lines of text
873 //product page header
874 var consumerHeader = document.getElementsByClassName("landing-consumer")[0];
875 if(!consumerHeader) {
876 //index page header
877 consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0];
878 }
879
880 if(consumerHeader) {
881 var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0];
882 var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0];
883 const offerTextTop = consumerHeader.querySelector(".offer-text-top");
884
885 if (consumerOfferHeader.innerText.length >= 76){
886 const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px";
887 //two lines
888 //offerTextTop.style.marginTop = '0px';
889 //document.querySelector('.offer-text-bottom').style.marginTop = '25px';
890 //prevent button and text going into blue section
891 //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px";
892 consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")";
893 }
894 }
895 //product page header
896 var buisnessHeader = document.getElementsByClassName("landing-business")[0];
897 if(!buisnessHeader) {
898 //index page header
899 buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0];
900 }
901
902 if(buisnessHeader) {
903 var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0];
904 var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0];
905
906 if (buisnessOfferHeader.innerText.length >= 48){
907 //two lines
908 buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)";
909 }
910 }
911 };
912 /*
913 sometimes this runs before the text height it is refercning is loaded. Resulting in incorect background styles. If only in aui.ready then it flashes incorect styles then goes to correct styles everytime.
914 With the aui.ready and imediate call it normal loads correctly but if it loads before header text it will still flash incorect styles and then be fixed.
915 */
916 setHeaderBackground();
917 AUI().ready(function(){setHeaderBackground();});
918
919
920</script>
921<script>
922 var excluded = '${isExcluded}';
923 var useprcaValue = '${useprcaValue}';
924 var url23 ='${url}';
925 function submitForm(event) {
926 event.preventDefault();
927 var offerId = event.target.getAttribute("offerId");
928 console.log("offerId::::::::::::::"+offerId);
929
930 var lc = document.getElementById('locationCode').value;
931 //var offerId = document.getElementById('offerId').value;
932 //var sourceCode = document.getElementById('sourceCode').value;
933
934 // Construct the URL
935 var url = "${prcaURL}?locationCode=" + lc + "&offerId=" + offerId + "&preparerType=customer";
936
937
938 // Set the form action to the constructed URL
939 document.getElementById('applyForm').action = url;
940
941 // Submit the form
942 postCreditcardLearnMore(url);
943 //document.getElementById('applyForm').submit();
944 }
945 function postCreditcardLearnMore(path, method='post') {
946 // Create a form element
947 const form = document.createElement('form');
948 form.method = method;
949 //form.target = '_blank'; // Open in a new tab
950 form.action = path;
951
952 // Add each parameter as a hidden input field
953
954 document.body.appendChild(form);
955 form.submit();
956 }
957
958</script>