Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5883698" at line 8, column 17] ---- Tip: It's the final [] step that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5883698" at line 8, column 1] ----
1<#assign url = 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
8<#assign bCode= qstringmap["bankercode"]?first>
9<#assign bCode = htmlUtil.escape(bCode)>
10<#assign bCode = htmlUtil.escapeJS(bCode)>
11
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
13<#list bData as b>
14 <#assign lc = b.locationcode >
15 <#assign rLC = b.reallocationcode >
16 <#assign mappedLC = b.mappedLocationCode >
17</#list>
18<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
19 <#assign ameriprise = true>
20<#else>
21 <#assign ameriprise = false>
22</#if>
23
24<#if mappedLC?has_content && !ameriprise>
25 <#assign lc = mappedLC >
26</#if>
27
28<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
29<#if fiData?first?has_content>
30 <#assign fi = fiData?first>
31 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))>
32 <#assign subbu_special = fi.offerId>
33 </#if>
34</#if>
35
36
37<#if lc?has_content>
38 <#assign prefix = "00000" >
39 <#assign lcWithPrefix = prefix + lc>
40 <#assign withPrefixLength = lcWithPrefix?length >
41 <#assign startHere = withPrefixLength - 5>
42 <#assign lc = lcWithPrefix?substring(startHere)>
43 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
44 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
45
46 <#assign clientProfile = clientProfileList?first>
47 <#assign partnerName = clientProfile.getMarketingNameLong()>
48 <#assign pbu = clientProfile.getPbu()>
49 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
50 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
51 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
52 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
53 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
54 <#assign partnerUrl = 'https://' + partnerUrl>
55 </#if>
56
57 <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
58 <#if clientdataList?has_content >
59 <#assign clientdata = clientdataList?first >
60 <#assign backgroundHexColor = clientdata["backgroundHexColor"] >
61 <#assign backgroundImage = clientdata["backgroundImage"] >
62 <#assign buttonHexColor = clientdata["buttonHexColor"] >
63 <#assign AprMin = clientdata["AprMin"] >
64 <#assign AprMax = clientdata["AprMax"] >
65 <#assign cashAdvanceRate = clientdata["cashAdvanceRate"] >
66 <#assign BillingCycles = clientdata["BillingCycles"] >
67 <#assign textHexColor = clientdata["textHexColor"] >
68 <#assign linkHexColor = clientdata["linkHexColor"] >
69 <#assign hoverColor = clientdata["hoverColor"] >
70 <#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] >
71 <#assign transparency = clientdata["transparency"] >
72 <#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] >
73 <#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] >
74 <#assign businessTransparency = clientdata["businessTransparency"] >
75 <#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] >
76 <#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] >
77 </#if> -->
78
79 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
80 <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!>
81 <script>
82 console.log('logo url', '${cdnLogoUrl}${logoFileName}');
83 </script>
84 <#if pbu == "0864054">
85 <#assign override = "berkshire">
86 <#else>
87 <#assign override = " ">
88 </#if>
89<#-- this one should be delete for prod -->
90
91<#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">
92<#assign logoFileName = pbu + "-" + subbu + ".png">-->
93
94 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
95 <#if (subbu_special?has_content)>
96 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
97 <script>
98 console.log('new subbu', '${subbu_special!''}');
99 </script>
100 <#else>
101 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
102 </#if>
103 <#assign temp = []>
104 <#assign consumerCards = []>
105 <#assign businessCards = []>
106 <#assign offerTypeList = []>
107 <#assign index = 0>
108 <#assign ameriprise_cards= []>
109 <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']>
110 <#assign businessOfferTypes =['128', '121', '144', '143']>
111 <#list fiCardsData as fib>
112 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
113 <#assign offerTypeList = offerTypeList + [fib.offerType]>
114 <#assign temp = temp + fiCardsData[index..index]>
115 <#if ameriprise>
116 <#if (fib.offerType == "101" || fib.offerType == "103")>
117 <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]>
118 </#if>
119 <#else>
120 <#if consumerOfferTypes?seq_contains(fib.offerType)>
121 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
122 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
123 <#assign businessCards = businessCards + fiCardsData[index..index]>
124 </#if>
125 </#if>
126 </#if>
127 <#assign index = index + 1>
128
129 </#list>
130 <#assign fiCardsData = temp>
131 <#if ameriprise>
132 <#assign consumerCards = ameriprise_cards?sort_by("offerType")>
133 </#if>
134
135 <#if (fiCardsData?size > 0)>
136 <#if (subbu_special?has_content)>
137 <#assign lc_used = fiCardsData?first.WebLocationCode>
138 <#else>
139 <#if ameriprise>
140 <#assign lc_used = mappedLC>
141 <#else>
142 <#assign lc_used = lc>
143 </#if>
144 </#if>
145 <#assign offerId = "">
146 <#assign sourceCode = "">
147 <#assign cardArtImage = "">
148 <#assign productUrl = "">
149 <#assign product = "">
150 <#assign preparerType = "customer">
151 <#assign apr = "">
152 <#assign cardIndex = 0>
153 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
154 <#if (offerTypeList?seq_contains("101") || offerTypeList?seq_contains("103"))>
155 <#list consumerCards as card>
156 <#if (card.offerType=="101" || card.offerType=="103") >
157 <#assign offerId = card.offerId>
158 <#assign sourceCode = card.sourceCode>
159 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
160 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
161
162 <#assign productUrl="consumer-edr2112">
163 <#assign product="Everyday Rewards+">
164 <#assign cardIndex = 1>
165
166 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
167 <#if (scrapedData?size > 0)>
168 <#list scrapedData as sItem>
169 <script>
170 console.log("scrapped item", "${sItem.scrapedLabel}");
171 </script>
172 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
173 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
174 <#break>
175 </#if>
176 </#list>
177 <script>
178 $(document).ready(function () {
179 var aprText = "${apr}";
180 if (aprText) {
181 console.log("apr: " + aprText);
182 try {
183 $(".apr-full-text").html(aprText);
184 var matches= aprText.match(/\d+(\.\d+)?%?/g);
185 var billing_cycle = matches[1];
186 var apr_min = apr_min = matches[2];
187 var apr_max = apr_max = matches[3];
188 if (billing_cycle) {
189 $(".scraped-billing-cycle").html(billing_cycle);
190 }
191 if (apr_min) {
192 $(".scraped-apr-min").html(apr_min);
193 }
194 if (apr_max) {
195 $('.scraped-apr-max').html(apr_max);
196 }
197
198 } catch (e) {
199 console.log(e);
200 }
201 } else {
202 $(".apr-full-text").html('');
203 }
204 });
205 </script>
206 </#if>
207 <script>
208 var product = "${product}";
209 var partnerName = "${partnerName}";
210 $(document).ready(function () {
211 $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank"><span class="screen-reader-only">' + partnerName + ' ' + product + ' Card</span>See terms & conditions</a>');
212 });
213 </script>
214 </#if>
215 </#list>
216 <#else>
217 <#assign displayedCard = consumerCards[0]>
218 <#assign offerId = displayedCard.offerId>
219 <#assign sourceCode = displayedCard.sourceCode>
220 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
221 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
222 <#if ameriprise>
223 <#if (displayedCard.offerType == "101")>
224 <#assign productUrl="ameriprise-premier-visa-signature">
225 <#assign product="Premier Visa Signature">
226 <#assign cardIndex = 0>
227 <#elseif (displayedCard.offerType == "103")>
228 <#assign productUrl = "ameriprise-visa-signature">
229 <#assign product="Visa Signature">
230 <#assign cardIndex = 1>
231 </#if>
232 <#else>
233 <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")>
234 <#assign productUrl = "consumer-platinum2103">
235 <#assign product="Platinum">
236 <#assign cardIndex = 4>
237 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
238 <#if (scrapedData?size > 0)>
239 <#list scrapedData as sItem>
240 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
241 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
242 <#break>
243 </#if>
244 </#list>
245 <script>
246 $(document).ready(function () {
247 var aprText = "${apr}";
248 if (aprText) {
249 console.log("apr:" + aprText);
250 try {
251 $(".apr-full-text").html(aprText);
252 var matches= aprText.match(/\d+(\.\d+)?%?/g);
253 var billing_cycle = matches[1];
254 var apr_min = apr_min = matches[2];
255 var apr_max = apr_max = matches[3];
256 if (billing_cycle) {
257 $(".scraped-billing-cycle").html(billing_cycle);
258 }
259 if (apr_min) {
260 $(".scraped-apr-min").html(apr_min);
261 }
262 if (apr_max) {
263 $('.scraped-apr-max').html(apr_max);
264 }
265
266 } catch (e) {
267 console.log(e);
268 }
269 } else {
270 $(".apr-full-text").html('');
271 }
272 });
273 </script>
274 </#if>
275 <#elseif (displayedCard.offerType == "104")>
276 <#assign productUrl = "max-cash">
277 <#assign product="Max Cash Preferred">
278 <#assign cardIndex = 0>
279 <#elseif (displayedCard.offerType == "141")>
280 <#assign productUrl = "college-real-rewards">
281 <#assign product="College Real Rewards">
282 <#assign cardIndex = 2>
283 <#elseif (displayedCard.offerType == "115")>
284 <#assign productUrl = "secured">
285 <#assign product="Secured">
286 <#assign cardIndex = 3>
287 </#if>
288 </#if>
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 offerId = card.offerId>
296 <#assign sourceCode = card.sourceCode>
297 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
298 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
299 <#assign productUrl = "business-cash-preferred">
300 <#assign product="Business Cash Preferred">
301 <#assign cardIndex = 0>
302 </#if>
303 </#list>
304 <#else>
305 <#assign displayedCard = businessCards[0]>
306 <#assign offerId = displayedCard.offerId>
307 <#assign sourceCode = displayedCard.sourceCode>
308 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
309 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
310
311 <#if (displayedCard.offerType=="143")>
312 <#assign productUrl="business-real-rewards">
313 <#assign product="Business Real Rewards">
314 <#assign cardIndex = 2>
315 <#elseif (displayedCard.offerType=="144")>
316 <#assign productUrl = "smart-business-rewards">
317 <#assign product="Smart Business Rewards">
318 <#assign cardIndex = 1>
319 <#elseif (displayedCard.offerType=="121")>
320 <#assign productUrl = "business-platinum2103">
321 <#assign product="Business Card">
322 <#assign cardIndex = 3>
323 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
324 <#if (scrapedData?size > 0)>
325 <#list scrapedData as sItem>
326 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
327 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
328 <#break>
329 </#if>
330 </#list>
331 <script>
332 console.log("apr");
333 $(document).ready(function () {
334 var aprText = "${apr}";
335 if (aprText) {
336 console.log("apr: " + aprText);
337 try {
338 $(".apr-full-text").html(aprText);
339 var matches= aprText.match(/\d+(\.\d+)?%?/g);
340 var billing_cycle = matches[1];
341 var apr_min = apr_min = matches[2];
342 var apr_max = apr_max = matches[3];
343 if (billing_cycle) {
344 $(".scraped-billing-cycle").html(billing_cycle);
345 }
346 if (apr_min) {
347 $(".scraped-apr-min").html(apr_min);
348 }
349 if (apr_max) {
350 $('.scraped-apr-max').html(apr_max);
351 }
352
353 } catch (e) {
354 console.log(e);
355 }
356 } else {
357 $(".apr-full-text").html('');
358 }
359 });
360 </script>
361 </#if>
362 </#if>
363 </#if>
364 </#if>
365 <#if product != "">
366 <#if ameriprise>
367 <#assign card_art_alt = partnerName + " " + product + " Card">
368 <#assign rollover_text = partnerName + " " + product + " Card">
369 <#else>
370 <#assign card_art_alt = partnerName + " " + product + " Card">
371 <#assign rollover_text = partnerName + " " + product + " Credit Card">
372 <#assign card_text = product + " Card">
373 </#if>
374 </#if>
375 <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}">
376 <div class="hero-main">
377 <div class="hero-main-logo">
378 <img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo">
379 </div>
380 <div class="hero-main-container">
381 <div class="hero-main-offer bg-color-white">
382 <div class="offer-detail">
383
384 <div class="offer-detail-cardArt cardArtImg">
385 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
386 <p>${card_text!''}</p>
387 </div>
388 <div class="offer-detail-text text-color-default hide-desktop">
389 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
390 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
391 </div>
392
393 <#if ameriprise>
394 <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="jn-button apply-button text-bold button-bg-color-custom text-color-white hide-desktop" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>
395 <#else>
396 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm hide-desktop">
397 <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
398 <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
399 <button
400 type="submit"
401 data-button-name="cta-button-top"
402 data-product-name="${productUrl!''}"
403 class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
404 disabled
405 >
406 ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
407 </button>
408 </form>
409 </#if>
410 </div>
411
412 <div class="offer-header">
413 <div class="offer-text-top">
414 <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div>
415 <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1>
416 </div>
417 <div class="offer-text-bottom hide-mobile">
418 <div class="offer-detail-text text-color-default">
419 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
420 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
421 </div>
422
423 <#if ameriprise>
424 <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>
425 <#else>
426 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm">
427 <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
428 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
429 <button
430 type="submit"
431 data-button-name="cta-button-top"
432 data-product-name="${productUrl!''}"
433 class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
434 disabled
435 >
436 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
437 </button>
438 </form>
439 </#if>
440 </div>
441 </div>
442 </div>
443 </div>
444 </div>
445 </div>
446
447 </#if>
448</#if>
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5883698" at line 8, column 17] ---- Tip: It's the final [] step that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5883698" at line 8, column 1] ----
1<#assign url = 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
8<#assign bCode= qstringmap["bankercode"]?first>
9<#assign bCode = htmlUtil.escape(bCode)>
10<#assign bCode = htmlUtil.escapeJS(bCode)>
11
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
13<#list bData as b>
14 <#assign lc = b.locationcode >
15 <#assign rLC = b.reallocationcode >
16 <#assign mappedLC = b.mappedLocationCode >
17</#list>
18<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
19 <#assign ameriprise = true>
20<#else>
21 <#assign ameriprise = false>
22</#if>
23
24<#if mappedLC?has_content && !ameriprise>
25 <#assign lc = mappedLC >
26</#if>
27
28<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
29<#if fiData?first?has_content>
30 <#assign fi = fiData?first>
31 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))>
32 <#assign subbu_special = fi.offerId>
33 </#if>
34</#if>
35
36
37<#if lc?has_content>
38 <#assign prefix = "00000" >
39 <#assign lcWithPrefix = prefix + lc>
40 <#assign withPrefixLength = lcWithPrefix?length >
41 <#assign startHere = withPrefixLength - 5>
42 <#assign lc = lcWithPrefix?substring(startHere)>
43 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
44 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
45
46 <#assign clientProfile = clientProfileList?first>
47 <#assign partnerName = clientProfile.getMarketingNameLong()>
48 <#assign pbu = clientProfile.getPbu()>
49 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
50 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
51 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
52 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
53 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
54 <#assign partnerUrl = 'https://' + partnerUrl>
55 </#if>
56
57 <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
58 <#if clientdataList?has_content >
59 <#assign clientdata = clientdataList?first >
60 <#assign backgroundHexColor = clientdata["backgroundHexColor"] >
61 <#assign backgroundImage = clientdata["backgroundImage"] >
62 <#assign buttonHexColor = clientdata["buttonHexColor"] >
63 <#assign AprMin = clientdata["AprMin"] >
64 <#assign AprMax = clientdata["AprMax"] >
65 <#assign cashAdvanceRate = clientdata["cashAdvanceRate"] >
66 <#assign BillingCycles = clientdata["BillingCycles"] >
67 <#assign textHexColor = clientdata["textHexColor"] >
68 <#assign linkHexColor = clientdata["linkHexColor"] >
69 <#assign hoverColor = clientdata["hoverColor"] >
70 <#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] >
71 <#assign transparency = clientdata["transparency"] >
72 <#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] >
73 <#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] >
74 <#assign businessTransparency = clientdata["businessTransparency"] >
75 <#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] >
76 <#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] >
77 </#if> -->
78
79 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
80 <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!>
81 <script>
82 console.log('logo url', '${cdnLogoUrl}${logoFileName}');
83 </script>
84 <#if pbu == "0864054">
85 <#assign override = "berkshire">
86 <#else>
87 <#assign override = " ">
88 </#if>
89<#-- this one should be delete for prod -->
90
91<#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">
92<#assign logoFileName = pbu + "-" + subbu + ".png">-->
93
94 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
95 <#if (subbu_special?has_content)>
96 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
97 <script>
98 console.log('new subbu', '${subbu_special!''}');
99 </script>
100 <#else>
101 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
102 </#if>
103 <#assign temp = []>
104 <#assign consumerCards = []>
105 <#assign businessCards = []>
106 <#assign offerTypeList = []>
107 <#assign index = 0>
108 <#assign ameriprise_cards= []>
109 <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']>
110 <#assign businessOfferTypes =['128', '121', '144', '143']>
111 <#list fiCardsData as fib>
112 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
113 <#assign offerTypeList = offerTypeList + [fib.offerType]>
114 <#assign temp = temp + fiCardsData[index..index]>
115 <#if ameriprise>
116 <#if (fib.offerType == "101" || fib.offerType == "103")>
117 <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]>
118 </#if>
119 <#else>
120 <#if consumerOfferTypes?seq_contains(fib.offerType)>
121 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
122 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
123 <#assign businessCards = businessCards + fiCardsData[index..index]>
124 </#if>
125 </#if>
126 </#if>
127 <#assign index = index + 1>
128
129 </#list>
130 <#assign fiCardsData = temp>
131 <#if ameriprise>
132 <#assign consumerCards = ameriprise_cards?sort_by("offerType")>
133 </#if>
134
135 <#if (fiCardsData?size > 0)>
136 <#if (subbu_special?has_content)>
137 <#assign lc_used = fiCardsData?first.WebLocationCode>
138 <#else>
139 <#if ameriprise>
140 <#assign lc_used = mappedLC>
141 <#else>
142 <#assign lc_used = lc>
143 </#if>
144 </#if>
145 <#assign offerId = "">
146 <#assign sourceCode = "">
147 <#assign cardArtImage = "">
148 <#assign productUrl = "">
149 <#assign product = "">
150 <#assign preparerType = "customer">
151 <#assign apr = "">
152 <#assign cardIndex = 0>
153 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
154 <#if (offerTypeList?seq_contains("101") || offerTypeList?seq_contains("103"))>
155 <#list consumerCards as card>
156 <#if (card.offerType=="101" || card.offerType=="103") >
157 <#assign offerId = card.offerId>
158 <#assign sourceCode = card.sourceCode>
159 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
160 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
161
162 <#assign productUrl="consumer-edr2112">
163 <#assign product="Everyday Rewards+">
164 <#assign cardIndex = 1>
165
166 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
167 <#if (scrapedData?size > 0)>
168 <#list scrapedData as sItem>
169 <script>
170 console.log("scrapped item", "${sItem.scrapedLabel}");
171 </script>
172 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
173 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
174 <#break>
175 </#if>
176 </#list>
177 <script>
178 $(document).ready(function () {
179 var aprText = "${apr}";
180 if (aprText) {
181 console.log("apr: " + aprText);
182 try {
183 $(".apr-full-text").html(aprText);
184 var matches= aprText.match(/\d+(\.\d+)?%?/g);
185 var billing_cycle = matches[1];
186 var apr_min = apr_min = matches[2];
187 var apr_max = apr_max = matches[3];
188 if (billing_cycle) {
189 $(".scraped-billing-cycle").html(billing_cycle);
190 }
191 if (apr_min) {
192 $(".scraped-apr-min").html(apr_min);
193 }
194 if (apr_max) {
195 $('.scraped-apr-max').html(apr_max);
196 }
197
198 } catch (e) {
199 console.log(e);
200 }
201 } else {
202 $(".apr-full-text").html('');
203 }
204 });
205 </script>
206 </#if>
207 <script>
208 var product = "${product}";
209 var partnerName = "${partnerName}";
210 $(document).ready(function () {
211 $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank"><span class="screen-reader-only">' + partnerName + ' ' + product + ' Card</span>See terms & conditions</a>');
212 });
213 </script>
214 </#if>
215 </#list>
216 <#else>
217 <#assign displayedCard = consumerCards[0]>
218 <#assign offerId = displayedCard.offerId>
219 <#assign sourceCode = displayedCard.sourceCode>
220 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
221 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
222 <#if ameriprise>
223 <#if (displayedCard.offerType == "101")>
224 <#assign productUrl="ameriprise-premier-visa-signature">
225 <#assign product="Premier Visa Signature">
226 <#assign cardIndex = 0>
227 <#elseif (displayedCard.offerType == "103")>
228 <#assign productUrl = "ameriprise-visa-signature">
229 <#assign product="Visa Signature">
230 <#assign cardIndex = 1>
231 </#if>
232 <#else>
233 <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")>
234 <#assign productUrl = "consumer-platinum2103">
235 <#assign product="Platinum">
236 <#assign cardIndex = 4>
237 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
238 <#if (scrapedData?size > 0)>
239 <#list scrapedData as sItem>
240 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
241 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
242 <#break>
243 </#if>
244 </#list>
245 <script>
246 $(document).ready(function () {
247 var aprText = "${apr}";
248 if (aprText) {
249 console.log("apr:" + aprText);
250 try {
251 $(".apr-full-text").html(aprText);
252 var matches= aprText.match(/\d+(\.\d+)?%?/g);
253 var billing_cycle = matches[1];
254 var apr_min = apr_min = matches[2];
255 var apr_max = apr_max = matches[3];
256 if (billing_cycle) {
257 $(".scraped-billing-cycle").html(billing_cycle);
258 }
259 if (apr_min) {
260 $(".scraped-apr-min").html(apr_min);
261 }
262 if (apr_max) {
263 $('.scraped-apr-max').html(apr_max);
264 }
265
266 } catch (e) {
267 console.log(e);
268 }
269 } else {
270 $(".apr-full-text").html('');
271 }
272 });
273 </script>
274 </#if>
275 <#elseif (displayedCard.offerType == "104")>
276 <#assign productUrl = "max-cash">
277 <#assign product="Max Cash Preferred">
278 <#assign cardIndex = 0>
279 <#elseif (displayedCard.offerType == "141")>
280 <#assign productUrl = "college-real-rewards">
281 <#assign product="College Real Rewards">
282 <#assign cardIndex = 2>
283 <#elseif (displayedCard.offerType == "115")>
284 <#assign productUrl = "secured">
285 <#assign product="Secured">
286 <#assign cardIndex = 3>
287 </#if>
288 </#if>
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 offerId = card.offerId>
296 <#assign sourceCode = card.sourceCode>
297 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
298 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
299 <#assign productUrl = "business-cash-preferred">
300 <#assign product="Business Cash Preferred">
301 <#assign cardIndex = 0>
302 </#if>
303 </#list>
304 <#else>
305 <#assign displayedCard = businessCards[0]>
306 <#assign offerId = displayedCard.offerId>
307 <#assign sourceCode = displayedCard.sourceCode>
308 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
309 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
310
311 <#if (displayedCard.offerType=="143")>
312 <#assign productUrl="business-real-rewards">
313 <#assign product="Business Real Rewards">
314 <#assign cardIndex = 2>
315 <#elseif (displayedCard.offerType=="144")>
316 <#assign productUrl = "smart-business-rewards">
317 <#assign product="Smart Business Rewards">
318 <#assign cardIndex = 1>
319 <#elseif (displayedCard.offerType=="121")>
320 <#assign productUrl = "business-platinum2103">
321 <#assign product="Business Card">
322 <#assign cardIndex = 3>
323 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
324 <#if (scrapedData?size > 0)>
325 <#list scrapedData as sItem>
326 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
327 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
328 <#break>
329 </#if>
330 </#list>
331 <script>
332 console.log("apr");
333 $(document).ready(function () {
334 var aprText = "${apr}";
335 if (aprText) {
336 console.log("apr: " + aprText);
337 try {
338 $(".apr-full-text").html(aprText);
339 var matches= aprText.match(/\d+(\.\d+)?%?/g);
340 var billing_cycle = matches[1];
341 var apr_min = apr_min = matches[2];
342 var apr_max = apr_max = matches[3];
343 if (billing_cycle) {
344 $(".scraped-billing-cycle").html(billing_cycle);
345 }
346 if (apr_min) {
347 $(".scraped-apr-min").html(apr_min);
348 }
349 if (apr_max) {
350 $('.scraped-apr-max').html(apr_max);
351 }
352
353 } catch (e) {
354 console.log(e);
355 }
356 } else {
357 $(".apr-full-text").html('');
358 }
359 });
360 </script>
361 </#if>
362 </#if>
363 </#if>
364 </#if>
365 <#if product != "">
366 <#if ameriprise>
367 <#assign card_art_alt = partnerName + " " + product + " Card">
368 <#assign rollover_text = partnerName + " " + product + " Card">
369 <#else>
370 <#assign card_art_alt = partnerName + " " + product + " Card">
371 <#assign rollover_text = partnerName + " " + product + " Credit Card">
372 <#assign card_text = product + " Card">
373 </#if>
374 </#if>
375 <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}">
376 <div class="hero-main">
377 <div class="hero-main-logo">
378 <img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo">
379 </div>
380 <div class="hero-main-container">
381 <div class="hero-main-offer bg-color-white">
382 <div class="offer-detail">
383
384 <div class="offer-detail-cardArt cardArtImg">
385 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
386 <p>${card_text!''}</p>
387 </div>
388 <div class="offer-detail-text text-color-default hide-desktop">
389 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
390 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
391 </div>
392
393 <#if ameriprise>
394 <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="jn-button apply-button text-bold button-bg-color-custom text-color-white hide-desktop" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>
395 <#else>
396 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm hide-desktop">
397 <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
398 <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
399 <button
400 type="submit"
401 data-button-name="cta-button-top"
402 data-product-name="${productUrl!''}"
403 class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
404 disabled
405 >
406 ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
407 </button>
408 </form>
409 </#if>
410 </div>
411
412 <div class="offer-header">
413 <div class="offer-text-top">
414 <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div>
415 <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1>
416 </div>
417 <div class="offer-text-bottom hide-mobile">
418 <div class="offer-detail-text text-color-default">
419 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
420 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
421 </div>
422
423 <#if ameriprise>
424 <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>
425 <#else>
426 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm">
427 <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
428 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
429 <button
430 type="submit"
431 data-button-name="cta-button-top"
432 data-product-name="${productUrl!''}"
433 class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
434 disabled
435 >
436 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
437 </button>
438 </form>
439 </#if>
440 </div>
441 </div>
442 </div>
443 </div>
444 </div>
445 </div>
446
447 </#if>
448</#if>
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5843849" at line 39, column 17] ---- Tip: It's the final [] step that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5843849" at line 39, 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.getURLCurrent() >
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
5<#-- <#assign url404 = '/error/404.html'> -->
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7<#assign environment = url?replace('/index.*','','r')>
8
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<#if qstringmap["ecid"]?has_content>
20 <#assign ecidExt = qstringmap["ecid"]?first>
21 <#assign ecidExt = htmlUtil.escape(ecidExt)>
22 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
23 <#assign ecidExt = "&ecid=" + ecidExt>
24
25
26 <#assign campaignId = qstringmap["ecid"]?first >
27 <#assign campaignId = htmlUtil.escape(campaignId)>
28 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
29<#else>
30 <#assign ecidExt="">
31 <#assign campaignId = "" >
32</#if>
33<#-- check bankercode validity -->
34<#if oadURL?contains("uat-")>
35 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
36<#else>
37 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
38</#if>
39<#assign bCode= qstringmap["bankercode"]?first>
40<#assign bCode= htmlUtil.escapeJS(bCode)>
41<#assign bCode= htmlUtil.escape(bCode)>
42
43<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
44<#if fiData?first?has_content>
45 <#assign fi = fiData?first>
46 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14"))>
47 <#assign subbu_special = fi.offerId>
48 </#if>
49</#if>
50
51<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
52<#list bData as b>
53 <#assign lc = b.locationcode >
54 <#assign bName = b.branch >
55 <#assign bPhone = b.businessphone >
56 <#assign boeid = b.oeid >
57 <#assign fName = b.firstname?trim >
58 <#assign lName = b.lastname?trim >
59 <#assign rLC = b.reallocationcode >
60 <#assign mappedLC = b.mappedLocationCode >
61</#list>
62
63<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
64 <#assign ameriprise = true>
65<#else>
66 <#assign ameriprise = false>
67</#if>
68<#if mappedLC?has_content && !ameriprise>
69 <#assign lc = mappedLC >
70</#if>
71
72
73<#if lc?has_content>
74 <#assign firstNameLength = fName?length >
75 <#assign lastNameLength = lName?length >
76 <#if firstNameLength + lastNameLength > 19 >
77 <#if lastNameLength > 18 >
78 <#assign bLName = lName?substring(0,18)>
79 <#else>
80 <#assign bLName = lName>
81 </#if>
82 <#assign maxFirstName = 19 - bLName?length >
83 <#if firstNameLength > maxFirstName >
84 <#assign bFName = fName?substring(0,maxFirstName)>
85 <#else>
86 <#assign bFName = fName>
87 </#if>
88 <#else>
89 <#assign bFName = fName>
90 <#assign bLName = lName>
91 </#if>
92
93 <#assign prefix = "00000" >
94 <#assign lcWithPrefix = prefix + lc >
95 <#assign withPrefixLength = lcWithPrefix?length >
96 <#assign startHere = withPrefixLength - 5>
97 <#assign lc = lcWithPrefix?substring(startHere)>
98 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
99 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
100 <#if (clientProfileList?first?has_content)>
101 <#assign clientProfile = clientProfileList?first>
102 <#assign partnerName = clientProfile.getMarketingNameLong()>
103 <#assign pbu = clientProfile.getPbu()>
104 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
105 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
106 <#if (subbu_special?has_content)>
107 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
108 <#else>
109 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
110
111 </#if>
112
113 <#-- Begin: filter cards by sourceCode and offerId and remove duplicated cards-->
114 <#assign temp = []>
115 <#assign consumerCards = []>
116 <#assign businessCards = []>
117 <#assign offerTypeList = []>
118 <#assign consumerOfferTypes =['104', '101', '103', '108', '109', '115', '141', '147', '138', '154']>
119 <#assign businessOfferTypes =['144', '128', '143', '121']>
120 <#assign index = 0>
121 <#list fiCardsData as fib>
122 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
123 <#assign offerTypeList = offerTypeList + [fib.offerType]>
124 <#assign temp = temp + fiCardsData[index..index]>
125 <#if consumerOfferTypes?seq_contains(fib.offerType)>
126 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
127 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
128 <#assign businessCards = businessCards + fiCardsData[index..index]>
129 </#if>
130 </#if>
131 <#assign index = index + 1>
132 </#list>
133
134
135 <#assign fiCardsData = temp>
136
137 <#if (fiCardsData?size > 0)>
138 <#if (subbu_special?has_content)>
139 <#assign lc_used = fiCardsData?first.WebLocationCode>
140 <#else>
141 <#if ameriprise>
142 <#assign lc_used = mappedLC>
143 <#else>
144 <#assign lc_used = lc>
145 </#if>
146 </#if>
147 </#if>
148
149 <#if (consumerCards?size > 0 || businessCards?size > 0)>
150
151 <div class="content-container content-container-main jn-consumer-content" id="product-display">
152 <#if ((consumerCards?size > 0) && (businessCards?size > 0))>
153 <nav class="jn-primary-nav two-tabs">
154 <ul>
155 <li title="${partnerName!''} - Personal products">
156 <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a>
157 </li>
158 <li title="${partnerName!''} - Business products">
159 <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a>
160 </li>
161 </ul>
162 </nav>
163 <#else>
164 <#if (consumerCards?size > 0)>
165 <nav class="jn-primary-nav" title="${partnerName!''} - Personal products">
166 <ul>
167 <li>
168 <p class="tab-nav" id="consumerTab"><span>Personal</span></p>
169 </li>
170 </ul>
171 </nav>
172 </#if>
173 <#if (businessCards?size > 0)>
174 <nav class="jn-primary-nav" title="${partnerName!''} - Business products">
175 <ul>
176 <li>
177 <p class="tab-nav" id="businessTab"><span>Business</span></p>
178 </li>
179 </ul>
180 </nav>
181 </#if>
182 </#if>
183 <#if (consumerCards?size > 0)>
184 <div class="tab-more-wrapper">
185 <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products">
186 <#list consumerCards as fib>
187 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" >
188 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
189 <#if ameriprise>
190 <#if (fib.offerType == "101")>
191 <#assign productName = "premier-visa-signature">
192 <#assign product="Premier Visa Signature">
193 <#assign cardIndex = 0>
194 <#elseif (fib.offerType == "103")>
195 <#assign productName = "visa-signature">
196 <#assign product="Visa Signature">
197 <#assign cardIndex = 1>
198 </#if>
199 <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()>
200 <#assign titleText = titleText?replace('<[^>]+>','','r')>
201 <#else>
202 <#switch fib.offerType>
203 <#case "101">
204 <#assign productName = "consumer-edr2112">
205 <#assign product="Everyday Rewards+">
206 <#assign cardIndex = 0>
207 <#break>
208 <#case "108">
209 <#assign productName = "consumer-platinum2103">
210 <#assign product="Platinum">
211 <#assign cardIndex = 2>
212 <#break>
213 <#case "109">
214 <#assign productName = "consumer-platinum2103">
215 <#assign product="Platinum">
216 <#assign cardIndex = 2>
217 <#break>
218 <#case "115">
219 <#assign productName = "secured">
220 <#assign product="Secured">
221 <#assign cardIndex = 5>
222 <#break>
223 <#case "104">
224 <#assign productName = "max-cash">
225 <#assign product="Max Cash Preferred">
226 <#assign cardIndex = 1>
227 <#break>
228 <#case "147">
229 <#assign productName = "max-cash-secured">
230 <#assign product="Max Cash Secured">
231 <#assign cardIndex = 4>
232 <#break>
233 <#case "141">
234 <#assign productName = "college-real-rewards">
235 <#assign product="College Real Rewards">
236 <#assign cardIndex = 3>
237 <#break>
238 <#case "138">
239 <#assign productName = "travel-rewards-plus">
240 <#assign product="Travel Rewards+">
241 <#assign cardIndex = 10>
242 <#break>
243 <#case "154">
244 <#assign productName = "reserve-rewards-plus">
245 <#assign product="Reserve Rewards+">
246 <#assign cardIndex = 11>
247 <#break>
248 <#default>
249 </#switch>
250
251 <#assign newTag = "">
252 <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")>
253 <#assign newTag = "with-new-tag">
254 </#if>
255
256 <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()>
257 <#assign titleText = titleText?replace('<[^>]+>','','r')>
258
259
260 <#assign APR="">
261 <#assign AMF="">
262 <#assign BAL="">
263 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)>
264 <#if (scrapedData?size > 0)>
265 <#list scrapedData as sItem>
266 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
267 <#assign APR = sItem.scrapedValue>
268 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
269 <#assign AMF = sItem.scrapedValue>
270 <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) >
271 <#assign BAL = sItem.scrapedValue>
272 </#if>
273 <#if (APR?has_content && AMF?has_content && BAL?has_content)>
274 <#break>
275 </#if>
276 </#list>
277 </#if>
278 </#if>
279 <#if ameriprise>
280 <#assign rollover_text = partnerName + " " + product + " " + " Card">
281 <#else>
282 <#assign rollover_text = partnerName + " " + product + " " + " Credit Card">
283 </#if>
284 <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${rollover_text!''}">
285 <div class="tag-container">
286 <div class="tag-corner">
287 <div class="tag-label">NEW</div>
288 </div>
289 </div>
290 <div class="consumer-card-heading hide-desktop">
291 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
292 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
293 </div>
294 <div class="jn-consumer-card-image">
295 <img src="${cardArtImage!''}" alt="${rollover_text!''}" class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
296
297 <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) >
298 <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p>
299 </#if>
300 </div>
301
302 <div class="jn-consumer-card-info">
303 <div class="consumer-card-heading hide-mobile">
304 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
305 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
306 </div>
307 <div class="jn-additional">
308 <ul class="${fib.offerType}">
309 <#if !ameriprise>
310 <#if (fib.offerType == "104")>
311 <li class="${fib.offerType}">
312 <p>
313 <strong>APR for Purchases: </strong>
314 ${APR!''}
315 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">
316 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
317 </a>
318 </p>
319 </li>
320 <li class="${fib.offerType}">
321 <p>
322 <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong>
323 ${BAL!''}
324 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">
325 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
326 </a>
327 </p>
328 </li>
329 <#else>
330 <li class="${fib.offerType}">
331 <p>
332 <#if (fib.offerType == "147" || fib.offerType== "115" || fib.offerType== "138" || fib.offerType== "154")>
333 <strong>APR for Purchases and Balance Transfers: </strong>
334 <#elseif (fib.offerType== "101")>
335 <strong>INTRO APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
336 <#else>
337 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
338 </#if>
339
340 ${APR!''}
341 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">
342 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
343 </a>
344 </p>
345 </li>
346 </#if>
347 </#if>
348 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
349 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
350 <li>${marketingInfo.getData()}</li>
351 </#list>
352 </#if>
353 <#if !ameriprise>
354 <li>
355 <p>
356 Annual Fee: ${AMF!''}
357 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">
358 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
359 </a>
360 </p>
361 </li>
362 </#if>
363 </ul>
364 </div>
365 <ul class="actions">
366 <li>
367 <form action="${oadURL}?locationCode=${lc_used}&offerId=${fib.offerId}&preparerType=customer&sourceCode=${fib.sourceCode}" method="post" class="BAAForm">
368 <label for="appDataBAA-${fib.offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
369 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${fib.offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>
370 <a
371 class="applyNowLink apply-now-button"
372 href="${oadURL}?locationCode=${lc_used}&offerId=${fib.offerId}&preparerType=customer&sourceCode=${fib.sourceCode}"
373 data-button-name="apply-now-link"
374 data-product-name="${productName}"
375 >
376 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span>
377 </a>
378 </form>
379 </li>
380 <li>
381 <#if ameriprise>
382 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc_used}${ecidExt}">
383 ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span>
384 </a>
385 <#else>
386 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}">
387 ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span>
388 </a>
389 </#if>
390 </li>
391 </ul>
392 </div>
393 </div>
394 </#list>
395 </div>
396 </div>
397 </#if>
398 <#if (businessCards?size > 0)>
399 <div class="tab-more-wrapper">
400 <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products">
401
402 <#list businessCards as fib>
403 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
404 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
405 <#switch fib.offerType>
406 <#case "144">
407 <#assign productName = "smart-business-rewards">
408 <#assign product="Smart Business Rewards">
409 <#assign cardIndex = 8>
410 <#break>
411 <#case "128">
412 <#assign productName = "business-cash-preferred">
413 <#assign product="Business Cash Preferred">
414 <#assign cardIndex = 6>
415 <#break>
416 <#case "143">
417 <#assign productName = "business-real-rewards">
418 <#assign product="Business Real Rewards">
419 <#assign cardIndex = 9>
420 <#break>
421 <#case "121">
422 <#assign productName = "business-platinum2103">
423 <#assign product="Business Card">
424 <#assign cardIndex = 7>
425 <#break>
426 <#default>
427 </#switch>
428
429 <#assign newTag = "">
430 <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")>
431 <#assign newTag = "with-new-tag">
432 </#if>
433 <#assign APR="">
434 <#assign AMF="">
435 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)>
436 <#if (scrapedData?size > 0)>
437 <#list scrapedData as sItem>
438 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
439 <#assign APR = sItem.scrapedValue>
440 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
441 <#assign AMF = sItem.scrapedValue>
442 </#if>
443 <#if (APR?has_content && AMF?has_content)>
444 <#break>
445 </#if>
446 </#list>
447 </#if>
448
449 <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card">
450 <div class="tag-container">
451 <div class="tag-corner">
452 <div class="tag-label">NEW</div>
453 </div>
454 </div>
455 <div class="consumer-card-heading hide-desktop">
456 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
457 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
458 </div>
459 <div class="jn-consumer-card-image">
460 <img src="${cardArtImage!''}" alt="${rollover_text!''}" class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
461
462 <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) >
463 <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p>
464 </#if>
465 </div>
466
467 <div class="jn-consumer-card-info">
468 <div class="consumer-card-heading hide-mobile">
469 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
470 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
471 </div>
472 <div class="jn-additional">
473 <ul>
474 <li class="${fib.offerType}">
475 <p>
476 <#if (fib.offerType == "144")>
477 <strong>APR for Purchases and Balance Transfers: </strong>
478 <#else>
479 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
480 </#if>
481
482 ${APR!''}
483 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">
484 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
485 </a>
486 </p>
487 </li>
488 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
489 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
490 <li>${marketingInfo.getData()}</li>
491 </#list>
492 </#if>
493 <li>
494 <p>
495 Annual Fee: ${AMF!''} <a
496 href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">
497 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
498 </a>
499 </p>
500 </li>
501 </ul>
502 </div>
503 <ul class="actions">
504 <li>
505 <form action="${oadURL}?locationCode=${lc_used}&offerId=${fib.offerId}&preparerType=customer&sourceCode=${fib.sourceCode}" method="post" class="BAAForm">
506 <label for="appDataBAA-${fib.offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
507 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${fib.offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>
508 <a
509 class="applyNowLink apply-now-button"
510 href="${oadURL}?locationCode=${lc_used}&offerId=${fib.offerId}&preparerType=customer&sourceCode=${fib.sourceCode}"
511 data-button-name="apply-now-link"
512 data-product-name="${productName}"
513 >
514 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}
515 <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span>
516 </a>
517 </form>
518 </li>
519 <li>
520 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}">
521 ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span>
522 </a>
523 </li>
524 </ul>
525 </div>
526 </div>
527
528 </#list>
529
530 </div>
531 </div>
532 </#if>
533 </div>
534 <script>
535 var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]';
536 var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]';
537 $(document).ready(function () {
538 var banker_code = "${bCode!''}";
539 var tabs=$('.tab-nav');
540 var slideDiv = $('.jn-tab-content.active');
541 var screenWidthMobile = 768;
542 var screenWidth = window.innerWidth;
543
544 if (tabs.length == 1) {
545 if ($(consumerSelector).length > 0) {
546 if(banker_code && (banker_code.indexOf("amp") == 0) && (banker_code.length > 6)) {
547 $("nav.jn-primary-nav").hide();
548 changeCardLayout(consumerSelector);
549 createMetaTag("consumer");
550 } else {
551 hideHeroAndDisclaimer('business');
552 showHeroAndDisclaimer('consumer');
553 changeCardLayout(consumerSelector);
554 renumberFootnote("consumer");
555 createMetaTag("consumer");
556 }
557 }
558 if ($(businessSelector).length > 0) {
559 $(businessSelector).addClass('active');
560 hideHeroAndDisclaimer('consumer');
561 showHeroAndDisclaimer('business');
562 changeCardLayout(businessSelector);
563 renumberFootnote("business");
564 createMetaTag("business");
565 }
566 }
567 if (tabs.length == 2) {
568 renumberFootnote("consumer");
569 renumberFootnote("business");
570 createMetaTag("consumer");
571 if ($(consumerSelector + ' .jn-consumer-item').length < 3) {
572 changeCardLayout(consumerSelector);
573 }
574 if ($(businessSelector + ' .jn-consumer-item').length < 3) {
575 changeCardLayout(businessSelector);
576 }
577
578 var tabsNav = document.querySelectorAll('.tab-nav');
579 togglePrimaryNav(tabsNav);
580
581 if(window.location.href.indexOf('#business') > -1 ) {
582 $(consumerSelector).removeClass('active');
583 $(businessSelector).addClass('active');
584 $('#consumerTab').removeClass('active');
585 $('#businessTab').addClass('active');
586 hideHeroAndDisclaimer('consumer');
587 showHeroAndDisclaimer('business');
588 changeCardLayout(businessSelector);
589 renumberFootnote("business");
590 createMetaTag("business");
591
592 $(tabs).click(function(){
593 if ($(this).attr('id') === "consumerTab") {
594 var newUrl = window.location.toString();
595 window.location = newUrl.replace(/#business/, '#consumer');
596 }
597 if ($(this).attr('id') === "businessTab") {
598 var url = window.location.toString();
599 window.location = url.replace(/#consumer/, '#business');
600 }
601 });
602 }
603 }
604
605 });
606 // Primary Nav function
607
608 function togglePrimaryNav(elem) {
609 for (var i = 0; i < elem.length; i++) {
610 elem[i].addEventListener("click", function(e) {
611
612 var current = this,
613 allSections = document.querySelectorAll('[data-id]'),
614 section = document.querySelector("[data-id='"+ current.id +"']");
615
616 for (var a = 0; a < allSections.length; a++) {
617 allSections[a].classList.remove('active');
618 }
619 for (var c = 0; c < elem.length; c++) {
620 if (current != elem[c]) {
621 elem[c].classList.remove('active');
622 } else {
623 current.classList.add('active');
624 section.classList.add('active');
625 hideHeroAndDisclaimer('consumer');
626 hideHeroAndDisclaimer('business');
627 if(current.getAttribute('id') === "consumerTab"){
628 showHeroAndDisclaimer('consumer');
629 } else if(current.getAttribute('id') === "businessTab"){
630 showHeroAndDisclaimer('business');
631 }
632 }
633 }
634 e.preventDefault();
635 });
636 }
637 }
638
639 function renumberFootnote(type) {
640 var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]';
641 var disclaimerSelector = '.tier1-disclaimer-landing-' + type;
642 var heroSelector = '.tier1-hero-landing-' + type;
643 var numOfFootnote = $(disclaimerSelector + ' sup').length;
644 var showList = [];
645 var hideList=[];
646 for (var i = 1; i <= numOfFootnote; i++) {
647 var cssClass="tag-" + i;
648 if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) {
649 showList.push(i);
650 } else {
651 hideList.push(i);
652 }
653 }
654 /*
655 for (var i = 1; i < showList.length + 1; i++) {
656 if(showList[i-1] != i) {
657 var className="tag-" + showList[i-1];
658 $(heroSelector).find("." + className).html(i);
659 // $(discriptionSelector).find("." + className).html(i);
660 $(disclaimerSelector).find("." + className).html(i);
661 }
662 }
663 */
664 for (var i = 0; i <hideList.length; i++) {
665 var cname="tag-" + hideList[i];
666 $(disclaimerSelector).find("." + cname).parent().hide();
667 }
668 }
669
670 function changeCardLayout(cssSelector) {
671 var numOfCards = $(cssSelector + ' .jn-consumer-item').length;
672 if(numOfCards == 1) {
673 $(cssSelector).addClass('one-card');
674 } else if (numOfCards == 2) {
675 $(cssSelector).addClass('two-card');
676 }
677 }
678 function hideHeroAndDisclaimer(type) {
679 try {
680 document.querySelector('.tier1-hero-landing-'+ type).classList.remove('show');
681 document.querySelector('.tier1-hero-landing-'+ type).classList.add('hide');
682 } catch (e) {
683 console.log(e);
684 }
685
686 try {
687 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('show');
688 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('hide');
689 } catch (e) {
690 console.log(e);
691 }
692
693 }
694 function showHeroAndDisclaimer(type) {
695 try {
696 document.querySelector('.tier1-hero-landing-'+ type).classList.add('show');
697 document.querySelector('.tier1-hero-landing-'+ type).classList.remove('hide');
698 } catch (e) {
699 console.log(e);
700 }
701
702 try {
703 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('show');
704 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('hide');
705 } catch (e) {
706 console.log(e);
707 }
708
709 }
710 function createMetaTag(type) {
711 var partnerName = "${partnerName!0}";
712 var product_name = $('.jn-hero-container .jn-button').data('product-name');
713 var metaDesc = "";
714 if (type == "consumer") {
715 if(location.pathname.indexOf("11t1m") != -1) {
716 metaDesc = "Apply Today for an Ameriprise Financial Credit Card. Earn Rewards Points worth $375 cash value when deposited into an eligible account after spending $3,000 in eligible net purchases within the first 90 days of account opening."
717 } else {
718 if(product_name == "consumer-platinum2103") {
719 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.";
720 } else if(product_name == "real-rewards") {
721 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase.";
722 } else if(product_name == "secured") {
723 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
724 } else if(product_name == "max-cash") {
725 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select.";
726 }
727 }
728
729 } else if (type == "business") {
730 if(product_name == "business-cashback") {
731 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
732 } else if(product_name == "business-real-rewards") {
733 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on.";
734 } else if(product_name == "business-visa") {
735 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
736 } else if(product_name == "smart-business-rewards") {
737 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.";
738 }
739 }
740 var m = document.createElement('meta');
741 m.name = 'description';
742 m.content = metaDesc;
743 document.head.appendChild(m);
744 }
745 function goToByScroll(id) {
746 var element = document.getElementById(id);
747 element.scrollIntoView(true);
748 }
749
750 </script>
751 <script>
752 var reportingData = window.reportingData || {};
753 document.addEventListener('DOMContentLoaded', function() {
754 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
755 var hostName = location.hostname;
756 function getDomainFromHostname(hostname) {
757 var parts = hostname.split('.');
758 return parts.length === 3 ? parts[1] : parts[0];
759 }
760 var domain = getDomainFromHostname(hostName);
761 var partnerName = "${partnerName!0}";
762 var ameriprise = '${ameriprise?string("yes", "no")}';
763 var locationCode = "${rLC!lc}";
764 var eidAmp = "";
765 var heroCardImgs = document.querySelectorAll('.jn-consumer-card-image img, .cardArtImg img');
766 for (var index = 0; index < heroCardImgs.length; index++) {
767 var heroCardImg = heroCardImgs[index];
768 var heroCardSrc = heroCardImg.getAttribute("src");
769 if(heroCardSrc != "") {
770 resizeImg(heroCardImg);
771 }
772 }
773 if (ameriprise == "yes") {
774 var bankercode_amp = '${bCode}';
775 eidAmp = bankercode_amp.substring(3);
776 locationCode ="";
777 document.title = "Ameriprise Financial Credit Card Overview Page";
778 } else {
779 document.title = partnerName + " Credit Card Index Page";
780 }
781
782 var lc = '${lc!0}';
783
784 var regex = /\d+/g;
785 var bdNumber = "${bPhone!''}";
786 var phoneNum = bdNumber.match(regex);
787 var areaCode = "";
788 var exchangeCode = "";
789 var num = "";
790 if(phoneNum != null) {
791 phoneNum = phoneNum.join("");
792 areaCode = phoneNum.substring(0,3);
793 exchangeCode = phoneNum.substring(3,6);
794 num = phoneNum.substring(6,10);
795 }
796
797 /* update SiteCatalyst data object */
798 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
799 reportingData.page_type = 'product';
800 reportingData.site_section = 'credit cards';
801 reportingData.platform = 'microsite';
802 reportingData.campaign_id = '${campaignId}';
803 reportingData.location_code = '${rLC!0}';
804 reportingData.partner_name = "${partnerName}";
805 reportingData.product = 'All Cards';
806 reportingData.text_to_apply_source = '${text_to_apply_source}';
807 reportingData.visitor_type = 'prospect';
808 reportingData.Banker_id = '${boeid}';
809 reportingData.Banker_code = '${bCode}';
810
811
812 /* SiteCatalyst pageView tracking */
813 AUI().ready(function() {
814 if (window.publisherFW) {
815 window.publisherFW.publishEvent("pageView", reportingData);
816 }
817 });
818
819
820 $('.jn-button').removeAttr('disabled');
821 $('.jn-button').removeClass('jn-disabled');
822
823 jQuery('.applyNowLink').on('click', function(e){
824 $(this).closest('.BAAForm').submit();
825 ga("send", {
826 hitType: "event",
827 eventAction: "ApplyNow",
828 eventCategory: "click",
829 eventLabel: "BottomButton"
830 });
831 return false;
832 });
833 jQuery(".BAAForm").on("submit", function(e){
834 e.preventDefault();
835 var xmlData;
836 if(ameriprise == "yes") {
837 xmlData = '<?xml version="1.0"?>'+
838 "<prefillData>"+
839 "<versionNumber>1.0</versionNumber>"+
840 "<applicationData>"+
841 "<referral>" +
842 "<employeeId>" + eidAmp + "</employeeId>" +
843 "<storeNumber>"+"${bName!'0'}"+"</storeNumber>"+
844 "<divisionNumber></divisionNumber>"+
845 "</referral>" +
846 "<bankerInformation>"+
847 "<locationCode>" + locationCode + "</locationCode>"+
848 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
849 "<employeeID>${boeid!0}</employeeID>"+
850 "<name>" +
851 "<first>${bFName!'0'}</first>" +
852 "<last>${bLName!'0'}</last>" +
853 "</name>"+
854 "<phone>"+
855 "<areaCode>"+areaCode+"</areaCode>"+
856 "<exchange>"+exchangeCode+"</exchange>"+
857 "<number>"+num+"</number>"+
858 "</phone>"+
859 "</bankerInformation>"+
860 "</applicationData>"+
861 "</prefillData>"
862 } else {
863 xmlData = '<?xml version="1.0"?>'+
864 "<prefillData>"+
865 "<versionNumber>1.0</versionNumber>"+
866 "<applicationData>"+
867 "<bankerInformation>"+
868 "<locationCode>" + locationCode + "</locationCode>"+
869 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
870 "<employeeID>${boeid!0}</employeeID>"+
871 "<name>" +
872 "<first>${bFName!'0'}</first>" +
873 "<last>${bLName!'0'}</last>" +
874 "</name>"+
875 "<phone>"+
876 "<areaCode>"+areaCode+"</areaCode>"+
877 "<exchange>"+exchangeCode+"</exchange>"+
878 "<number>"+num+"</number>"+
879 "</phone>"+
880 "</bankerInformation>"+
881 "</applicationData>"+
882 "</prefillData>"
883 }
884 $(this).children(".appDataBAA").val(xmlData);
885 var buttonName = $(this).find(".apply-now-button").data("button-name");
886 var productName = $(this).find(".apply-now-button").data("product-name");
887 /* SiteCatalyst onClick tracking */
888 reportingData.apply_button = buttonName;
889 reportingData.product = productName;
890
891 if (window.publisherFW) {
892 window.publisherFW.publishEvent("onClick", reportingData);
893 }
894
895 var paramString = '${bCode}' + "&" + xmlData + "&" + '${htmlUtil.escapeURL(htmlUtil.escapeJS(url))}';
896 /* CRC service call */
897 Liferay.Service(
898 '/crc-utilities-portlet#crcremote/make-call',
899 {
900 storedProcedure: 'crcDDCTextApplyLog',
901 parameters: paramString
902 },
903 function(obj){
904 }
905 );
906
907 this.submit();
908 });
909 });
910 function resizeImg(img) {
911 img.addEventListener("load", function() {
912 var cardImgWidth = img.width;
913 var cardImgHeight = img.height;
914 if(cardImgWidth > cardImgHeight) {
915 img.style.width = "285px";
916 } else {
917 img.style.width = "150px";
918 }
919 });
920 }
921 </script>
922
923 </#if>
924 </#if>
925</#if>
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5843858" at line 5, column 17] ---- Tip: It's the final [] step that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5843858" at line 5, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
4
5<#assign bCode= qstringmap["bankercode"]?first>
6<#assign bCode = htmlUtil.escape(bCode)>
7<#assign bCode = htmlUtil.escapeJS(bCode)>
8
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
10<#list bData as b>
11 <#assign lc = b.locationcode >
12 <#assign rLC = b.reallocationcode >
13 <#assign mappedLC = b.mappedLocationCode >
14</#list>
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
16 <#assign ameriprise = true>
17<#else>
18 <#assign ameriprise = false>
19</#if>
20<#if mappedLC?has_content && !ameriprise>
21 <#assign lc = mappedLC >
22</#if>
23
24
25<#if lc?has_content>
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 clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
32 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
33
34 <#assign clientProfile = clientProfileList?first>
35 <#assign partnerName=clientProfile.getMarketingNameLong()>
36
37 <#assign pbu = clientProfile.getPbu()>
38 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
39 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
40 <#if (fiCardsData?size > 0) >
41 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
42
43 <#if (cardProvider?size > 0)>
44 <#-- This will be V for visa or M for mastercard. -->
45 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
46 <#else>
47 <script>
48 console.log("No card provider(Visa/Master Card) found for disclaimer");
49 </script>
50 </#if>
51
52
53 <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer">
54 <div class="disclaimer" >
55 <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))>
56 ${disclaimersVisa.getData()}
57 </#if>
58 <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) >
59 ${disclaimersMasterCard.getData()}
60 </#if>
61 </div>
62 </div>
63 </#if>
64<#else>
65 <script>
66 console.log("No lc for disclaimer");
67 </script>
68</#if>
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5843858" at line 5, column 17] ---- Tip: It's the final [] step that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5843858" at line 5, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
4
5<#assign bCode= qstringmap["bankercode"]?first>
6<#assign bCode = htmlUtil.escape(bCode)>
7<#assign bCode = htmlUtil.escapeJS(bCode)>
8
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
10<#list bData as b>
11 <#assign lc = b.locationcode >
12 <#assign rLC = b.reallocationcode >
13 <#assign mappedLC = b.mappedLocationCode >
14</#list>
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
16 <#assign ameriprise = true>
17<#else>
18 <#assign ameriprise = false>
19</#if>
20<#if mappedLC?has_content && !ameriprise>
21 <#assign lc = mappedLC >
22</#if>
23
24
25<#if lc?has_content>
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 clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
32 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
33
34 <#assign clientProfile = clientProfileList?first>
35 <#assign partnerName=clientProfile.getMarketingNameLong()>
36
37 <#assign pbu = clientProfile.getPbu()>
38 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
39 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
40 <#if (fiCardsData?size > 0) >
41 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
42
43 <#if (cardProvider?size > 0)>
44 <#-- This will be V for visa or M for mastercard. -->
45 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
46 <#else>
47 <script>
48 console.log("No card provider(Visa/Master Card) found for disclaimer");
49 </script>
50 </#if>
51
52
53 <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer">
54 <div class="disclaimer" >
55 <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))>
56 ${disclaimersVisa.getData()}
57 </#if>
58 <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) >
59 ${disclaimersMasterCard.getData()}
60 </#if>
61 </div>
62 </div>
63 </#if>
64<#else>
65 <script>
66 console.log("No lc for disclaimer");
67 </script>
68</#if>
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5843861" at line 6, column 17] ---- Tip: It's the final [] step that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5843861" at line 6, column 1] ----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
4<#assign url404 = '/error/404.html'>
5
6<#assign bCode= qstringmap["bankercode"]?first>
7<#assign bCode = htmlUtil.escape(bCode)>
8<#assign bCode = htmlUtil.escapeJS(bCode)>
9
10<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
11<#list bData as b>
12 <#assign lc = b.locationcode >
13 <#assign rLC = b.reallocationcode >
14 <#assign mappedLC = b.mappedLocationCode >
15</#list>
16
17<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
18 <#assign ameriprise = true>
19<#else>
20 <#assign ameriprise = false>
21</#if>
22<#if mappedLC?has_content && !ameriprise>
23 <#assign lc = mappedLC >
24</#if>
25
26<#if lc?has_content>
27
28 <#assign prefix = "00000" >
29 <#assign lcWithPrefix = prefix + lc >
30 <#assign withPrefixLength = lcWithPrefix?length >
31 <#assign startHere = withPrefixLength - 5>
32 <#assign lc = lcWithPrefix?substring(startHere)>
33<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
34 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
35
36 <#assign clientProfile = clientProfileList?first>
37 <#assign pbu = clientProfile.getPbu()>
38 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
39 <#assign partnerName=clientProfile.getMarketingNameLong()>
40 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
41 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
42 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
43 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
44 <#-- add protocal if missing -->
45 <#assign partnerUrl = 'https://' + partnerUrl>
46 </#if>
47 <footer class="footer bg-color-black text-color-white">
48 ${footerContent.getData()}
49 </footer>
50
51 <!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
52 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
53 <style>
54 #opt-out-button,
55 .modal__btn.learn-more {
56 background: #0C2074;
57 border: 1px solid #0C2074;
58 color: white;
59 text-transform: uppercase;
60 text-decoration: none;
61 font-size: 16px;
62 padding: 0.5rem 2rem;
63 display: inline-block;
64 border-radius: 0;
65 }
66 #opt-out-button:hover,
67 .modal__btn.learn-more:hover {
68 color: white;
69 border-color: #2C76AF !important;
70 background-color: #2C76AF !important;
71 }
72 .modal__btn.learn-more {
73 background: white;
74 border: 1px solid #0C2074;
75 color: #0C2074;
76 }
77 #opt-out-button[disabled="true"] {
78 background-color: rgba(0,0,0,.15);
79 color: rgba(0,0,0,.45);
80 border-color: rgba(0,0,0,.25);
81 }
82 #opt-out-button:hover[disabled="true"] {
83 background-color: rgba(0,0,0,.15) !important;
84 color: rgba(0,0,0,.45) !important;
85 border-color: rgba(0,0,0,.25) !important;
86 }
87 #opt-out-button:focus {
88 outline-style: solid;
89 outline-color: white;
90 outline-offset: -3px;
91 outline-width: 1px;
92 }
93 .opt-out-link svg {
94 width: 30px;
95 height: 14px;
96 width: auto;
97 vertical-align: middle;
98 }
99 .modal__overlay {
100 position: fixed;
101 top: 0;
102 left: 0;
103 right: 0;
104 bottom: 0;
105 background: rgba(0,0,0,0.6);
106 display: flex;
107 justify-content: center;
108 align-items: center;
109 }
110
111 .modal__container {
112 background-color: #fff;
113 padding: 30px;
114 max-width: 500px;
115 max-height: 100vh;
116 border-radius: 4px;
117 overflow-y: auto;
118 box-sizing: border-box;
119 }
120
121 .modal__header {
122 display: flex;
123 justify-content: space-between;
124 align-items: center;
125 }
126
127 .modal__title {
128 margin-top: 0;
129 margin-bottom: 0;
130 font-weight: 600;
131 font-size: 20px;
132 line-height: 1.25;
133 color: #00449e;
134 box-sizing: border-box;
135 }
136
137 .modal__close {
138 background: transparent;
139 border: 1px solid white;
140 padding: 4px 8px;
141 }
142 .modal__close:hover {
143 border: 1px solid black;
144 }
145
146 .modal__header .modal__close:before { content: "\2715"; }
147
148 .modal__content {
149 margin-top: 2rem;
150 margin-bottom: 2rem;
151 line-height: 1.5;
152 }
153
154 @keyframes mmfadeIn {
155 from { opacity: 0; }
156 to { opacity: 1; }
157 }
158
159 @keyframes mmfadeOut {
160 from { opacity: 1; }
161 to { opacity: 0; }
162 }
163
164 @keyframes mmslideIn {
165 from { transform: translateY(15%); }
166 to { transform: translateY(0); }
167 }
168
169 @keyframes mmslideOut {
170 from { transform: translateY(0); }
171 to { transform: translateY(-10%); }
172 }
173
174 .micromodal-slide {
175 display: none;
176 }
177
178 .micromodal-slide.is-open {
179 display: block;
180 }
181
182 .micromodal-slide[aria-hidden="false"] .modal__overlay {
183 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
184 }
185
186 .micromodal-slide[aria-hidden="false"] .modal__container {
187 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
188 }
189
190 .micromodal-slide[aria-hidden="true"] .modal__overlay {
191 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
192 }
193
194 .micromodal-slide[aria-hidden="true"] .modal__container {
195 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
196 }
197
198 .micromodal-slide .modal__container,
199 .micromodal-slide .modal__overlay {
200 will-change: transform;
201 }
202 </style>
203
204 <div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
205 <div class="modal__overlay" tabindex="-1" data-micromodal-close>
206 <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
207 <header class="modal__header">
208 <h2 class="modal__title" id="modal-1-title">
209 Your California privacy choices
210 </h2>
211 <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
212 </header>
213 <div class="modal__content" id="modal-1-content">
214 <div id="message-no-cookie">
215 <p>
216 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>
217
218 <p> </p>
219
220 <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>
221 </div>
222 <div id="message-with-cookie">
223 <p>You have successfully opted-out.</p>
224 </div>
225 </div>
226 <div class="modal__footer">
227 <a href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a>
228 <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button>
229 </div>
230 </div>
231 </div>
232 </div>
233 <!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
234 <script>
235 const fdicNode = document.querySelector('.footer .fdic');
236 </script>
237 <#if url?contains("11t1m")>
238 <script>
239 document.querySelector('.footer .copyright').classList.add("ecdma-footer-client-name-copyright");
240 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
241 </script>
242 <#else>
243 <script>
244 document.querySelector('.footer .copyright').classList.add("ecdma-footer-client-name-copyright");
245 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
246 var newNode = document.createElement("div");
247 newNode.classList.add("member-agreement");
248 newNode.innerHTML='<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!0}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>';
249 var parent = fdicNode.parentNode;
250 parent.insertBefore(newNode, fdicNode);
251 </script>
252 </#if>
253
254 <#if partnerUrl?has_content>
255 <script>
256 document.querySelector('.copyright .homelink').innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>";
257 </script>
258 </#if>
259
260 <script>
261 /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */
262 fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><a href="javascript:void(0);" class="opt-out-link text-color-white" data-micromodal-trigger="modal-1">Your California privacy choices <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve"><path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#fff"/><path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#06f"/><path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" fill="#fff"/><path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" fill="#06f"/></svg></a></div>');
263 /* END CALIFORNIA OPT-OUT MODAL TRIGGER */
264 </script>
265 <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC -->
266
267 <script>
268 window.getCookieDomain = function() {
269 var hostname = window.location.hostname.split(".");
270 return hostname && hostname.slice(hostname.length - 2).join(".");
271 }
272 window.setToOptOut = function() {
273 if (window.getCookie('privacy_optout')) {
274 document.getElementById('message-no-cookie').style.display = 'none';
275 document.getElementById('message-with-cookie').style.display = 'block';
276 document.getElementById('opt-out-button').setAttribute('disabled', true)
277 } else {
278 document.getElementById('message-no-cookie').style.display = 'block';
279 document.getElementById('message-with-cookie').style.display = 'none';
280 }
281 }
282 window.getCookie = function(name) {
283 var value = '; ' + document.cookie;
284 var parts = value.split('; ' + name + '=');
285 if (parts.length === 2) return parts.pop().split(';').shift();
286 }
287 window.californiaOptOut = function() {
288 if (!window.getCookie('privacy_optout')) {
289 document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;';
290 try {
291 if (window.CustomEvent) {
292 window.dispatchEvent(new CustomEvent('privacy_optout'));
293 } else {
294 var privacyOptoutEvent = document.createEvent('Event');
295 privacyOptoutEvent.initEvent('privacy_optout', true, true);
296 window.dispatchEvent(privacyOptoutEvent);
297 }
298 window.setToOptOut();
299 } catch (err) {
300 console.error(err);
301 }
302 }
303 }
304 MicroModal.init({
305 onShow: window.setToOptOut
306 });
307 AUI().ready(function() {
308 // user browser setting for Global Privacy Control to opt out of sharing information with third parties
309 const isBrowserGpcOptOut = navigator.globalPrivacyControl;
310 if(isBrowserGpcOptOut === true) {
311 window.californiaOptOut();
312 }
313 });
314 </script>
315 <!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->
316
317</#if>