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