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<#assign isFromDCOLink = false>
45<#assign dcoSourceCode = ''>
46<#if qstringmap["sourcecode"]?has_content>
47 <#assign dcoSourceCode = qstringmap["sourcecode"]?first>
48 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
49 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
50<#elseif qstringmap["sourceCode"]?has_content>
51 <#assign dcoSourceCode = qstringmap["sourceCode"]?first>
52 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
53 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
54</#if>
55
56<#if dcoSourceCode?has_content>
57 <#assign isFromDCOLink = true>
58</#if>
59
60<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
61<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
62<#assign clientProfile = clientProfileList?first>
63<#assign partnerName = clientProfile.getMarketingNameLong()>
64<#assign pbu = clientProfile.getPbu()>
65<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
66
67<#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
68<#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!>
69<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+pbu+'&'+subbu)>
70
71 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
72<#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
73<#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
74<script>
75//console.log('Partner URL', ${partnerUrl});
76</script>
77<#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*")>
78 <#assign partnerUrl = 'https://' + partnerUrl>
79</#if>
80<script>
81//console.log('Partner URL', ${partnerUrl});
82
83</script>
84<#-- Begin: filter duplicated cards-->
85<#assign temp = []>
86<#assign offerTypeList = []>
87<#if (fiCardsData?size > 0)>
88 <#assign index = 0>
89 <#list fiCardsData as fib>
90 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
91 <#assign offerTypeList = offerTypeList + [fib.offerType]>
92 <#assign temp = temp + fiCardsData[index..index]>
93 </#if>
94 <#assign index = index + 1>
95 </#list>
96 <#assign fiCardsData = temp>
97 <#if (fiCardsData?size > 0)>
98 <div class="content-container content-container-main" title="${partnerName!''}">
99 <#if url?contains("index")>
100 <#assign product="All Cards">
101 <header class="jn-header">
102 <div class="header-logo">
103
104 <#if partnerUrl?has_content>
105 <a href="${partnerUrl!''}" title="${partnerName!''}">
106 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
107 </a>
108 <#else>
109 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
110 </#if>
111 </div>
112 </header>
113 <#else>
114 <header class="jn-header">
115 <#if !isFromDCOLink>
116 <div class="back-overview hide-desktop">
117 <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a>
118 </div>
119 </#if>
120
121 <div class="header-main-logo" title="${partnerName!''}">
122 <#if partnerUrl?has_content>
123 <a href="${partnerUrl!''}" title="${partnerName!''}">
124 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
125 </a>
126 <#else>
127 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
128 </#if>
129 </div>
130 <#if !isFromDCOLink>
131 <div class="styled-select slate">
132 <nav class="styled-select__dropdown">
133 <div class="back-overview hide-mobile">
134 <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a>
135 </div>
136 <a href="javascript:void(0)" class="dropdown-select" aria-expanded="false">
137 <span class="selected-option"></span>
138 <div class="jn-arrow arrow arrow-right"></div>
139 </a>
140 <a href="javascript:void(0)" class="jn-hamburger hamburger" aria-expanded="false">
141 <div class="first-line transform transformed1"></div>
142 <div></div>
143 <div class="transform transformed2"></div>
144 <div></div>
145 </a>
146 <ul>
147 <#list fiCardsData as fib>
148 <#switch fib.offerType>
149 <#case "101">
150 <#assign productURL = "202302/consumer-edr">
151 <#assign productName = "Everyday Rewards+">
152 <#break>
153 <#case "103">
154 <#assign productURL = "202302/consumer-edr">
155 <#assign productName = "Everyday Rewards+">
156 <#break>
157 <#case "104">
158 <#assign productURL = "max-cash">
159 <#assign productName = "Max Cash Preferred Card">
160 <#break>
161 <#case "108">
162 <#assign productURL="202308/consumer-platinum">
163 <#assign productName="Platinum Card">
164 <#break>
165 <#case "109">
166 <#assign productURL="202308/consumer-platinum">
167 <#assign productName="Platinum Card">
168 <#break>
169 <#case "115">
170 <#assign productURL = "secured">
171 <#assign productName = "Secured Card" >
172 <#break>
173 <#case "138">
174 <#assign productURL = "202305/travel-rewards-plus">
175 <#assign productName = "Travel Rewards+" >
176 <#break>
177 <#case "141">
178 <#assign productURL = "college-real-rewards">
179 <#assign productName = "College Real Rewards" >
180 <#break>
181 <#case "147">
182 <#assign productURL = "max-cash-secured">
183 <#assign productName = "Max Cash Secured Card" >
184 <#break>
185 <#case "154">
186 <#assign productURL = "202305/reserve-rewards-plus">
187 <#assign productName = "Reserve Rewards+" >
188 <#break>
189 <#case "121">
190 <#assign productURL = "202208/business-platinum">
191 <#assign productName = "Business Card" >
192 <#break>
193 <#case "128">
194 <#assign productURL = "business-cash-preferred">
195 <#assign productName = "Business Cash Preferred" >
196 <#break>
197 <#case "143">
198 <#assign productURL = "business-real-rewards">
199 <#assign productName = "Business Real Rewards Card" >
200 <#break>
201 <#case "144">
202 <#assign productURL = "smart-business-rewards">
203 <#assign productName = "Smart Business Rewards Card" >
204 <#break>
205 <#default>
206 </#switch>
207 <#if url?matches(".*/${productURL}\\?.*")>
208 <li class="selected" data-value="${productName}" selected="selected"><a href="javascript:void(0)">${productName}</a></li>
209 <#else>
210 <li class="dropdown-item" data-value="${productName}">
211 <a href="${environment}/11t3/${productURL}?ecdma-lc=${lc}${ecidExt}">
212 ${productName}
213 </a>
214 </li>
215 </#if>
216 </#list>
217 </ul>
218 </nav>
219
220 </div>
221 </#if>
222 </header>
223 <script>
224 function toggleFlyOutMenu() {
225 $('.styled-select').toggleClass('show-select');
226 var ariaExpanded = $('.styled-select__dropdown .dropdown-select').attr('aria-expanded');
227 if(ariaExpanded !== null) {
228 var isAriaExpanded;
229 if(ariaExpanded === "true") {
230 isAriaExpanded = true;
231 } else {
232 isAriaExpanded = false
233 }
234 $('.styled-select__dropdown .dropdown-select').attr('aria-expanded', !isAriaExpanded);
235 $('.styled-select__dropdown .jn-hamburger').attr('aria-expanded', !isAriaExpanded);
236 }
237 }
238 AUI().ready(function () {
239 var pageSelected = $('.selected').attr('data-value');
240 $('.jn-hamburger, .dropdown-select').click(function () {
241 toggleFlyOutMenu();
242 });
243 $('.styled-select__dropdown').keydown(function(event) {
244 var firstNavigationLink = $('.styled-select__dropdown ul li:visible a').first();
245 var lastNavigationLink = $('.styled-select__dropdown ul li:visible a').last();
246
247 if(event.keyCode === 9 ) {
248 // if they tab outside of the nav close the navigation
249 //shift + tab pressed
250 if(event.shiftKey && firstNavigationLink.is(document.activeElement)) {
251 toggleFlyOutMenu();
252 } else if(!event.shiftKey && lastNavigationLink.is(document.activeElement)) {
253 toggleFlyOutMenu();
254 }
255 }
256 });
257 $('.selected-option').text(pageSelected);
258 });
259 </script>
260 </#if>
261 </div>
262 <script>
263 var reportingData = {};
264
265 //document.addEventListener('DOMContentLoaded', function() {
266 AUI().ready(function () {
267 //console.log('inside ready');
268 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
269 var hostName = location.hostname;
270 function getDomainFromHostname(hostname) {
271 var parts = hostname.split('.');
272 return parts.length === 3 ? parts[1] : parts[0];
273 }
274 var domain = getDomainFromHostname(hostName);
275 var partnerName = "${partnerName!''}";
276 var product = "All Cards";
277 var title = "";
278 var metaDesc = "";
279 var m = document.createElement('meta');
280 switch(page) {
281 case "max-cash-secured":
282 product="Max Cash Secured Card";
283 title = "Earn more on the categories you pick | "+partnerName+" Max Cash Secured Card";
284 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
285 break;
286 case "max-cash":
287 product="Max Cash Preferred Card";
288 title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card";
289 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select";
290 break;
291 case "consumer-platinum":
292 product="Platinum Card";
293 title = "The purchasing power of Zero | "+partnerName+" Platinum Card";
294 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.";
295 break;
296 case "consumer-edr":
297 product="Everyday Rewards+";
298 title = "Sign up and earn bonus points | "+partnerName+" Everyday Rewards+";
299 break;
300 case "secured":
301 product="Secured Card";
302 title = "Strengthen your finances | "+partnerName+" Secured Card";
303 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
304 break;
305 case "college-real-rewards":
306 product="College Real Rewards";
307 title = "Sign up and earn bonus points. | "+partnerName+" College Real Rewards";
308 break;
309 case "smart-business-rewards":
310 product="Smart Business Rewards Card";
311 title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card";
312 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.";
313 break;
314 case "business-cash-preferred":
315 product="Business Cash Preferred";
316 title = "Flexible rewards for your business | "+partnerName+" Business Cash Preferred";
317 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
318 break;
319 case "business-real-rewards":
320 product="Business Real Rewards Card";
321 title = "Earn up to 3X points with no caps | "+partnerName+" Business Real Rewards Card";
322 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ;
323 break;
324 case "business-platinum":
325 product="Business Card";
326 title = "Pay down your other credit card balances faster | "+partnerName+" Business Card";
327 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
328 break;
329 case "travel-rewards-plus":
330 product="Travel Rewards+"
331 title = partnerName + " | Travel Rewards+ Card";
332 metaDesc = "Make travel more rewarding with unlimited 4x points on travel and frequent popular categories."
333 break;
334 case "reserve-rewards-plus":
335 product="Reserve Rewards+"
336 title = partnerName + " | Reserve Rewards+ Card";
337 metaDesc = "Get exceptional rewards on travel and frequent purchases with this exclusive metal card.";
338 break;
339 default:
340 product = "All Cards";
341 title = partnerName + " Credit Card Index Page";
342 }
343 document.title = title;
344 m.name = 'description';
345 m.content = metaDesc;
346 document.head.appendChild(m);
347
348 var lc = "${lc!'0'}";
349
350 /* update SiteCatalyst data object */
351 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
352 reportingData.page_type = 'product';
353 reportingData.site_section = 'credit cards';
354 reportingData.platform = 'microsite';
355 reportingData.campaign_id = '${campaignId}';
356 reportingData.location_code = lc;
357 reportingData.partner_name = partnerName;
358 reportingData.product = product;
359 reportingData.text_to_apply_source = '${text_to_apply_source}';
360 reportingData.visitor_type = 'prospect';
361 reportingData.Banker_id = '0';
362 reportingData.Banker_code = '0';
363
364
365 /* SiteCatalyst pageView tracking */
366 AUI().ready(function() {
367 if (window.publisherFW) {
368 //console.log("pageView");
369 window.publisherFW.publishEvent("pageView", reportingData);
370 }
371 });
372
373 jQuery('.jn-button, .applyNowLink').on('click', function(e){
374 var buttonName = $(this).data('button-name');
375 var productName = $(this).data('product-name');
376 /* SiteCatalyst onClick tracking */
377 reportingData.applyButton = buttonName;
378 reportingData.product = productName;
379
380 if (window.publisherFW) {
381 //console.log('clicked', reportingData);
382 window.publisherFW.publishEvent("onClick", reportingData);
383 }
384
385 });
386
387 jQuery('.applyNowLink').on('click', function(e){
388 ga("send", {
389 hitType: "event",
390 eventAction: "ApplyNow",
391 eventCategory: "click",
392 eventLabel: "BottomButton"
393 });
394 });
395
396 });
397 </script>
398 <#else>
399 <script>
400 console.log("Empty card list");
401 location.href = '${url404}';
402 </script>
403 </#if>
404<#else>
405 <script>
406 console.log("FI Cards Data empty", "pbu:", "${pbu}", ",subbu:","${subbu}");
407 location.href = '${url404}';
408 </script>
409</#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 10, 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 10, 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<#assign prcaURL = propsUtil.get('elan.prca.url')>
9
10<#assign lc= qstringmap["ecdma-lc"]?first>
11<#assign lc = htmlUtil.escape(lc)>
12<#assign lc = htmlUtil.escapeJS(lc)>
13
14<#assign prefix = "00000" >
15<#assign lcWithPrefix = prefix + lc >
16<#assign withPrefixLength = lcWithPrefix?length >
17<#assign startHere = withPrefixLength - 5>
18<#assign lc = lcWithPrefix?substring(startHere)>
19
20
21<#if qstringmap["ecid"]?has_content>
22 <#assign ecidExt = qstringmap["ecid"]?first>
23 <#assign ecidExt = htmlUtil.escape(ecidExt)>
24 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
25 <#assign ecidExt = "&ecid=" + ecidExt>
26<#else>
27 <#assign ecidExt="">
28</#if>
29<#if oadURL?contains("uat-")>
30 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
31 <#assign currentEnvironment = 'uat' >
32<#else>
33 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
34</#if>
35 <script>
36 //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}');
37 </script>
38<#assign campaignId = "" >
39<#assign useprcaValue = "" >
40<#assign ecidExt="">
41<#if qstringmap["ecid"]?has_content>
42 <#assign campaignId = qstringmap["ecid"]?first >
43 <#assign campaignId = htmlUtil.escape(campaignId)>
44 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
45
46 <#assign ecidExt = qstringmap["ecid"]?first>
47 <#assign ecidExt = htmlUtil.escape(ecidExt)>
48 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
49 <#assign ecidExt = "&ecid=" + ecidExt>
50</#if>
51
52<#assign dcoSourceCode = "">
53<#assign dcoSourceCodeQueryParameter = "">
54
55<#if qstringmap["sourcecode"]?has_content>
56 <#assign dcoSourceCode = qstringmap["sourcecode"]?first>
57 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
58 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
59 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
60<#elseif qstringmap["sourceCode"]?has_content>
61 <#assign dcoSourceCode = qstringmap["sourceCode"]?first>
62 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
63 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
64 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
65</#if>
66
67<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
68<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
69<#assign clientProfile = clientProfileList?first>
70<#assign partnerName = clientProfile.getMarketingNameLong()>
71<#assign pbu = clientProfile.getPbu()>
72<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
73<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
74
75<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)>
76<#assign temp = []>
77<#assign consumerCards = []>
78<#assign businessCards = []>
79<#assign offerTypeList = []>
80<#assign index = 0>
81<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]>
82<#assign businessOfferTypes = ["128", "121", "143", "144"]>
83<#list fiCardsData as fib>
84 <#assign useprcaValue = fib.useprca!"">
85 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
86 <#assign offerTypeList = offerTypeList + [fib.offerType]>
87 <#if (consumerOfferTypes?seq_contains(fib.offerType))>
88 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
89 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
90 <#assign businessCards = businessCards + fiCardsData[index..index]>
91 </#if>
92 <#assign temp = temp + fiCardsData[index..index]>
93 </#if>
94 <#assign index = index + 1>
95</#list>
96
97<#assign fiCardsData = temp>
98 <script>
99 //console.log("fi card data count", ${fiCardsData?size})
100</script>
101
102<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
103<#if (clientdata?size > 0)>
104 <#assign backgroundColor = clientdata[0].backgroundHexColor>
105</#if>
106
107<#if (fiCardsData?size > 0)>
108 <style>
109 .excludeModal__overlay {
110 position: fixed;
111 top: 0;
112 left: 0;
113 right: 0;
114 bottom: 0;
115 background: rgba(0,0,0,0.6);
116 display: flex;
117 justify-content: center;
118 align-items: center;
119 }
120
121 .excludeModal__container {
122 background-color: #fff;
123 padding: 30px;
124 min-width: 500px;
125 max-width: 500px;
126 max-height: 100vh;
127 border-radius: 4px;
128 overflow-y: auto;
129 box-sizing: border-box;
130 }
131
132 .excludeModal__header {
133 display: flex;
134 justify-content: space-between;
135 align-items: center;
136 }
137
138 .modal .excludeModal__container .excludeModal__title {
139 margin-top: 0;
140 margin-bottom: 0;
141 font-weight: 600;
142 font-size: 20px;
143 line-height: 1.25;
144 color: #00449e;
145 box-sizing: border-box;
146 }
147
148 .excludeModal__close {
149 background: transparent;
150 border: 1px solid white;
151 padding: 4px 8px;
152 float: right;
153 }
154
155 .excludeModal__close:hover {
156 border: 1px solid black;
157 }
158
159 .excludeModal__close:before { content: "\2715"; }
160
161 @keyframes mmfadeIn {
162 from { opacity: 0; }
163 to { opacity: 1; }
164 }
165
166 @keyframes mmfadeOut {
167 from { opacity: 1; }
168 to { opacity: 0; }
169 }
170
171 @keyframes mmslideIn {
172 from { transform: translateY(15%); }
173 to { transform: translateY(0); }
174 }
175
176 @keyframes mmslideOut {
177 from { transform: translateY(0); }
178 to { transform: translateY(-10%); }
179 }
180
181 .micromodal-slide {
182 display: none;
183 }
184
185 .micromodal-slide.is-open {
186 display: block;
187 }
188
189 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
190 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
191 }
192
193 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
194 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
195 }
196
197 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
198 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
199 }
200
201 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
202 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
203 }
204
205 .micromodal-slide .excludeModal__container,
206 .micromodal-slide .excludeModal__overlay {
207 will-change: transform;
208 }
209 </style>
210 <#if url?contains("index")>
211 <#assign isExcluded = 0>
212 <#assign offerId = "">
213 <#assign sourceCode = "">
214 <#assign cardArtImage = "">
215 <#assign productUrlHero = "">
216 <#assign product = "">
217 <#assign cardIndex = 0>
218 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
219 <#if (offerTypeList?seq_contains("108")) || (offerTypeList?seq_contains("109"))>
220 <#list consumerCards as card>
221 <#if (card.offerType=="108") || (card.offerType=="109")>
222 <#assign isExcluded = 0>
223 <#if card.dmaexclude??>
224 <#assign isExcluded = card.dmaexclude?number!0>
225 </#if>
226 <#assign offerId = card.offerId>
227 <#assign sourceCode = card.sourceCode>
228 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
229 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
230
231 <#assign productUrlHero="consumer-platinum2103">
232 <#assign product="Platinum">
233 <#assign cardIndex = 1>
234 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)>
235 <#if (scrapedData?size > 0)>
236 <#list scrapedData as sItem>
237 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
238 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
239 <#break>
240 </#if>
241 </#list>
242 <script>
243 $(document).ready(function () {
244 var aprText = "${apr}";
245 //console.log('aprText: ${aprText!''}');
246 if (aprText) {
247 $(".apr-full-text").html(aprText);
248 try {
249 var matches= aprText.match(/\d+(\.\d+)?%?/g);
250 var billing_cycle = matches[1];
251 var apr_min = apr_min = matches[2];
252 var apr_max = apr_max = matches[3];
253 //console.log('billing_cycle', billing_cycle);
254 //console.log('apr_min', apr_min);
255 //console.log('apr_max', apr_max);
256 if (billing_cycle) {
257 //console.log($(".scraped-billing-cycle"));
258 $(".scraped-billing-cycle").html(billing_cycle);
259 }
260 if (apr_min) {
261 $(".scraped-apr-min").html(apr_min);
262 }
263 if (apr_max) {
264 $('.scraped-apr-max').html(apr_max);
265 }
266
267 } catch (e) {
268 console.log(e);
269 }
270 }
271 });
272 </script>
273 </#if>
274 <script>
275 $(document).ready(function () {
276 $(".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>');
277 });
278 </script>
279 </#if>
280 </#list>
281 <#else>
282 <#assign isExcluded = 0>
283 <#if consumerCards[0].dmaexclude??>
284 <#assign isExcluded = consumerCards[0].dmaexclude?number!0>
285 </#if>
286 <#assign displayedCard = consumerCards[0]>
287 <#assign offerId = displayedCard.offerId>
288 <#assign sourceCode = displayedCard.sourceCode>
289 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
290 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
291 <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")>
292 <#assign productUrlHero="consumer-platinum">
293 <#assign product="Platinum">
294 <#assign cardIndex = 1>
295 <#elseif (displayedCard.offerType=="104")>
296 <#assign productUrlHero = "max-cash">
297 <#assign product="Max Cash Preferred">
298 <#assign cardIndex = 0>
299 <#elseif (displayedCard.offerType=="115")>
300 <#assign productUrlHero = "secured">
301 <#assign product="Secured">
302 <#assign cardIndex = 2>
303 </#if>
304 </#if>
305 <#if product?has_content && product != "">
306 <#assign card_text = product + " Card">
307 </#if>
308 </#if>
309 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
310 <#if (offerTypeList?seq_contains("128")) >
311 <#list businessCards as card>
312 <#if (card.offerType=="128")>
313 <#assign isExcluded = 0>
314 <#if card.dmaexclude??>
315 <#assign isExcluded = card.dmaexclude?number!0>
316 </#if>
317 <#assign offerId = card.offerId>
318 <#assign sourceCode = card.sourceCode>
319 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
320 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
321
322 <#assign productUrlHero="business-cash-preferred">
323 <#assign product="Business Cash Preferred">
324 <#assign cardIndex = 1>
325 </#if>
326 </#list>
327 <#else>
328 <#assign isExcluded = 0>
329 <#if businessCards[0].dmaexclude??>
330 <#assign isExcluded = businessCards[0].dmaexclude?number!0>
331 </#if>
332 <#assign displayedCard = businessCards[0]>
333 <#assign offerId = displayedCard.offerId>
334 <#assign sourceCode = displayedCard.sourceCode>
335 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
336 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
337 <#if (displayedCard.offerType=="143")>
338 <#assign productUrlHero="business-real-rewards">
339 <#assign product="Business Real Rewards">
340 <#assign cardIndex = 2>
341 <#elseif (displayedCard.offerType=="144")>
342 <#assign productUrlHero="smart-business-rewards">
343 <#assign product="Smart Business Rewards">
344 <#assign cardIndex = 0>
345 <#elseif (displayedCard.offerType=="121")>
346 <#assign productUrlHero = "business-platinum">
347 <#assign product="Business">
348 <#assign cardIndex = 3>
349 </#if>
350 </#if>
351 <#if product?has_content && product != "">
352 <#assign card_text = product + " Card">
353 </#if>
354 </#if>
355 <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}">
356 <div class="hero-main">
357 <div class="hero-main-container">
358 <div class="hero-main-offer">
359 <div class="offer-detail">
360 <div class="offer-detail-cardArt cardArtImg">
361 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
362 class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
363 <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }"
364 class="jn-img-responsive">-->
365 <p>${card_text!''}</p>
366 </div>
367 <div class="offer-detail-text text-color-default hide-desktop">
368 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
369 </div>
370 <#if isExcluded == 0>
371 <#if useprcaValue == "1">
372 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer" method="post">
373 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
374 <input id='offerId' type="hidden" name="offerId" value="${offerId}">
375 <input type="hidden" name="preparerType" value="customer">
376 </form>
377 <a
378 class="jn-button hide-desktop btn"
379 data-button-name="cta-button-top"
380 data-product-name="${productUrlHero!''}"
381 href="#"
382 offerId="${offerId!''}"
383 onclick="submitForm(event)"
384 >
385 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
386 </a>
387
388
389
390 <#else>
391 <a
392 class="jn-button hide-desktop btn"
393 data-button-name="cta-button-top"
394 data-product-name="${productUrlHero!''}"
395 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
396 >
397 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
398 </a>
399 </#if>
400
401 <#else>
402 <a
403 class="jn-button hide-desktop btn"
404 data-button-name="cta-button-top"
405 data-product-name="${productUrlHero!''}"
406 data-micromodal-trigger="modal-index-hero"
407 href="javascript:void(0);"
408 >
409 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
410 </a>
411 </#if>
412 </div>
413 <div class="offer-header">
414 <div class="offer-text-top">
415 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
416 </div>
417 <div class="offer-text-bottom hide-mobile">
418 <div class="offer-detail-text text-color-default ">
419 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
420 </div>
421
422 <#if isExcluded == 0>
423 <#if useprcaValue == "1">
424 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer" method="post">
425 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
426 <input id='offerId' type="hidden" name="offerId" value="${offerId!''}">
427 <input type="hidden" name="preparerType" value="customer">
428 </form>
429 <a
430 class="jn-button"
431 data-button-name="cta-button-top"
432 data-product-name="${productUrlHero!''}"
433 href="#"
434 offerId="${offerId!''}"
435 onclick="submitForm(event)"
436 >
437 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
438 </a>
439
440 <#else>
441 <a
442 class="jn-button"
443 data-button-name="cta-button-top"
444 data-product-name="${productUrlHero!''}"
445 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
446 >
447 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
448 </a>
449 </#if>
450 <#else>
451 <a
452 class="jn-button"
453 data-button-name="cta-button-top"
454 data-product-name="${productUrlHero!''}"
455 data-micromodal-trigger="modal-index-hero"
456 href="javascript:void(0);"
457 >
458 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
459 </a>
460 </#if>
461 </div>
462 </div>
463 </div>
464 </div>
465 </div>
466 </div>
467
468 <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" >
469 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
470 <div
471 aria-modal="true"
472 aria-labelledby="modal-index-hero-title"
473 class="excludeModal__container"
474 role="dialog"
475 >
476 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
477 <header class="excludeModal__header">
478 <h2 class="excludeModal__title" id="modal-index-hero-title">
479 <#if productTitle.getSiblings()[cardIndex].excludedMessage?? >
480 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
481 </#if>
482 </h2>
483 </header>
484 </div>
485 </div>
486 </div>
487 <#else>
488 <#assign hasBalanceTransferCalculator = false>
489 <#list fiCardsData as fib>
490 <#switch fib.offerType>
491 <#case "101">
492 <#assign cardIndex = 3 >
493 <#assign productUrlHero = "consumer-edr">
494 <#assign product="Everyday Rewards+">
495 <#assign hasBalanceTransferCalculator = false>
496 <#break>
497 <#case "103">
498 <#assign cardIndex = 3 >
499 <#assign productUrlHero = "consumer-edr">
500 <#assign product="Everyday Rewards+">
501 <#assign hasBalanceTransferCalculator = false>
502 <#break>
503 <#case "104">
504 <#assign cardIndex = 0 >
505 <#assign productUrlHero="max-cash">
506 <#assign product="Max Cash Preferred">
507 <#assign hasBalanceTransferCalculator = false>
508 <#break>
509 <#case "108">
510 <#assign cardIndex = 1 >
511 <#assign productUrlHero = "consumer-platinum">
512 <#assign product="Platinum">
513 <#assign hasBalanceTransferCalculator = true>
514 <#break>
515 <#case "109">
516 <#assign cardIndex = 1 >
517 <#assign productUrlHero = "consumer-platinum">
518 <#assign product="Platinum">
519 <#assign hasBalanceTransferCalculator = true>
520 <#break>
521 <#case "141">
522 <#assign cardIndex = 4 >
523 <#assign productUrlHero = "college-real-rewards">
524 <#assign product = "College Real Rewards" >
525 <#assign hasBalanceTransferCalculator = false>
526 <#break>
527 <#case "147">
528 <#assign cardIndex = 5 >
529 <#assign productUrlHero = "max-cash-secured">
530 <#assign product = "Max Cash Secured" >
531 <#assign hasBalanceTransferCalculator = false>
532 <#break>
533 <#case "115">
534 <#assign cardIndex = 2 >
535 <#assign productUrlHero = "secured">
536 <#assign product="Secured">
537 <#assign hasBalanceTransferCalculator = false>
538 <#break>
539 <#case "138">
540 <#assign cardIndex = 6 >
541 <#assign productUrlHero = "travel-rewards-plus">
542 <#assign product="Travel Rewards+">
543 <#assign hasBalanceTransferCalculator = false>
544 <#break>
545 <#case "154">
546 <#assign cardIndex = 7 >
547 <#assign productUrlHero = "reserve-rewards-plus">
548 <#assign product="Reserve Rewards+">
549 <#assign hasBalanceTransferCalculator = false>
550 <#break>
551 <#case "128">
552 <#assign cardIndex = 1 >
553 <#assign productUrlHero = "business-cash-preferred">
554 <#assign product="Business Cash Preferred">
555 <#assign hasBalanceTransferCalculator = false>
556 <#break>
557 <#case "143">
558 <#assign cardIndex = 2 >
559 <#assign productUrlHero = "business-real-rewards">
560 <#assign product="Business Real Rewards">
561 <#assign hasBalanceTransferCalculator = false>
562 <#break>
563 <#case "144">
564 <#assign cardIndex = 0 >
565 <#assign productUrlHero = "smart-business-rewards">
566 <#assign product="Smart Business Rewards">
567 <#assign hasBalanceTransferCalculator = false>
568 <#break>
569 <#case "121">
570 <#assign cardIndex = 3 >
571 <#assign productUrlHero = "business-platinum">
572 <#assign product="Business">
573 <#assign hasBalanceTransferCalculator = false>
574 <#break>
575 <#default>
576 </#switch>
577 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
578 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
579
580 <script>
581 console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")
582 </script>
583
584 <#if url?matches(".*/${productUrlHero}\\?.*")>
585 <#assign isExcluded = 0>
586 <script>
587 console.log("fib.dmaexclude------>"+'${fib.dmaexclude}');
588 </script>
589 <#if fib.dmaexclude??>
590 <#assign isExcluded = fib.dmaexclude?number!0>
591 </#if>
592 <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")>
593
594 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')>
595 <#if (scrapedData?size > 0)>
596 <#list scrapedData as sItem>
597 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
598 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
599 <#break>
600 </#if>
601
602 </#list>
603 <script>
604 $(document).ready(function () {
605 var aprText = "${apr}";
606 //console.log('aprText',aprText);
607 if (aprText) {
608 $(".apr-full-text").html(aprText);
609 try {
610 var matches= aprText.match(/\d+(\.\d+)?%?/g);
611 var billing_cycle = matches[1];
612 var apr_min = apr_min = matches[2];
613 var apr_max = apr_max = matches[3];
614 //console.log('billing_cycle', billing_cycle);
615 //console.log('apr_min', apr_min);
616 //console.log('apr_max', apr_max);
617 if (billing_cycle) {
618 //console.log($(".scraped-billing-cycle"));
619 $(".scraped-billing-cycle").html(billing_cycle);
620 }
621 if (apr_min) {
622 $(".scraped-apr-min").html(apr_min);
623 }
624 if (apr_max) {
625 $('.scraped-apr-max').html(apr_max);
626 }
627
628 } catch (e) {
629 console.log(e);
630 }
631 }
632 });
633 </script>
634 </#if>
635 </#if>
636 <#if product?has_content && product != "">
637 <#assign card_text = product + " Card">
638 </#if>
639 <#assign tc_offerTypes = ['108', '109', '121', '144']>
640 <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']>
641 <div class="hero-container ${class.getData()}">
642 <div class="hero-main">
643 <div class="hero-main-container">
644 <div class="hero-main-offer">
645 <div class="offer-detail">
646 <div class="offer-detail-cardArt cardArtImg">
647 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
648 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive">
649 <p>${card_text!''}</p>
650 <#if (hasBalanceTransferCalculator)>
651 <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a>
652 </#if>
653 </div>
654 <div class="offer-detail-text text-color-default hide-desktop">
655 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
656
657 <#if (tc_offerTypes?seq_contains(fib.offerType))>
658 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
659 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
660 </a>
661 </#if>
662 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
663 <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>
664 </#if>
665 </div>
666
667 <#if isExcluded == 0>
668 <#if useprcaValue == "1">
669 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId!''}&preparerType=customer" method="post">
670 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
671 <input id='offerId' type="hidden" name="offerId" value="${fib.offerId!''}">
672 <input type="hidden" name="preparerType" value="customer">
673 </form>
674
675 <a
676 class="jn-button hide-desktop btn"
677 data-button-name="cta-button-top"
678 data-product-name="${productUrlHero!''}"
679 href="#"
680 offerId="${fib.offerId!''}"
681 onclick="submitForm(event)" >
682 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
683 </a>
684
685 <#else>
686 <a
687 class="jn-button hide-desktop btn"
688 data-button-name="cta-button-top"
689 data-product-name="${productUrlHero!''}"
690 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
691 >
692 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
693
694 </a>
695 </#if>
696 <#else>
697 <a
698 class="jn-button hide-desktop btn"
699 data-button-name="cta-button-top"
700 data-product-name="${productUrlHero!''}"
701 data-micromodal-trigger="modal-product-hero"
702 href="javascript:void(0);"
703 >
704 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
705 </a>
706 </#if>
707 </div>
708 <div class="offer-header">
709 <div class="offer-text-top">
710 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
711 </div>
712 <div class="offer-text-bottom hide-mobile">
713 <div class="offer-detail-text text-color-default ">
714 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
715 <#if (tc_offerTypes?seq_contains(fib.offerType))>
716 <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
717 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
718 </a>
719 </#if>
720 </div>
721
722 <#if isExcluded == 0>
723 <#if useprcaValue == "1">
724 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer" method="post" >
725 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
726 <input id='offerId' type="hidden" name="offerId" value="${fib.offerId!''}">
727 <input type="hidden" name="preparerType" value="customer">
728 </form>
729 <a
730 class="jn-button"
731 data-button-name="cta-button-top"
732 data-product-name="${productUrlHero!''}"
733 href="#"
734 offerId="${fib.offerId!''}"
735 onclick="submitForm(event)" >
736 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
737 </a>
738
739 <#else>
740 <a
741 class="jn-button"
742 data-button-name="cta-button-top"
743 data-product-name="${productUrlHero!''}"
744 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
745 >
746 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
747
748 </a>
749 </#if>
750 <#else>
751 <a
752 class="jn-button"
753 data-button-name="cta-button-top"
754 data-product-name="${productUrlHero!''}"
755 data-micromodal-trigger="modal-product-hero"
756 href="javascript:void(0);"
757 >
758 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
759 </a>
760 </#if>
761 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
762 <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>
763 </#if>
764 </div>
765 </div>
766
767 </div>
768 </div>
769 </div>
770 </div>
771
772 <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" >
773 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
774 <div
775 aria-modal="true"
776 aria-labelledby="modal-prodcut-hero-title"
777 class="excludeModal__container"
778 role="dialog"
779 >
780 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
781 <header class="excludeModal__header">
782 <h2 class="excludeModal__title" id="modal-prodcut-hero-title">
783 <#if productTitle.getSiblings()[cardIndex].excludedMessage?? >
784 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
785 </#if>
786 </h2>
787 </header>
788 </div>
789 </div>
790 </div>
791 <#break />
792 </#if>
793 </#list>
794
795 </#if>
796</#if>
797<!-- https://micromodal.vercel.app/ -->
798<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
799
800<script>
801
802 AUI().ready(function(){
803 //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
804 var locationCodeParam = '${lc}';
805 var currentEnvironmentParam = '${currentEnvironment}';
806 if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){
807 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"})
808 }
809
810 MicroModal.init();
811 });
812</script>
813<script>
814 if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};}
815 setHeaderBackground = () => {
816 // Makes the Header subtitle work if there is two lines of text
817 //product page header
818 var consumerHeader = document.getElementsByClassName("landing-consumer")[0];
819 if(!consumerHeader) {
820 //index page header
821 consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0];
822 }
823
824 if(consumerHeader) {
825 var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0];
826 var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0];
827 const offerTextTop = consumerHeader.querySelector(".offer-text-top");
828
829 if (consumerOfferHeader.innerText.length >= 76){
830 const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px";
831 //two lines
832 //offerTextTop.style.marginTop = '0px';
833 //document.querySelector('.offer-text-bottom').style.marginTop = '25px';
834 //prevent button and text going into blue section
835 //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px";
836 consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")";
837 }
838 }
839 //product page header
840 var buisnessHeader = document.getElementsByClassName("landing-business")[0];
841 if(!buisnessHeader) {
842 //index page header
843 buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0];
844 }
845
846 if(buisnessHeader) {
847 var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0];
848 var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0];
849
850 if (buisnessOfferHeader.innerText.length >= 48){
851 //two lines
852 buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)";
853 }
854 }
855 };
856 /*
857 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.
858 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.
859 */
860 setHeaderBackground();
861 AUI().ready(function(){setHeaderBackground();});
862
863
864</script>
865<script>
866 var excluded = '${isExcluded}';
867 var useprcaValue = '${useprcaValue}';
868 var url23 ='${url}';
869 function submitForm(event) {
870 event.preventDefault();
871 var offerId = event.target.getAttribute("offerId");
872 console.log("offerId::::::::::::::"+offerId);
873
874 var lc = document.getElementById('locationCode').value;
875 //var offerId = document.getElementById('offerId').value;
876 //var sourceCode = document.getElementById('sourceCode').value;
877
878 // Construct the URL
879 var url = "${prcaURL}?locationCode=" + lc + "&offerId=" + offerId + "&preparerType=customer";
880
881
882 // Set the form action to the constructed URL
883 document.getElementById('applyForm').action = url;
884
885 // Submit the form
886 postCreditcardLearnMore(url);
887 //document.getElementById('applyForm').submit();
888 }
889 function postCreditcardLearnMore(path, method='post') {
890 // Create a form element
891 const form = document.createElement('form');
892 form.method = method;
893 //form.target = '_blank'; // Open in a new tab
894 form.action = path;
895
896 // Add each parameter as a hidden input field
897
898 document.body.appendChild(form);
899 form.submit();
900 }
901
902</script>
An error occurred while processing the template.
The following has evaluated to null or missing: ==> clientProfileService.findByLocationCode(lc) [in template "10154#10192#153417673" at line 34, column 30] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign clientProfileList = clientPro... [in template "10154#10192#153417673" at line 34, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign url404 = '/error/404.html' >
3<#assign oadURL = propsUtil.get('elan.oad.url') >
4<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
5<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7
8
9<#-- check location id validity -->
10<#if qstringmap["ecdma-lc"]?has_content>
11 <#assign lc = qstringmap["ecdma-lc"]?first>
12 <#assign lc = htmlUtil.escape(lc)>
13 <#assign lc = htmlUtil.escapeJS(lc)>
14
15 <#assign prefix = "00000" >
16 <#assign lcWithPrefix = prefix + lc >
17 <#assign withPrefixLength = lcWithPrefix?length >
18 <#assign startHere = withPrefixLength - 5>
19 <#assign lc = lcWithPrefix?substring(startHere)>
20<#else>
21 <script>
22 console.log("location code missing");
23 location.href = '${url404}';
24 </script>
25</#if>
26
27<#if oadURL?contains("uat-")>
28 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
29<#else>
30 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
31</#if>
32
33<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
34<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
35<#if clientProfileList?first?has_content>
36 <#assign clientProfile = clientProfileList?first>
37 <#assign partnerName = clientProfile.getMarketingNameLong()>
38 <#assign pbu = clientProfile.getPbu()>
39 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
40
41 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
42 <#if (fiCardsData?size > 0)>
43 <#assign temp = []>
44 <#assign offerTypeList = []>
45 <#assign index = 0>
46 <#list fiCardsData as fib>
47 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
48 <#assign offerTypeList = offerTypeList + [fib.offerType]>
49 <#assign temp = temp + fiCardsData[index..index]>
50 </#if>
51 <#assign index = index + 1>
52 </#list>
53 <#assign fiCardsData = temp>
54 <#list fiCardsData as fib>
55 <#switch fib.offerType>
56 <#case "101">
57 <#assign productURL = "202302/consumer-edr">
58 <#assign productName = "Everyday Rewards+">
59 <#break>
60 <#case "103">
61 <#assign productURL = "202302/consumer-edr">
62 <#assign productName = "Everyday Rewards+">
63 <#break>
64 <#case "104">
65 <#assign productURL = "max-cash">
66 <#assign productName = "Max Cash Preferred Card">
67 <#break>
68 <#case "108">
69 <#assign productURL="202308/consumer-platinum">
70 <#assign productName="Platinum Card">
71 <#break>
72 <#case "109">
73 <#assign productURL="202308/consumer-platinum">
74 <#assign productName="Platinum Card">
75 <#break>
76 <#case "115">
77 <#assign productURL = "secured">
78 <#assign productName = "Secured Card" >
79 <#break>
80 <#case "138">
81 <#assign productURL = "202305/travel-rewards-plus">
82 <#assign productName = "Travel Rewards+" >
83 <#break>
84 <#case "141">
85 <#assign productURL = "college-real-rewards">
86 <#assign productName = "College Real Rewards" >
87 <#break>
88 <#case "147">
89 <#assign productURL = "max-cash-secured">
90 <#assign productName = "Max Cash Secured Card" >
91 <#break>
92 <#case "154">
93 <#assign productURL = "202305/reserve-rewards-plus">
94 <#assign productName = "Reserve Rewards+" >
95 <#break>
96 <#case "121">
97 <#assign productURL = "202208/business-platinum">
98 <#assign productName = "Business Card" >
99 <#break>
100 <#case "128">
101 <#assign productURL = "business-cash-preferred">
102 <#assign productName = "Business Cash Preferred" >
103 <#break>
104 <#case "143">
105 <#assign productURL = "business-real-rewards">
106 <#assign productName = "Business Real Rewards Card" >
107 <#break>
108 <#case "144">
109 <#assign productURL = "smart-business-rewards">
110 <#assign productName = "Smart Business Rewards Card" >
111 <#break>
112 <#default>
113 </#switch>
114
115 <#assign newSourceCode = fib.sourceCode>
116 <#assign newOfferId = fib.offerId>
117
118 <#if url?matches(".*/${productURL}\\?.*")>
119 <#assign APR="">
120 <#assign AMF="">
121 <#assign BAL="">
122 <#assign sdata = utilServ.makeCall('crcDDCGetSchumerBox', newOfferId + '&' + newSourceCode)>
123 <#if (sdata?size > 0)>
124 <#list sdata as sItem>
125
126 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
127 <#assign APR = sItem.scrapedValue>
128 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
129 <#assign AMF = sItem.scrapedValue>
130 <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) >
131 <#assign BAL = sItem.scrapedValue>
132 </#if>
133 <#if (APR?has_content && AMF?has_content && BAL?has_content)>
134 <#break>
135 </#if>
136 </#list>
137 <#else>
138 <script>
139 console.log('no scraped data');
140 </script>
141 </#if>
142
143 <section>
144 <#if FeatureText.getData() != "">
145 <#assign featureCounter = 0>
146 <div class="hero-primary-benefits offer-type-${fib.offerType}">
147 <#list FeatureText.getSiblings() as item>
148 <div class="primary-benefit">
149 <div class="primary-benefit-wrapper">
150 ${item.getData()}
151 <#if (fib.offerType=="108" || fib.offerType=="109") && (featureCounter == FeatureText.getSiblings()?size - 1)>
152 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank"><span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions</a>
153 </#if>
154 </div>
155 </div>
156 <#assign featureCounter = featureCounter + 1>
157 </#list>
158 </div>
159 </#if>
160 <div class="standard-content-container" title="${partnerName!''} ${productName!''} Credit Card">
161 <article class="product-details-container">
162 <div class="detail-background">
163 ${HeadlineInfo.getData()}
164 <div class="secondary-benefits">
165 <div class="option">
166 <#foreach itemA in AdditionalInfoA.getSiblings()>
167 ${itemA.getData()}
168 </#foreach>
169 <#assign col1NotScrappedOfferTypes = ['108', '109', '147', '115']/>
170 <#assign col1AprOfferTypes = ['104', '121', '144', '143'] >
171 <#if !col1NotScrappedOfferTypes?seq_contains(fib.offerType)>
172 <#if col1AprOfferTypes?seq_contains(fib.offerType)>
173 <#if (fib.offerType == "104" )>
174 <h3>APR for Purchases:</h3>
175 <#elseif (fib.offerType == "144")>
176 <h3>APR for Purchases and Balance Transfers:</h3>
177 <#else>
178 <h3>Intro APR<sup>*</sup> for Purchases:</h3>
179 </#if>
180
181 <p>
182 ${APR!''}
183 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
184 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
185 </a>
186 </p>
187 <#else>
188 <h3>Annual Fee</h3>
189 <p>
190 ${AMF!''}
191 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
192 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
193 </a>
194 </p>
195 </#if>
196 </#if>
197 </div>
198 <div class="option">
199 <#foreach itemB in AdditionalInfoB.getSiblings()>
200 ${itemB.getData()}
201 </#foreach>
202 <#assign col2NotScrappedOfferTypes = ['147'] >
203 <#assign col2AprOfferTypes = ['138', '154', '128'] >
204 <#assign col2AmfOfferTypes = ['108', '109', '115', '144'] >
205 <#if !col2NotScrappedOfferTypes?seq_contains(fib.offerType)>
206 <#if col2AprOfferTypes?seq_contains(fib.offerType)>
207 <#if (fib.offerType == "128" )>
208 <h3>Intro APR<sup>*</sup> for Purchases:</h3>
209 <#else>
210 <h3>APR for Purchases:</h3>
211 </#if>
212 <p>
213 ${APR!''}
214 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
215 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
216 </a>
217 </p>
218 <#elseif col2AmfOfferTypes?seq_contains(fib.offerType)>
219 <h3>Annual Fee</h3>
220 <p>
221 ${AMF!''}
222 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
223 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
224 </a>
225 </p>
226 <#else>
227 <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3>
228 <p>
229 ${BAL!''}
230 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
231 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
232 </a>
233 </p>
234 </#if>
235 </#if>
236 </div>
237 <#if (AdditionalInfoC?has_content)>
238 <div class="option">
239 ${AdditionalInfoC.getData()}
240 <#assign col3NotScrappedOfferTypes = ['144'] >
241 <#assign col3BalOfferTypes = ['138', '154', '128'] >
242 <#assign col3AmfOfferTypes = ['104', '121', '143'] >
243 <#if !col3NotScrappedOfferTypes?seq_contains(fib.offerType)>
244 <#if col3BalOfferTypes?seq_contains(fib.offerType)>
245 <#if fib.offerType == "128">
246 <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3>
247 <#else>
248 <h3>APR for Balance Transfers:</h3>
249 </#if>
250 <p>
251 ${BAL!''}
252 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
253 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
254 </a>
255 </p>
256 <#elseif col3AmfOfferTypes?seq_contains(fib.offerType)>
257 <#if fib.offerType == "104">
258 <h3>Annual Fee<sup>*</sup></h3>
259 <#else>
260 <h3>Annual Fee</h3>
261 </#if>
262 <p>
263 ${AMF!''}
264 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
265 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
266 </a>
267 </p>
268 <#else>
269 <#if (fib.offerType == "147" ||
270 fib.offerType == "115"
271 )>
272 <h3>APR for Purchases and Balance Transfers:</h3>
273 <#else>
274 <h3>Intro APR<sup>*</sup> for Purchases:</h3>
275 </#if>
276 <p>
277 ${APR!''}
278 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
279 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
280 </a>
281 </p>
282 </#if>
283 </#if>
284 <#if (fib.offerType == "108" || fib.offerType == "109")>
285 <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3>
286 <p>${BAL!''} <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank"><span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions</a>
287 </p>
288 </#if>
289 <#if fib.offerType == "147">
290 <h3>Annual Fee<sup>*</sup></h3>
291 <p>
292 ${AMF!''}
293 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
294 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
295 </a>
296 </p>
297 </#if>
298
299 </div>
300 </#if>
301 </div>
302 </div>
303
304 </article>
305 </div>
306 </section>
307 <script>
308 AUI().ready(function() {
309 $('.jn-subhero ul').each(function() {
310 var $this = $(this),
311 li = $this.find('li').length;
312 console.log($this.find('li').length)
313 if(li === 2){
314 $this.addClass('two-items');
315 }
316 });
317
318 });
319 </script>
320 <#break />
321 </#if>
322 </#list>
323 <#else>
324 <script>
325 console.log("FI Cards Data empty");
326 //location.href = '${url404}';
327 </script>
328 </#if>
329<#else>
330 <script>
331 console.log("client profile empty");
332 //location.href = '${url404}';
333 </script>
334</#if>
An error occurred while processing the template.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#157461212" at line 7, 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#157461212" at line 7, column 1] ----
1<#assign oadURL = propsUtil.get('elan.oad.url') >
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
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
7<#assign lc = qstringmap["ecdma-lc"]?first>
8<#assign lc = htmlUtil.escape(lc)>
9<#assign lc = htmlUtil.escapeJS(lc)>
10
11<#assign dcoSourceCode = "">
12<#assign dcoSourceCodeQueryParameter = "">
13
14<#if qstringmap["sourcecode"]?has_content>
15 <#assign dcoSourceCode = qstringmap["sourcecode"]?first>
16 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
17 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
18 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
19<#elseif qstringmap["sourceCode"]?has_content>
20 <#assign dcoSourceCode = qstringmap["sourceCode"]?first>
21 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
22 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
23 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
24</#if>
25
26<#assign prefix = "00000" >
27<#assign lcWithPrefix = prefix + lc >
28<#assign withPrefixLength = lcWithPrefix?length >
29<#assign startHere = withPrefixLength - 5>
30<#assign lc = lcWithPrefix?substring(startHere)>
31<#assign prcaURL = propsUtil.get('elan.prca.url')>
32<#assign useprcaValue = "" >
33<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
34<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
35
36<#if clientProfileList?first?has_content>
37 <#assign clientProfile = clientProfileList?first>
38 <#assign partnerName = clientProfile.getMarketingNameLong()>
39 <#assign pbu = clientProfile.getPbu()>
40 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
41 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
42
43 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu + '&' + lc)>
44 <#assign temp = []>
45 <#assign offerTypeList = []>
46 <#assign index = 0>
47 <#list fiCardsData as fib>
48 <#assign useprcaValue = fib.useprca!"">
49 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
50 <#assign offerTypeList = offerTypeList + [fib.offerType]>
51 <#assign temp = temp + fiCardsData[index..index]>
52 </#if>
53 <#assign index = index + 1>
54 </#list>
55 <#assign fiCardsData = temp>
56
57 <#if (fiCardsData?size > 0)>
58 <#list fiCardsData as fib>
59 <#switch fib.offerType>
60 <#case "101">
61 <#assign productURL = "consumer-edr">
62 <#assign productName = "Everyday Rewards+">
63 <#break>
64 <#case "103">
65 <#assign productURL = "consumer-edr">
66 <#assign productName = "Everyday Rewards+">
67 <#break>
68 <#case "104">
69 <#assign productURL = "max-cash">
70 <#assign productName = "Max Cash Preferred Card">
71 <#break>
72 <#case "108">
73 <#assign productURL="consumer-platinum">
74 <#assign productName="Platinum Card">
75 <#break>
76 <#case "109">
77 <#assign productURL="consumer-platinum">
78 <#assign productName="Platinum Card">
79 <#break>
80 <#case "115">
81 <#assign productURL = "secured">
82 <#assign productName = "Secured Card" >
83 <#break>
84 <#case "138">
85 <#assign productURL = "travel-rewards-plus">
86 <#assign productName = "Travel Rewards+" >
87 <#break>
88 <#case "141">
89 <#assign productURL = "college-real-rewards">
90 <#assign productName = "College Real Rewards" >
91 <#break>
92 <#case "147">
93 <#assign productURL = "max-cash-secured">
94 <#assign productName = "Max Cash Secured Card" >
95 <#break>
96 <#case "154">
97 <#assign productURL = "reserve-rewards-plus">
98 <#assign productName = "Reserve Rewards+" >
99 <#break>
100 <#case "121">
101 <#assign productURL = "business-platinum">
102 <#assign productName = "Business Card" >
103 <#break>
104 <#case "128">
105 <#assign productURL = "business-cash-preferred">
106 <#assign productName = "Business Cash Preferred" >
107 <#break>
108 <#case "143">
109 <#assign productURL = "business-real-rewards">
110 <#assign productName = "Business Real Rewards Card" >
111 <#break>
112 <#case "144">
113 <#assign productURL = "smart-business-rewards">
114 <#assign productName = "Smart Business Rewards Card" >
115 <#break>
116 <#default>
117 </#switch>
118
119 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
120 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
121 <#if productURL?has_content && url?matches(".*/${productURL}\\?.*")>
122 <script>
123 console.log('offerType', '${fib.offerType}', '${productURL}')
124 </script>
125 <#list product.getSiblings() as card>
126 <#if card?has_content && card.offerType.getData() == fib.offerType>
127 <#assign isExcluded = 0>
128 <#if fib.dmaexclude??>
129 <#assign isExcluded = fib.dmaexclude?number!0>
130 </#if>
131
132 <div class="content-container jn-container-banner" title="${partnerName!''} ${productName!''}">
133 <div class="banner-wrapper">
134 <div class="banner">
135 <div class="banner-cardArt cardArtImg">
136 <img
137 src="${cardArtImage!''}"
138 alt="${partnerName!''} ${productName!''}"
139 title="${partnerName!''} ${productName!''}"
140 class="jn-img-responsive"
141 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"
142 >
143 </div>
144 <div class="banner-cta">
145 <div class="banner-cta-text">
146 ${card.optionalCtaFeatureText.getData()}
147 </div>
148 <#if isExcluded == 0>
149
150 <#if useprcaValue == "1">
151 <a
152 class="jn-button"
153 data-button-name="cta-button-bottom"
154 data-product-name="${productURL}!''"
155 href="#"
156 offerId="${fib.offerId}"
157 onclick="submitForm(event)"
158 >
159 ${card.optionalCtaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${productName!''} Card </span>
160 </a>
161 <form id="applyFormLB" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer" method="post">
162 <input type="hidden" name="locationCode" value="${lc}" id="locationCodeLB">
163 <input type="hidden" name="offerId" value="${fib.offerId}" id="offerId">
164 <input type="hidden" name="preparerType" value="customer">
165 </form>
166 <#else>
167 <a
168 class="jn-button"
169 data-button-name="cta-button-bottom"
170 data-product-name="${productURL}!''"
171 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
172 id="oadSecButton"
173 >
174 ${card.optionalCtaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${productName!''} Card </span>
175 </a>
176 </#if>
177 <#else>
178 <a
179 class="jn-button"
180 data-button-name="cta-button-bottom"
181 data-product-name="${productURL}!''"
182 data-micromodal-trigger="modal-lower-banner"
183 id="oadSecButton"
184 href="javascript:void(0);"
185 >
186 ${card.optionalCtaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${productName!''} Card </span>
187 </a>
188 </#if>
189 </div>
190 </div>
191 </div>
192 </div>
193 <style>
194 .excludeModal__overlay {
195 position: fixed;
196 top: 0;
197 left: 0;
198 right: 0;
199 bottom: 0;
200 background: rgba(0,0,0,0.6);
201 display: flex;
202 justify-content: center;
203 align-items: center;
204 }
205
206 .excludeModal__container {
207 background-color: #fff;
208 padding: 30px;
209 min-width: 500px;
210 max-width: 500px;
211 max-height: 100vh;
212 border-radius: 4px;
213 overflow-y: auto;
214 box-sizing: border-box;
215 }
216
217 .excludeModal__header {
218 display: flex;
219 justify-content: space-between;
220 align-items: center;
221 }
222
223 .modal .excludeModal__container .excludeModal__title {
224 margin-top: 0;
225 margin-bottom: 0;
226 font-weight: 600;
227 font-size: 20px;
228 line-height: 1.25;
229 color: #00449e;
230 box-sizing: border-box;
231 }
232
233 .excludeModal__close {
234 background: transparent;
235 border: 1px solid white;
236 padding: 4px 8px;
237 float: right;
238 }
239
240 .excludeModal__close:hover {
241 border: 1px solid black;
242 }
243
244 .excludeModal__close:before { content: "\2715"; }
245
246 @keyframes mmfadeIn {
247 from { opacity: 0; }
248 to { opacity: 1; }
249 }
250
251 @keyframes mmfadeOut {
252 from { opacity: 1; }
253 to { opacity: 0; }
254 }
255
256 @keyframes mmslideIn {
257 from { transform: translateY(15%); }
258 to { transform: translateY(0); }
259 }
260
261 @keyframes mmslideOut {
262 from { transform: translateY(0); }
263 to { transform: translateY(-10%); }
264 }
265
266 .micromodal-slide {
267 display: none;
268 }
269
270 .micromodal-slide.is-open {
271 display: block;
272 }
273
274 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
275 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
276 }
277
278 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
279 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
280 }
281
282 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
283 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
284 }
285
286 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
287 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
288 }
289
290 .micromodal-slide .excludeModal__container,
291 .micromodal-slide .excludeModal__overlay {
292 will-change: transform;
293 }
294 </style>
295 <div aria-hidden="true" class="modal micromodal-slide" id="modal-lower-banner" >
296 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
297 <div
298 aria-modal="true"
299 aria-labelledby="modal-lower-banner-title"
300 class="excludeModal__container"
301 role="dialog"
302 >
303 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
304 <header class="excludeModal__header">
305 <h2 class="excludeModal__title" id="modal-lower-banner-title">
306 <#if card.excludedMessage?? >
307 ${card.excludedMessage.getData()!""}
308 </#if>
309 </h2>
310 </header>
311 </div>
312 </div>
313 </div>
314 <!-- https://micromodal.vercel.app/ -->
315 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
316 <script>
317 AUI().ready(function(){
318 MicroModal.init();
319 });
320 </script>
321 <#break>
322 </#if>
323 </#list>
324 <#break>
325 </#if>
326 </#list>
327 </#if>
328<#else>
329 <script>
330 console.log("discalimer: client profile empty");
331 </script>
332</#if>
333<script>
334 function submitForm(event) {
335 event.preventDefault(); // Prevent the default behavior of the anchor tag
336 var offerId = event.target.getAttribute("offerId");
337
338 var lc = document.getElementById('locationCodeLB').value;
339 //var offerId = document.getElementById('offerIdLB').value;
340
341 // Construct the URL
342 var url = "${prcaURL}?locationCode=" + lc + "&offerId=" + offerId + "&preparerType=customer";
343
344 // Set the form action to the constructed URL
345 document.getElementById('applyFormLB').action = url;
346
347 // Submit the form
348 postCreditcardLearnMore(url);
349 //document.getElementById('applyFormLB').submit();
350 }
351
352 function postCreditcardLearnMore(path, method='post') {
353 // Create a form element
354 const form = document.createElement('form');
355 form.method = method;
356 //form.target = '_blank'; // Open in a new tab
357 form.action = path;
358
359 // Add each parameter as a hidden input field
360
361 document.body.appendChild(form);
362 form.submit();
363 }
364</script>
An error occurred while processing the template.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#157607653" 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#157607653" 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
15<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
16<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
17<#if clientProfileList?first?has_content>
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
26
27 <#if (fiCardsData?size > 0)>
28
29 <#list fiCardsData as fib>
30 <#switch fib.offerType>
31 <#case "101">
32 <#assign productURL = "consumer-edr">
33 <#assign productName = "Everyday Rewards+">
34 <#break>
35 <#case "103">
36 <#assign productURL = "consumer-edr">
37 <#assign productName = "Everyday Rewards+">
38 <#break>
39 <#case "104">
40 <#assign productURL = "max-cash">
41 <#assign productName = "Max Cash Preferred Card">
42 <#break>
43 <#case "108">
44 <#assign productURL="consumer-platinum">
45 <#assign productName="Platinum Card">
46 <#break>
47 <#case "109">
48 <#assign productURL="consumer-platinum">
49 <#assign productName="Platinum Card">
50 <#break>
51 <#case "115">
52 <#assign productURL = "secured">
53 <#assign productName = "Secured Card" >
54 <#break>
55 <#case "138">
56 <#assign productURL = "travel-rewards-plus">
57 <#assign productName = "Travel Rewards+" >
58 <#break>
59 <#case "141">
60 <#assign productURL = "college-real-rewards">
61 <#assign productName = "College Real Rewards" >
62 <#break>
63 <#case "147">
64 <#assign productURL = "max-cash-secured">
65 <#assign productName = "Max Cash Secured Card" >
66 <#break>
67 <#case "154">
68 <#assign productURL = "reserve-rewards-plus">
69 <#assign productName = "Reserve Rewards+" >
70 <#break>
71 <#case "121">
72 <#assign productURL = "business-platinum">
73 <#assign productName = "Business Card" >
74 <#break>
75 <#case "128">
76 <#assign productURL = "business-cash-preferred">
77 <#assign productName = "Business Cash Preferred" >
78 <#break>
79 <#case "143">
80 <#assign productURL = "business-real-rewards">
81 <#assign productName = "Business Real Rewards Card" >
82 <#break>
83 <#case "144">
84 <#assign productURL = "smart-business-rewards">
85 <#assign productName = "Smart Business Rewards Card" >
86 <#break>
87 <#default>
88 </#switch>
89 <#if productURL?has_content && url?matches(".*/${productURL}\\?.*")>
90 <script>
91 console.log('offerType', '${fib.offerType}', '${productURL}')
92 </script>
93 <#assign cardProviderAbbreviated = "">
94 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fib.offerType + '&' + lc)>
95 <#if (cardProvider?size > 0)>
96 <#-- This will be V for visa or M for mastercard. -->
97 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
98 <#else>
99 <script>
100 console.log("No card provider(Visa/Master Card) found for disclaimer");
101 </script>
102 </#if>
103 <#list product.getSiblings() as card>
104 <#if (card.offerType.getData() == fib.offerType)>
105 <div class="content-container" title="${partnerName!''} - Disclaimer">
106 <div class="jn-disclaimer">
107
108 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && card.disclaimerBank.getData()?has_content>
109 ${card.disclaimerBank.getData()}
110 <#else>
111 <#if (card.disclaimerVisa?has_content && cardProviderAbbreviated?contains('V'))>
112 ${card.disclaimerVisa.getData()}
113 </#if>
114 <#if (card.disclaimerMasterCard?has_content && cardProviderAbbreviated?contains('M')) >
115 ${card.disclaimerMasterCard.getData()}
116 </#if>
117 </#if>
118 </div>
119 </div>
120 <#break>
121 </#if>
122 </#list>
123 <#break>
124 </#if>
125 </#list>
126 </#if>
127</#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 -->