An error occurred while processing the template.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#153417670" at line 19, column 15] ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#153417670" at line 19, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() >
4<#assign themeDisplay = serviceContext.getThemeDisplay() />
5<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
6<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
7<#assign url404 = '/error/404.html' >
8<#assign environment = url?replace('/11t3.*','','r')>
9
10<#assign text_to_apply_source = "vanity url" >
11<#if qstringmap["sms"]?has_content>
12 <#assign sms = 1 >
13 <#assign text_to_apply_source = "sms" >
14</#if>
15<#if qstringmap["qrCode"]?has_content>
16 <#assign text_to_apply_source = "qr code" >
17</#if>
18
19<#assign lc = qstringmap["ecdma-lc"]?first>
20<#assign lc = htmlUtil.escape(lc)>
21<#assign lc = htmlUtil.escapeJS(lc)>
22
23<#assign prefix = "00000" >
24<#assign lcWithPrefix = prefix + lc >
25<#assign withPrefixLength = lcWithPrefix?length >
26<#assign startHere = withPrefixLength - 5>
27<#assign lc = lcWithPrefix?substring(startHere)>
28
29<#if qstringmap["ecid"]?has_content>
30 <#assign ecidExt = qstringmap["ecid"]?first>
31 <#assign ecidExt = htmlUtil.escape(ecidExt)>
32 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
33 <#assign ecidExt = "&ecid=" + ecidExt>
34
35
36 <#assign campaignId = qstringmap["ecid"]?first >
37 <#assign campaignId = htmlUtil.escape(campaignId)>
38 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
39<#else>
40 <#assign ecidExt="">
41 <#assign campaignId = "" >
42</#if>
43
44
45
46<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
47<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
48<#assign clientProfile = clientProfileList?first>
49<#assign partnerName = clientProfile.getMarketingNameLong()>
50<#assign pbu = clientProfile.getPbu()>
51<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
52
53<#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
54<#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!>
55<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+pbu+'&'+subbu)>
56
57 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
58<#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
59<#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
60<script>
61//console.log('Partner URL', ${partnerUrl});
62</script>
63<#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*")>
64 <#assign partnerUrl = 'https://' + partnerUrl>
65</#if>
66<script>
67//console.log('Partner URL', ${partnerUrl});
68
69</script>
70<#-- Begin: filter duplicated cards-->
71<#assign temp = []>
72<#assign offerTypeList = []>
73<#if (fiCardsData?size > 0)>
74 <#assign index = 0>
75 <#list fiCardsData as fib>
76 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
77 <#assign offerTypeList = offerTypeList + [fib.offerType]>
78 <#assign temp = temp + fiCardsData[index..index]>
79 </#if>
80 <#assign index = index + 1>
81 </#list>
82 <#assign fiCardsData = temp>
83 <#if (fiCardsData?size > 0)>
84 <div class="content-container content-container-main" title="${partnerName!''}">
85 <#if url?contains("index")>
86 <#assign product="All Cards">
87 <header class="jn-header">
88 <div class="header-logo">
89
90 <#if partnerUrl?has_content>
91 <a href="${partnerUrl!''}" title="${partnerName!''}">
92 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
93 </a>
94 <#else>
95 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
96 </#if>
97 </div>
98 </header>
99 <#else>
100 <header class="jn-header">
101 <div class="back-overview hide-desktop">
102 <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a>
103 </div>
104
105 <div class="header-main-logo" title="${partnerName!''}">
106 <#if partnerUrl?has_content>
107 <a href="${partnerUrl!''}" title="${partnerName!''}">
108 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
109 </a>
110 <#else>
111 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
112 </#if>
113 </div>
114 <div class="styled-select slate">
115 <nav class="styled-select__dropdown">
116 <div class="back-overview hide-mobile">
117 <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a>
118 </div>
119 <a href="javascript:void(0)" class="dropdown-select" aria-expanded="false">
120 <span class="selected-option"></span>
121 <div class="jn-arrow arrow arrow-right"></div>
122 </a>
123 <a href="javascript:void(0)" class="jn-hamburger hamburger" aria-expanded="false">
124 <div class="first-line transform transformed1"></div>
125 <div></div>
126 <div class="transform transformed2"></div>
127 <div></div>
128 </a>
129 <ul>
130 <#list fiCardsData as fib>
131 <#switch fib.offerType>
132 <#case "101">
133 <#assign productURL = "202302/consumer-edr">
134 <#assign productName = "Everyday Rewards+">
135 <#break>
136 <#case "103">
137 <#assign productURL = "202302/consumer-edr">
138 <#assign productName = "Everyday Rewards+">
139 <#break>
140 <#case "104">
141 <#assign productURL = "max-cash">
142 <#assign productName = "Max Cash Preferred Card">
143 <#break>
144 <#case "108">
145 <#assign productURL="202308/consumer-platinum">
146 <#assign productName="Platinum Card">
147 <#break>
148 <#case "109">
149 <#assign productURL="202308/consumer-platinum">
150 <#assign productName="Platinum Card">
151 <#break>
152 <#case "115">
153 <#assign productURL = "secured">
154 <#assign productName = "Secured Card" >
155 <#break>
156 <#case "138">
157 <#assign productURL = "202305/travel-rewards-plus">
158 <#assign productName = "Travel Rewards+" >
159 <#break>
160 <#case "141">
161 <#assign productURL = "college-real-rewards">
162 <#assign productName = "College Real Rewards" >
163 <#break>
164 <#case "147">
165 <#assign productURL = "max-cash-secured">
166 <#assign productName = "Max Cash Secured Card" >
167 <#break>
168 <#case "154">
169 <#assign productURL = "202305/reserve-rewards-plus">
170 <#assign productName = "Reserve Rewards+" >
171 <#break>
172 <#case "121">
173 <#assign productURL = "202208/business-platinum">
174 <#assign productName = "Business Card" >
175 <#break>
176 <#case "128">
177 <#assign productURL = "business-cash-preferred">
178 <#assign productName = "Business Cash Preferred" >
179 <#break>
180 <#case "143">
181 <#assign productURL = "business-real-rewards">
182 <#assign productName = "Business Real Rewards Card" >
183 <#break>
184 <#case "144">
185 <#assign productURL = "smart-business-rewards">
186 <#assign productName = "Smart Business Rewards Card" >
187 <#break>
188 <#default>
189 </#switch>
190 <#if url?matches(".*/${productURL}\\?.*")>
191 <li class="selected" data-value="${productName}" selected="selected"><a href="javascript:void(0)">${productName}</a></li>
192 <#else>
193 <li class="dropdown-item" data-value="${productName}">
194 <a href="${environment}/11t3/${productURL}?ecdma-lc=${lc}${ecidExt}">
195 ${productName}
196 </a>
197 </li>
198 </#if>
199 </#list>
200 </ul>
201 </nav>
202
203 </div>
204 </header>
205 <script>
206 function toggleFlyOutMenu() {
207 $('.styled-select').toggleClass('show-select');
208 var ariaExpanded = $('.styled-select__dropdown .dropdown-select').attr('aria-expanded');
209 if(ariaExpanded !== null) {
210 var isAriaExpanded;
211 if(ariaExpanded === "true") {
212 isAriaExpanded = true;
213 } else {
214 isAriaExpanded = false
215 }
216 $('.styled-select__dropdown .dropdown-select').attr('aria-expanded', !isAriaExpanded);
217 $('.styled-select__dropdown .jn-hamburger').attr('aria-expanded', !isAriaExpanded);
218 }
219 }
220 AUI().ready(function () {
221 var pageSelected = $('.selected').attr('data-value');
222 $('.jn-hamburger, .dropdown-select').click(function () {
223 toggleFlyOutMenu();
224 });
225 $('.styled-select__dropdown').keydown(function(event) {
226 var firstNavigationLink = $('.styled-select__dropdown ul li:visible a').first();
227 var lastNavigationLink = $('.styled-select__dropdown ul li:visible a').last();
228
229 if(event.keyCode === 9 ) {
230 // if they tab outside of the nav close the navigation
231 //shift + tab pressed
232 if(event.shiftKey && firstNavigationLink.is(document.activeElement)) {
233 toggleFlyOutMenu();
234 } else if(!event.shiftKey && lastNavigationLink.is(document.activeElement)) {
235 toggleFlyOutMenu();
236 }
237 }
238 });
239 $('.selected-option').text(pageSelected);
240 });
241 </script>
242 </#if>
243 </div>
244 <script>
245 var reportingData = {};
246
247 //document.addEventListener('DOMContentLoaded', function() {
248 AUI().ready(function () {
249 //console.log('inside ready');
250 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
251 var hostName = location.hostname;
252 function getDomainFromHostname(hostname) {
253 var parts = hostname.split('.');
254 return parts.length === 3 ? parts[1] : parts[0];
255 }
256 var domain = getDomainFromHostname(hostName);
257 var partnerName = "${partnerName!''}";
258 var product = "All Cards";
259 var title = "";
260 var metaDesc = "";
261 var m = document.createElement('meta');
262 switch(page) {
263 case "max-cash-secured":
264 product="Max Cash Secured Card";
265 title = "Earn more on the categories you pick | "+partnerName+" Max Cash Secured Card";
266 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
267 break;
268 case "max-cash":
269 product="Max Cash Preferred Card";
270 title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card";
271 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select";
272 break;
273 case "consumer-platinum":
274 product="Platinum Card";
275 title = "The purchasing power of Zero | "+partnerName+" Platinum Card";
276 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 20 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card.";
277 break;
278 case "consumer-edr":
279 product="Everyday Rewards+";
280 title = "Sign up and earn bonus points | "+partnerName+" Everyday Rewards+";
281 break;
282 case "secured":
283 product="Secured Card";
284 title = "Strengthen your finances | "+partnerName+" Secured Card";
285 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
286 break;
287 case "college-real-rewards":
288 product="College Real Rewards";
289 title = "Sign up and earn bonus points. | "+partnerName+" College Real Rewards";
290 break;
291 case "smart-business-rewards":
292 product="Smart Business Rewards Card";
293 title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card";
294 metaDesc = "Apply Today for a "+partnerName+" Credit Card. More choices. More value for your business. Earn a $200 Bonus and 2x Rewards on your top 2 spend categories each month with the "+partnerName+" Credit Card.";
295 break;
296 case "business-cash-preferred":
297 product="Business Cash Preferred";
298 title = "Flexible rewards for your business | "+partnerName+" Business Cash Preferred";
299 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
300 break;
301 case "business-real-rewards":
302 product="Business Real Rewards Card";
303 title = "Earn up to 3X points with no caps | "+partnerName+" Business Real Rewards Card";
304 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ;
305 break;
306 case "business-platinum":
307 product="Business Card";
308 title = "Pay down your other credit card balances faster | "+partnerName+" Business Card";
309 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
310 break;
311 case "travel-rewards-plus":
312 product="Travel Rewards+"
313 title = partnerName + " | Travel Rewards+ Card";
314 metaDesc = "Make travel more rewarding with unlimited 4x points on travel and frequent popular categories."
315 break;
316 case "reserve-rewards-plus":
317 product="Reserve Rewards+"
318 title = partnerName + " | Reserve Rewards+ Card";
319 metaDesc = "Get exceptional rewards on travel and frequent purchases with this exclusive metal card.";
320 break;
321 default:
322 product = "All Cards";
323 title = partnerName + " Credit Card Index Page";
324 }
325 document.title = title;
326 m.name = 'description';
327 m.content = metaDesc;
328 document.head.appendChild(m);
329
330 var lc = "${lc!'0'}";
331
332 /* update SiteCatalyst data object */
333 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
334 reportingData.page_type = 'product';
335 reportingData.site_section = 'credit cards';
336 reportingData.platform = 'microsite';
337 reportingData.campaign_id = '${campaignId}';
338 reportingData.location_code = lc;
339 reportingData.partner_name = partnerName;
340 reportingData.product = product;
341 reportingData.text_to_apply_source = '${text_to_apply_source}';
342 reportingData.visitor_type = 'prospect';
343 reportingData.Banker_id = '0';
344 reportingData.Banker_code = '0';
345
346
347 /* SiteCatalyst pageView tracking */
348 AUI().ready(function() {
349 if (window.publisherFW) {
350 //console.log("pageView");
351 window.publisherFW.publishEvent("pageView", reportingData);
352 }
353 });
354
355 jQuery('.jn-button, .applyNowLink').on('click', function(e){
356 var buttonName = $(this).data('button-name');
357 var productName = $(this).data('product-name');
358 /* SiteCatalyst onClick tracking */
359 reportingData.applyButton = buttonName;
360 reportingData.product = productName;
361
362 if (window.publisherFW) {
363 //console.log('clicked', reportingData);
364 window.publisherFW.publishEvent("onClick", reportingData);
365 }
366
367 });
368
369 jQuery('.applyNowLink').on('click', function(e){
370 ga("send", {
371 hitType: "event",
372 eventAction: "ApplyNow",
373 eventCategory: "click",
374 eventLabel: "BottomButton"
375 });
376 });
377
378 });
379 </script>
380 <#else>
381 <script>
382 console.log("Empty card list");
383 location.href = '${url404}';
384 </script>
385 </#if>
386<#else>
387 <script>
388 console.log("FI Cards Data empty", "pbu:", "${pbu}", ",subbu:","${subbu}");
389 location.href = '${url404}';
390 </script>
391</#if>
An error occurred while processing the template.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#153417688" at line 9, column 14] ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#153417688" at line 9, column 1] ----
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
9<#assign lc= qstringmap["ecdma-lc"]?first>
10<#assign lc = htmlUtil.escape(lc)>
11<#assign lc = htmlUtil.escapeJS(lc)>
12
13<#assign prefix = "00000" >
14<#assign lcWithPrefix = prefix + lc >
15<#assign withPrefixLength = lcWithPrefix?length >
16<#assign startHere = withPrefixLength - 5>
17<#assign lc = lcWithPrefix?substring(startHere)>
18
19
20<#if qstringmap["ecid"]?has_content>
21 <#assign ecidExt = qstringmap["ecid"]?first>
22 <#assign ecidExt = htmlUtil.escape(ecidExt)>
23 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
24 <#assign ecidExt = "&ecid=" + ecidExt>
25<#else>
26 <#assign ecidExt="">
27</#if>
28<#if oadURL?contains("uat-")>
29 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
30 <#assign currentEnvironment = 'uat' >
31<#else>
32 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
33</#if>
34 <script>
35 //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}');
36 </script>
37<#assign campaignId = "" >
38<#assign ecidExt="">
39<#if qstringmap["ecid"]?has_content>
40 <#assign campaignId = qstringmap["ecid"]?first >
41 <#assign campaignId = htmlUtil.escape(campaignId)>
42 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
43
44 <#assign ecidExt = qstringmap["ecid"]?first>
45 <#assign ecidExt = htmlUtil.escape(ecidExt)>
46 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
47 <#assign ecidExt = "&ecid=" + ecidExt>
48</#if>
49
50<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
51<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
52<#assign clientProfile = clientProfileList?first>
53<#assign partnerName = clientProfile.getMarketingNameLong()>
54<#assign pbu = clientProfile.getPbu()>
55<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
56<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
57
58<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)>
59<#assign temp = []>
60<#assign consumerCards = []>
61<#assign businessCards = []>
62<#assign offerTypeList = []>
63<#assign index = 0>
64<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]>
65<#assign businessOfferTypes = ["128", "121", "143", "144"]>
66<#list fiCardsData as fib>
67 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
68 <#assign offerTypeList = offerTypeList + [fib.offerType]>
69 <#if (consumerOfferTypes?seq_contains(fib.offerType))>
70 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
71 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
72 <#assign businessCards = businessCards + fiCardsData[index..index]>
73 </#if>
74 <#assign temp = temp + fiCardsData[index..index]>
75 </#if>
76 <#assign index = index + 1>
77</#list>
78
79<#assign fiCardsData = temp>
80 <script>
81 //console.log("fi card data count", ${fiCardsData?size})
82</script>
83
84<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
85<#if (clientdata?size > 0)>
86 <#assign backgroundColor = clientdata[0].backgroundHexColor>
87</#if>
88
89<#if (fiCardsData?size > 0)>
90 <style>
91 .excludeModal__overlay {
92 position: fixed;
93 top: 0;
94 left: 0;
95 right: 0;
96 bottom: 0;
97 background: rgba(0,0,0,0.6);
98 display: flex;
99 justify-content: center;
100 align-items: center;
101 }
102
103 .excludeModal__container {
104 background-color: #fff;
105 padding: 30px;
106 min-width: 500px;
107 max-width: 500px;
108 max-height: 100vh;
109 border-radius: 4px;
110 overflow-y: auto;
111 box-sizing: border-box;
112 }
113
114 .excludeModal__header {
115 display: flex;
116 justify-content: space-between;
117 align-items: center;
118 }
119
120 .modal .excludeModal__container .excludeModal__title {
121 margin-top: 0;
122 margin-bottom: 0;
123 font-weight: 600;
124 font-size: 20px;
125 line-height: 1.25;
126 color: #00449e;
127 box-sizing: border-box;
128 }
129
130 .excludeModal__close {
131 background: transparent;
132 border: 1px solid white;
133 padding: 4px 8px;
134 float: right;
135 }
136
137 .excludeModal__close:hover {
138 border: 1px solid black;
139 }
140
141 .excludeModal__close:before { content: "\2715"; }
142
143 @keyframes mmfadeIn {
144 from { opacity: 0; }
145 to { opacity: 1; }
146 }
147
148 @keyframes mmfadeOut {
149 from { opacity: 1; }
150 to { opacity: 0; }
151 }
152
153 @keyframes mmslideIn {
154 from { transform: translateY(15%); }
155 to { transform: translateY(0); }
156 }
157
158 @keyframes mmslideOut {
159 from { transform: translateY(0); }
160 to { transform: translateY(-10%); }
161 }
162
163 .micromodal-slide {
164 display: none;
165 }
166
167 .micromodal-slide.is-open {
168 display: block;
169 }
170
171 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
172 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
173 }
174
175 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
176 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
177 }
178
179 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
180 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
181 }
182
183 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
184 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
185 }
186
187 .micromodal-slide .excludeModal__container,
188 .micromodal-slide .excludeModal__overlay {
189 will-change: transform;
190 }
191 </style>
192 <#if url?contains("index")>
193 <#assign isExcluded = 0>
194 <#assign offerId = "">
195 <#assign sourceCode = "">
196 <#assign cardArtImage = "">
197 <#assign productUrlHero = "">
198 <#assign product = "">
199 <#assign cardIndex = 0>
200 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
201 <#if (offerTypeList?seq_contains("108")) || (offerTypeList?seq_contains("109"))>
202 <#list consumerCards as card>
203 <#if (card.offerType=="108") || (card.offerType=="109")>
204 <#assign isExcluded = 0>
205 <#if card.dmaexclude??>
206 <#assign isExcluded = card.dmaexclude?number!0>
207 </#if>
208 <#assign offerId = card.offerId>
209 <#assign sourceCode = card.sourceCode>
210 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
211 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
212
213 <#assign productUrlHero="consumer-platinum2103">
214 <#assign product="Platinum">
215 <#assign cardIndex = 1>
216 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)>
217 <#if (scrapedData?size > 0)>
218 <#list scrapedData as sItem>
219 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
220 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
221 <#break>
222 </#if>
223 </#list>
224 <script>
225 $(document).ready(function () {
226 var aprText = "${apr}";
227 //console.log('aprText: ${aprText!''}');
228 if (aprText) {
229 $(".apr-full-text").html(aprText);
230 try {
231 var matches= aprText.match(/\d+(\.\d+)?%?/g);
232 var billing_cycle = matches[1];
233 var apr_min = apr_min = matches[2];
234 var apr_max = apr_max = matches[3];
235 //console.log('billing_cycle', billing_cycle);
236 //console.log('apr_min', apr_min);
237 //console.log('apr_max', apr_max);
238 if (billing_cycle) {
239 //console.log($(".scraped-billing-cycle"));
240 $(".scraped-billing-cycle").html(billing_cycle);
241 }
242 if (apr_min) {
243 $(".scraped-apr-min").html(apr_min);
244 }
245 if (apr_max) {
246 $('.scraped-apr-max').html(apr_max);
247 }
248
249 } catch (e) {
250 console.log(e);
251 }
252 }
253 });
254 </script>
255 </#if>
256 <script>
257 $(document).ready(function () {
258 $(".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>');
259 });
260 </script>
261 </#if>
262 </#list>
263 <#else>
264 <#assign isExcluded = 0>
265 <#if consumerCards[0].dmaexclude??>
266 <#assign isExcluded = consumerCards[0].dmaexclude?number!0>
267 </#if>
268 <#assign displayedCard = consumerCards[0]>
269 <#assign offerId = displayedCard.offerId>
270 <#assign sourceCode = displayedCard.sourceCode>
271 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
272 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
273 <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")>
274 <#assign productUrlHero="consumer-platinum">
275 <#assign product="Platinum">
276 <#assign cardIndex = 1>
277 <#elseif (displayedCard.offerType=="104")>
278 <#assign productUrlHero = "max-cash">
279 <#assign product="Max Cash Preferred">
280 <#assign cardIndex = 0>
281 <#elseif (displayedCard.offerType=="115")>
282 <#assign productUrlHero = "secured">
283 <#assign product="Secured">
284 <#assign cardIndex = 2>
285 </#if>
286 </#if>
287 <#if product?has_content && product != "">
288 <#assign card_text = product + " Card">
289 </#if>
290 </#if>
291 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
292 <#if (offerTypeList?seq_contains("128")) >
293 <#list businessCards as card>
294 <#if (card.offerType=="128")>
295 <#assign isExcluded = 0>
296 <#if card.dmaexclude??>
297 <#assign isExcluded = card.dmaexclude?number!0>
298 </#if>
299 <#assign offerId = card.offerId>
300 <#assign sourceCode = card.sourceCode>
301 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
302 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
303
304 <#assign productUrlHero="business-cash-preferred">
305 <#assign product="Business Cash Preferred">
306 <#assign cardIndex = 1>
307 </#if>
308 </#list>
309 <#else>
310 <#assign isExcluded = 0>
311 <#if businessCards[0].dmaexclude??>
312 <#assign isExcluded = businessCards[0].dmaexclude?number!0>
313 </#if>
314 <#assign displayedCard = businessCards[0]>
315 <#assign offerId = displayedCard.offerId>
316 <#assign sourceCode = displayedCard.sourceCode>
317 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
318 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
319 <#if (displayedCard.offerType=="143")>
320 <#assign productUrlHero="business-real-rewards">
321 <#assign product="Business Real Rewards">
322 <#assign cardIndex = 2>
323 <#elseif (displayedCard.offerType=="144")>
324 <#assign productUrlHero="smart-business-rewards">
325 <#assign product="Smart Business Rewards">
326 <#assign cardIndex = 0>
327 <#elseif (displayedCard.offerType=="121")>
328 <#assign productUrlHero = "business-platinum">
329 <#assign product="Business">
330 <#assign cardIndex = 3>
331 </#if>
332 </#if>
333 <#if product?has_content && product != "">
334 <#assign card_text = product + " Card">
335 </#if>
336 </#if>
337 <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}">
338 <div class="hero-main">
339 <div class="hero-main-container">
340 <div class="hero-main-offer">
341 <div class="offer-detail">
342 <div class="offer-detail-cardArt cardArtImg">
343 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
344 class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
345 <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }"
346 class="jn-img-responsive">-->
347 <p>${card_text!''}</p>
348 </div>
349 <div class="offer-detail-text text-color-default hide-desktop">
350 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
351 </div>
352 <#if isExcluded == 0>
353 <a
354 class="jn-button hide-desktop btn"
355 data-button-name="cta-button-top"
356 data-product-name="${productUrlHero!''}"
357 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"
358 >
359 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
360 </a>
361 <#else>
362 <a
363 class="jn-button hide-desktop btn"
364 data-button-name="cta-button-top"
365 data-product-name="${productUrlHero!''}"
366 data-micromodal-trigger="modal-index-hero"
367 href="javascript:void(0);"
368 >
369 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
370 </a>
371 </#if>
372 </div>
373 <div class="offer-header">
374 <div class="offer-text-top">
375 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
376 </div>
377 <div class="offer-text-bottom hide-mobile">
378 <div class="offer-detail-text text-color-default ">
379 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
380 </div>
381
382 <#if isExcluded == 0>
383 <a
384 class="jn-button"
385 data-button-name="cta-button-top"
386 data-product-name="${productUrlHero!''}"
387 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"
388 >
389 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
390 </a>
391 <#else>
392 <a
393 class="jn-button"
394 data-button-name="cta-button-top"
395 data-product-name="${productUrlHero!''}"
396 data-micromodal-trigger="modal-index-hero"
397 href="javascript:void(0);"
398 >
399 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
400 </a>
401 </#if>
402 </div>
403 </div>
404 </div>
405 </div>
406 </div>
407 </div>
408
409 <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" >
410 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
411 <div
412 aria-modal="true"
413 aria-labelledby="modal-index-hero-title"
414 class="excludeModal__container"
415 role="dialog"
416 >
417 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
418 <header class="excludeModal__header">
419 <h2 class="excludeModal__title" id="modal-index-hero-title">
420 <#if productTitle.getSiblings()[cardIndex].excludedMessage?? >
421 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
422 </#if>
423 </h2>
424 </header>
425 </div>
426 </div>
427 </div>
428 <#else>
429 <#assign hasBalanceTransferCalculator = false>
430 <#list fiCardsData as fib>
431 <#switch fib.offerType>
432 <#case "101">
433 <#assign cardIndex = 3 >
434 <#assign productUrlHero = "consumer-edr">
435 <#assign product="Everyday Rewards+">
436 <#assign hasBalanceTransferCalculator = false>
437 <#break>
438 <#case "103">
439 <#assign cardIndex = 3 >
440 <#assign productUrlHero = "consumer-edr">
441 <#assign product="Everyday Rewards+">
442 <#assign hasBalanceTransferCalculator = false>
443 <#break>
444 <#case "104">
445 <#assign cardIndex = 0 >
446 <#assign productUrlHero="max-cash">
447 <#assign product="Max Cash Preferred">
448 <#assign hasBalanceTransferCalculator = false>
449 <#break>
450 <#case "108">
451 <#assign cardIndex = 1 >
452 <#assign productUrlHero = "consumer-platinum">
453 <#assign product="Platinum">
454 <#assign hasBalanceTransferCalculator = true>
455 <#break>
456 <#case "109">
457 <#assign cardIndex = 1 >
458 <#assign productUrlHero = "consumer-platinum">
459 <#assign product="Platinum">
460 <#assign hasBalanceTransferCalculator = true>
461 <#break>
462 <#case "141">
463 <#assign cardIndex = 4 >
464 <#assign productUrlHero = "college-real-rewards">
465 <#assign product = "College Real Rewards" >
466 <#assign hasBalanceTransferCalculator = false>
467 <#break>
468 <#case "147">
469 <#assign cardIndex = 5 >
470 <#assign productUrlHero = "max-cash-secured">
471 <#assign product = "Max Cash Secured" >
472 <#assign hasBalanceTransferCalculator = false>
473 <#break>
474 <#case "115">
475 <#assign cardIndex = 2 >
476 <#assign productUrlHero = "secured">
477 <#assign product="Secured">
478 <#assign hasBalanceTransferCalculator = false>
479 <#break>
480 <#case "138">
481 <#assign cardIndex = 6 >
482 <#assign productUrlHero = "travel-rewards-plus">
483 <#assign product="Travel Rewards+">
484 <#assign hasBalanceTransferCalculator = false>
485 <#break>
486 <#case "154">
487 <#assign cardIndex = 7 >
488 <#assign productUrlHero = "reserve-rewards-plus">
489 <#assign product="Reserve Rewards+">
490 <#assign hasBalanceTransferCalculator = false>
491 <#break>
492 <#case "128">
493 <#assign cardIndex = 1 >
494 <#assign productUrlHero = "business-cash-preferred">
495 <#assign product="Business Cash Preferred">
496 <#assign hasBalanceTransferCalculator = false>
497 <#break>
498 <#case "143">
499 <#assign cardIndex = 2 >
500 <#assign productUrlHero = "business-real-rewards">
501 <#assign product="Business Real Rewards">
502 <#assign hasBalanceTransferCalculator = false>
503 <#break>
504 <#case "144">
505 <#assign cardIndex = 0 >
506 <#assign productUrlHero = "smart-business-rewards">
507 <#assign product="Smart Business Rewards">
508 <#assign hasBalanceTransferCalculator = false>
509 <#break>
510 <#case "121">
511 <#assign cardIndex = 3 >
512 <#assign productUrlHero = "business-platinum">
513 <#assign product="Business">
514 <#assign hasBalanceTransferCalculator = false>
515 <#break>
516 <#default>
517 </#switch>
518 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
519 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
520
521 <script>
522 console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")
523 </script>
524
525 <#if url?matches(".*/${productUrlHero}\\?.*")>
526 <#assign isExcluded = 0>
527 <#if fib.dmaexclude??>
528 <#assign isExcluded = fib.dmaexclude?number!0>
529 </#if>
530 <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")>
531
532 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')>
533 <#if (scrapedData?size > 0)>
534 <#list scrapedData as sItem>
535 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
536 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
537 <#break>
538 </#if>
539
540 </#list>
541 <script>
542 $(document).ready(function () {
543 var aprText = "${apr}";
544 //console.log('aprText',aprText);
545 if (aprText) {
546 $(".apr-full-text").html(aprText);
547 try {
548 var matches= aprText.match(/\d+(\.\d+)?%?/g);
549 var billing_cycle = matches[1];
550 var apr_min = apr_min = matches[2];
551 var apr_max = apr_max = matches[3];
552 //console.log('billing_cycle', billing_cycle);
553 //console.log('apr_min', apr_min);
554 //console.log('apr_max', apr_max);
555 if (billing_cycle) {
556 //console.log($(".scraped-billing-cycle"));
557 $(".scraped-billing-cycle").html(billing_cycle);
558 }
559 if (apr_min) {
560 $(".scraped-apr-min").html(apr_min);
561 }
562 if (apr_max) {
563 $('.scraped-apr-max').html(apr_max);
564 }
565
566 } catch (e) {
567 console.log(e);
568 }
569 }
570 });
571 </script>
572 </#if>
573 </#if>
574 <#if product?has_content && product != "">
575 <#assign card_text = product + " Card">
576 </#if>
577 <#assign tc_offerTypes = ['108', '109', '121', '144']>
578 <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']>
579 <div class="hero-container ${class.getData()}">
580 <div class="hero-main">
581 <div class="hero-main-container">
582 <div class="hero-main-offer">
583 <div class="offer-detail">
584 <div class="offer-detail-cardArt cardArtImg">
585 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
586 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive">
587 <p>${card_text!''}</p>
588 <#if (hasBalanceTransferCalculator)>
589 <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a>
590 </#if>
591 </div>
592 <div class="offer-detail-text text-color-default hide-desktop">
593 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
594
595 <#if (tc_offerTypes?seq_contains(fib.offerType))>
596 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
597 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
598 </a>
599 </#if>
600 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
601 <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>
602 </#if>
603 </div>
604
605 <#if isExcluded == 0>
606 <a
607 class="jn-button hide-desktop btn"
608 data-button-name="cta-button-top"
609 data-product-name="${productUrlHero!''}"
610 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
611 >
612 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
613 </a>
614 <#else>
615 <a
616 class="jn-button hide-desktop btn"
617 data-button-name="cta-button-top"
618 data-product-name="${productUrlHero!''}"
619 data-micromodal-trigger="modal-product-hero"
620 href="javascript:void(0);"
621 >
622 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
623 </a>
624 </#if>
625 </div>
626 <div class="offer-header">
627 <div class="offer-text-top">
628 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
629 </div>
630 <div class="offer-text-bottom hide-mobile">
631 <div class="offer-detail-text text-color-default ">
632 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
633 <#if (tc_offerTypes?seq_contains(fib.offerType))>
634 <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
635 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
636 </a>
637 </#if>
638 </div>
639
640 <#if isExcluded == 0>
641 <a
642 class="jn-button"
643 data-button-name="cta-button-top"
644 data-product-name="${productUrlHero!''}"
645 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
646 >
647 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
648 </a>
649 <#else>
650 <a
651 class="jn-button"
652 data-button-name="cta-button-top"
653 data-product-name="${productUrlHero!''}"
654 data-micromodal-trigger="modal-product-hero"
655 href="javascript:void(0);"
656 >
657 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
658 </a>
659 </#if>
660 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
661 <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>
662 </#if>
663 </div>
664 </div>
665
666 </div>
667 </div>
668 </div>
669 </div>
670
671 <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" >
672 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
673 <div
674 aria-modal="true"
675 aria-labelledby="modal-prodcut-hero-title"
676 class="excludeModal__container"
677 role="dialog"
678 >
679 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
680 <header class="excludeModal__header">
681 <h2 class="excludeModal__title" id="modal-prodcut-hero-title">
682 <#if productTitle.getSiblings()[cardIndex].excludedMessage?? >
683 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
684 </#if>
685 </h2>
686 </header>
687 </div>
688 </div>
689 </div>
690 <#break />
691 </#if>
692 </#list>
693
694 </#if>
695</#if>
696<!-- https://micromodal.vercel.app/ -->
697<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
698
699<script>
700 AUI().ready(function(){
701 //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
702 var locationCodeParam = '${lc}';
703 var currentEnvironmentParam = '${currentEnvironment}';
704 if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){
705 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"})
706 }
707
708 MicroModal.init();
709 });
710</script>
711<script>
712 if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};}
713 setHeaderBackground = () => {
714 // Makes the Header subtitle work if there is two lines of text
715 //product page header
716 var consumerHeader = document.getElementsByClassName("landing-consumer")[0];
717 if(!consumerHeader) {
718 //index page header
719 consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0];
720 }
721
722 if(consumerHeader) {
723 var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0];
724 var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0];
725 const offerTextTop = consumerHeader.querySelector(".offer-text-top");
726
727 if (consumerOfferHeader.innerText.length >= 76){
728 const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px";
729 //two lines
730 //offerTextTop.style.marginTop = '0px';
731 //document.querySelector('.offer-text-bottom').style.marginTop = '25px';
732 //prevent button and text going into blue section
733 //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px";
734 consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")";
735 }
736 }
737 //product page header
738 var buisnessHeader = document.getElementsByClassName("landing-business")[0];
739 if(!buisnessHeader) {
740 //index page header
741 buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0];
742 }
743
744 if(buisnessHeader) {
745 var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0];
746 var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0];
747
748 if (buisnessOfferHeader.innerText.length >= 48){
749 //two lines
750 buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)";
751 }
752 }
753 };
754 /*
755 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.
756 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.
757 */
758 setHeaderBackground();
759 AUI().ready(function(){setHeaderBackground();});
760
761</script>
An error occurred while processing the template.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#153417688" at line 9, column 14] ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#153417688" at line 9, column 1] ----
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
9<#assign lc= qstringmap["ecdma-lc"]?first>
10<#assign lc = htmlUtil.escape(lc)>
11<#assign lc = htmlUtil.escapeJS(lc)>
12
13<#assign prefix = "00000" >
14<#assign lcWithPrefix = prefix + lc >
15<#assign withPrefixLength = lcWithPrefix?length >
16<#assign startHere = withPrefixLength - 5>
17<#assign lc = lcWithPrefix?substring(startHere)>
18
19
20<#if qstringmap["ecid"]?has_content>
21 <#assign ecidExt = qstringmap["ecid"]?first>
22 <#assign ecidExt = htmlUtil.escape(ecidExt)>
23 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
24 <#assign ecidExt = "&ecid=" + ecidExt>
25<#else>
26 <#assign ecidExt="">
27</#if>
28<#if oadURL?contains("uat-")>
29 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
30 <#assign currentEnvironment = 'uat' >
31<#else>
32 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
33</#if>
34 <script>
35 //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}');
36 </script>
37<#assign campaignId = "" >
38<#assign ecidExt="">
39<#if qstringmap["ecid"]?has_content>
40 <#assign campaignId = qstringmap["ecid"]?first >
41 <#assign campaignId = htmlUtil.escape(campaignId)>
42 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
43
44 <#assign ecidExt = qstringmap["ecid"]?first>
45 <#assign ecidExt = htmlUtil.escape(ecidExt)>
46 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
47 <#assign ecidExt = "&ecid=" + ecidExt>
48</#if>
49
50<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
51<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
52<#assign clientProfile = clientProfileList?first>
53<#assign partnerName = clientProfile.getMarketingNameLong()>
54<#assign pbu = clientProfile.getPbu()>
55<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
56<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
57
58<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)>
59<#assign temp = []>
60<#assign consumerCards = []>
61<#assign businessCards = []>
62<#assign offerTypeList = []>
63<#assign index = 0>
64<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]>
65<#assign businessOfferTypes = ["128", "121", "143", "144"]>
66<#list fiCardsData as fib>
67 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
68 <#assign offerTypeList = offerTypeList + [fib.offerType]>
69 <#if (consumerOfferTypes?seq_contains(fib.offerType))>
70 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
71 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
72 <#assign businessCards = businessCards + fiCardsData[index..index]>
73 </#if>
74 <#assign temp = temp + fiCardsData[index..index]>
75 </#if>
76 <#assign index = index + 1>
77</#list>
78
79<#assign fiCardsData = temp>
80 <script>
81 //console.log("fi card data count", ${fiCardsData?size})
82</script>
83
84<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
85<#if (clientdata?size > 0)>
86 <#assign backgroundColor = clientdata[0].backgroundHexColor>
87</#if>
88
89<#if (fiCardsData?size > 0)>
90 <style>
91 .excludeModal__overlay {
92 position: fixed;
93 top: 0;
94 left: 0;
95 right: 0;
96 bottom: 0;
97 background: rgba(0,0,0,0.6);
98 display: flex;
99 justify-content: center;
100 align-items: center;
101 }
102
103 .excludeModal__container {
104 background-color: #fff;
105 padding: 30px;
106 min-width: 500px;
107 max-width: 500px;
108 max-height: 100vh;
109 border-radius: 4px;
110 overflow-y: auto;
111 box-sizing: border-box;
112 }
113
114 .excludeModal__header {
115 display: flex;
116 justify-content: space-between;
117 align-items: center;
118 }
119
120 .modal .excludeModal__container .excludeModal__title {
121 margin-top: 0;
122 margin-bottom: 0;
123 font-weight: 600;
124 font-size: 20px;
125 line-height: 1.25;
126 color: #00449e;
127 box-sizing: border-box;
128 }
129
130 .excludeModal__close {
131 background: transparent;
132 border: 1px solid white;
133 padding: 4px 8px;
134 float: right;
135 }
136
137 .excludeModal__close:hover {
138 border: 1px solid black;
139 }
140
141 .excludeModal__close:before { content: "\2715"; }
142
143 @keyframes mmfadeIn {
144 from { opacity: 0; }
145 to { opacity: 1; }
146 }
147
148 @keyframes mmfadeOut {
149 from { opacity: 1; }
150 to { opacity: 0; }
151 }
152
153 @keyframes mmslideIn {
154 from { transform: translateY(15%); }
155 to { transform: translateY(0); }
156 }
157
158 @keyframes mmslideOut {
159 from { transform: translateY(0); }
160 to { transform: translateY(-10%); }
161 }
162
163 .micromodal-slide {
164 display: none;
165 }
166
167 .micromodal-slide.is-open {
168 display: block;
169 }
170
171 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
172 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
173 }
174
175 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
176 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
177 }
178
179 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
180 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
181 }
182
183 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
184 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
185 }
186
187 .micromodal-slide .excludeModal__container,
188 .micromodal-slide .excludeModal__overlay {
189 will-change: transform;
190 }
191 </style>
192 <#if url?contains("index")>
193 <#assign isExcluded = 0>
194 <#assign offerId = "">
195 <#assign sourceCode = "">
196 <#assign cardArtImage = "">
197 <#assign productUrlHero = "">
198 <#assign product = "">
199 <#assign cardIndex = 0>
200 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
201 <#if (offerTypeList?seq_contains("108")) || (offerTypeList?seq_contains("109"))>
202 <#list consumerCards as card>
203 <#if (card.offerType=="108") || (card.offerType=="109")>
204 <#assign isExcluded = 0>
205 <#if card.dmaexclude??>
206 <#assign isExcluded = card.dmaexclude?number!0>
207 </#if>
208 <#assign offerId = card.offerId>
209 <#assign sourceCode = card.sourceCode>
210 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
211 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
212
213 <#assign productUrlHero="consumer-platinum2103">
214 <#assign product="Platinum">
215 <#assign cardIndex = 1>
216 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)>
217 <#if (scrapedData?size > 0)>
218 <#list scrapedData as sItem>
219 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
220 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
221 <#break>
222 </#if>
223 </#list>
224 <script>
225 $(document).ready(function () {
226 var aprText = "${apr}";
227 //console.log('aprText: ${aprText!''}');
228 if (aprText) {
229 $(".apr-full-text").html(aprText);
230 try {
231 var matches= aprText.match(/\d+(\.\d+)?%?/g);
232 var billing_cycle = matches[1];
233 var apr_min = apr_min = matches[2];
234 var apr_max = apr_max = matches[3];
235 //console.log('billing_cycle', billing_cycle);
236 //console.log('apr_min', apr_min);
237 //console.log('apr_max', apr_max);
238 if (billing_cycle) {
239 //console.log($(".scraped-billing-cycle"));
240 $(".scraped-billing-cycle").html(billing_cycle);
241 }
242 if (apr_min) {
243 $(".scraped-apr-min").html(apr_min);
244 }
245 if (apr_max) {
246 $('.scraped-apr-max').html(apr_max);
247 }
248
249 } catch (e) {
250 console.log(e);
251 }
252 }
253 });
254 </script>
255 </#if>
256 <script>
257 $(document).ready(function () {
258 $(".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>');
259 });
260 </script>
261 </#if>
262 </#list>
263 <#else>
264 <#assign isExcluded = 0>
265 <#if consumerCards[0].dmaexclude??>
266 <#assign isExcluded = consumerCards[0].dmaexclude?number!0>
267 </#if>
268 <#assign displayedCard = consumerCards[0]>
269 <#assign offerId = displayedCard.offerId>
270 <#assign sourceCode = displayedCard.sourceCode>
271 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
272 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
273 <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")>
274 <#assign productUrlHero="consumer-platinum">
275 <#assign product="Platinum">
276 <#assign cardIndex = 1>
277 <#elseif (displayedCard.offerType=="104")>
278 <#assign productUrlHero = "max-cash">
279 <#assign product="Max Cash Preferred">
280 <#assign cardIndex = 0>
281 <#elseif (displayedCard.offerType=="115")>
282 <#assign productUrlHero = "secured">
283 <#assign product="Secured">
284 <#assign cardIndex = 2>
285 </#if>
286 </#if>
287 <#if product?has_content && product != "">
288 <#assign card_text = product + " Card">
289 </#if>
290 </#if>
291 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
292 <#if (offerTypeList?seq_contains("128")) >
293 <#list businessCards as card>
294 <#if (card.offerType=="128")>
295 <#assign isExcluded = 0>
296 <#if card.dmaexclude??>
297 <#assign isExcluded = card.dmaexclude?number!0>
298 </#if>
299 <#assign offerId = card.offerId>
300 <#assign sourceCode = card.sourceCode>
301 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
302 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
303
304 <#assign productUrlHero="business-cash-preferred">
305 <#assign product="Business Cash Preferred">
306 <#assign cardIndex = 1>
307 </#if>
308 </#list>
309 <#else>
310 <#assign isExcluded = 0>
311 <#if businessCards[0].dmaexclude??>
312 <#assign isExcluded = businessCards[0].dmaexclude?number!0>
313 </#if>
314 <#assign displayedCard = businessCards[0]>
315 <#assign offerId = displayedCard.offerId>
316 <#assign sourceCode = displayedCard.sourceCode>
317 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
318 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
319 <#if (displayedCard.offerType=="143")>
320 <#assign productUrlHero="business-real-rewards">
321 <#assign product="Business Real Rewards">
322 <#assign cardIndex = 2>
323 <#elseif (displayedCard.offerType=="144")>
324 <#assign productUrlHero="smart-business-rewards">
325 <#assign product="Smart Business Rewards">
326 <#assign cardIndex = 0>
327 <#elseif (displayedCard.offerType=="121")>
328 <#assign productUrlHero = "business-platinum">
329 <#assign product="Business">
330 <#assign cardIndex = 3>
331 </#if>
332 </#if>
333 <#if product?has_content && product != "">
334 <#assign card_text = product + " Card">
335 </#if>
336 </#if>
337 <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}">
338 <div class="hero-main">
339 <div class="hero-main-container">
340 <div class="hero-main-offer">
341 <div class="offer-detail">
342 <div class="offer-detail-cardArt cardArtImg">
343 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
344 class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
345 <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }"
346 class="jn-img-responsive">-->
347 <p>${card_text!''}</p>
348 </div>
349 <div class="offer-detail-text text-color-default hide-desktop">
350 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
351 </div>
352 <#if isExcluded == 0>
353 <a
354 class="jn-button hide-desktop btn"
355 data-button-name="cta-button-top"
356 data-product-name="${productUrlHero!''}"
357 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"
358 >
359 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
360 </a>
361 <#else>
362 <a
363 class="jn-button hide-desktop btn"
364 data-button-name="cta-button-top"
365 data-product-name="${productUrlHero!''}"
366 data-micromodal-trigger="modal-index-hero"
367 href="javascript:void(0);"
368 >
369 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
370 </a>
371 </#if>
372 </div>
373 <div class="offer-header">
374 <div class="offer-text-top">
375 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
376 </div>
377 <div class="offer-text-bottom hide-mobile">
378 <div class="offer-detail-text text-color-default ">
379 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
380 </div>
381
382 <#if isExcluded == 0>
383 <a
384 class="jn-button"
385 data-button-name="cta-button-top"
386 data-product-name="${productUrlHero!''}"
387 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"
388 >
389 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
390 </a>
391 <#else>
392 <a
393 class="jn-button"
394 data-button-name="cta-button-top"
395 data-product-name="${productUrlHero!''}"
396 data-micromodal-trigger="modal-index-hero"
397 href="javascript:void(0);"
398 >
399 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
400 </a>
401 </#if>
402 </div>
403 </div>
404 </div>
405 </div>
406 </div>
407 </div>
408
409 <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" >
410 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
411 <div
412 aria-modal="true"
413 aria-labelledby="modal-index-hero-title"
414 class="excludeModal__container"
415 role="dialog"
416 >
417 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
418 <header class="excludeModal__header">
419 <h2 class="excludeModal__title" id="modal-index-hero-title">
420 <#if productTitle.getSiblings()[cardIndex].excludedMessage?? >
421 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
422 </#if>
423 </h2>
424 </header>
425 </div>
426 </div>
427 </div>
428 <#else>
429 <#assign hasBalanceTransferCalculator = false>
430 <#list fiCardsData as fib>
431 <#switch fib.offerType>
432 <#case "101">
433 <#assign cardIndex = 3 >
434 <#assign productUrlHero = "consumer-edr">
435 <#assign product="Everyday Rewards+">
436 <#assign hasBalanceTransferCalculator = false>
437 <#break>
438 <#case "103">
439 <#assign cardIndex = 3 >
440 <#assign productUrlHero = "consumer-edr">
441 <#assign product="Everyday Rewards+">
442 <#assign hasBalanceTransferCalculator = false>
443 <#break>
444 <#case "104">
445 <#assign cardIndex = 0 >
446 <#assign productUrlHero="max-cash">
447 <#assign product="Max Cash Preferred">
448 <#assign hasBalanceTransferCalculator = false>
449 <#break>
450 <#case "108">
451 <#assign cardIndex = 1 >
452 <#assign productUrlHero = "consumer-platinum">
453 <#assign product="Platinum">
454 <#assign hasBalanceTransferCalculator = true>
455 <#break>
456 <#case "109">
457 <#assign cardIndex = 1 >
458 <#assign productUrlHero = "consumer-platinum">
459 <#assign product="Platinum">
460 <#assign hasBalanceTransferCalculator = true>
461 <#break>
462 <#case "141">
463 <#assign cardIndex = 4 >
464 <#assign productUrlHero = "college-real-rewards">
465 <#assign product = "College Real Rewards" >
466 <#assign hasBalanceTransferCalculator = false>
467 <#break>
468 <#case "147">
469 <#assign cardIndex = 5 >
470 <#assign productUrlHero = "max-cash-secured">
471 <#assign product = "Max Cash Secured" >
472 <#assign hasBalanceTransferCalculator = false>
473 <#break>
474 <#case "115">
475 <#assign cardIndex = 2 >
476 <#assign productUrlHero = "secured">
477 <#assign product="Secured">
478 <#assign hasBalanceTransferCalculator = false>
479 <#break>
480 <#case "138">
481 <#assign cardIndex = 6 >
482 <#assign productUrlHero = "travel-rewards-plus">
483 <#assign product="Travel Rewards+">
484 <#assign hasBalanceTransferCalculator = false>
485 <#break>
486 <#case "154">
487 <#assign cardIndex = 7 >
488 <#assign productUrlHero = "reserve-rewards-plus">
489 <#assign product="Reserve Rewards+">
490 <#assign hasBalanceTransferCalculator = false>
491 <#break>
492 <#case "128">
493 <#assign cardIndex = 1 >
494 <#assign productUrlHero = "business-cash-preferred">
495 <#assign product="Business Cash Preferred">
496 <#assign hasBalanceTransferCalculator = false>
497 <#break>
498 <#case "143">
499 <#assign cardIndex = 2 >
500 <#assign productUrlHero = "business-real-rewards">
501 <#assign product="Business Real Rewards">
502 <#assign hasBalanceTransferCalculator = false>
503 <#break>
504 <#case "144">
505 <#assign cardIndex = 0 >
506 <#assign productUrlHero = "smart-business-rewards">
507 <#assign product="Smart Business Rewards">
508 <#assign hasBalanceTransferCalculator = false>
509 <#break>
510 <#case "121">
511 <#assign cardIndex = 3 >
512 <#assign productUrlHero = "business-platinum">
513 <#assign product="Business">
514 <#assign hasBalanceTransferCalculator = false>
515 <#break>
516 <#default>
517 </#switch>
518 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
519 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
520
521 <script>
522 console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")
523 </script>
524
525 <#if url?matches(".*/${productUrlHero}\\?.*")>
526 <#assign isExcluded = 0>
527 <#if fib.dmaexclude??>
528 <#assign isExcluded = fib.dmaexclude?number!0>
529 </#if>
530 <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")>
531
532 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')>
533 <#if (scrapedData?size > 0)>
534 <#list scrapedData as sItem>
535 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
536 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
537 <#break>
538 </#if>
539
540 </#list>
541 <script>
542 $(document).ready(function () {
543 var aprText = "${apr}";
544 //console.log('aprText',aprText);
545 if (aprText) {
546 $(".apr-full-text").html(aprText);
547 try {
548 var matches= aprText.match(/\d+(\.\d+)?%?/g);
549 var billing_cycle = matches[1];
550 var apr_min = apr_min = matches[2];
551 var apr_max = apr_max = matches[3];
552 //console.log('billing_cycle', billing_cycle);
553 //console.log('apr_min', apr_min);
554 //console.log('apr_max', apr_max);
555 if (billing_cycle) {
556 //console.log($(".scraped-billing-cycle"));
557 $(".scraped-billing-cycle").html(billing_cycle);
558 }
559 if (apr_min) {
560 $(".scraped-apr-min").html(apr_min);
561 }
562 if (apr_max) {
563 $('.scraped-apr-max').html(apr_max);
564 }
565
566 } catch (e) {
567 console.log(e);
568 }
569 }
570 });
571 </script>
572 </#if>
573 </#if>
574 <#if product?has_content && product != "">
575 <#assign card_text = product + " Card">
576 </#if>
577 <#assign tc_offerTypes = ['108', '109', '121', '144']>
578 <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']>
579 <div class="hero-container ${class.getData()}">
580 <div class="hero-main">
581 <div class="hero-main-container">
582 <div class="hero-main-offer">
583 <div class="offer-detail">
584 <div class="offer-detail-cardArt cardArtImg">
585 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
586 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive">
587 <p>${card_text!''}</p>
588 <#if (hasBalanceTransferCalculator)>
589 <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a>
590 </#if>
591 </div>
592 <div class="offer-detail-text text-color-default hide-desktop">
593 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
594
595 <#if (tc_offerTypes?seq_contains(fib.offerType))>
596 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
597 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
598 </a>
599 </#if>
600 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
601 <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>
602 </#if>
603 </div>
604
605 <#if isExcluded == 0>
606 <a
607 class="jn-button hide-desktop btn"
608 data-button-name="cta-button-top"
609 data-product-name="${productUrlHero!''}"
610 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
611 >
612 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
613 </a>
614 <#else>
615 <a
616 class="jn-button hide-desktop btn"
617 data-button-name="cta-button-top"
618 data-product-name="${productUrlHero!''}"
619 data-micromodal-trigger="modal-product-hero"
620 href="javascript:void(0);"
621 >
622 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
623 </a>
624 </#if>
625 </div>
626 <div class="offer-header">
627 <div class="offer-text-top">
628 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
629 </div>
630 <div class="offer-text-bottom hide-mobile">
631 <div class="offer-detail-text text-color-default ">
632 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
633 <#if (tc_offerTypes?seq_contains(fib.offerType))>
634 <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
635 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
636 </a>
637 </#if>
638 </div>
639
640 <#if isExcluded == 0>
641 <a
642 class="jn-button"
643 data-button-name="cta-button-top"
644 data-product-name="${productUrlHero!''}"
645 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
646 >
647 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
648 </a>
649 <#else>
650 <a
651 class="jn-button"
652 data-button-name="cta-button-top"
653 data-product-name="${productUrlHero!''}"
654 data-micromodal-trigger="modal-product-hero"
655 href="javascript:void(0);"
656 >
657 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
658 </a>
659 </#if>
660 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
661 <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>
662 </#if>
663 </div>
664 </div>
665
666 </div>
667 </div>
668 </div>
669 </div>
670
671 <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" >
672 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
673 <div
674 aria-modal="true"
675 aria-labelledby="modal-prodcut-hero-title"
676 class="excludeModal__container"
677 role="dialog"
678 >
679 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
680 <header class="excludeModal__header">
681 <h2 class="excludeModal__title" id="modal-prodcut-hero-title">
682 <#if productTitle.getSiblings()[cardIndex].excludedMessage?? >
683 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
684 </#if>
685 </h2>
686 </header>
687 </div>
688 </div>
689 </div>
690 <#break />
691 </#if>
692 </#list>
693
694 </#if>
695</#if>
696<!-- https://micromodal.vercel.app/ -->
697<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
698
699<script>
700 AUI().ready(function(){
701 //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
702 var locationCodeParam = '${lc}';
703 var currentEnvironmentParam = '${currentEnvironment}';
704 if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){
705 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"})
706 }
707
708 MicroModal.init();
709 });
710</script>
711<script>
712 if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};}
713 setHeaderBackground = () => {
714 // Makes the Header subtitle work if there is two lines of text
715 //product page header
716 var consumerHeader = document.getElementsByClassName("landing-consumer")[0];
717 if(!consumerHeader) {
718 //index page header
719 consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0];
720 }
721
722 if(consumerHeader) {
723 var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0];
724 var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0];
725 const offerTextTop = consumerHeader.querySelector(".offer-text-top");
726
727 if (consumerOfferHeader.innerText.length >= 76){
728 const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px";
729 //two lines
730 //offerTextTop.style.marginTop = '0px';
731 //document.querySelector('.offer-text-bottom').style.marginTop = '25px';
732 //prevent button and text going into blue section
733 //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px";
734 consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")";
735 }
736 }
737 //product page header
738 var buisnessHeader = document.getElementsByClassName("landing-business")[0];
739 if(!buisnessHeader) {
740 //index page header
741 buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0];
742 }
743
744 if(buisnessHeader) {
745 var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0];
746 var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0];
747
748 if (buisnessOfferHeader.innerText.length >= 48){
749 //two lines
750 buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)";
751 }
752 }
753 };
754 /*
755 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.
756 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.
757 */
758 setHeaderBackground();
759 AUI().ready(function(){setHeaderBackground();});
760
761</script>
An error occurred while processing the template.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#155407401" at line 13, column 15] ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#155407401" at line 13, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
5<#assign environment = url?replace('/index.*','','r')>
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7
8<script>
9var currentUrl = '${url}';
10
11</script>
12
13<#assign lc = qstringmap["ecdma-lc"]?first>
14<#assign lc = htmlUtil.escape(lc)>
15<#assign lc = htmlUtil.escapeJS(lc)>
16
17<#assign prefix = "00000" >
18<#assign lcWithPrefix = prefix + lc >
19<#assign withPrefixLength = lcWithPrefix?length >
20<#assign startHere = withPrefixLength - 5>
21<#assign lc = lcWithPrefix?substring(startHere)>
22
23
24<#if qstringmap["ecid"]?has_content>
25 <#assign ecidExt = qstringmap["ecid"]?first>
26 <#assign ecidExt = htmlUtil.escape(ecidExt)>
27 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
28 <#assign ecidExt = "&ecid=" + ecidExt>
29<#else>
30 <#assign ecidExt="">
31</#if>
32
33<#if oadURL?contains("uat-")>
34 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
35<#else>
36 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
37</#if>
38
39
40<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
41<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
42<#assign clientProfile = clientProfileList?first>
43<#assign partnerName = clientProfile.getMarketingNameLong()>
44<#assign pbu = clientProfile.getPbu()>
45<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
46<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
47
48<#if qstringmap["ecid"]?has_content>
49 <#assign ecidExt = qstringmap["ecid"]?first>
50 <#assign ecidExt = htmlUtil.escape(ecidExt)>
51 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
52 <#assign ecidExt = "&ecid=" + ecidExt>
53
54 <#assign campaignId = qstringmap["ecid"]?first >
55 <#assign campaignId = htmlUtil.escape(campaignId)>
56 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
57<#else>
58 <#assign ecidExt="">
59 <#assign campaignId = "" >
60</#if>
61
62<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu + '&' + lc)>
63<#-- filter duplicated cards-->
64<#assign consumerCards = []>
65<#assign businessCards = []>
66<#assign offerTypeList = []>
67<#assign consumerOfferTypes =['101', '104', '108', '109', '115', '141','147', '138', '154']>
68<#assign businessOfferTypes =['144', '128', '143', '121']>
69<#assign index = 0>
70<#list fiCardsData as fib>
71 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
72 <#assign offerTypeList = offerTypeList + [fib.offerType]>
73 <#if consumerOfferTypes?seq_contains(fib.offerType)>
74 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
75 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
76 <#assign businessCards = businessCards + fiCardsData[index..index]>
77 </#if>
78 </#if>
79 <#assign index = index + 1>
80</#list>
81
82<style>
83 .excludeModal__overlay {
84 position: fixed;
85 top: 0;
86 left: 0;
87 right: 0;
88 bottom: 0;
89 background: rgba(0,0,0,0.6);
90 display: flex;
91 justify-content: center;
92 align-items: center;
93 }
94
95 .excludeModal__container {
96 background-color: #fff;
97 padding: 30px;
98 min-width: 500px;
99 max-width: 500px;
100 max-height: 100vh;
101 border-radius: 4px;
102 overflow-y: auto;
103 box-sizing: border-box;
104 }
105
106 .excludeModal__header {
107 display: flex;
108 justify-content: space-between;
109 align-items: center;
110 }
111
112 .modal .excludeModal__container .excludeModal__title {
113 margin-top: 0;
114 margin-bottom: 0;
115 font-weight: 600;
116 font-size: 20px;
117 line-height: 1.25;
118 color: #00449e;
119 box-sizing: border-box;
120 }
121
122 .excludeModal__close {
123 background: transparent;
124 border: 1px solid white;
125 padding: 4px 8px;
126 float: right;
127 }
128
129 .excludeModal__close:hover {
130 border: 1px solid black;
131 }
132
133 .excludeModal__close:before { content: "\2715"; }
134
135 @keyframes mmfadeIn {
136 from { opacity: 0; }
137 to { opacity: 1; }
138 }
139
140 @keyframes mmfadeOut {
141 from { opacity: 1; }
142 to { opacity: 0; }
143 }
144
145 @keyframes mmslideIn {
146 from { transform: translateY(15%); }
147 to { transform: translateY(0); }
148 }
149
150 @keyframes mmslideOut {
151 from { transform: translateY(0); }
152 to { transform: translateY(-10%); }
153 }
154
155 .micromodal-slide {
156 display: none;
157 }
158
159 .micromodal-slide.is-open {
160 display: block;
161 }
162
163 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
164 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
165 }
166
167 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
168 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
169 }
170
171 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
172 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
173 }
174
175 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
176 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
177 }
178
179 .micromodal-slide .excludeModal__container,
180 .micromodal-slide .excludeModal__overlay {
181 will-change: transform;
182 }
183</style>
184
185<#if ((consumerCards?size > 0) || (businessCards?size > 0))>
186 <div class="content-container content-container-main jn-consumer-content">
187 <#if ((consumerCards?size > 0) && (businessCards?size > 0))>
188 <nav class="jn-primary-nav two-tabs">
189 <ul>
190 <li title="${partnerName!''} - Personal products">
191 <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a>
192 </li>
193 <li title="${partnerName!''} - Business products">
194 <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a>
195 </li>
196 </ul>
197 </nav>
198 <#else>
199 <#if (consumerCards?size > 0)>
200 <nav class="jn-primary-nav" title="${partnerName!''} - Personal products">
201 <ul>
202 <li>
203 <p class="tab-nav" id="consumerTab"><span>Personal</span></p>
204 </li>
205 </ul>
206 </nav>
207 </#if>
208 <#if (businessCards?size > 0)>
209 <nav class="jn-primary-nav" title="${partnerName!''} - Business products">
210 <ul>
211 <li>
212 <p class="tab-nav" id="businessTab"><span>Business</span></p>
213 </li>
214 </ul>
215 </nav>
216 </#if>
217 </#if>
218 <#if (consumerCards?size > 0)>
219 <div class="tab-more-wrapper">
220 <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products">
221
222 <#list consumerCards as fib>
223 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" >
224 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg" >
225 <#assign hasBalanceTransferCalculator = false>
226 <#switch fib.offerType>
227 <#case "101">
228 <#assign productName = "consumer-edr">
229 <#assign productUrl = "202302/consumer-edr">
230 <#assign product="Everyday Rewards+">
231 <#assign cardIndex = 0>
232 <#break>
233 <#case "108">
234 <#assign productName = "consumer-platinum">
235 <#assign productUrl = "202308/consumer-platinum">
236 <#assign product="Platinum">
237 <#assign cardIndex = 2>
238 <#assign hasBalanceTransferCalculator = true>
239 <#break>
240 <#case "109">
241 <#assign productName = "consumer-platinum">
242 <#assign productUrl = "202308/consumer-platinum">
243 <#assign product="Platinum">
244 <#assign cardIndex = 2>
245 <#assign hasBalanceTransferCalculator = true>
246 <#break>
247 <#case "115">
248 <#assign productName = "secured">
249 <#assign productUrl = "secured">
250 <#assign product="Secured">
251 <#assign cardIndex = 5>
252 <#break>
253 <#case "104">
254 <#assign productName = "max-cash">
255 <#assign productUrl = "max-cash">
256 <#assign product="Max Cash Preferred">
257 <#assign cardIndex = 1>
258 <#break>
259 <#case "147">
260 <#assign productName = "max-cash-secured">
261 <#assign productUrl = "max-cash-secured">
262 <#assign product="Max Cash Secured">
263 <#assign cardIndex = 4>
264 <#break>
265 <#case "141">
266 <#assign productName = "college-real-rewards">
267 <#assign productUrl = "college-real-rewards">
268 <#assign product="College Real Rewards">
269 <#assign cardIndex = 3>
270 <#break>
271 <#case "138">
272 <#assign productName = "travel-rewards-plus">
273 <#assign productUrl = "202305/travel-rewards-plus">
274 <#assign product="Travel Rewards+">
275 <#assign cardIndex = 10>
276 <#break>
277 <#case "154">
278 <#assign productName = "reserve-rewards-plus">
279 <#assign productUrl = "202305/reserve-rewards-plus">
280 <#assign product="Reserve Rewards+">
281 <#assign cardIndex = 11>
282 <#break>
283 <#default>
284 </#switch>
285 <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()>
286 <#assign titleText = titleText?replace('<[^>]+>','','r')>
287 <#assign newTag = "">
288 <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")>
289 <#assign newTag = "with-new-tag">
290 </#if>
291 <#assign APR="">
292 <#assign AMF="">
293 <#assign BAL="">
294 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)>
295 <#if (scrapedData?size > 0)>
296 <#list scrapedData as sItem>
297 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
298 <#assign APR = sItem.scrapedValue>
299 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
300 <#assign AMF = sItem.scrapedValue>
301 <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) >
302 <#assign BAL = sItem.scrapedValue>
303 </#if>
304 <#if (APR?has_content && AMF?has_content && BAL?has_content)>
305 <#break>
306 </#if>
307 </#list>
308 </#if>
309 <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card">
310 <div class="tag-container">
311 <div class="tag-corner">
312 <div class="tag-label">NEW</div>
313 </div>
314 </div>
315 <div class="consumer-card-heading hide-desktop">
316 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
317 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
318 </div>
319 <div class="jn-consumer-card-image">
320 <img src="${cardArtImage!''}" alt="${partnerName!''} ${product!''} Card" class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
321 <#assign calculatorConsumerOfferTypes = ["101", "103", "104", "138", "154"] >
322 <#if (calculatorConsumerOfferTypes?seq_contains(fib.offerType))>
323 <a class="reward-calculator-link" target="_blank" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' class="whiteLink" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a>
324 </#if>
325 <#if consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content>
326 <p class="tier3-tabs-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p>
327 </#if>
328 <#if (hasBalanceTransferCalculator)>
329 <a style="display: block; text-align: center; max-width: 285px; margin: auto;" href="javascript:void(0);" data-micromodal-trigger="modal-2">See how much you could save with a balance transfer</a>
330 </#if>
331 </div>
332
333 <div class="jn-consumer-card-info">
334 <div class="consumer-card-heading hide-mobile">
335 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
336 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
337 </div>
338 <div class="jn-additional">
339 <ul class="${fib.offerType}">
340 <li>
341 <p>
342 <#if (fib.offerType == "104")>
343 <strong>APR for Purchases: </strong>
344 <#elseif (fib.offerType == "101" ||
345 fib.offerType == "108" ||
346 fib.offerType == "109" ||
347 fib.offerType == "141"
348 )>
349 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
350 <#else>
351 <strong>APR for Purchases and Balance Transfers: </strong>
352 </#if>
353 ${APR!''}
354 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank" class="t_c_link">
355 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.
356 </a>
357 </p>
358 </li>
359 <#if (fib.offerType == "104")>
360 <li class="${fib.offerType}">
361 <p>
362 <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong>
363 ${BAL!''}
364 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank" class="t_c_link">
365 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.
366 </a>
367 </p>
368 </li>
369 </#if>
370
371 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
372 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
373 <li>${marketingInfo.getData()}</li>
374 </#list>
375 </#if>
376 <li>
377 <p>Annual Fee: ${AMF!''}
378 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank" class="t_c_link">
379 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.
380 </a>
381 </p>
382 </li>
383 </ul>
384 </div>
385 <ul class="actions">
386 <li>
387 <#assign isExcluded = 0>
388 <#if fib.dmaexclude??>
389 <#assign isExcluded = fib.dmaexclude?number!0>
390 </#if>
391 <#if isExcluded == 0>
392 <a
393 class="applyNowLink"
394 data-button-name="apply-now-link"
395 data-product-name="${productName!''}"
396 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
397 >
398 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span>
399 </a>
400 <#else>
401 <a
402 class="applyNowLink"
403 data-button-name="apply-now-link"
404 data-product-name="${productName!''}"
405 data-micromodal-trigger="modal-consumer-tabs-${fib.offerType}"
406 href="javascript:void(0);"
407 >
408 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span>
409 </a>
410
411 </#if>
412 </li>
413 <li><a href="${environment}/${productUrl}?ecdma-lc=${lc}${ecidExt}">${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span></a>
414 </li>
415 </ul>
416 </div>
417 </div>
418 </#list>
419 </div>
420 </div>
421 </#if>
422 <#if (businessCards?size > 0)>
423 <div class="tab-more-wrapper">
424 <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products">
425
426 <#list businessCards as fib>
427 <#assign cardArtImage = cdnCardArtUrl + "/"+fib.filename+".png">
428 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
429 <#switch fib.offerType>
430 <#case "128">
431 <#assign productName = "business-cash-preferred">
432 <#assign productUrl = "business-cash-preferred">
433 <#assign product="Business Cash Preferred">
434 <#assign cardIndex = 6>
435 <#break>
436 <#case "121">
437 <#assign productName = "business-platinum">
438 <#assign productUrl = "202208/business-platinum">
439 <#assign product="Business Card">
440 <#assign cardIndex = 7>
441 <#break>
442 <#case "144">
443 <#assign productName = "smart-business-rewards">
444 <#assign productUrl = "smart-business-rewards">
445 <#assign product="Smart Business Rewards">
446 <#assign cardIndex = 8>
447 <#break>
448 <#case "143">
449 <#assign productName = "business-real-rewards">
450 <#assign productUrl = "business-real-rewards">
451 <#assign product="Business Real Rewards">
452 <#assign cardIndex = 9>
453 <#break>
454
455 <#default>
456 </#switch>
457 <#assign newTag = "">
458 <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")>
459 <#assign newTag = "with-new-tag">
460 </#if>
461
462 <#assign APR="">
463 <#assign AMF="">
464 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)>
465 <#if (scrapedData?size > 0)>
466 <#list scrapedData as sItem>
467 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
468 <#assign APR = sItem.scrapedValue>
469 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
470 <#assign AMF = sItem.scrapedValue>
471 </#if>
472 <#if (APR?has_content && AMF?has_content)>
473 <#break>
474 </#if>
475 </#list>
476 </#if>
477
478 <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card">
479 <div class="tag-container">
480 <div class="tag-corner">
481 <div class="tag-label">NEW</div>
482 </div>
483 </div>
484 <div class="consumer-card-heading hide-desktop">
485 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
486 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
487 </div>
488 <div class="jn-consumer-card-image">
489
490 <img
491 src="${cardArtImage!''}"
492 alt="${partnerName!''} ${product!''} Card"
493 class="jn-img-responsive"
494 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"
495 >
496 <#assign calculatorBizOfferTypes = ["144", "143", "128"] >
497 <#if (calculatorBizOfferTypes?seq_contains(fib.offerType))>
498 <a class="reward-calculator-link" target="_blank" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' class="whiteLink" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a>
499 </#if>
500 <#if consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content>
501 <p class="tier3-tabs-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p>
502 </#if>
503 </div>
504 <div class="jn-consumer-card-info">
505 <div class="consumer-card-heading hide-mobile">
506 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
507 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
508 </div>
509 <div class="jn-additional">
510 <ul class="${fib.offerType}">
511 <li>
512 <p>
513 <#if (fib.offerType == "144")>
514 <strong>APR for Purchases and Balance Transfers: </strong>
515 <#else>
516 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
517 </#if>
518 ${APR!''}
519 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank" class="t_c_link"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.</a>
520 </p>
521 </li>
522
523 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
524 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
525 <li>${marketingInfo.getData()}</li>
526 </#list>
527 </#if>
528 <li><p>Annual Fee: ${AMF!''} <a
529 href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank" class="t_c_link"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.</a></p>
530 </li>
531 </ul>
532 </div>
533 <ul class="actions">
534 <li>
535 <#assign isExcluded = 0>
536 <#if fib.dmaexclude??>
537 <#assign isExcluded = fib.dmaexclude?number!0>
538 </#if>
539 <#if isExcluded == 0>
540 <a
541 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
542 class="applyNowLink"
543 data-button-name="apply-now-link"
544 data-product-name="${productName!''}"
545 >
546 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span>
547 </a>
548 <#else>
549 <a
550 class="applyNowLink"
551 data-button-name="apply-now-link"
552 data-product-name="${productName!''}"
553 data-micromodal-trigger="modal-business-tabs-${fib.offerType}"
554 href="javascript:void(0);"
555 >
556 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span>
557 </a>
558
559 </#if>
560 </li>
561 <li><a href="${environment}/${productUrl}?ecdma-lc=${lc}${ecidExt}">${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span></a></li>
562 </ul>
563 </div>
564 </div>
565
566 </#list>
567 </div>
568 </div>
569 </#if>
570 </div>
571
572 <#if (consumerCards?size > 0)>
573 <#list consumerCards as fib>
574 <#assign isExcluded = 0>
575 <#if fib.dmaexclude??>
576 <#assign isExcluded = fib.dmaexclude?number!0>
577 </#if>
578 <#if isExcluded == 1>
579 <div aria-hidden="true" class="modal micromodal-slide" id="modal-consumer-tabs-${fib.offerType}" >
580 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1" >
581 <div
582 aria-modal="true"
583 aria-labelledby="modal-consumer-tabs-title-${fib.offerType}"
584 class="excludeModal__container"
585 role="dialog"
586 >
587 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
588 <header class="excludeModal__header">
589 <h2 class="excludeModal__title" id="modal-consumer-tabs-title-${fib.offerType}">
590 <#if consumerTitle.getSiblings()[cardIndex].excludedMessage?? >
591 ${consumerTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
592 </#if>
593 </h2>
594 </header>
595 </div>
596 </div>
597 </div>
598 </#if>
599 </#list>
600 </#if>
601
602 <#if (businessCards?size > 0)>
603 <#list businessCards as fib>
604 <#assign isExcluded = 0>
605 <#if fib.dmaexclude??>
606 <#assign isExcluded = fib.dmaexclude?number!0>
607 </#if>
608 <#if isExcluded == 1>
609 <div aria-hidden="true" class="modal micromodal-slide" id="modal-business-tabs-${fib.offerType}" >
610 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
611 <div
612 aria-modal="true"
613 aria-labelledby="modal-business-tabs-title-${fib.offerType}"
614 class="excludeModal__container"
615 role="dialog"
616 >
617 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
618 <header class="excludeModal__header">
619 <h2 class="excludeModal__title" id="modal-business-tabs-title-${fib.offerType}">
620 <#if consumerTitle.getSiblings()[cardIndex].excludedMessage?? >
621 ${consumerTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
622 </#if>
623 </h2>
624 </header>
625 </div>
626 </div>
627 </div>
628 </#if>
629 </#list>
630 </#if>
631
632 <!-- https://micromodal.vercel.app/ -->
633 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
634
635 <script>
636 AUI().ready(function() {
637 var tabs=$('.tab-nav');
638 var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]';
639 var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]';
640 var screenWidthMobile = 768;
641 var screenWidth = window.innerWidth;
642 var heroCardImgs = document.querySelectorAll('.jn-consumer-card-image img, .cardArtImg img');
643 for (var index = 0; index < heroCardImgs.length; index++) {
644 var heroCardImg = heroCardImgs[index];
645 var heroCardSrc = heroCardImg.getAttribute("src");
646 if(heroCardSrc != "") {
647 resizeImg(heroCardImg);
648 }
649 }
650
651 if (tabs.length == 1) {
652 $(tabs).parent().css('margin', '0');
653 if ($(consumerSelector).length > 0) {
654 hideHeroAndDisclaimer('business');
655 showHeroAndDisclaimer('consumer');
656 changeCardLayout(consumerSelector);
657 renumberFootnote("consumer");
658 createMetaTag("consumer");
659 }
660 if ($(businessSelector).length > 0) {
661 $(businessSelector).addClass('active');
662 hideHeroAndDisclaimer('consumer');
663 showHeroAndDisclaimer('business');
664 changeCardLayout(businessSelector);
665 renumberFootnote("business");
666 createMetaTag("business");
667 }
668 }
669 if (tabs.length == 2) {
670 renumberFootnote("consumer");
671 renumberFootnote("business");
672 createMetaTag("consumer");
673
674 if ($(consumerSelector + ' .jn-consumer-item').length < 3) {
675 changeCardLayout(consumerSelector);
676 }
677 if ($(businessSelector + ' .jn-consumer-item').length < 3) {
678 changeCardLayout(businessSelector);
679 }
680
681 var tabsNav = document.querySelectorAll('.tab-nav');
682 togglePrimaryNav(tabsNav);
683
684 if(window.location.href.indexOf('#business') > -1 ) {
685 $(consumerSelector).removeClass('active');
686 $(businessSelector).addClass('active');
687 $('#consumerTab').removeClass('active');
688 $('#businessTab').addClass('active');
689 hideHeroAndDisclaimer('consumer');
690 showHeroAndDisclaimer('business');
691 changeCardLayout(businessSelector);
692 renumberFootnote("business");
693 createMetaTag("business");
694
695 $(tabs).click(function(){
696 if ($(this).attr('id') === "consumerTab") {
697 var newUrl = window.location.toString();
698 window.location = newUrl.replace(/#business/, '#consumer');
699 }
700 if ($(this).attr('id') === "businessTab") {
701 var url = window.location.toString();
702 window.location = url.replace(/#consumer/, '#business');
703 }
704 });
705 }
706
707 }
708 });
709
710 // Primary Nav function
711 function togglePrimaryNav(elem) {
712 for (var i = 0; i < elem.length; i++) {
713 elem[i].addEventListener("click", function(e) {
714
715 var current = this,
716 allSections = document.querySelectorAll('[data-id]'),
717 section = document.querySelector("[data-id='"+ current.id +"']");
718
719 for (var a = 0; a < allSections.length; a++) {
720 allSections[a].classList.remove('active');
721 }
722 for (var c = 0; c < elem.length; c++) {
723 if (current != elem[c]) {
724 elem[c].classList.remove('active');
725 } else {
726 current.classList.add('active');
727 section.classList.add('active');
728 hideHeroAndDisclaimer('consumer');
729 hideHeroAndDisclaimer('business');
730 if(current.getAttribute('id') === "consumerTab"){
731 showHeroAndDisclaimer('consumer');
732 } else if(current.getAttribute('id') === "businessTab"){
733 showHeroAndDisclaimer('business');
734 }
735 }
736 }
737 e.preventDefault();
738 });
739 }
740 }
741
742 function renumberFootnote(type) {
743 var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]';
744 var disclaimerSelector = '.tier3-disclaimer-landing-' + type;
745 var heroSelector = '.tier3-hero-landing-' + type;
746 var numOfFootnote = $(disclaimerSelector + ' sup').length;
747 var showList = [];
748 var hideList=[];
749 for (var i = 1; i <= numOfFootnote; i++) {
750 var cssClass="tag-" + i;
751 if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) {
752 showList.push(i);
753 } else {
754 hideList.push(i);
755 }
756 }
757 /*
758 for (var i = 1; i < showList.length + 1; i++) {
759 if(showList[i-1] != i) {
760 var className="tag-" + showList[i-1];
761
762 //$(heroSelector).find("." + className).html(i);
763 // $(discriptionSelector).find("." + className).html(i);
764 //$(disclaimerSelector).find("." + className).html(i);
765 }
766 }
767 */
768 for (var i = 0; i <hideList.length; i++) {
769 var cname="tag-" + hideList[i];
770 $(disclaimerSelector).find("." + cname).parent().hide();
771 }
772 }
773
774 function changeCardLayout(cssSelector) {
775 var numOfCards = $(cssSelector + ' .jn-consumer-item').length;
776 if(numOfCards == 1) {
777 $(cssSelector).addClass('one-card');
778 } else if (numOfCards == 2) {
779 $(cssSelector).addClass('two-card');
780 }
781 }
782
783 function hideHeroAndDisclaimer(type) {
784 try {
785 document.querySelector('.tier3-hero-landing-'+ type).classList.remove('show');
786 document.querySelector('.tier3-hero-landing-'+ type).classList.add('hide');
787 } catch (e) {
788 console.log(e);
789 }
790
791 try {
792 document.querySelector('.tier3-disclaimer-landing-'+ type).classList.remove('show');
793 document.querySelector('.tier3-disclaimer-landing-'+ type).classList.add('hide');
794 } catch (e) {
795 console.log(e);
796 }
797
798 }
799
800 function showHeroAndDisclaimer(type) {
801 try {
802 document.querySelector('.tier3-hero-landing-'+ type).classList.add('show');
803 document.querySelector('.tier3-hero-landing-'+ type).classList.remove('hide');
804 } catch (e) {
805 console.log(e);
806 }
807
808 try {
809 document.querySelector('.tier3-disclaimer-landing-'+ type).classList.add('show');
810 document.querySelector('.tier3-disclaimer-landing-'+ type).classList.remove('hide');
811 } catch (e) {
812 console.log(e);
813 }
814
815 }
816
817 function createMetaTag(type) {
818 var partnerName = "${partnerName!0}";
819 var product_name = $('.jn-hero-container .jn-button').data('product-name');
820 var metaDesc ="";
821 if (type == "consumer") {
822 if(product_name == "consumer-platinum") {
823 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 20 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card.";
824 } else if(product_name == "real-rewards") {
825 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase.";
826 } else if(product_name == "secured") {
827 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
828 } else if(product_name == "max-cash") {
829 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus.";
830 } else if(product_name == "max-cash-secured") {
831 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn more on the categories you pick.";
832 } else if(product_name == "travel-rewards-plus") {
833 metaDesc = "Apply Today for a "+partnerName+" Credit Card.";
834 } else if(product_name == "reserve-rewards-plus") {
835 metaDesc = "Apply Today for a "+partnerName+" Credit Card.";
836 }
837
838 } else if (type == "business") {
839 if(product_name == "business-cashback") {
840 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
841 } else if(product_name == "business-real-rewards") {
842 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on.";
843 } else if(product_name == "business-platinum") {
844 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
845 } else if(product_name == "smart-business-rewards") {
846 metaDesc = "Apply Today for a "+partnerName+" Credit Card. More choices. More value for your business. Earn a $200 Bonus and 2x Rewards on your top 2 spend categories each month with the "+partnerName+" Credit Card.";
847 }
848 }
849 var m = document.createElement('meta');
850 m.name = 'description';
851 m.content = metaDesc;
852 document.head.appendChild(m);
853 }
854
855 function resizeImg(img) {
856 img.addEventListener("load", function() {
857 var cardImgWidth = img.width;
858 var cardImgHeight = img.height;
859 if(cardImgWidth > cardImgHeight) {
860 img.style.width = "285px";
861 } else {
862 img.style.width = "150px";
863 }
864 });
865 }
866
867 AUI().ready(function() {
868 MicroModal.init();
869 });
870 </script>
871</#if>
An error occurred while processing the template.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#153417682" at line 5, column 15] ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#153417682" at line 5, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4
5<#assign lc = qstringmap["ecdma-lc"]?first>
6<#assign lc = htmlUtil.escape(lc)>
7<#assign lc = htmlUtil.escapeJS(lc)>
8
9<#assign prefix = "00000" >
10<#assign lcWithPrefix = prefix + lc >
11<#assign withPrefixLength = lcWithPrefix?length >
12<#assign startHere = withPrefixLength - 5>
13<#assign lc = lcWithPrefix?substring(startHere)>
14<#if lc?has_content>
15
16 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
17 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
18 <#assign clientProfile = clientProfileList?first>
19 <#assign partnerName = clientProfile.getMarketingNameLong()>
20
21 <#assign pbu = clientProfile.getPbu()>
22 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
23
24 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
25 <#if (fiCardsData?size > 0) >
26 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
27
28 <#if (cardProvider?size > 0)>
29 <#-- This will be V for visa or M for mastercard. -->
30 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
31 <#else>
32 <script>
33 console.log("No card provider(Visa/Master Card) found for disclaimer");
34 </script>
35 </#if>
36
37 <div class="jn-disclaimer tier3-disclaimer-${class.getData()}" title="${partnerName!''} - Disclaimer">
38 <div class="disclaimer">
39 <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))>
40 ${disclaimersVisa.getData()}
41 </#if>
42 <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) >
43 ${disclaimersMasterCard.getData()}
44 </#if>
45 </div>
46 </div>
47 <#else>
48 <script>
49 console.log("card data empty");
50 </script>
51 </#if>
52<#else>
53 <script>
54 console.log("No lc for disclaimer");
55 </script>
56</#if>
An error occurred while processing the template.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#153417682" at line 5, column 15] ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#153417682" at line 5, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4
5<#assign lc = qstringmap["ecdma-lc"]?first>
6<#assign lc = htmlUtil.escape(lc)>
7<#assign lc = htmlUtil.escapeJS(lc)>
8
9<#assign prefix = "00000" >
10<#assign lcWithPrefix = prefix + lc >
11<#assign withPrefixLength = lcWithPrefix?length >
12<#assign startHere = withPrefixLength - 5>
13<#assign lc = lcWithPrefix?substring(startHere)>
14<#if lc?has_content>
15
16 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
17 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
18 <#assign clientProfile = clientProfileList?first>
19 <#assign partnerName = clientProfile.getMarketingNameLong()>
20
21 <#assign pbu = clientProfile.getPbu()>
22 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
23
24 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
25 <#if (fiCardsData?size > 0) >
26 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
27
28 <#if (cardProvider?size > 0)>
29 <#-- This will be V for visa or M for mastercard. -->
30 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
31 <#else>
32 <script>
33 console.log("No card provider(Visa/Master Card) found for disclaimer");
34 </script>
35 </#if>
36
37 <div class="jn-disclaimer tier3-disclaimer-${class.getData()}" title="${partnerName!''} - Disclaimer">
38 <div class="disclaimer">
39 <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))>
40 ${disclaimersVisa.getData()}
41 </#if>
42 <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) >
43 ${disclaimersMasterCard.getData()}
44 </#if>
45 </div>
46 </div>
47 <#else>
48 <script>
49 console.log("card data empty");
50 </script>
51 </#if>
52<#else>
53 <script>
54 console.log("No lc for disclaimer");
55 </script>
56</#if>
An error occurred while processing the template.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#153417685" at line 3, column 15] ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#153417685" at line 3, column 1] ----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign lc = qstringmap["ecdma-lc"]?first>
4<#assign lc = htmlUtil.escape(lc)>
5<#assign lc = htmlUtil.escapeJS(lc)>
6
7<#if (lc?has_content && lc?length gt 5)>
8 <#assign lc = lc[0..4] >
9</#if>
10<#assign lc = lc?web_safe>
11<#assign aDateTime = .now>
12<#assign currentYear = aDateTime?string.yyyy>
13
14
15<div id="footerIdAdPlatinum">
16 ${footerContent.getData()}
17</div>
18
19<!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
20<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
21<style>
22 #opt-out-button,
23 .modal__btn.learn-more {
24 background: #0C2074;
25 border: 1px solid #0C2074;
26 color: white;
27 text-transform: uppercase;
28 text-decoration: none;
29 font-size: 16px;
30 padding: 0.5rem 2rem;
31 display: inline-block;
32 border-radius: 0;
33 }
34 #opt-out-button:hover,
35 .modal__btn.learn-more:hover {
36 color: white !important;
37 border-color: #2C76AF !important;
38 background-color: #2C76AF !important;
39 }
40 .modal .modal__btn.learn-more {
41 background: white;
42 border: 1px solid #0C2074;
43 color: #0C2074;
44 text-decoration: none;
45 }
46 #opt-out-button[disabled="true"] {
47 background-color: rgba(0,0,0,.15);
48 color: rgba(0,0,0,.45);
49 border-color: rgba(0,0,0,.25);
50 }
51 #opt-out-button:hover[disabled="true"] {
52 background-color: rgba(0,0,0,.15) !important;
53 color: rgba(0,0,0,.45) !important;
54 border-color: rgba(0,0,0,.25) !important;
55 }
56 #opt-out-button:focus {
57 outline-style: solid;
58 outline-color: white;
59 outline-offset: -3px;
60 outline-width: 1px;
61 }
62 .opt-out-link svg {
63 width: 30px;
64 height: 14px;
65 width: auto;
66 vertical-align: middle;
67 }
68 .modal__overlay {
69 position: fixed;
70 top: 0;
71 left: 0;
72 right: 0;
73 bottom: 0;
74 background: rgba(0,0,0,0.6);
75 display: flex;
76 justify-content: center;
77 align-items: center;
78 }
79
80 .modal__container {
81 background-color: #fff;
82 padding: 30px;
83 max-width: 500px;
84 max-height: 100vh;
85 border-radius: 4px;
86 overflow-y: auto;
87 box-sizing: border-box;
88 }
89
90 .modal__header {
91 display: flex;
92 justify-content: space-between;
93 align-items: center;
94 }
95
96 .modal .modal__container .modal__title {
97 margin-top: 0;
98 margin-bottom: 0;
99 font-weight: 600;
100 font-size: 20px;
101 line-height: 1.25;
102 color: #00449e;
103 box-sizing: border-box;
104 }
105
106 .modal__close {
107 background: transparent;
108 border: 1px solid white;
109 padding: 4px 8px;
110 }
111 .modal__close:hover {
112 border: 1px solid black;
113 }
114
115 .modal__header .modal__close:before { content: "\2715"; }
116
117 .modal__content {
118 margin-top: 2rem;
119 margin-bottom: 2rem;
120 line-height: 1.5;
121 }
122
123 @keyframes mmfadeIn {
124 from { opacity: 0; }
125 to { opacity: 1; }
126 }
127
128 @keyframes mmfadeOut {
129 from { opacity: 1; }
130 to { opacity: 0; }
131 }
132
133 @keyframes mmslideIn {
134 from { transform: translateY(15%); }
135 to { transform: translateY(0); }
136 }
137
138 @keyframes mmslideOut {
139 from { transform: translateY(0); }
140 to { transform: translateY(-10%); }
141 }
142
143 .micromodal-slide {
144 display: none;
145 }
146
147 .micromodal-slide.is-open {
148 display: block;
149 }
150
151 .micromodal-slide[aria-hidden="false"] .modal__overlay {
152 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
153 }
154
155 .micromodal-slide[aria-hidden="false"] .modal__container {
156 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
157 }
158
159 .micromodal-slide[aria-hidden="true"] .modal__overlay {
160 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
161 }
162
163 .micromodal-slide[aria-hidden="true"] .modal__container {
164 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
165 }
166
167 .micromodal-slide .modal__container,
168 .micromodal-slide .modal__overlay {
169 will-change: transform;
170 }
171</style>
172
173<div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
174<div class="modal__overlay" tabindex="-1" data-micromodal-close>
175 <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
176 <header class="modal__header">
177 <h2 class="modal__title" id="modal-1-title">
178 Your California privacy choices
179 </h2>
180 <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
181 </header>
182 <div class="modal__content" id="modal-1-content">
183 <div id="message-no-cookie">
184 <p>
185 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>
186
187<p> </p>
188
189<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>
190 </div>
191 <div id="message-with-cookie">
192 <p>You have successfully opted-out.</p>
193 </div>
194 </div>
195 <div class="modal__footer">
196 <a href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a>
197 <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button>
198 </div>
199 </div>
200</div>
201</div>
202<!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
203<!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC -->
204<script>
205AUI().ready(function() {
206 //this aui.ready prevents from it not showing cali opt out modal due to getting the node before page finished loading.
207 const copyrightNode = document.querySelector('#footerIdAdPlatinum .copyright');
208 const fdicNode = document.querySelector('#footerIdAdPlatinum .fdic');
209 const agreementNode = document.querySelector('#footerIdAdPlatinum .member-agreement');
210 agreementNode.innerHTML= '<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!''}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>';
211 copyrightNode.innerHTML= '<sup>©</sup> Elan Financial Services ' + ${currentYear};
212 copyrightNode.classList.add('ecdma-footer-client-name-copyright');
213 fdicNode.innerHTML = '<a class="text-color-white" href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
214 /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */
215 fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><a href="javascript:void(0);" class="opt-out-link" 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>');
216 /* END CALIFORNIA OPT-OUT MODAL TRIGGER */
217
218 window.getCookieDomain = function() {
219 var hostname = window.location.hostname.split(".");
220 return hostname && hostname.slice(hostname.length - 2).join(".");
221 }
222 window.setToOptOut = function() {
223 if (window.getCookie('privacy_optout')) {
224 document.getElementById('message-no-cookie').style.display = 'none';
225 document.getElementById('message-with-cookie').style.display = 'block';
226 document.getElementById('opt-out-button').setAttribute('disabled', true)
227 } else {
228 document.getElementById('message-no-cookie').style.display = 'block';
229 document.getElementById('message-with-cookie').style.display = 'none';
230 }
231 }
232 window.getCookie = function(name) {
233 var value = '; ' + document.cookie;
234 var parts = value.split('; ' + name + '=');
235 if (parts.length === 2) return parts.pop().split(';').shift();
236 }
237 window.californiaOptOut = function() {
238 if (!window.getCookie('privacy_optout')) {
239 document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;';
240 try {
241 if (window.CustomEvent) {
242 window.dispatchEvent(new CustomEvent('privacy_optout'));
243 } else {
244 var privacyOptoutEvent = document.createEvent('Event');
245 privacyOptoutEvent.initEvent('privacy_optout', true, true);
246 window.dispatchEvent(privacyOptoutEvent);
247 }
248 window.setToOptOut();
249 } catch (err) {
250 console.error(err);
251 }
252 }
253 }
254 MicroModal.init({
255 onShow: window.setToOptOut
256 });
257
258 // user browser setting for Global Privacy Control to opt out of sharing information with third parties
259 const isBrowserGpcOptOut = navigator.globalPrivacyControl;
260 if(isBrowserGpcOptOut === true) {
261 window.californiaOptOut();
262 }
263 });
264</script>
265<!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->