处理模板时发生错误。
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10154#10192#153411750" at line 10, 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 "10154#10192#153411750" at line 10, 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<#assign applicationType = "saa" >
8<#assign useprcaValue = "" >
9<#assign prcaURL = propsUtil.get('elan.prca.url')>
10<#assign bCode= qstringmap["bankercode"]?first>
11<#assign bCode = htmlUtil.escape(bCode)>
12<#assign bCode = htmlUtil.escapeJS(bCode)>
13
14<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
15<#list bData as b>
16 <#assign lc = b.locationcode >
17 <#assign rLC = b.reallocationcode >
18 <#assign mappedLC = b.mappedLocationCode >
19
20</#list>
21
22<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
23 <#assign ameriprise = true>
24<#else>
25 <#assign ameriprise = false>
26</#if>
27
28<#if mappedLC?has_content && !ameriprise>
29 <#assign lc = mappedLC >
30</#if>
31<#assign isEmployee = false>
32
33<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
34<#if fiData?first?has_content>
35 <#assign fi = fiData?first>
36 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))>
37 <#assign subbu_special = fi.offerId>
38 </#if>
39 <#if fi.projectType == "emp">
40 <#assign isEmployee = true>
41 </#if>
42</#if>
43
44<#if lc?has_content>
45 <#assign prefix = "00000" >
46 <#assign lcWithPrefix = prefix + lc>
47 <#assign withPrefixLength = lcWithPrefix?length >
48 <#assign startHere = withPrefixLength - 5>
49 <#assign lc = lcWithPrefix?substring(startHere)>
50 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
51 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
52
53 <#assign clientProfile = clientProfileList?first>
54 <#assign partnerName = clientProfile.getMarketingNameLong()>
55 <#assign pbu = clientProfile.getPbu()>
56 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
57 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
58 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
59 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
60 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
61 <#assign partnerUrl = 'https://' + partnerUrl>
62 </#if>
63
64 <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
65 <#if clientdataList?has_content >
66 <#assign clientdata = clientdataList?first >
67 <#assign backgroundHexColor = clientdata["backgroundHexColor"] >
68 <#assign backgroundImage = clientdata["backgroundImage"] >
69 <#assign buttonHexColor = clientdata["buttonHexColor"] >
70 <#assign AprMin = clientdata["AprMin"] >
71 <#assign AprMax = clientdata["AprMax"] >
72 <#assign cashAdvanceRate = clientdata["cashAdvanceRate"] >
73 <#assign BillingCycles = clientdata["BillingCycles"] >
74 <#assign textHexColor = clientdata["textHexColor"] >
75 <#assign linkHexColor = clientdata["linkHexColor"] >
76 <#assign hoverColor = clientdata["hoverColor"] >
77 <#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] >
78 <#assign transparency = clientdata["transparency"] >
79 <#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] >
80 <#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] >
81 <#assign businessTransparency = clientdata["businessTransparency"] >
82 <#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] >
83 <#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] >
84 </#if> -->
85
86 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
87 <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!>
88 <#if pbu == "0864054">
89 <#assign override = "berkshire">
90 <#else>
91 <#assign override = " ">
92 </#if>
93 <#-- this one should be delete for prod -->
94
95 <#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">
96 <#assign logoFileName = pbu + "-" + subbu + ".png">-->
97
98 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
99 <#if (subbu_special?has_content)>
100 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
101 <#else>
102 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
103 </#if>
104 <#assign temp = []>
105 <#assign consumerCards = []>
106 <#assign businessCards = []>
107 <#assign offerTypeList = []>
108 <#assign index = 0>
109 <#assign ameriprise_cards= []>
110 <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']>
111 <#assign businessOfferTypes =['128', '121', '144', '143']>
112 <#list fiCardsData as fib>
113
114 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
115 <#assign offerTypeList = offerTypeList + [fib.offerType]>
116 <#assign temp = temp + fiCardsData[index..index]>
117 <#if ameriprise>
118 <#if (fib.offerType == "101" || fib.offerType == "103")>
119 <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]>
120 </#if>
121 <#else>
122 <#if consumerOfferTypes?seq_contains(fib.offerType)>
123 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
124 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
125 <#assign businessCards = businessCards + fiCardsData[index..index]>
126 </#if>
127 </#if>
128 </#if>
129 <#assign index = index + 1>
130
131 </#list>
132 <#assign fiCardsData = temp>
133 <#if ameriprise>
134 <#assign consumerCards = ameriprise_cards?sort_by("offerType")>
135 </#if>
136
137 <#if (fiCardsData?size > 0)>
138 <#if (subbu_special?has_content)>
139 <#assign lc_used = fiCardsData?first.WebLocationCode>
140 <#else>
141 <#if ameriprise>
142 <#assign lc_used = mappedLC>
143 <#else>
144 <#assign lc_used = lc>
145 </#if>
146 </#if>
147 <#assign offerId = "">
148 <#assign sourceCode = "">
149 <#assign cardArtImage = "">
150 <#assign productUrl = "">
151 <#assign product = "">
152 <#assign preparerType = "customer">
153 <#assign apr = "">
154 <#assign cardIndex = 0>
155 <#assign empOfferId = "">
156 <#if consumerCards[0]?has_content>
157 <#assign empOfferId = consumerCards[0].empofferId!"">
158 </#if>
159 <#assign marketingChannel = 'SAT2A'>
160 <#if isEmployee>
161 <#assign marketingChannel = 'EMPL'>
162 <#assign offerId = empOfferId>
163 </#if>
164
165 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
166 <#if (offerTypeList?seq_contains("108") || offerTypeList?seq_contains("109"))>
167 <#list consumerCards as card>
168 <#assign useprcaValue = card.useprca!"">
169 <#if (card.offerType=="108" || card.offerType=="109") >
170 <#assign offerId = card.saaofferId>
171 <#if isEmployee>
172 <#assign offerId = card.empofferId!"">
173 </#if>
174 <#assign sourceCode = card.sourceCode>
175 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
176 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
177
178 <#assign productUrl="consumer-platinum2103">
179 <#assign product="Platinum">
180 <#assign cardIndex = 4>
181
182 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
183 <#if (scrapedData?size > 0)>
184 <#list scrapedData as sItem>
185 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
186 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
187 <#break>
188 </#if>
189 </#list>
190 <script>
191 $(document).ready(function () {
192 var aprText = "${apr}";
193 if (aprText) {
194 try {
195 $(".apr-full-text").html(aprText);
196 var matches= aprText.match(/\d+(\.\d+)?%?/g);
197 var billing_cycle = matches[1];
198 var apr_min = apr_min = matches[2];
199 var apr_max = apr_max = matches[3];
200 if (billing_cycle) {
201 $(".scraped-billing-cycle").html(billing_cycle);
202 }
203 if (apr_min) {
204 $(".scraped-apr-min").html(apr_min);
205 }
206 if (apr_max) {
207 $('.scraped-apr-max').html(apr_max);
208 }
209
210 } catch (e) {
211 console.log(e);
212 }
213 } else {
214 $(".apr-full-text").html('');
215 }
216 });
217 </script>
218 </#if>
219 <script>
220 var product = "${product}";
221 var partnerName = "${partnerName}";
222 $(document).ready(function () {
223 $(".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>');
224 });
225 </script>
226 </#if>
227 </#list>
228 <#else>
229 <#assign displayedCard = consumerCards[0]>
230 <#assign offerId = displayedCard.saaofferId>
231 <#if isEmployee>
232 <#assign offerId = displayedCard.empofferId!"">
233 </#if>
234 <#assign sourceCode = displayedCard.sourceCode>
235 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
236 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
237 <#if ameriprise>
238 <#if (displayedCard.offerType == "101")>
239 <#assign productUrl="ameriprise-premier-visa-signature">
240 <#assign product="Premier Visa Signature">
241 <#assign cardIndex = 0>
242 <#elseif (displayedCard.offerType == "103")>
243 <#assign productUrl = "ameriprise-visa-signature">
244 <#assign product="Visa Signature">
245 <#assign cardIndex = 1>
246 </#if>
247 <#else>
248 <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")>
249 <#assign productUrl = "consumer-platinum2103">
250 <#assign product="Platinum">
251 <#assign cardIndex = 4>
252 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
253 <#if (scrapedData?size > 0)>
254 <#list scrapedData as sItem>
255 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
256 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
257 <#break>
258 </#if>
259 </#list>
260 <script>
261 $(document).ready(function () {
262 var aprText = "${apr}";
263 if (aprText) {
264 try {
265 $(".apr-full-text").html(aprText);
266 var matches= aprText.match(/\d+(\.\d+)?%?/g);
267 var billing_cycle = matches[1];
268 var apr_min = apr_min = matches[2];
269 var apr_max = apr_max = matches[3];
270 if (billing_cycle) {
271 $(".scraped-billing-cycle").html(billing_cycle);
272 }
273 if (apr_min) {
274 $(".scraped-apr-min").html(apr_min);
275 }
276 if (apr_max) {
277 $('.scraped-apr-max').html(apr_max);
278 }
279
280 } catch (e) {
281 console.log(e);
282 }
283 } else {
284 $(".apr-full-text").html('');
285 }
286 });
287 </script>
288 </#if>
289 <#elseif (displayedCard.offerType == "104")>
290 <#assign productUrl = "max-cash">
291 <#assign product="Max Cash Preferred">
292 <#assign cardIndex = 0>
293 <#elseif (displayedCard.offerType == "141")>
294 <#assign productUrl = "college-real-rewards">
295 <#assign product="College Real Rewards">
296 <#assign cardIndex = 2>
297 <#elseif (displayedCard.offerType == "115")>
298 <#assign productUrl = "secured">
299 <#assign product="Secured">
300 <#assign cardIndex = 3>
301 </#if>
302 </#if>
303 </#if>
304 </#if>
305 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
306
307 <#if (offerTypeList?seq_contains("128")) >
308 <#list businessCards as card>
309 <#assign useprcaValue = card.useprca!"">
310 <#if (card.offerType=="128")>
311 <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards -->
312 <#assign offerId = card.saaofferId>
313 <#assign sourceCode = card.sourceCode>
314 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
315 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
316 <#assign productUrl = "business-cash-preferred">
317 <#assign product="Business Cash Preferred">
318 <#assign cardIndex = 0>
319 </#if>
320 </#list>
321 <#else>
322 <#assign displayedCard = businessCards[0]>
323 <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards -->
324 <#assign offerId = displayedCard.saaofferId>
325 <#assign sourceCode = displayedCard.sourceCode>
326 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
327 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
328
329 <#if (displayedCard.offerType=="143")>
330 <#assign productUrl="business-real-rewards">
331 <#assign product="Business Real Rewards">
332 <#assign cardIndex = 2>
333 <#elseif (displayedCard.offerType=="144")>
334 <#assign productUrl = "smart-business-rewards">
335 <#assign product="Smart Business Rewards">
336 <#assign cardIndex = 1>
337 <#elseif (displayedCard.offerType=="121")>
338 <#assign productUrl = "business-platinum2103">
339 <#assign product="Business Card">
340 <#assign cardIndex = 3>
341 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
342 <#if (scrapedData?size > 0)>
343 <#list scrapedData as sItem>
344 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
345 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
346 <#break>
347 </#if>
348 </#list>
349 <script>
350 $(document).ready(function () {
351 var aprText = "${apr}";
352 if (aprText) {
353 try {
354 $(".apr-full-text").html(aprText);
355 var matches= aprText.match(/\d+(\.\d+)?%?/g);
356 var billing_cycle = matches[1];
357 var apr_min = apr_min = matches[2];
358 var apr_max = apr_max = matches[3];
359 if (billing_cycle) {
360 $(".scraped-billing-cycle").html(billing_cycle);
361 }
362 if (apr_min) {
363 $(".scraped-apr-min").html(apr_min);
364 }
365 if (apr_max) {
366 $('.scraped-apr-max').html(apr_max);
367 }
368
369 } catch (e) {
370 console.log(e);
371 }
372 } else {
373 $(".apr-full-text").html('');
374 }
375 });
376 </script>
377 </#if>
378 </#if>
379 </#if>
380 </#if>
381 <#if product != "">
382 <#if ameriprise>
383 <#assign card_art_alt = partnerName + " " + product + " Card">
384 <#assign rollover_text = partnerName + " " + product + " Card">
385 <#else>
386 <#assign card_art_alt = partnerName + " " + product + " Card">
387 <#assign rollover_text = partnerName + " " + product + " Credit Card">
388 <#assign card_text = product + " Card">
389 </#if>
390 </#if>
391 <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}">
392 <div class="hero-main">
393 <div class="hero-main-logo">
394 <#if partnerUrl?has_content>
395 <a href="${partnerUrl!''}" title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a>
396 <#else>
397 <a title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a>
398 </#if>
399 </div>
400 <div class="hero-main-container">
401 <div class="hero-main-offer bg-color-white">
402 <div class="offer-detail">
403
404 <div class="offer-detail-cardArt cardArtImg">
405 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
406 <p>${card_text!''}</p>
407 </div>
408 <div class="offer-detail-text text-color-default hide-desktop">
409 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
410 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
411 </div>
412
413 <#if ameriprise>
414 <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>
415 <#else>
416 <#if (useprcaValue == "1")>
417 <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&applicationType=${applicationType}" method="post" class="BAAForm hide-desktop">
418 <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
419 <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
420 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
421 <button
422 type="submit"
423 data-button-name="cta-button-top"
424 data-product-name="${productUrl!''}"
425 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
426 disabled
427 >
428 ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
429 </button>
430 </form>
431 <#else>
432 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm hide-desktop">
433 <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
434 <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
435 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
436 <button
437 type="submit"
438 data-button-name="cta-button-top"
439 data-product-name="${productUrl!''}"
440 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
441 disabled
442 >
443 ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
444 </button>
445 </form>
446 </#if>
447 </#if>
448 </div>
449
450 <div class="offer-header">
451 <div class="offer-text-top">
452 <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div>
453 <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1>
454 </div>
455 <div class="offer-text-bottom hide-mobile">
456 <div class="offer-detail-text text-color-default">
457 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
458 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
459 </div>
460
461 <#if ameriprise>
462 <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>
463 <#else>
464 <#if (useprcaValue == "1")>
465 <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&applicationType=${applicationType}" method="post" class="BAAForm">
466 <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
467 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
468 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
469 <button
470 type="submit"
471 data-button-name="cta-button-top"
472 data-product-name="${productUrl!''}"
473 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
474 disabled
475 >
476 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
477 </button>
478 </form>
479 <#else>
480 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm">
481 <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
482 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
483 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
484 <button
485 type="submit"
486 data-button-name="cta-button-top"
487 data-product-name="${productUrl!''}"
488 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
489 disabled
490 >
491 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
492 </button>
493 </form>
494 </#if>
495 </#if>
496 </div>
497 </div>
498 </div>
499 </div>
500 </div>
501 </div>
502
503 </#if>
504</#if>
处理模板时发生错误。
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10154#10192#153411750" at line 10, 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 "10154#10192#153411750" at line 10, 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<#assign applicationType = "saa" >
8<#assign useprcaValue = "" >
9<#assign prcaURL = propsUtil.get('elan.prca.url')>
10<#assign bCode= qstringmap["bankercode"]?first>
11<#assign bCode = htmlUtil.escape(bCode)>
12<#assign bCode = htmlUtil.escapeJS(bCode)>
13
14<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
15<#list bData as b>
16 <#assign lc = b.locationcode >
17 <#assign rLC = b.reallocationcode >
18 <#assign mappedLC = b.mappedLocationCode >
19
20</#list>
21
22<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
23 <#assign ameriprise = true>
24<#else>
25 <#assign ameriprise = false>
26</#if>
27
28<#if mappedLC?has_content && !ameriprise>
29 <#assign lc = mappedLC >
30</#if>
31<#assign isEmployee = false>
32
33<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
34<#if fiData?first?has_content>
35 <#assign fi = fiData?first>
36 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))>
37 <#assign subbu_special = fi.offerId>
38 </#if>
39 <#if fi.projectType == "emp">
40 <#assign isEmployee = true>
41 </#if>
42</#if>
43
44<#if lc?has_content>
45 <#assign prefix = "00000" >
46 <#assign lcWithPrefix = prefix + lc>
47 <#assign withPrefixLength = lcWithPrefix?length >
48 <#assign startHere = withPrefixLength - 5>
49 <#assign lc = lcWithPrefix?substring(startHere)>
50 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
51 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
52
53 <#assign clientProfile = clientProfileList?first>
54 <#assign partnerName = clientProfile.getMarketingNameLong()>
55 <#assign pbu = clientProfile.getPbu()>
56 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
57 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
58 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
59 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
60 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
61 <#assign partnerUrl = 'https://' + partnerUrl>
62 </#if>
63
64 <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
65 <#if clientdataList?has_content >
66 <#assign clientdata = clientdataList?first >
67 <#assign backgroundHexColor = clientdata["backgroundHexColor"] >
68 <#assign backgroundImage = clientdata["backgroundImage"] >
69 <#assign buttonHexColor = clientdata["buttonHexColor"] >
70 <#assign AprMin = clientdata["AprMin"] >
71 <#assign AprMax = clientdata["AprMax"] >
72 <#assign cashAdvanceRate = clientdata["cashAdvanceRate"] >
73 <#assign BillingCycles = clientdata["BillingCycles"] >
74 <#assign textHexColor = clientdata["textHexColor"] >
75 <#assign linkHexColor = clientdata["linkHexColor"] >
76 <#assign hoverColor = clientdata["hoverColor"] >
77 <#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] >
78 <#assign transparency = clientdata["transparency"] >
79 <#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] >
80 <#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] >
81 <#assign businessTransparency = clientdata["businessTransparency"] >
82 <#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] >
83 <#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] >
84 </#if> -->
85
86 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
87 <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!>
88 <#if pbu == "0864054">
89 <#assign override = "berkshire">
90 <#else>
91 <#assign override = " ">
92 </#if>
93 <#-- this one should be delete for prod -->
94
95 <#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">
96 <#assign logoFileName = pbu + "-" + subbu + ".png">-->
97
98 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
99 <#if (subbu_special?has_content)>
100 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
101 <#else>
102 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
103 </#if>
104 <#assign temp = []>
105 <#assign consumerCards = []>
106 <#assign businessCards = []>
107 <#assign offerTypeList = []>
108 <#assign index = 0>
109 <#assign ameriprise_cards= []>
110 <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']>
111 <#assign businessOfferTypes =['128', '121', '144', '143']>
112 <#list fiCardsData as fib>
113
114 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
115 <#assign offerTypeList = offerTypeList + [fib.offerType]>
116 <#assign temp = temp + fiCardsData[index..index]>
117 <#if ameriprise>
118 <#if (fib.offerType == "101" || fib.offerType == "103")>
119 <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]>
120 </#if>
121 <#else>
122 <#if consumerOfferTypes?seq_contains(fib.offerType)>
123 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
124 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
125 <#assign businessCards = businessCards + fiCardsData[index..index]>
126 </#if>
127 </#if>
128 </#if>
129 <#assign index = index + 1>
130
131 </#list>
132 <#assign fiCardsData = temp>
133 <#if ameriprise>
134 <#assign consumerCards = ameriprise_cards?sort_by("offerType")>
135 </#if>
136
137 <#if (fiCardsData?size > 0)>
138 <#if (subbu_special?has_content)>
139 <#assign lc_used = fiCardsData?first.WebLocationCode>
140 <#else>
141 <#if ameriprise>
142 <#assign lc_used = mappedLC>
143 <#else>
144 <#assign lc_used = lc>
145 </#if>
146 </#if>
147 <#assign offerId = "">
148 <#assign sourceCode = "">
149 <#assign cardArtImage = "">
150 <#assign productUrl = "">
151 <#assign product = "">
152 <#assign preparerType = "customer">
153 <#assign apr = "">
154 <#assign cardIndex = 0>
155 <#assign empOfferId = "">
156 <#if consumerCards[0]?has_content>
157 <#assign empOfferId = consumerCards[0].empofferId!"">
158 </#if>
159 <#assign marketingChannel = 'SAT2A'>
160 <#if isEmployee>
161 <#assign marketingChannel = 'EMPL'>
162 <#assign offerId = empOfferId>
163 </#if>
164
165 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
166 <#if (offerTypeList?seq_contains("108") || offerTypeList?seq_contains("109"))>
167 <#list consumerCards as card>
168 <#assign useprcaValue = card.useprca!"">
169 <#if (card.offerType=="108" || card.offerType=="109") >
170 <#assign offerId = card.saaofferId>
171 <#if isEmployee>
172 <#assign offerId = card.empofferId!"">
173 </#if>
174 <#assign sourceCode = card.sourceCode>
175 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
176 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
177
178 <#assign productUrl="consumer-platinum2103">
179 <#assign product="Platinum">
180 <#assign cardIndex = 4>
181
182 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
183 <#if (scrapedData?size > 0)>
184 <#list scrapedData as sItem>
185 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
186 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
187 <#break>
188 </#if>
189 </#list>
190 <script>
191 $(document).ready(function () {
192 var aprText = "${apr}";
193 if (aprText) {
194 try {
195 $(".apr-full-text").html(aprText);
196 var matches= aprText.match(/\d+(\.\d+)?%?/g);
197 var billing_cycle = matches[1];
198 var apr_min = apr_min = matches[2];
199 var apr_max = apr_max = matches[3];
200 if (billing_cycle) {
201 $(".scraped-billing-cycle").html(billing_cycle);
202 }
203 if (apr_min) {
204 $(".scraped-apr-min").html(apr_min);
205 }
206 if (apr_max) {
207 $('.scraped-apr-max').html(apr_max);
208 }
209
210 } catch (e) {
211 console.log(e);
212 }
213 } else {
214 $(".apr-full-text").html('');
215 }
216 });
217 </script>
218 </#if>
219 <script>
220 var product = "${product}";
221 var partnerName = "${partnerName}";
222 $(document).ready(function () {
223 $(".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>');
224 });
225 </script>
226 </#if>
227 </#list>
228 <#else>
229 <#assign displayedCard = consumerCards[0]>
230 <#assign offerId = displayedCard.saaofferId>
231 <#if isEmployee>
232 <#assign offerId = displayedCard.empofferId!"">
233 </#if>
234 <#assign sourceCode = displayedCard.sourceCode>
235 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
236 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
237 <#if ameriprise>
238 <#if (displayedCard.offerType == "101")>
239 <#assign productUrl="ameriprise-premier-visa-signature">
240 <#assign product="Premier Visa Signature">
241 <#assign cardIndex = 0>
242 <#elseif (displayedCard.offerType == "103")>
243 <#assign productUrl = "ameriprise-visa-signature">
244 <#assign product="Visa Signature">
245 <#assign cardIndex = 1>
246 </#if>
247 <#else>
248 <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")>
249 <#assign productUrl = "consumer-platinum2103">
250 <#assign product="Platinum">
251 <#assign cardIndex = 4>
252 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
253 <#if (scrapedData?size > 0)>
254 <#list scrapedData as sItem>
255 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
256 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
257 <#break>
258 </#if>
259 </#list>
260 <script>
261 $(document).ready(function () {
262 var aprText = "${apr}";
263 if (aprText) {
264 try {
265 $(".apr-full-text").html(aprText);
266 var matches= aprText.match(/\d+(\.\d+)?%?/g);
267 var billing_cycle = matches[1];
268 var apr_min = apr_min = matches[2];
269 var apr_max = apr_max = matches[3];
270 if (billing_cycle) {
271 $(".scraped-billing-cycle").html(billing_cycle);
272 }
273 if (apr_min) {
274 $(".scraped-apr-min").html(apr_min);
275 }
276 if (apr_max) {
277 $('.scraped-apr-max').html(apr_max);
278 }
279
280 } catch (e) {
281 console.log(e);
282 }
283 } else {
284 $(".apr-full-text").html('');
285 }
286 });
287 </script>
288 </#if>
289 <#elseif (displayedCard.offerType == "104")>
290 <#assign productUrl = "max-cash">
291 <#assign product="Max Cash Preferred">
292 <#assign cardIndex = 0>
293 <#elseif (displayedCard.offerType == "141")>
294 <#assign productUrl = "college-real-rewards">
295 <#assign product="College Real Rewards">
296 <#assign cardIndex = 2>
297 <#elseif (displayedCard.offerType == "115")>
298 <#assign productUrl = "secured">
299 <#assign product="Secured">
300 <#assign cardIndex = 3>
301 </#if>
302 </#if>
303 </#if>
304 </#if>
305 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
306
307 <#if (offerTypeList?seq_contains("128")) >
308 <#list businessCards as card>
309 <#assign useprcaValue = card.useprca!"">
310 <#if (card.offerType=="128")>
311 <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards -->
312 <#assign offerId = card.saaofferId>
313 <#assign sourceCode = card.sourceCode>
314 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
315 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
316 <#assign productUrl = "business-cash-preferred">
317 <#assign product="Business Cash Preferred">
318 <#assign cardIndex = 0>
319 </#if>
320 </#list>
321 <#else>
322 <#assign displayedCard = businessCards[0]>
323 <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards -->
324 <#assign offerId = displayedCard.saaofferId>
325 <#assign sourceCode = displayedCard.sourceCode>
326 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
327 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
328
329 <#if (displayedCard.offerType=="143")>
330 <#assign productUrl="business-real-rewards">
331 <#assign product="Business Real Rewards">
332 <#assign cardIndex = 2>
333 <#elseif (displayedCard.offerType=="144")>
334 <#assign productUrl = "smart-business-rewards">
335 <#assign product="Smart Business Rewards">
336 <#assign cardIndex = 1>
337 <#elseif (displayedCard.offerType=="121")>
338 <#assign productUrl = "business-platinum2103">
339 <#assign product="Business Card">
340 <#assign cardIndex = 3>
341 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
342 <#if (scrapedData?size > 0)>
343 <#list scrapedData as sItem>
344 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
345 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
346 <#break>
347 </#if>
348 </#list>
349 <script>
350 $(document).ready(function () {
351 var aprText = "${apr}";
352 if (aprText) {
353 try {
354 $(".apr-full-text").html(aprText);
355 var matches= aprText.match(/\d+(\.\d+)?%?/g);
356 var billing_cycle = matches[1];
357 var apr_min = apr_min = matches[2];
358 var apr_max = apr_max = matches[3];
359 if (billing_cycle) {
360 $(".scraped-billing-cycle").html(billing_cycle);
361 }
362 if (apr_min) {
363 $(".scraped-apr-min").html(apr_min);
364 }
365 if (apr_max) {
366 $('.scraped-apr-max').html(apr_max);
367 }
368
369 } catch (e) {
370 console.log(e);
371 }
372 } else {
373 $(".apr-full-text").html('');
374 }
375 });
376 </script>
377 </#if>
378 </#if>
379 </#if>
380 </#if>
381 <#if product != "">
382 <#if ameriprise>
383 <#assign card_art_alt = partnerName + " " + product + " Card">
384 <#assign rollover_text = partnerName + " " + product + " Card">
385 <#else>
386 <#assign card_art_alt = partnerName + " " + product + " Card">
387 <#assign rollover_text = partnerName + " " + product + " Credit Card">
388 <#assign card_text = product + " Card">
389 </#if>
390 </#if>
391 <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}">
392 <div class="hero-main">
393 <div class="hero-main-logo">
394 <#if partnerUrl?has_content>
395 <a href="${partnerUrl!''}" title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a>
396 <#else>
397 <a title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a>
398 </#if>
399 </div>
400 <div class="hero-main-container">
401 <div class="hero-main-offer bg-color-white">
402 <div class="offer-detail">
403
404 <div class="offer-detail-cardArt cardArtImg">
405 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
406 <p>${card_text!''}</p>
407 </div>
408 <div class="offer-detail-text text-color-default hide-desktop">
409 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
410 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
411 </div>
412
413 <#if ameriprise>
414 <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>
415 <#else>
416 <#if (useprcaValue == "1")>
417 <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&applicationType=${applicationType}" method="post" class="BAAForm hide-desktop">
418 <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
419 <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
420 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
421 <button
422 type="submit"
423 data-button-name="cta-button-top"
424 data-product-name="${productUrl!''}"
425 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
426 disabled
427 >
428 ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
429 </button>
430 </form>
431 <#else>
432 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm hide-desktop">
433 <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
434 <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
435 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
436 <button
437 type="submit"
438 data-button-name="cta-button-top"
439 data-product-name="${productUrl!''}"
440 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
441 disabled
442 >
443 ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
444 </button>
445 </form>
446 </#if>
447 </#if>
448 </div>
449
450 <div class="offer-header">
451 <div class="offer-text-top">
452 <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div>
453 <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1>
454 </div>
455 <div class="offer-text-bottom hide-mobile">
456 <div class="offer-detail-text text-color-default">
457 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
458 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
459 </div>
460
461 <#if ameriprise>
462 <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>
463 <#else>
464 <#if (useprcaValue == "1")>
465 <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&applicationType=${applicationType}" method="post" class="BAAForm">
466 <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
467 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
468 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
469 <button
470 type="submit"
471 data-button-name="cta-button-top"
472 data-product-name="${productUrl!''}"
473 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
474 disabled
475 >
476 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
477 </button>
478 </form>
479 <#else>
480 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm">
481 <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
482 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
483 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
484 <button
485 type="submit"
486 data-button-name="cta-button-top"
487 data-product-name="${productUrl!''}"
488 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
489 disabled
490 >
491 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
492 </button>
493 </form>
494 </#if>
495 </#if>
496 </div>
497 </div>
498 </div>
499 </div>
500 </div>
501 </div>
502
503 </#if>
504</#if>
处理模板时发生错误。
The following has evaluated to null or missing: ==> url404 [in template "10154#10192#153411738" at line 81, 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 "10154#10192#153411738" at line 81, 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<#assign prcaURL = propsUtil.get('elan.prca.url')>
9<#assign useprcaValue = "" >
10<#assign applicationType = "saa" >
11<#assign text_to_apply_source = "vanity url" >
12<#if qstringmap["sms"]?has_content>
13 <#assign sms = 1 >
14 <#assign text_to_apply_source = "sms" >
15</#if>
16<#if qstringmap["qrCode"]?has_content>
17 <#assign text_to_apply_source = "qr code" >
18</#if>
19
20<#if qstringmap["ecid"]?has_content>
21 <#assign ecidExt = qstringmap["ecid"]?first>
22 <#assign ecidExt = htmlUtil.escape(ecidExt)>
23 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
24 <#assign ecidExt = "&ecid=" + ecidExt>
25
26 <#assign campaignId = qstringmap["ecid"]?first >
27 <#assign campaignId = htmlUtil.escape(campaignId)>
28 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
29<#else>
30 <#assign ecidExt="">
31 <#assign campaignId = "" >
32</#if>
33<#-- check bankercode validity -->
34<#if oadURL?contains("uat-")>
35 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
36<#else>
37 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
38</#if>
39<#if qstringmap["bankercode"]?has_content>
40 <#assign bCode= qstringmap["bankercode"]?first>
41 <#assign bCode= htmlUtil.escapeJS(bCode)>
42 <#assign bCode= htmlUtil.escape(bCode)>
43 <#assign isEmployee = false>
44
45 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
46 <#if fiData?first?has_content>
47 <#assign fi = fiData?first>
48 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))>
49 <#assign subbu_special = fi.offerId>
50 </#if>
51 <#if fi.projectType == "emp">
52 <#assign isEmployee = true>
53 </#if>
54 <#else>
55 <script>
56 console.log("fiData missing");
57 location.href = '${url404}';
58 </script>
59 </#if>
60
61 <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
62 <#if !bData?first?has_content>
63 <script>
64 console.log("bData missing");
65 location.href = '${url404}';
66 </script>
67 </#if>
68 <#list bData as b>
69 <#assign lc = b.locationcode >
70 <#assign bName = b.branch >
71 <#assign bPhone = b.businessphone >
72 <#assign boeid = b.oeid?trim>
73 <#assign fName = b.firstname?trim>
74 <#assign lName = b.lastname?trim>
75 <#assign rLC = b.reallocationcode >
76 <#assign mappedLC = b.mappedLocationCode >
77 </#list>
78<#else>
79 <script>
80 console.log("MainProductBcode missing");
81 location.href = '${url404}';
82 </script>
83</#if>
84
85<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
86 <#assign ameriprise = true>
87<#else>
88 <#assign ameriprise = false>
89</#if>
90<#if mappedLC?has_content && !ameriprise>
91 <#assign lc = mappedLC >
92</#if>
93
94
95<#if lc?has_content>
96 <#assign firstNameLength = fName?length >
97 <#assign lastNameLength = lName?length >
98 <#if firstNameLength + lastNameLength > 19 >
99 <#if lastNameLength > 18 >
100 <#assign bLName = lName?substring(0,18)>
101 <#else>
102 <#assign bLName = lName>
103 </#if>
104 <#assign maxFirstName = 19 - bLName?length >
105 <#if firstNameLength > maxFirstName >
106 <#assign bFName = fName?substring(0,maxFirstName)>
107 <#else>
108 <#assign bFName = fName>
109 </#if>
110 <#else>
111 <#assign bFName = fName>
112 <#assign bLName = lName>
113 </#if>
114
115 <#assign prefix = "00000" >
116 <#assign lcWithPrefix = prefix + lc >
117 <#assign withPrefixLength = lcWithPrefix?length >
118 <#assign startHere = withPrefixLength - 5>
119 <#assign lc = lcWithPrefix?substring(startHere)>
120 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
121 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
122 <#if (clientProfileList?first?has_content)>
123 <#assign clientProfile = clientProfileList?first>
124 <#assign partnerName = clientProfile.getMarketingNameLong()>
125 <#assign pbu = clientProfile.getPbu()>
126 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
127 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
128 <#if (subbu_special?has_content)>
129 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
130 <#else>
131 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
132 </#if>
133
134 <#assign fultonBankpbu = "0727491">
135 <#if pbu == fultonBankpbu>
136 <style>
137 #hideFultonInfo {
138 display: none;
139 }
140 </style>
141 </#if>
142
143 <#-- Begin: filter cards by sourceCode and offerId and remove duplicated cards-->
144 <#assign temp = []>
145 <#assign consumerCards = []>
146 <#assign businessCards = []>
147 <#assign offerTypeList = []>
148 <#assign consumerOfferTypes =['104', '101', '103', '108', '109', '115', '141', '147', '138', '154']>
149 <#assign businessOfferTypes =['144', '128', '143', '121']>
150 <#assign index = 0>
151 <#list fiCardsData as fib>
152 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
153 <#assign offerTypeList = offerTypeList + [fib.offerType]>
154 <#assign temp = temp + fiCardsData[index..index]>
155 <#if consumerOfferTypes?seq_contains(fib.offerType)>
156 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
157 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
158 <#assign businessCards = businessCards + fiCardsData[index..index]>
159 </#if>
160 </#if>
161 <#assign index = index + 1>
162 </#list>
163
164 <#assign fiCardsData = temp>
165
166 <#if (fiCardsData?size > 0)>
167 <#if (subbu_special?has_content)>
168 <#assign lc_used = fiCardsData?first.WebLocationCode>
169 <#else>
170 <#if ameriprise>
171 <#assign lc_used = mappedLC>
172 <#else>
173 <#assign lc_used = lc>
174 </#if>
175 </#if>
176 </#if>
177
178 <#assign offerId = "">
179 <#assign empOfferId = "">
180 <#if consumerCards[0]?has_content>
181 <#assign empOfferId = consumerCards[0].empofferId!"">
182 </#if>
183 <#assign marketingChannel = 'SAT2A'>
184 <#if isEmployee>
185 <#assign marketingChannel = 'EMPL'>
186 <#assign offerId = empOfferId>
187 <#assign consumerCardsEmployee = []>
188 <#list consumerCards as card>
189 <#if card.empofferId?has_content>
190 <#assign consumerCardsEmployee = consumerCardsEmployee + [card]>
191 </#if>
192 </#list>
193 <#assign consumerCards = consumerCardsEmployee />
194 </#if>
195
196 <#if (consumerCards?size > 0 || businessCards?size > 0)>
197
198 <div class="content-container content-container-main jn-consumer-content" id="product-display">
199 <#if ((consumerCards?size > 0) && (businessCards?size > 0) && (isEmployee == false))>
200 <nav class="jn-primary-nav two-tabs">
201 <ul>
202 <li title="${partnerName!''} - Personal products">
203 <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a>
204 </li>
205 <li title="${partnerName!''} - Business products">
206 <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a>
207 </li>
208 </ul>
209 </nav>
210 <#else>
211 <#if (consumerCards?size > 0)>
212 <nav class="jn-primary-nav" title="${partnerName!''} - Personal products">
213 <ul>
214 <li>
215 <p class="tab-nav" id="consumerTab"><span>Personal</span></p>
216 </li>
217 </ul>
218 </nav>
219 </#if>
220 <#if (businessCards?size > 0 && (isEmployee == false))>
221 <nav class="jn-primary-nav" title="${partnerName!''} - Business products">
222 <ul>
223 <li>
224 <p class="tab-nav" id="businessTab"><span>Business</span></p>
225 </li>
226 </ul>
227 </nav>
228 </#if>
229 </#if>
230 <#if (consumerCards?size > 0)>
231 <div class="tab-more-wrapper">
232 <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products">
233 <#list consumerCards as fib>
234 <#assign useprcaValue = fib.useprca!"">
235 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" >
236 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
237 <#assign hasBalanceTransferCalculator = false>
238 <#assign offerId = fib.saaofferId>
239 <#if isEmployee>
240 <#assign offerId = fib.empofferId!"">
241 </#if>
242
243 <#if ameriprise>
244 <#if (fib.offerType == "101")>
245 <#assign productName = "premier-visa-signature">
246 <#assign product="Premier Visa Signature">
247 <#assign cardIndex = 0>
248 <#elseif (fib.offerType == "103")>
249 <#assign productName = "visa-signature">
250 <#assign product="Visa Signature">
251 <#assign cardIndex = 1>
252 </#if>
253 <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()>
254 <#assign titleText = titleText?replace('<[^>]+>','','r')>
255 <#else>
256 <#switch fib.offerType>
257 <#case "101">
258 <#assign productName = "consumer-edr2112">
259 <#assign product="Everyday Rewards+">
260 <#assign cardIndex = 0>
261 <#break>
262 <#case "108">
263 <#assign productName = "consumer-platinum2103">
264 <#assign product="Platinum">
265 <#assign cardIndex = 2>
266 <#assign hasBalanceTransferCalculator = true>
267 <#break>
268 <#case "109">
269 <#assign productName = "consumer-platinum2103">
270 <#assign product="Platinum">
271 <#assign cardIndex = 2>
272 <#assign hasBalanceTransferCalculator = true>
273 <#break>
274 <#case "115">
275 <#assign productName = "secured">
276 <#assign product="Secured">
277 <#assign cardIndex = 5>
278 <#break>
279 <#case "104">
280 <#assign productName = "max-cash">
281 <#assign product="Max Cash Preferred">
282 <#assign cardIndex = 1>
283 <#break>
284 <#case "147">
285 <#assign productName = "max-cash-secured">
286 <#assign product="Max Cash Secured">
287 <#assign cardIndex = 4>
288 <#break>
289 <#case "141">
290 <#assign productName = "college-real-rewards">
291 <#assign product="College Real Rewards">
292 <#assign cardIndex = 3>
293 <#break>
294 <#case "138">
295 <#assign productName = "travel-rewards-plus">
296 <#assign product="Travel Rewards+">
297 <#assign cardIndex = 10>
298 <#break>
299 <#case "154">
300 <#assign productName = "reserve-rewards-plus">
301 <#assign product="Reserve Rewards+">
302 <#assign cardIndex = 11>
303 <#break>
304 <#default>
305 </#switch>
306
307 <#assign newTag = "">
308 <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")>
309 <#assign newTag = "with-new-tag">
310 </#if>
311
312 <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()>
313 <#assign titleText = titleText?replace('<[^>]+>','','r')>
314
315
316 <#assign APR="">
317 <#assign AMF="">
318 <#assign BAL="">
319
320
321 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ fib.sourceCode)>
322 <#if (scrapedData?size > 0)>
323 <#list scrapedData as sItem>
324 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
325 <#assign APR = sItem.scrapedValue>
326 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
327 <#assign AMF = sItem.scrapedValue>
328 <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) >
329 <#assign BAL = sItem.scrapedValue>
330 </#if>
331 <#if (APR?has_content && AMF?has_content && BAL?has_content)>
332 <#break>
333 </#if>
334 </#list>
335 </#if>
336 </#if>
337 <#if ameriprise>
338 <#assign rollover_text = partnerName + " " + product + " " + " Card">
339 <#else>
340 <#assign rollover_text = partnerName + " " + product + " " + " Credit Card">
341 </#if>
342 <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${rollover_text!''}">
343 <div class="tag-container">
344 <div class="tag-corner">
345 <div class="tag-label">NEW</div>
346 </div>
347 </div>
348 <div class="consumer-card-heading hide-desktop">
349 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
350 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
351 </div>
352 <div class="jn-consumer-card-image">
353 <img src="${cardArtImage!''}" alt="${rollover_text!''}" class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
354
355 <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) >
356 <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p>
357 </#if>
358 <#if (hasBalanceTransferCalculator)>
359 <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>
360 </#if>
361 </div>
362
363 <div class="jn-consumer-card-info">
364 <div class="consumer-card-heading hide-mobile">
365 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
366 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
367 </div>
368 <div class="jn-additional">
369 <ul class="${fib.offerType}">
370 <#if !ameriprise>
371 <#if (fib.offerType == "104")>
372 <li class="${fib.offerType}">
373 <p>
374 <strong>APR for Purchases: </strong>
375 ${APR!''}
376 <a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
377 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
378 </a>
379 </p>
380 </li>
381 <li class="${fib.offerType}">
382 <p>
383 <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong>
384 ${BAL!''}
385 <a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
386 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
387 </a>
388 </p>
389 </li>
390 <#else>
391 <li class="${fib.offerType}">
392 <p>
393 <#if (fib.offerType == "147" || fib.offerType== "115" || fib.offerType== "138" || fib.offerType== "154")>
394 <strong>APR for Purchases and Balance Transfers: </strong>
395 <#elseif (fib.offerType== "101")>
396 <strong>INTRO APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
397 <#else>
398 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
399 </#if>
400
401 ${APR!''}
402 <a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
403 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
404 </a>
405 </p>
406 </li>
407 </#if>
408 </#if>
409 <#if isEmployee && consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getData()?has_content>
410 <#if consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings()?has_content>
411 <#list consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings() as marketingInfo>
412 <li>${marketingInfo.getData()}</li>
413 </#list>
414 </#if>
415 <#elseif consumerTitle.getSiblings()[cardIndex].additionalInfo.getData()?has_content>
416 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
417 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
418 <li>${marketingInfo.getData()}</li>
419 </#list>
420 </#if>
421 </#if>
422 <#if !ameriprise>
423 <li>
424 <p>
425 Annual Fee: ${AMF!''}
426 <a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
427 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
428 </a>
429 </p>
430 </li>
431 </#if>
432 </ul>
433 </div>
434 <ul class="actions">
435 <li>
436 <#if (useprcaValue == "1")>
437 <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}&applicationType=${applicationType}" method="post" class="BAAForm" id="BAAForm">
438 <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
439 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>
440 <a
441 class="applyNowLink apply-now-button"
442 href="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}&applicationType=${applicationType}"
443 data-button-name="apply-now-link"
444 data-product-name="${productName}"
445 >
446 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span>
447 </a>
448 </form>
449 <#else>
450 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}" method="post" class="BAAForm" id="BAAForm">
451 <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
452 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>
453 <a
454 class="applyNowLink apply-now-button"
455 href="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}"
456 data-button-name="apply-now-link"
457 data-product-name="${productName}"
458 >
459 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span>
460 </a>
461 </form>
462 </#if>
463 </li>
464 <li>
465 <#if ameriprise>
466 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc_used}${ecidExt}">
467 ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span>
468 </a>
469 <#else>
470 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}">
471 ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span>
472 </a>
473 </#if>
474 </li>
475 </ul>
476 </div>
477 </div>
478 </#list>
479 </div>
480 </div>
481 </#if>
482 <#if ((businessCards?size > 0) && (isEmployee == false))>
483 <div class="tab-more-wrapper">
484 <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products">
485
486 <#list businessCards as fib>
487 <#assign useprcaValue = fib.useprca!"">
488 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
489 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
490 <#switch fib.offerType>
491 <#case "144">
492 <#assign productName = "smart-business-rewards">
493 <#assign product="Smart Business Rewards">
494 <#assign cardIndex = 8>
495 <#break>
496 <#case "128">
497 <#assign productName = "business-cash-preferred">
498 <#assign product="Business Cash Preferred">
499 <#assign cardIndex = 6>
500 <#break>
501 <#case "143">
502 <#assign productName = "business-real-rewards">
503 <#assign product="Business Real Rewards">
504 <#assign cardIndex = 9>
505 <#break>
506 <#case "121">
507 <#assign productName = "business-platinum2103">
508 <#assign product="Business Card">
509 <#assign cardIndex = 7>
510 <#break>
511 <#default>
512 </#switch>
513 <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards -->
514 <#assign offerId = fib.saaofferId>
515
516 <#assign newTag = "">
517 <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")>
518 <#assign newTag = "with-new-tag">
519 </#if>
520 <#assign APR="">
521 <#assign AMF="">
522 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ fib.sourceCode)>
523 <#if (scrapedData?size > 0)>
524 <#list scrapedData as sItem>
525 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
526 <#assign APR = sItem.scrapedValue>
527 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
528 <#assign AMF = sItem.scrapedValue>
529 </#if>
530 <#if (APR?has_content && AMF?has_content)>
531 <#break>
532 </#if>
533 </#list>
534 </#if>
535
536 <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card">
537 <div class="tag-container">
538 <div class="tag-corner">
539 <div class="tag-label">NEW</div>
540 </div>
541 </div>
542 <div class="consumer-card-heading hide-desktop">
543 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
544 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
545 </div>
546 <div class="jn-consumer-card-image">
547 <img src="${cardArtImage!''}" alt="${rollover_text!''}" class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
548
549 <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) >
550 <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p>
551 </#if>
552 </div>
553
554 <div class="jn-consumer-card-info">
555 <div class="consumer-card-heading hide-mobile">
556 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
557 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
558 </div>
559 <div class="jn-additional">
560 <ul>
561 <li class="${fib.offerType}">
562 <p>
563 <#if (fib.offerType == "144")>
564 <strong>APR for Purchases and Balance Transfers: </strong>
565 <#else>
566 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
567 </#if>
568
569 ${APR!''}
570 <a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
571 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
572 </a>
573 </p>
574 </li>
575 <#if isEmployee && consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getData()?has_content>
576 <#if consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings()?has_content>
577 <#list consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings() as marketingInfo>
578 <li>${marketingInfo.getData()}</li>
579 </#list>
580 </#if>
581 <#elseif consumerTitle.getSiblings()[cardIndex].additionalInfo.getData()?has_content>
582 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
583 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
584 <li>${marketingInfo.getData()}</li>
585 </#list>
586 </#if>
587 </#if>
588 <li>
589 <p>
590 Annual Fee: ${AMF!''} <a
591 href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
592 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
593 </a>
594 </p>
595 </li>
596 </ul>
597 </div>
598 <ul class="actions">
599 <li>
600 <#if (useprcaValue == "1")>
601 <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}&applicationType=${applicationType}" method="post" class="BAAForm">
602 <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
603 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>
604 <a
605 class="applyNowLink apply-now-button"
606 href="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}&applicationType=${applicationType}"
607 data-button-name="apply-now-link"
608 data-product-name="${productName}"
609 >
610 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}
611 <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span>
612 </a>
613 </form>
614 <#else>
615 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}" method="post" class="BAAForm">
616 <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
617 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>
618 <a
619 class="applyNowLink apply-now-button"
620 href="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}"
621 data-button-name="apply-now-link"
622 data-product-name="${productName}"
623 >
624 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}
625 <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span>
626 </a>
627 </form>
628 </#if>
629
630
631 </li>
632 <li>
633 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}">
634 ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span>
635 </a>
636 </li>
637 </ul>
638 </div>
639 </div>
640
641 </#list>
642
643 </div>
644 </div>
645 </#if>
646 </div>
647 <script>
648 var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]';
649 var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]';
650 $(document).ready(function () {
651 var banker_code = "${bCode!''}";
652 var tabs=$('.tab-nav');
653 var slideDiv = $('.jn-tab-content.active');
654 var screenWidthMobile = 768;
655 var screenWidth = window.innerWidth;
656
657 if (tabs.length == 1) {
658 if ($(consumerSelector).length > 0) {
659 if(banker_code && (banker_code.indexOf("amp") == 0) && (banker_code.length > 6)) {
660 $("nav.jn-primary-nav").hide();
661 changeCardLayout(consumerSelector);
662 createMetaTag("consumer");
663 } else {
664 hideHeroAndDisclaimer('business');
665 showHeroAndDisclaimer('consumer');
666 changeCardLayout(consumerSelector);
667 renumberFootnote("consumer");
668 createMetaTag("consumer");
669 }
670 }
671 if ($(businessSelector).length > 0) {
672 $(businessSelector).addClass('active');
673 hideHeroAndDisclaimer('consumer');
674 showHeroAndDisclaimer('business');
675 changeCardLayout(businessSelector);
676 renumberFootnote("business");
677 createMetaTag("business");
678 }
679 }
680 if (tabs.length == 2) {
681 renumberFootnote("consumer");
682 renumberFootnote("business");
683 createMetaTag("consumer");
684 if ($(consumerSelector + ' .jn-consumer-item').length < 3) {
685 changeCardLayout(consumerSelector);
686 }
687 if ($(businessSelector + ' .jn-consumer-item').length < 3) {
688 changeCardLayout(businessSelector);
689 }
690
691 var tabsNav = document.querySelectorAll('.tab-nav');
692 togglePrimaryNav(tabsNav);
693
694 if(window.location.href.indexOf('#business') > -1 ) {
695 $(consumerSelector).removeClass('active');
696 $(businessSelector).addClass('active');
697 $('#consumerTab').removeClass('active');
698 $('#businessTab').addClass('active');
699 hideHeroAndDisclaimer('consumer');
700 showHeroAndDisclaimer('business');
701 changeCardLayout(businessSelector);
702 renumberFootnote("business");
703 createMetaTag("business");
704
705 $(tabs).click(function(){
706 if ($(this).attr('id') === "consumerTab") {
707 var newUrl = window.location.toString();
708 window.location = newUrl.replace(/#business/, '#consumer');
709 }
710 if ($(this).attr('id') === "businessTab") {
711 var url = window.location.toString();
712 window.location = url.replace(/#consumer/, '#business');
713 }
714 });
715 }
716 }
717
718 });
719 // Primary Nav function
720
721 function togglePrimaryNav(elem) {
722 for (var i = 0; i < elem.length; i++) {
723 elem[i].addEventListener("click", function(e) {
724
725 var current = this,
726 allSections = document.querySelectorAll('[data-id]'),
727 section = document.querySelector("[data-id='"+ current.id +"']");
728
729 for (var a = 0; a < allSections.length; a++) {
730 allSections[a].classList.remove('active');
731 }
732 for (var c = 0; c < elem.length; c++) {
733 if (current != elem[c]) {
734 elem[c].classList.remove('active');
735 } else {
736 current.classList.add('active');
737 section.classList.add('active');
738 hideHeroAndDisclaimer('consumer');
739 hideHeroAndDisclaimer('business');
740 if(current.getAttribute('id') === "consumerTab"){
741 showHeroAndDisclaimer('consumer');
742 } else if(current.getAttribute('id') === "businessTab"){
743 showHeroAndDisclaimer('business');
744 }
745 }
746 }
747 e.preventDefault();
748 });
749 }
750 }
751
752 function renumberFootnote(type) {
753 var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]';
754 var disclaimerSelector = '.tier1-disclaimer-landing-' + type;
755 var heroSelector = '.tier1-hero-landing-' + type;
756 var numOfFootnote = $(disclaimerSelector + ' sup').length;
757 var showList = [];
758 var hideList=[];
759 for (var i = 1; i <= numOfFootnote; i++) {
760 var cssClass="tag-" + i;
761 if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) {
762 showList.push(i);
763 } else {
764 hideList.push(i);
765 }
766 }
767 /*
768 for (var i = 1; i < showList.length + 1; i++) {
769 if(showList[i-1] != i) {
770 var className="tag-" + showList[i-1];
771 $(heroSelector).find("." + className).html(i);
772 // $(discriptionSelector).find("." + className).html(i);
773 $(disclaimerSelector).find("." + className).html(i);
774 }
775 }
776 */
777 for (var i = 0; i <hideList.length; i++) {
778 var cname="tag-" + hideList[i];
779 $(disclaimerSelector).find("." + cname).parent().hide();
780 }
781 }
782
783 function changeCardLayout(cssSelector) {
784 var numOfCards = $(cssSelector + ' .jn-consumer-item').length;
785 if(numOfCards == 1) {
786 $(cssSelector).addClass('one-card');
787 } else if (numOfCards == 2) {
788 $(cssSelector).addClass('two-card');
789 }
790 }
791 function hideHeroAndDisclaimer(type) {
792 try {
793 document.querySelector('.tier1-hero-landing-'+ type).classList.remove('show');
794 document.querySelector('.tier1-hero-landing-'+ type).classList.add('hide');
795 } catch (e) {
796 console.log(e);
797 }
798
799 try {
800 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('show');
801 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('hide');
802 } catch (e) {
803 console.log(e);
804 }
805
806 }
807 function showHeroAndDisclaimer(type) {
808 try {
809 document.querySelector('.tier1-hero-landing-'+ type).classList.add('show');
810 document.querySelector('.tier1-hero-landing-'+ type).classList.remove('hide');
811 } catch (e) {
812 console.log(e);
813 }
814
815 try {
816 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('show');
817 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('hide');
818 } catch (e) {
819 console.log(e);
820 }
821
822 }
823 function createMetaTag(type) {
824 var partnerName = "${partnerName!0}";
825 var product_name = $('.jn-hero-container .jn-button').data('product-name');
826 var metaDesc = "";
827 if (type == "consumer") {
828 if(location.pathname.indexOf("11t1m") != -1) {
829 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."
830 } else {
831 if(product_name == "consumer-platinum2103") {
832 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.";
833 } else if(product_name == "real-rewards") {
834 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase.";
835 } else if(product_name == "secured") {
836 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
837 } else if(product_name == "max-cash") {
838 if('${isEmployee?string("yes", "no")}' == "yes") {
839 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $200 Bonus and 5% cash back on the two categories you select.";
840 } else {
841 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select.";
842 }
843 }
844 }
845
846 } else if (type == "business") {
847 if(product_name == "business-cashback") {
848 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
849 } else if(product_name == "business-real-rewards") {
850 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on.";
851 } else if(product_name == "business-visa") {
852 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
853 } else if(product_name == "smart-business-rewards") {
854 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.";
855 }
856 }
857 var m = document.createElement('meta');
858 m.name = 'description';
859 m.content = metaDesc;
860 document.head.appendChild(m);
861 }
862 function goToByScroll(id) {
863 var element = document.getElementById(id);
864 element.scrollIntoView(true);
865 }
866
867 </script>
868 <script>
869 var reportingData = window.reportingData || {};
870 document.addEventListener('DOMContentLoaded', function() {
871 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
872 var hostName = location.hostname;
873 function getDomainFromHostname(hostname) {
874 var parts = hostname.split('.');
875 return parts.length === 3 ? parts[1] : parts[0];
876 }
877 var domain = getDomainFromHostname(hostName);
878 var partnerName = "${partnerName!0}";
879 var ameriprise = '${ameriprise?string("yes", "no")}';
880 var locationCode = "${rLC!lc}";
881 var eidAmp = "";
882 var heroCardImgs = document.querySelectorAll('.jn-consumer-card-image img, .cardArtImg img');
883 for (var index = 0; index < heroCardImgs.length; index++) {
884 var heroCardImg = heroCardImgs[index];
885 var heroCardSrc = heroCardImg.getAttribute("src");
886 if(heroCardSrc != "") {
887 resizeImg(heroCardImg);
888 }
889 }
890 if (ameriprise == "yes") {
891 var bankercode_amp = '${bCode}';
892 eidAmp = bankercode_amp.substring(3);
893 locationCode ="";
894 document.title = "Ameriprise Financial Credit Card Overview Page";
895 } else {
896 document.title = partnerName + " Credit Card Index Page";
897 }
898
899 var lc = '${lc!0}';
900
901 var regex = /\d+/g;
902 var bdNumber = "${bPhone!''}";
903 var phoneNum = bdNumber.match(regex);
904 var areaCode = "";
905 var exchangeCode = "";
906 var num = "";
907 if(phoneNum != null) {
908 phoneNum = phoneNum.join("");
909 areaCode = phoneNum.substring(0,3);
910 exchangeCode = phoneNum.substring(3,6);
911 num = phoneNum.substring(6,10);
912 }
913
914 /* update SiteCatalyst data object */
915 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
916 reportingData.page_type = 'product';
917 reportingData.site_section = 'credit cards';
918 reportingData.platform = 'microsite';
919 reportingData.campaign_id = '${campaignId}';
920 reportingData.location_code = '${rLC!0}';
921 reportingData.partner_name = "${partnerName}";
922 reportingData.product = 'All Cards';
923 reportingData.text_to_apply_source = '${text_to_apply_source}';
924 reportingData.visitor_type = 'prospect';
925 reportingData.Banker_id = '${boeid}';
926 reportingData.Banker_code = '${bCode}';
927
928
929 /* SiteCatalyst pageView tracking */
930 AUI().ready(function() {
931 if (window.publisherFW) {
932 window.publisherFW.publishEvent("pageView", reportingData);
933 }
934 });
935
936 $('.jn-button').removeAttr('disabled');
937 $('.jn-button').removeClass('jn-disabled');
938
939 jQuery('.applyNowLink').on('click', function(e) {
940 $(this).closest('.BAAForm').submit();
941 const bankerId = '${boeid}';
942 const employeeId = "";
943 let visitorId = bankerId;
944
945 if('${isEmployee?string("yes", "no")}' == "yes") {
946 visitorId = employeeId;
947 }
948 const htmlElementName = e.target.nodeName;
949 const isButton = (htmlElementName ==='BUTTON');
950 // gets href of clicked anchor tag
951 let href = e.target.href;
952
953 // get action url of form submit button
954 if(isButton) {
955 href = document.getElementById('BAAForm').action;
956 }
957
958 const urlParams = new URLSearchParams(href);
959 let offerId = "";
960
961 if(urlParams.has('offerid')) {
962 offerId = urlParams.get('offerid');
963 }
964
965 if(urlParams.has('offerId')) {
966 offerId = urlParams.get('offerId');
967 }
968
969 window.dataLayer.push({
970 'event' : 'apply_payload',
971 'location_code': locationCode,
972 'banker_code': '${bCode}',
973 'offer_id': offerId,
974 'visitor_id': visitorId,
975 });
976 return false;
977 });
978 jQuery(".BAAForm").on("submit", function(e){
979 e.preventDefault();
980 var xmlData;
981 if('${isEmployee?string("yes", "no")}' == "yes") {
982 }
983 if(ameriprise == "yes") {
984 xmlData = '<?xml version="1.0"?>'+
985 "<prefillData>"+
986 "<versionNumber>1.0</versionNumber>"+
987 "<applicationData>"+
988 "<referral>" +
989 "<employeeId>" + eidAmp + "</employeeId>" +
990 "<storeNumber>"+"${bName!'0'}"+"</storeNumber>"+
991 "<divisionNumber></divisionNumber>"+
992 "</referral>" +
993 "<bankerInformation>"+
994 "<locationCode>" + locationCode + "</locationCode>"+
995 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
996 "<employeeID>${boeid!0}</employeeID>"+
997 "<name>" +
998 "<first>${bFName!'0'}</first>" +
999 "<last>${bLName!'0'}</last>" +
1000 "</name>"+
1001 "<phone>"+
1002 "<areaCode>"+areaCode+"</areaCode>"+
1003 "<exchange>"+exchangeCode+"</exchange>"+
1004 "<number>"+num+"</number>"+
1005 "</phone>"+
1006 "</bankerInformation>"+
1007 "</applicationData>"+
1008 "</prefillData>"
1009 } else if ('${isEmployee?string("yes", "no")}' == "yes") {
1010 xmlData = '<?xml version="1.0"?>'+
1011 "<prefillData>"+
1012 "<versionNumber>1.0</versionNumber>"+
1013 "<applicationData>"+
1014 "<bankerInformation>"+
1015 "<employeeFullName>Employee Product</employeeFullName>"+
1016 "<employeeId>EMPPROD</employeeId>"+
1017 "<employeePhoneNumber></employeePhoneNumber>"+
1018 "<locationCode>" + locationCode + "</locationCode>"+
1019 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
1020 "<originatingBranchId></originatingBranchId>"+
1021 "<name>" +
1022 "<first>${bFName!'0'}</first>" +
1023 "<last>${bLName!'0'}</last>" +
1024 "</name>"+
1025 "<phone>"+
1026 "<areaCode>" + areaCode + "</areaCode>"+
1027 "<exchange>" + exchangeCode + "</exchange>"+
1028 "<number>" + num + "</number>"+
1029 "</phone>"+
1030 "</bankerInformation>"+
1031 "<referral>" +
1032 "<divisionNumber></divisionNumber>" +
1033 "<partnerLocationID>" + locationCode + "</partnerLocationID>" +
1034 "<referralId>EMPPROD</referralId>" +
1035 "</referral>" +
1036 "</applicationData>"+
1037 "</prefillData>";
1038 } else {
1039 xmlData = '<?xml version="1.0"?>'+
1040 "<prefillData>"+
1041 "<versionNumber>1.0</versionNumber>"+
1042 "<applicationData>"+
1043 "<bankerInformation>"+
1044 "<locationCode>" + locationCode + "</locationCode>"+
1045 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
1046 "<employeeID>${boeid!0}</employeeID>"+
1047 "<name>" +
1048 "<first>${bFName!'0'}</first>" +
1049 "<last>${bLName!'0'}</last>" +
1050 "</name>"+
1051 "<phone>"+
1052 "<areaCode>"+areaCode+"</areaCode>"+
1053 "<exchange>"+exchangeCode+"</exchange>"+
1054 "<number>"+num+"</number>"+
1055 "</phone>"+
1056 "</bankerInformation>"+
1057 "</applicationData>"+
1058 "</prefillData>"
1059 }
1060 console.log("useprcaValue---->"+${useprcaValue})
1061 if('${useprcaValue}' =='1'){
1062 if('${isEmployee?string("yes", "no")}' == "yes"){
1063 var employeeFullName = "${fName!'0'}" + ' ' + "${lName!'0'}";
1064 var firstName = "${fName!'0'}".trim();
1065 var lastName = "${lName!'0'}".trim();
1066 var fullName = employeeFullName.trim();
1067
1068 if (fullName.length <= 19) {
1069 employeeFullName = fullName;
1070 } else if (firstName.charAt(0) + ' ' + lastName.length <= 19) {
1071 employeeFullName = firstName.charAt(0) + ' ' + lastName;
1072 } else {
1073 employeeFullName = firstName.charAt(0) + ' ' + lastName.substring(0, 17);
1074 }
1075 var applicationJsonData = {
1076 "prefillData": {
1077 "versionNumber": "1.0",
1078 "applicationData": {
1079 "bankerInformation": {
1080 "locationCode": locationCode,
1081 "originatingBranchId": "${bName!'0'}",
1082 "employeeId": "EMPPROD",
1083 "employeeFullName": "Employee Product",
1084 "employeePhoneNumber": phoneNum
1085 }
1086 }
1087 }
1088 };
1089 }else{
1090 var employeeFullName = "${fName!'0'}" + ' ' + "${lName!'0'}";
1091 var firstName = "${fName!'0'}".trim();
1092 var lastName = "${lName!'0'}".trim();
1093 var fullName = employeeFullName.trim();
1094
1095 if (fullName.length <= 19) {
1096 employeeFullName = fullName;
1097 } else if (firstName.charAt(0) + ' ' + lastName.length <= 19) {
1098 employeeFullName = firstName.charAt(0) + ' ' + lastName;
1099 } else {
1100 employeeFullName = firstName.charAt(0) + ' ' + lastName.substring(0, 17);
1101 }
1102 var applicationJsonData = {
1103 "prefillData": {
1104 "versionNumber": "1.0",
1105 "applicationData": {
1106 "bankerInformation": {
1107 "locationCode": locationCode,
1108 "originatingBranchId": "${bName!'0'}",
1109 "employeeId": "${boeid!0}",
1110 "employeeFullName": employeeFullName,
1111 "employeePhoneNumber": phoneNum
1112 }
1113 }
1114 }
1115 };
1116 }
1117 var jsonData = JSON.stringify(applicationJsonData);
1118 $(this).children(".appDataBAA").val(jsonData);
1119 }else{
1120 $(this).children(".appDataBAA").val(xmlData);
1121 }
1122
1123 var buttonName = $(this).find(".apply-now-button").data("button-name");
1124 var productName = $(this).find(".apply-now-button").data("product-name");
1125 /* SiteCatalyst onClick tracking */
1126 reportingData.apply_button = buttonName;
1127 reportingData.product = productName;
1128
1129 if (window.publisherFW) {
1130 window.publisherFW.publishEvent("onClick", reportingData);
1131 }
1132 var paramString = '${bCode}' + "&" + xmlData + "&" + '${htmlUtil.escapeURL(htmlUtil.escapeJS(url))}';
1133 /* CRC service call */
1134 Liferay.Service(
1135 '/crc-utilities-portlet#crcremote/make-call',
1136 {
1137 storedProcedure: 'crcDDCTextApplyLog',
1138 parameters: paramString
1139 },
1140 function(obj){
1141 }
1142 );
1143
1144 this.submit();
1145 });
1146 });
1147 function resizeImg(img) {
1148 img.addEventListener("load", function() {
1149 var cardImgWidth = img.width;
1150 var cardImgHeight = img.height;
1151 if(cardImgWidth > cardImgHeight) {
1152 img.style.width = "285px";
1153 } else {
1154 img.style.width = "150px";
1155 }
1156 });
1157 }
1158 </script>
1159
1160 </#if>
1161 </#if>
1162</#if>
处理模板时发生错误。
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10154#10192#153411744" 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 "10154#10192#153411744" 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 <#assign isEmployee = false>
41
42 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
43 <#if fiData?first?has_content>
44 <#assign fi = fiData?first>
45 <#if fi.projectType == "emp">
46 <#assign isEmployee = true>
47 </#if>
48 </#if>
49
50 <#assign fultonBankpbu = "0727491">
51 <#if pbu == fultonBankpbu>
52 <style>
53 #hideFultonInfo {
54 display: none;
55 }
56 </style>
57 </#if>
58
59
60 <#if (fiCardsData?size > 0) >
61 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
62
63 <#if (cardProvider?size > 0)>
64 <#-- This will be V for visa or M for mastercard. -->
65 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
66 <#else>
67 <script>
68 console.log("No card provider(Visa/Master Card) found for disclaimer");
69 </script>
70 </#if>
71
72 <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer">
73 <div class="disclaimer" >
74 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerAssociatedBank.getData()?has_content>
75 <#if isEmployee && employeeDisclaimerAssociatedBank?has_content>
76 ${employeeDisclaimerAssociatedBank.getData()}
77 <#else>
78 ${disclaimerAssociatedBank.getData()}
79 </#if>
80 <#else>
81 <#if isEmployee && employeeDisclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
82 ${employeeDisclaimersVisa.getData()}
83 <#elseif isEmployee && employeeDisclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
84 ${employeeDisclaimersMasterCard.getData()}>
85 <#elseif disclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
86 ${disclaimersVisa.getData()}
87 <#elseif disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
88 ${disclaimersMasterCard.getData()}
89 </#if>
90 </#if>
91 </div>
92 </div>
93 </#if>
94<#else>
95 <script>
96 console.log("No lc for disclaimer");
97 </script>
98</#if>
处理模板时发生错误。
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10154#10192#153411744" 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 "10154#10192#153411744" 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 <#assign isEmployee = false>
41
42 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
43 <#if fiData?first?has_content>
44 <#assign fi = fiData?first>
45 <#if fi.projectType == "emp">
46 <#assign isEmployee = true>
47 </#if>
48 </#if>
49
50 <#assign fultonBankpbu = "0727491">
51 <#if pbu == fultonBankpbu>
52 <style>
53 #hideFultonInfo {
54 display: none;
55 }
56 </style>
57 </#if>
58
59
60 <#if (fiCardsData?size > 0) >
61 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
62
63 <#if (cardProvider?size > 0)>
64 <#-- This will be V for visa or M for mastercard. -->
65 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
66 <#else>
67 <script>
68 console.log("No card provider(Visa/Master Card) found for disclaimer");
69 </script>
70 </#if>
71
72 <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer">
73 <div class="disclaimer" >
74 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerAssociatedBank.getData()?has_content>
75 <#if isEmployee && employeeDisclaimerAssociatedBank?has_content>
76 ${employeeDisclaimerAssociatedBank.getData()}
77 <#else>
78 ${disclaimerAssociatedBank.getData()}
79 </#if>
80 <#else>
81 <#if isEmployee && employeeDisclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
82 ${employeeDisclaimersVisa.getData()}
83 <#elseif isEmployee && employeeDisclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
84 ${employeeDisclaimersMasterCard.getData()}>
85 <#elseif disclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
86 ${disclaimersVisa.getData()}
87 <#elseif disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
88 ${disclaimersMasterCard.getData()}
89 </#if>
90 </#if>
91 </div>
92 </div>
93 </#if>
94<#else>
95 <script>
96 console.log("No lc for disclaimer");
97 </script>
98</#if>
处理模板时发生错误。
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10154#10192#153411747" 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 "10154#10192#153411747" 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>