CINXE.COM

<!doctype html><!--[if IE 8]><html data-19ax5a9jf="dingo" lang="en-us" class="a-no-js a-lt-ie10 a-lt-ie9 a-ie8"><![endif]--><!--[if IE 9]><html data-19ax5a9jf="dingo" lang="en-us" class="a-no-js a-lt-ie10 a-ie9"><![endif]--><!--[if !(IE 8)&!(IE 9)]><!--><html data-19ax5a9jf="dingo" lang="en-us" class="a-no-js"><!--<![endif]--><!-- sp:feature:head-start --> <head><script>var aPageStart = (new Date()).getTime();</script><meta charset="utf-8"/> <!-- sp:end-feature:head-start --> <!-- sp:feature:csm:head-open-part1 --> <script type='text/javascript'>var ue_t0=ue_t0||+new Date();</script> <!-- sp:end-feature:csm:head-open-part1 --> <!-- sp:feature:cs-optimization --> <meta http-equiv='x-dns-prefetch-control' content='on'> <link rel="dns-prefetch" href="https://images-na.ssl-images-amazon.com"> <link rel="dns-prefetch" href="https://m.media-amazon.com"> <link rel="dns-prefetch" href="https://completion.amazon.com"> <!-- sp:end-feature:cs-optimization --> <!-- sp:feature:csm:head-open-part2 --> <script type='text/javascript'> window.ue_ihb = (window.ue_ihb || window.ueinit || 0) + 1; if (window.ue_ihb === 1) { var ue_csm = window, ue_hob = +new Date(); (function(d){var e=d.ue=d.ue||{},f=Date.now||function(){return+new Date};e.d=function(b){return f()-(b?0:d.ue_t0)};e.stub=function(b,a){if(!b[a]){var c=[];b[a]=function(){c.push([c.slice.call(arguments),e.d(),d.ue_id])};b[a].replay=function(b){for(var a;a=c.shift();)b(a[0],a[1],a[2])};b[a].isStub=1}};e.exec=function(b,a){return function(){try{return b.apply(this,arguments)}catch(c){ueLogError(c,{attribution:a||"undefined",logLevel:"WARN"})}}}})(ue_csm); var ue_err_chan = 'jserr-rw'; (function(d,e){function h(f,b){if(!(a.ec>a.mxe)&&f){a.ter.push(f);b=b||{};var c=f.logLevel||b.logLevel;c&&c!==k&&c!==m&&c!==n&&c!==p||a.ec++;c&&c!=k||a.ecf++;b.pageURL=""+(e.location?e.location.href:"");b.logLevel=c;b.attribution=f.attribution||b.attribution;a.erl.push({ex:f,info:b})}}function l(a,b,c,e,g){d.ueLogError({m:a,f:b,l:c,c:""+e,err:g,fromOnError:1,args:arguments},g?{attribution:g.attribution,logLevel:g.logLevel}:void 0);return!1}var k="FATAL",m="ERROR",n="WARN",p="DOWNGRADED",a={ec:0,ecf:0, pec:0,ts:0,erl:[],ter:[],buffer:[],mxe:50,startTimer:function(){a.ts++;setInterval(function(){d.ue&&a.pec<a.ec&&d.uex("at");a.pec=a.ec},1E4)}};l.skipTrace=1;h.skipTrace=1;h.isStub=1;d.ueLogError=h;d.ue_err=a;e.onerror=l})(ue_csm,window); var ue_id = '8CD8WFQGA8E5PSWF02S4', ue_url = '/rd/uedata', ue_navtiming = 1, ue_mid = 'ATVPDKIKX0DER', ue_sid = '146-2461427-5656742', ue_sn = 'www.amazon.com', ue_furl = 'fls-na.amazon.com', ue_surl = 'https://unagi-na.amazon.com/1/events/com.amazon.csm.nexusclient.prod', ue_int = 0, ue_fcsn = 1, ue_urt = 3, ue_rpl_ns = 'cel-rpl', ue_ddq = 1, ue_fpf = '//fls-na.amazon.com/1/batch/1/OP/ATVPDKIKX0DER:146-2461427-5656742:8CD8WFQGA8E5PSWF02S4$uedata=s:', ue_sbuimp = 1, ue_ibft = 0, ue_sswmts = 0, ue_jsmtf = 0, ue_fnt = 0, ue_lpsi = 6000, ue_no_counters = 0, ue_lob = '1', ue_sjslob = 0, ue_dsbl_cel = 1, ue_swi = 1; var ue_viz=function(){(function(b,f,d){function g(){return(!(p in d)||0<d[p])&&(!(q in d)||0<d[q])}function h(c){if(b.ue.viz.length<w&&!r){var a=c.type;c=c.originalEvent;/^focus./.test(a)&&c&&(c.toElement||c.fromElement||c.relatedTarget)||(a=g()?f[s]||("blur"==a||"focusout"==a?t:u):t,b.ue.viz.push(a+":"+(+new Date-b.ue.t0)),a==u&&(b.ue.isl&&x("at"),r=1))}}for(var r=0,x=b.uex,a,k,l,s,v=["","webkit","o","ms","moz"],e=0,m=1,u="visible",t="hidden",p="innerWidth",q="innerHeight",w=20,n=0;n<v.length&&!e;n++)if(a= v[n],k=(a?a+"H":"h")+"idden",e="boolean"==typeof f[k])l=a+"visibilitychange",s=(a?a+"V":"v")+"isibilityState";h({});e&&f.addEventListener(l,h,0);m=g()?1:0;d.addEventListener("resize",function(){var a=g()?1:0;m!==a&&(m=a,h({}))},{passive:!0});b.ue&&e&&(b.ue.pageViz={event:l,propHid:k})})(ue_csm,ue_csm.document,ue_csm.window)}; (function(d,h,N){function H(a){return a&&a.replace&&a.replace(/^\s+|\s+$/g,"")}function u(a){return"undefined"===typeof a}function B(a,b){for(var c in b)b[v](c)&&(a[c]=b[c])}function I(a){try{var b=N.cookie.match(RegExp("(^| )"+a+"=([^;]+)"));if(b)return b[2].trim()}catch(c){}}function O(k,b,c){var q=(x||{}).type;if("device"!==c||2!==q&&1!==q)k&&(d.ue_id=a.id=a.rid=k,w&&(w=w.replace(/((.*?:){2})(\w+)/,function(a,b){return b+k})),D&&(e("id",D,k),D=0)),b&&(w&&(w=w.replace(/(.*?:)(\w|-)+/,function(a, c){return c+b})),d.ue_sid=b),c&&a.tag("page-source:"+c),d.ue_fpf=w}function P(){var a={};return function(b){b&&(a[b]=1);b=[];for(var c in a)a[v](c)&&b.push(c);return b}}function y(d,b,c,q){q=q||+new E;var g,m;if(b||u(c)){if(d)for(m in g=b?e("t",b)||e("t",b,{}):a.t,g[d]=q,c)c[v](m)&&e(m,b,c[m]);return q}}function e(d,b,c){var e=b&&b!=a.id?a.sc[b]:a;e||(e=a.sc[b]={});"id"===d&&c&&(Q=1);return e[d]=c||e[d]}function R(d,b,c,e,g){c="on"+c;var m=b[c];"function"===typeof m?d&&(a.h[d]=m):m=function(){};b[c]= function(a){g?(e(a),m(a)):(m(a),e(a))};b[c]&&(b[c].isUeh=1)}function S(k,b,c,q){function p(b,c){var d=[b],f=0,g={},m,h;c?(d.push("m=1"),g[c]=1):g=a.sc;for(h in g)if(g[v](h)){var q=e("wb",h),p=e("t",h)||{},n=e("t0",h)||a.t0,l;if(c||2==q){q=q?f++:"";d.push("sc"+q+"="+h);for(l in p)u(p[l])||null===p[l]||d.push(l+q+"="+(p[l]-n));d.push("t"+q+"="+p[k]);if(e("ctb",h)||e("wb",h))m=1}}!J&&m&&d.push("ctb=1");return d.join("&")}function m(b,c,f,e,g){if(b){var k=d.ue_err;d.ue_url&&!e&&!g&&b&&0<b.length&&(e= new Image,a.iel.push(e),e.src=b,a.count&&a.count("postbackImageSize",b.length));w?(g=h.encodeURIComponent)&&b&&(e=new Image,b=""+d.ue_fpf+g(b)+":"+(+new E-d.ue_t0),a.iel.push(e),e.src=b):a.log&&(a.log(b,"uedata",{n:1}),a.ielf.push(b));k&&!k.ts&&k.startTimer();a.b&&(k=a.b,a.b="",m(k,c,f,1))}}function A(b){var c=x?x.type:F,d=2==c||a.isBFonMshop,c=c&&!d,f=a.bfini;if(!Q||a.isBFCache)f&&1<f&&(b+="&bfform=1",c||(a.isBFT=f-1)),d&&(b+="&bfnt=1",a.isBFT=a.isBFT||1),a.ssw&&a.isBFT&&(a.isBFonMshop&&(a.isNRBF= 0),u(a.isNRBF)&&(d=a.ssw(a.oid),d.e||u(d.val)||(a.isNRBF=1<d.val?0:1)),u(a.isNRBF)||(b+="&nrbf="+a.isNRBF)),a.isBFT&&!a.isNRBF&&(b+="&bft="+a.isBFT);return b}if(!a.paused&&(b||u(c))){for(var l in c)c[v](l)&&e(l,b,c[l]);a.isBFonMshop||y("pc",b,c);l="ld"===k&&b&&e("wb",b);var s=e("id",b)||a.id;l||s===a.oid||(D=b,ba(s,(e("t",b)||{}).tc||+e("t0",b),+e("t0",b)));var s=e("id",b)||a.id,t=e("id2",b),f=a.url+"?"+k+"&v="+a.v+"&id="+s,J=e("ctb",b)||e("wb",b),z;J&&(f+="&ctb="+J);t&&(f+="&id2="+t);1<d.ueinit&& (f+="&ic="+d.ueinit);if(!("ld"!=k&&"ul"!=k||b&&b!=s)){if("ld"==k){try{h[K]&&h[K].isUeh&&(h[K]=null)}catch(I){}if(h.chrome)for(t=0;t<L.length;t++)T(G,L[t]);(t=N.ue_backdetect)&&t.ue_back&&t.ue_back.value++;d._uess&&(z=d._uess());a.isl=1}a._bf&&(f+="&bf="+a._bf());d.ue_navtiming&&g&&(e("ctb",s,"1"),a.isBFonMshop||y("tc",F,F,M));!C||a.isBFonMshop||U||(g&&B(a.t,{na_:g.navigationStart,ul_:g.unloadEventStart,_ul:g.unloadEventEnd,rd_:g.redirectStart,_rd:g.redirectEnd,fe_:g.fetchStart,lk_:g.domainLookupStart, _lk:g.domainLookupEnd,co_:g.connectStart,_co:g.connectEnd,sc_:g.secureConnectionStart,rq_:g.requestStart,rs_:g.responseStart,_rs:g.responseEnd,dl_:g.domLoading,di_:g.domInteractive,de_:g.domContentLoadedEventStart,_de:g.domContentLoadedEventEnd,_dc:g.domComplete,ld_:g.loadEventStart,_ld:g.loadEventEnd,ntd:("function"!==typeof C.now||u(M)?0:new E(M+C.now())-new E)+a.t0}),x&&B(a.t,{ty:x.type+a.t0,rc:x.redirectCount+a.t0}),U=1);a.isBFonMshop||B(a.t,{hob:d.ue_hob,hoe:d.ue_hoe});a.ifr&&(f+="&ifr=1")}y(k, b,c,q);var r,n;l||b&&b!==s||ca(b);(c=d.ue_mbl)&&c.cnt&&!l&&(f+=c.cnt());l?e("wb",b,2):"ld"==k&&(a.lid=H(s));for(r in a.sc)if(1==e("wb",r))break;if(l){if(a.s)return;f=p(f,null)}else c=p(f,null),c!=f&&(c=A(c),a.b=c),z&&(f+=z),f=p(f,b||a.id);f=A(f);if(a.b||l)for(r in a.sc)2==e("wb",r)&&delete a.sc[r];z=0;a._rt&&(f+="&rt="+a._rt());c=h.csa;if(!l&&c)for(n in r=e("t",b)||{},c=c("PageTiming"),r)r[v](n)&&c("mark",da[n]||n,r[n]);l||(a.s=0,(n=d.ue_err)&&0<n.ec&&n.pec<n.ec&&(n.pec=n.ec,f+="&ec="+n.ec+"&ecf="+ n.ecf),z=e("ctb",b),"ld"!==k||b||a.markers?a.markers&&a.isl&&!l&&b&&B(a.markers,e("t",b)):(a.markers={},B(a.markers,e("t",b))),e("t",b,{}));a.tag&&a.tag().length&&(f+="&csmtags="+a.tag().join("|"),a.tag=P());n=a.viz||[];(r=n.length)&&(f+="&viz="+n.splice(0,r).join("|"));u(d.ue_pty)||(f+="&pty="+d.ue_pty+"&spty="+d.ue_spty+"&pti="+d.ue_pti);a.tabid&&(f+="&tid="+a.tabid);a.aftb&&(f+="&aftb=1");!a._ui||b&&b!=s||(f+=a._ui());f+="&lob="+(d.ue_lob||"0");a.a=f;m(f,k,z,l,b&&"string"===typeof b&&-1!==b.indexOf("csa:"))}} function ca(a){var b=h.ue_csm_markers||{},c;for(c in b)b[v](c)&&y(c,a,F,b[c])}function A(a,b,c){c=c||h;if(c[V])c[V](a,b,!1);else if(c[W])c[W]("on"+a,b)}function T(a,b,c){c=c||h;if(c[X])c[X](a,b,!1);else if(c[Y])c[Y]("on"+a,b)}function Z(){function a(){d.onUl()}function b(a){return function(){c[a]||(c[a]=1,S(a))}}var c={},e,g;d.onLd=b("ld");d.onLdEnd=b("ld");d.onUl=b("ul");e={stop:b("os")};h.chrome?(A(G,a),L.push(a)):e[G]=d.onUl;for(g in e)e[v](g)&&R(0,h,g,e[g]);d.ue_viz&&ue_viz();A("load",d.onLd); y("ue")}function ba(e,b,c){var g=d.ue_mbl,p=h.csa,m=p&&p("SPA"),p=p&&p("PageTiming");g&&g.ajax&&g.ajax(b,c);m&&p&&(m("newPage",{requestId:e,transitionType:"soft"}),p("mark","transitionStart",b));a.tag("ajax-transition")}d.ueinit=(d.ueinit||0)+1;var a=d.ue=d.ue||{};a.t0=h.aPageStart||d.ue_t0;a.id=d.ue_id;a.url=d.ue_url;a.rid=d.ue_id;a.a="";a.b="";a.h={};a.s=1;a.t={};a.sc={};a.iel=[];a.ielf=[];a.viz=[];a.v="0.300971.0";a.paused=!1;var v="hasOwnProperty",G="beforeunload",K="on"+G,V="addEventListener", X="removeEventListener",W="attachEvent",Y="detachEvent",da={cf:"criticalFeature",af:"aboveTheFold",fn:"functional",fp:"firstPaint",fcp:"firstContentfulPaint",bb:"bodyBegin",be:"bodyEnd",ld:"loaded"},E=h.Date,C=h.performance||h.webkitPerformance,g=(C||{}).timing,x=(C||{}).navigation,M=(g||{}).navigationStart,w=d.ue_fpf,Q=0,U=0,L=[],D=0,F;a.oid=H(a.id);a.lid=H(a.id);a._t0=a.t0;a.tag=P();a.ifr=h.top!==h.self||h.frameElement?1:0;a.markers=null;a.attach=A;a.detach=T;if("000-0000000-8675309"===d.ue_sid){var $= I("cdn-rid"),aa=I("session-id");$&&aa&&O($,aa,"cdn")}d.uei=Z;d.ueh=R;d.ues=e;d.uet=y;d.uex=S;a.reset=O;a.pause=function(d){a.paused=d};Z()})(ue_csm,ue_csm.window,ue_csm.document); ue.stub(ue,"event");ue.stub(ue,"onSushiUnload");ue.stub(ue,"onSushiFlush"); ue.stub(ue,"log");ue.stub(ue,"onunload");ue.stub(ue,"onflush"); (function(b){function g(){var a={requestId:b.ue_id||"rid",server:b.ue_sn||"sn",obfuscatedMarketplaceId:b.ue_mid||"mid"};b.ue_sjslob&&(a.lob=b.ue_lob||"0");return a}var a=b.ue,h=1===b.ue_no_counters;a.cv={};a.cv.scopes={};a.cv.buffer=[];a.count=function(b,f,c){var e={},d=a.cv,g=c&&0===c.c;e.counter=b;e.value=f;e.t=a.d();c&&c.scope&&(d=a.cv.scopes[c.scope]=a.cv.scopes[c.scope]||{},e.scope=c.scope);if(void 0===f)return d[b];d[b]=f;d=0;c&&c.bf&&(d=1);h||(ue_csm.ue_sclog||!a.clog||0!==d||g?a.log&&a.log(e, "csmcount",{c:1,bf:d}):a.clog(e,"csmcount",{bf:d}));a.cv.buffer.push({c:b,v:f})};a.count("baselineCounter2",1);a&&a.event&&(a.event(g(),"csm","csm.CSMBaselineEvent.4"),a.count("nexusBaselineCounter",1,{bf:1}))})(ue_csm); var ue_hoe = +new Date(); } window.ueinit = window.ue_ihb; </script> <!-- 4lbe0wg1y6p9g01z0iqra1 --> <script>window.ue && ue.count && ue.count('CSMLibrarySize', 10188)</script> <!-- sp:end-feature:csm:head-open-part2 --> <!-- sp:feature:aui-assets --> <link rel="stylesheet" href="https://m.media-amazon.com/images/I/11EIQ5IGqaL._RC|01e5ncglxyL.css,01lF2n-pPaL.css,41wTY-BBN1L.css,31PMR1gfdTL.css,11GEPqXartL.css,01R9dtRDQdL.css,01ITNc8rK9L.css,413Vvv3GONL.css,11TIuySqr6L.css,01Rw4F+QU6L.css,11-necfQsYL.css,0148ALHohZL.css,01IdKcBuAdL.css,01dRHIoUjnL.css,01RgENaJKWL.css,21FKkTlnSXL.css,01oDR3IULNL.css,51B16hqu56L.css,01XPHJk60-L.css,11KbprKx1LL.css,01B9+-hVWxL.css,01vHYOKhYmL.css,21+ZwsPdK3L.css,11G8RVHqS+L.css,21Cm-FYpY3L.css,11vZZiS3AQL.css,21h+x9Dj-xL.css,01CFUgsA-YL.css,31JDqNdMHGL.css,11WHSxzwhML.css,11eRZHJEjLL.css,11cXq9YmIsL.css,11wvMqxn+nL.css,01iEw2pcRVL.css,01wINFCYz2L.css,21AIv8U1JsL.css,11gW34UeIUL.css,01maowwXYbL.css,21YNFGiAE4L.css,11tP--rb7GL.css,11tM7nTgbvL.css,01czSFRTaLL.css,01890+Vwk8L.css,01yu9KBHq-L.css,01cbS3UK11L.css,21kdNu0AlvL.css,016mfgi+D2L.css,01WslS8q5ML.css,21G+kbJndfL.css,01gPgyfn0-L.css_.css?AUIClients/AmazonUI#us.trident" /> <script> (function(a,b,c,d){if((a=a.AmazonUIPageJS||a.P)&&a.when&&a.register)throw Error("A copy of P has already been loaded on this page.");})(window,document,Date);(function(a,b,c,d){"use strict";a._pSetI=function(){return null}})(window,document,Date);(function(a,c,d,e){"use strict";a._sw=function(){var b;return function(a,c,d,e,f,g,h,k,l,m){b||(b=!0)}}()})(window,document,Date);(function(c,e,I,B){"use strict";c._pd=function(){var a,u;return function(C,f,h,k,b,D,v,E,F){function w(d){try{return d()}catch(J){return!1}}function l(){if(m){var d={w:c.innerWidth||b.clientWidth,h:c.innerHeight||b.clientHeight};5<Math.abs(d.w-q.w)||50<d.h-q.h?(q=d,n=4,(d=a.mobile||a.tablet?450<d.w&&d.w>d.h:1250<=d.w)?k(b,"a-ws"):b.className=v(b,"a-ws")):0<n&&(n--,x=setTimeout(l,16))}}function G(d){(m=d===B?!m:!!d)&&l()}function H(){return m}if(!u){u=!0;var r=function(){var d=["O","ms","Moz","Webkit"], c=e.createElement("div");return{testGradients:function(){return!0},test:function(a){var b=a.charAt(0).toUpperCase()+a.substr(1);a=(d.join(b+" ")+b+" "+a).split(" ");for(b=a.length;b--;)if(""===c.style[a[b]])return!0;return!1},testTransform3d:function(){return!1}}}(),y=b.className,z=/(^| )a-mobile( |$)/.test(y),A=/(^| )a-tablet( |$)/.test(y);a={audio:function(){return!!e.createElement("audio").canPlayType},video:function(){return!!e.createElement("video").canPlayType},canvas:function(){return!!e.createElement("canvas").getContext}, svg:function(){return!!e.createElementNS&&!!e.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect},offline:function(){return navigator.hasOwnProperty&&navigator.hasOwnProperty("onLine")&&navigator.onLine},dragDrop:function(){return"draggable"in e.createElement("span")},geolocation:function(){return!!navigator.geolocation},history:function(){return!(!c.history||!c.history.pushState)},webworker:function(){return!!c.Worker},autofocus:function(){return"autofocus"in e.createElement("input")}, inputPlaceholder:function(){return"placeholder"in e.createElement("input")},textareaPlaceholder:function(){return"placeholder"in e.createElement("textarea")},localStorage:function(){return"localStorage"in c&&null!==c.localStorage},orientation:function(){return"orientation"in c},touch:function(){return"ontouchend"in e},gradients:function(){return r.testGradients()},hires:function(){var a=c.devicePixelRatio&&1.5<=c.devicePixelRatio||c.matchMedia&&c.matchMedia("(min-resolution:144dpi)").matches;E("hiRes"+ (z?"Mobile":A?"Tablet":"Desktop"),a?1:0);return a},transform3d:function(){return r.testTransform3d()},touchScrolling:function(){return f(/Windowshop|android|OS ([5-9]|[1-9][0-9]+)(_[0-9]{1,2})+ like Mac OS X|SOFTWARE=([5-9]|[1-9][0-9]+)(.[0-9]{1,2})+.*DEVICE=iPhone|Chrome|Silk|Firefox|Trident.+?; Touch/i)},ios:function(){return f(/OS [1-9][0-9]*(_[0-9]*)+ like Mac OS X/i)&&!f(/trident|Edge/i)},android:function(){return f(/android.([1-9]|[L-Z])/i)&&!f(/trident|Edge/i)},mobile:function(){return z}, tablet:function(){return A},rtl:function(){return"rtl"===b.dir}};for(var g in a)a.hasOwnProperty(g)&&(a[g]=w(a[g]));for(var t="textShadow textStroke boxShadow borderRadius borderImage opacity transform transition".split(" "),p=0;p<t.length;p++)a[t[p]]=w(function(){return r.test(t[p])});var m=!0,x=0,q={w:0,h:0},n=4;l();h(c,"resize",function(){clearTimeout(x);n=4;l()});b.className=v(b,"a-no-js");k(b,"a-js");!f(/OS [1-8](_[0-9]*)+ like Mac OS X/i)||c.navigator.standalone||f(/safari/i)||k(b,"a-ember"); h=[];for(g in a)a.hasOwnProperty(g)&&a[g]&&h.push("a-"+g.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()}));k(b,h.join(" "));b.setAttribute("data-aui-build-date",F);C.register("p-detect",function(){return{capabilities:a,localStorage:a.localStorage&&D,toggleResponsiveGrid:G,responsiveGridEnabled:H}});return a||{}}}}()})(window,document,Date);(function(g,l,C,D){function E(a){n&&n.tag&&n.tag(p(":","aui",a))}function m(a,b){n&&n.count&&n.count("aui:"+a,0===b?0:b||(n.count("aui:"+a)||0)+1)}function F(a){try{return a.test(navigator.userAgent)}catch(b){return!1}}function G(a){return"function"===typeof a}function u(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,c)}function p(a,b,c,f){b=b&&c?b+a+c:b||c;return f?p(a,b,f):b}function y(a,b,c){try{Object.defineProperty(a,b,{value:c,writable:!1})}catch(f){a[b]= c}return c}function O(a,b){a.className=P(a,b)+" "+b}function P(a,b){return(" "+a.className+" ").split(" "+b+" ").join(" ").replace(/^ | $/g,"")}function ca(a,b,c){var f=c=a.length,e=function(){f--||(H.push(b),I||(q?q.set(z):setTimeout(z,0),I=!0))};for(e();c--;)Q[a[c]]?e():(v[a[c]]=v[a[c]]||[]).push(e)}function da(a,b,c,f,e){var d=l.createElement(a?"script":"link");u(d,"error",f);e&&u(d,"load",e);a?(d.type="text/javascript",d.async=!0,c&&/AUIClients|images[/]I/.test(b)&&d.setAttribute("crossorigin", "anonymous"),d.src=b):(d.rel="stylesheet",d.href=b);l.getElementsByTagName("head")[0].appendChild(d)}function R(a,b){return function(c,f){function e(){da(b,c,d,function(b){J?m("resource_unload"):d?(d=!1,m("resource_retry"),e()):(m("resource_error"),a.log("Asset failed to load: "+c));b&&b.stopPropagation?b.stopPropagation():g.event&&(g.event.cancelBubble=!0)},f)}if(S[c])return!1;S[c]=!0;m("resource_count");var d=!0;return!e()}}function ea(a,b,c){for(var f={name:a,guard:function(c){return b.guardFatal(a, c)},guardTime:function(a){return b.guardTime(a)},logError:function(c,d,e){b.logError(c,d,e,a)}},e=[],d=0;d<c.length;d++)A.hasOwnProperty(c[d])&&(e[d]=K.hasOwnProperty(c[d])?K[c[d]](A[c[d]],f):A[c[d]]);return e}function w(a,b,c,f,e){return function(d,k){function n(){var a=null;f?a=k:G(k)&&(q.start=r(),a=k.apply(g,ea(d,h,l)),q.end=r());if(b){A[d]=a;a=d;for(Q[a]=!0;(v[a]||[]).length;)v[a].shift()();delete v[a]}q.done=!0}var h=e||this;G(d)&&(k=d,d=D);b&&(d=d?d.replace(T,""):"__NONAME__",L.hasOwnProperty(d)&& h.error(p(", reregistered by ",p(" by ",d+" already registered",L[d]),h.attribution),d),L[d]=h.attribution);for(var l=[],m=0;m<a.length;m++)l[m]=a[m].replace(T,"");var q=x[d||"anon"+ ++fa]={depend:l,registered:r(),namespace:h.namespace};d&&ha.hasOwnProperty(d);c?n():ca(l,h.guardFatal(d,n),d);return{decorate:function(a){K[d]=h.guardFatal(d,a)}}}}function U(a){return function(){var b=Array.prototype.slice.call(arguments);return{execute:w(b,!1,a,!1,this),register:w(b,!0,a,!1,this)}}}function M(a,b){return function(c, f){f||(f=c,c=D);var e=this.attribution;return function(){h.push(b||{attribution:e,name:c,logLevel:a});var d=f.apply(this,arguments);h.pop();return d}}}function B(a,b){this.load={js:R(this,!0),css:R(this)};y(this,"namespace",b);y(this,"attribution",a)}function V(){l.body?k.trigger("a-bodyBegin"):setTimeout(V,20)}"use strict";var t=C.now=C.now||function(){return+new C},r=function(a){return a&&a.now?a.now.bind(a):t}(g.performance),ia=r(),ha={},n=g.ue;E();E("aui_build_date:3.24.9-2024-11-08");var W={getItem:function(a){try{return g.localStorage.getItem(a)}catch(b){}}, setItem:function(a,b){try{return g.localStorage.setItem(a,b)}catch(c){}}},q=g._pSetI(),H=[],ja=[],I=!1,ka=navigator.scheduling&&"function"===typeof navigator.scheduling.isInputPending;var z=function(){for(var a=q?q.set(z):setTimeout(z,0),b=t();ja.length||H.length;)if(H.shift()(),q&&ka){if(150<t()-b&&!navigator.scheduling.isInputPending()||50<t()-b&&navigator.scheduling.isInputPending())return}else if(50<t()-b)return;q?q.clear(a):clearTimeout(a);I=!1};var Q={},v={},S={},J=!1;u(g,"beforeunload",function(){J= !0;setTimeout(function(){J=!1},1E4)});var T=/^prv:/,L={},A={},K={},x={},fa=0,X=String.fromCharCode(92),h=[],Y=!0,Z=g.onerror;g.onerror=function(a,b,c,f,e){e&&"object"===typeof e||(e=Error(a,b,c),e.columnNumber=f,e.stack=b||c||f?p(X,e.message,"at "+p(":",b,c,f)):D);var d=h.pop()||{};e.attribution=p(":",e.attribution||d.attribution,d.name);e.logLevel=d.logLevel;e.attribution&&console&&console.log&&console.log([e.logLevel||"ERROR",a,"thrown by",e.attribution].join(" "));h=[];Z&&(d=[].slice.call(arguments), d[4]=e,Z.apply(g,d))};B.prototype={logError:function(a,b,c,f){b={message:b,logLevel:c||"ERROR",attribution:p(":",this.attribution,f)};if(g.ueLogError)return g.ueLogError(a||b,a?b:null),!0;console&&console.error&&(console.log(b),console.error(a));return!1},error:function(a,b,c,f){a=Error(p(":",f,a,c));a.attribution=p(":",this.attribution,b);throw a;},guardError:M(),guardFatal:M("FATAL"),guardCurrent:function(a){var b=h[h.length-1];return b?M(b.logLevel,b).call(this,a):a},guardTime:function(a){var b= h[h.length-1],c=b&&b.name;return c&&c in x?function(){var b=r(),e=a.apply(this,arguments);x[c].async=(x[c].async||0)+r()-b;return e}:a},log:function(a,b,c){return this.logError(null,a,b,c)},declare:w([],!0,!0,!0),register:w([],!0),execute:w([]),AUI_BUILD_DATE:"3.24.9-2024-11-08",when:U(),now:U(!0),trigger:function(a,b,c){var f=t();this.declare(a,{data:b,pageElapsedTime:f-(g.aPageStart||NaN),triggerTime:f});c&&c.instrument&&N.when("prv:a-logTrigger").execute(function(b){b(a)})},handleTriggers:function(){this.log("handleTriggers deprecated")}, attributeErrors:function(a){return new B(a)},_namespace:function(a,b){return new B(a,b)},setPriority:function(a){Y?Y=!1:this.log("setPriority only accept the first call.")}};var k=y(g,"AmazonUIPageJS",new B);var N=k._namespace("PageJS","AmazonUI");N.declare("prv:p-debug",x);k.declare("p-recorder-events",[]);k.declare("p-recorder-stop",function(){});y(g,"P",k);V();if(l.addEventListener){var aa;l.addEventListener("DOMContentLoaded",aa=function(){k.trigger("a-domready");l.removeEventListener("DOMContentLoaded", aa,!1)},!1)}var ba=l.documentElement,la=g._pd(k,F,u,O,ba,W,P,m,"3.24.9-2024-11-08");F(/UCBrowser/i)||la.localStorage&&O(ba,W.getItem("a-font-class"));k.declare("a-event-revised-handling",!1);g._sw(N,p,F,X,m,n,E,G,u,k);k.declare("a-fix-event-off",!1);m("pagejs:pkgExecTime",r()-ia)})(window,document,Date); (function(b){function q(a,e,d){function g(a,b,c){var f=Array(e.length);~l&&(f[l]={});~m&&(f[m]=c);for(c=0;c<n.length;c++){var g=n[c],h=a[c];f[g]=h}for(c=0;c<p.length;c++)g=p[c],h=b[c],f[g]=h;a=d.apply(null,f);return~l?f[l]:a}"string"!==typeof a&&b.P.error("C001");-1===a.indexOf("@")&&-1<a.indexOf("/")&&(-1<a.indexOf("es3")||-1<a.indexOf("evergreen"))&&(a=a.substring(0,a.lastIndexOf("/")));if(!r[a]){r[a]=!0;d||(d=e,e=[]);a=a.split(":",2);var c=a[1]?a[0]:void 0,f=(a[1]||a[0]).replace(/@capability\//, "@c/"),k=c?b.P._namespace(c):b.P,t=!f.lastIndexOf("@c/",0),u=!f.lastIndexOf("@m/",0),n=[];a=[];var p=[],v=[],m=-1,l=-1;for(c=0;c<e.length;c++){var h=e[c];"module"===h&&k.error("C002");"exports"===h?l=c:"require"===h?m=c:h.lastIndexOf("@p/",0)?h.lastIndexOf("@c/",0)&&h.lastIndexOf("@m/",0)?(n.push(c),a.push("mix:"+h)):(p.push(c),v.push(h)):(n.push(c),a.push(h.substr(3)))}k.when.apply(k,a).register("mix:"+f,function(){var a=[].slice.call(arguments);return t||u||~m||p.length?{capabilities:v,cardModuleFactory:function(b, c){b=g(a,b,c);b.P=k;return b},require:~m?q:void 0}:g(a,[],function(){})});(t||u)&&k.when("mix:@amzn/mix.client-runtime","mix:"+f).execute(function(a,b){a.registerCapabilityModule(f,b)});k.when("mix:"+f).register("xcp:"+f,function(a){return a});var q=function(a,b,c){try{var e=-1<f.indexOf("/")?f.split("/")[0]:f,d=a[0],g=d.lastIndexOf("./",0)?d:e+"/"+d.substr(2),h=g.lastIndexOf("@p/",0)?"mix:"+g:g.substr(3);k.when(h).execute(function(a){try{b(a)}catch(x){c(x)}})}catch(w){c(w)}}}}"use strict";var r= {};b.mix_d||((b.Promise?P:P.when("3p-promise")).register("@p/promise-is-ready",function(a){b.Promise=b.Promise||a}),(Array.prototype.includes?P:P.when("a-polyfill")).register("@p/polyfill-is-ready",function(){}),b.mix_d=function(a,b,d){P.when("@p/promise-is-ready","@p/polyfill-is-ready").execute("@p/mix-d-deps",function(){q(a,b,d)})},b.xcp_d=b.mix_d,P.when("mix:@amzn/mix.client-runtime").execute(function(a){P.declare("xcp:@xcp/runtime",a)}));b.mixTimeout||(b.mixTimeout=function(a,e,d){b.mixCardInitTimeouts|| (b.mixCardInitTimeouts={});b.mixCardInitTimeouts[e]&&clearTimeout(b.mixCardInitTimeouts[e]);b.mixCardInitTimeouts[e]=setTimeout(function(){P.log("Client-side initialization timeout","WARN",a)},d)});b.mix_csa_map=b.mix_csa_map||{};b.mix_csa_internal=b.mix_csa_internal||function(a,e,d){return b.mix_csa_map[e]=b.mix_csa_map[e]||b.csa(a,d)};b.mix_csa_internal_key=b.mix_csa_internal_key||function(a,b){for(var d="",e=0;e<b.length;e++){var c=b[e];void 0!==a[c]&&"object"!==typeof a[c]&&(d+=c+":"+a[c]+",")}if(!d)throw Error("bad mix-csa key gen."); return d};b.mix_csa_event=b.mix_csa_event||function(a){try{var e=b.mix_csa_internal_key(a,["producerId"])}catch(d){return P.logError(d,"MIX C005","WARN",void 0),function(){}}try{return b.mix_csa_internal("Events",e,a)}catch(d){return P.logError(d,"MIX C004","WARN",e),function(){}}};b.mix_csa=b.mix_csa||function(a,e){try{e=e||"";var d=document.querySelectorAll(a);if(1<d.length)for(var g=0;g<d.length;g++){if(d[g].querySelector(e)){var c=d[g];break}}else 1===d.length&&(c=d[0]);if(!c)throw Error(" "); return b.mix_csa_internal("Content",a,{element:c})}catch(f){return P.logError(f,"MIX C004","WARN",a),function(){}}}})(window); (window.AmazonUIPageJS ? AmazonUIPageJS : P).when('sp.load.js').execute(function() { (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https://m.media-amazon.com/images/I/61xJcNKKLXL.js?AUIClients/AmazonUIjQuery'); (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https://m.media-amazon.com/images/I/11zuylp74DL._RC|11Y+5x+kkTL.js,513OnYsenuL.js,11yKORv-GTL.js,11na7Dl1tFL.js,21uGjv2MRDL.js,01VRMV3FBdL.js,21u+kGQyRqL.js,012FVc3131L.js,11aD5q6kNBL.js,11rRjDLdAVL.js,51LgVZTDoFL.js,11nAhXzgUmL.js,119kvzYmMJL.js,11lJo6kFM7L.js,11npBNHo-jL.js,21eKR4hvwNL.js,0190vxtlzcL.js,51JidH1pAfL.js,01JYHc2oIlL.js,31nfKXylf6L.js,01ktRCtOqKL.js,01ASnt2lbqL.js,11bEz2VIYrL.js,31o2NGTXThL.js,01rpauTep4L.js,31lTOzOlAqL.js,01tvglXfQOL.js,11Rf82oewsL.js,014gnDeJDsL.js,01A2fK8tgRL.js_.js?AUIClients/AmazonUI#trident'); (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https://m.media-amazon.com/images/I/51iGGT8JMaL.js?AUIClients/CardJsRuntimeBuzzCopyBuild'); }); </script> <!-- sp:end-feature:aui-assets --> <!-- sp:feature:nav-inline-css --> <!-- NAVYAAN CSS --> <style type="text/css"> .nav-sprite-v1 .nav-sprite, .nav-sprite-v1 .nav-icon { background-image: url(https://m.media-amazon.com/images/G/01/gno/sprites/nav-sprite-global-1x-reorg-privacy._CB541706272_.png); background-position: 0 1000px; background-repeat: repeat-x; } .nav-spinner { background-image: url(https://m.media-amazon.com/images/G/01/javascripts/lib/popover/images/snake._CB485935611_.gif); background-position: center center; background-repeat: no-repeat; } .nav-timeline-icon, .nav-access-image, .nav-timeline-prime-icon { background-image: url(https://m.media-amazon.com/images/G/01/gno/sprites/timeline_sprite_1x._CB485945973_.png); background-repeat: no-repeat; } </style> <link rel="stylesheet" href="https://images-na.ssl-images-amazon.com/images/I/41UUdmm7zEL._RC|71twr1AIM7L.css,51bNVko77xL.css,21-GKunH78L.css,11pThoX8KIL.css,21Hc1s0-E4L.css,31fpQAEX7EL.css,21DwGGPS1eL.css,41EtvNY2OrL.css,110Nj+wUGYL.css,31K0jc2KvHL.css,01H8CHB5aiL.css,21KQnzhmfTL.css,41yKpEQVJkL.css_.css?AUIClients/NavDesktopUberAsset#desktop.trident.488657-T2.878681-T1.1089549-T1.310484-T1.1088933-T1.836079-T1.1102424-T1" /> <!-- sp:end-feature:nav-inline-css --> <!-- sp:feature:host-assets --> <!doctype html><!--[if IE 8]><html data-19ax5a9jf="dingo" class="a-no-js a-lt-ie10 a-lt-ie9 a-ie8"><![endif]--><!--[if IE 9]><html data-19ax5a9jf="dingo" class="a-no-js a-lt-ie10 a-ie9"><![endif]--><!--[if !(IE 8)&!(IE 9)]><!--><html data-19ax5a9jf="dingo" class="a-no-js"><!--<![endif]--> <head><script>var aPageStart = (new Date()).getTime();</script><meta charset="utf-8"/> <title dir="ltr">Amazon.com: Buy any 1, Save 5% promotion</title> </head> <script type="text/javascript">window.P && P.register('sp.load.js');</script> <!--&&&Portal&Delimiter&&&--><!-- sp:end-feature:host-assets --> <!-- sp:feature:encrypted-slate-token --> <meta name='encrypted-slate-token' content='AnYxoFIeGjmAI+RTQy8nYwDePB8xXfcFFOS9jwzkLcGQzvVsDjGIgy9CkHDBIlz3fG61rTcBxS1n9QA+J31oqXLHXOiV0RqRA11BRdYsuKUALF8IfstapqlhE3VQo0R16J7FjoE/aTatv3BEK3WfchKhpnBnvH4B5EpIPrTPIuGWbWgZ9PL4zkKQ3HJUUofNtbMRkDaqaKNJZge1vAamnwUes6/7ZPFrcz6t8k2Xs7geIeBpqfnSyHBVoXJVcpvAb1XdeK2BeqhLDA=='> <!-- sp:end-feature:encrypted-slate-token --> <!-- sp:feature:csm:head-close --> <script type='text/javascript'> window.ue_ihe = (window.ue_ihe || 0) + 1; if (window.ue_ihe === 1) { (function(c){c&&1===c.ue_jsmtf&&"object"===typeof c.P&&"function"===typeof c.P.when&&c.P.when("mshop-interactions").execute(function(e){"object"===typeof e&&"function"===typeof e.addListener&&e.addListener(function(b){"object"===typeof b&&"ORIGIN"===b.dataSource&&"number"===typeof b.clickTime&&"object"===typeof b.events&&"number"===typeof b.events.pageVisible&&(c.ue_jsmtf_interaction={pv:b.events.pageVisible,ct:b.clickTime})})})})(ue_csm); (function(c,e,b){function m(a){f||(f=d[a.type].id,"undefined"===typeof a.clientX?(h=a.pageX,k=a.pageY):(h=a.clientX,k=a.clientY),2!=f||l&&(l!=h||n!=k)?(r(),g.isl&&e.setTimeout(function(){p("at",g.id)},0)):(l=h,n=k,f=0))}function r(){for(var a in d)d.hasOwnProperty(a)&&g.detach(a,m,d[a].parent)}function s(){for(var a in d)d.hasOwnProperty(a)&&g.attach(a,m,d[a].parent)}function t(){var a="";!q&&f&&(q=1,a+="&ui="+f);return a}var g=c.ue,p=c.uex,q=0,f=0,l,n,h,k,d={click:{id:1,parent:b},mousemove:{id:2, parent:b},scroll:{id:3,parent:e},keydown:{id:4,parent:b}};g&&p&&(s(),g._ui=t)})(ue_csm,window,document); (function(s,l){function m(b,e,c){c=c||new Date(+new Date+t);c="expires="+c.toUTCString();n.cookie=b+"="+e+";"+c+";path=/"}function p(b){b+="=";for(var e=n.cookie.split(";"),c=0;c<e.length;c++){for(var a=e[c];" "==a.charAt(0);)a=a.substring(1);if(0===a.indexOf(b))return decodeURIComponent(a.substring(b.length,a.length))}return""}function q(b,e,c){if(!e)return b;-1<b.indexOf("{")&&(b="");for(var a=b.split("&"),f,d=!1,h=!1,g=0;g<a.length;g++)f=a[g].split(":"),f[0]==e?(!c||d?a.splice(g,1):(f[1]=c,a[g]= f.join(":")),h=d=!0):2>f.length&&(a.splice(g,1),h=!0);h&&(b=a.join("&"));!d&&c&&(0<b.length&&(b+="&"),b+=e+":"+c);return b}var k=s.ue||{},t=3024E7,n=ue_csm.document||l.document,r=null,d;a:{try{d=l.localStorage;break a}catch(u){}d=void 0}k.count&&k.count("csm.cookieSize",document.cookie.length);k.cookie={get:p,set:m,updateCsmHit:function(b,e,c){try{var a;if(!(a=r)){var f;a:{try{if(d&&d.getItem){f=d.getItem("csm-hit");break a}}catch(k){}f=void 0}a=f||p("csm-hit")||"{}"}a=q(a,b,e);r=a=q(a,"t",+new Date); try{d&&d.setItem&&d.setItem("csm-hit",a)}catch(h){}m("csm-hit",a,c)}catch(g){"function"==typeof l.ueLogError&&ueLogError(Error("Cookie manager: "+g.message),{logLevel:"WARN"})}}}})(ue_csm,window); (function(l,e){function c(b){b="";var c=a.isBFT?"b":"s",d=""+a.oid,g=""+a.lid,h=d;d!=g&&20==g.length&&(c+="a",h+="-"+g);a.tabid&&(b=a.tabid+"+");b+=c+"-"+h;b!=f&&100>b.length&&(f=b,a.cookie?a.cookie.updateCsmHit(m,b+("|"+ +new Date)):e.cookie="csm-hit="+b+("|"+ +new Date)+n+"; path=/")}function p(){f=0}function d(b){!0===e[a.pageViz.propHid]?f=0:!1===e[a.pageViz.propHid]&&c({type:"visible"})}var n="; expires="+(new Date(+new Date+6048E5)).toGMTString(),m="tb",f,a=l.ue||{},k=a.pageViz&&a.pageViz.event&& a.pageViz.propHid;a.attach&&(a.attach("click",c),a.attach("keyup",c),k||(a.attach("focus",c),a.attach("blur",p)),k&&(a.attach(a.pageViz.event,d,e),d({})));a.aftb=1})(ue_csm,ue_csm.document); ue_csm.ue.stub(ue,"impression"); ue.stub(ue,"trigger"); if(window.ue&&uet) { uet('bb'); } } </script> <script>window.ue && ue.count && ue.count('CSMLibrarySize', 3172)</script> <!-- sp:end-feature:csm:head-close --> <!-- sp:feature:head-close --> <script> window.P && P.register('bb'); if (typeof ues === 'function') { ues('t0', 'portal-bb', new Date()); ues('ctb', 'portal-bb', 1); } </script> </head><!-- sp:end-feature:head-close --> <!-- sp:feature:start-body --> <body class="a-m-us a-aui_72554-c a-aui_a11y_6_837773-t2 a-aui_amzn_img_959719-c a-aui_amzn_img_gate_959718-c a-aui_killswitch_csa_logger_372963-c a-aui_pci_risk_banner_210084-c a-aui_template_weblab_cache_333406-c a-aui_tnr_v2_180836-c a-bw_aui_cxc_alert_measurement_1074111-c"><div id="a-page"><script type="a-state" data-a-state="{&quot;key&quot;:&quot;a-wlab-states&quot;}">{"AUI_AMZN_IMG_959719":"C","AUI_A11Y_6_837773":"T2","AUI_TNR_V2_180836":"C","AUI_AMZN_IMG_GATE_959718":"C","AUI_TEMPLATE_WEBLAB_CACHE_333406":"C","BW_AUI_CXC_ALERT_MEASUREMENT_1074111":"C","AUI_72554":"C","AUI_KILLSWITCH_CSA_LOGGER_372963":"C","AUI_PCI_RISK_BANNER_210084":"C"}</script><script>typeof uex === 'function' && uex('ld', 'portal-bb', {wb: 1})</script><!-- sp:end-feature:start-body --> <!-- sp:feature:csm:body-open --> <img height="1" width="1" style='display:none;visibility:hidden;' src='//fls-na.amazon.com/1/batch/1/OP/ATVPDKIKX0DER:146-2461427-5656742:8CD8WFQGA8E5PSWF02S4$uedata=s:%2Frd%2Fuedata%3Fstaticb%26id%3D8CD8WFQGA8E5PSWF02S4:0' alt="" onload="window.ue_sbl && window.ue_sbl();"/> <script> !function(){function n(n,t){var r=i(n);return t&&(r=r("instance",t)),r}var r=[],c=0,i=function(t){return function(){var n=c++;return r.push([t,[].slice.call(arguments,0),n,{time:Date.now()}]),i(n)}};n._s=r,this.csa=n}();; csa('Config', {}); if (window.csa) { csa("Config", { 'Application': 'Retail:Prod:www.amazon.com', 'Events.Namespace': 'csa', 'ObfuscatedMarketplaceId': 'ATVPDKIKX0DER', 'Events.SushiEndpoint': 'https://unagi.amazon.com/1/events/com.amazon.csm.csa.prod', 'CacheDetection.RequestID': "8CD8WFQGA8E5PSWF02S4", 'CacheDetection.Callback': window.ue && ue.reset, 'LCP.elementDedup': 1, 'lob': '1' }); csa("Events")("setEntity", { page: {requestId: "8CD8WFQGA8E5PSWF02S4", meaningful: "interactive"}, session: {id: "146-2461427-5656742"} }); } !function(r){var e,i,o="splice",u=r.csa,f={},c={},a=r.csa._s,s=0,l=0,g=-1,h={},v={},d={},n=Object.keys,p=function(){};function t(n,t){return u(n,t)}function m(n,t){var r=c[n]||{};k(r,t),c[n]=r,l++,S(U,0)}function w(n,t,r){var i=!0;return t=D(t),r&&r.buffered&&(i=(d[n]||[]).every(function(n){return!1!==t(n)})),i?(h[n]||(h[n]=[]),h[n].push(t),function(){!function(n,t){var r=h[n];r&&r[o](r.indexOf(t),1)}(n,t)}):p}function b(n,t){if(t=D(t),n in v)return t(v[n]),p;return w(n,function(n){return t(n),!1})}function y(n,t){if(u("Errors")("logError",n),f.DEBUG)throw t||n}function E(){return Math.abs(4294967295*Math.random()|0).toString(36)}function D(n,t){return function(){try{return n.apply(this,arguments)}catch(n){y(n.message||n,n)}}}function S(n,t){return r.setTimeout(D(n),t)}function U(){for(var n=0;n<a.length;){var t=a[n],r=t[0]in c;if(!r&&!i)return void(s=a.length);r?(a[o](s=n,1),I(t)):n++}g=l}function I(n){var t=c[n[0]],r=n[1],i=r[0];if(!t||!t[i])return y("Undefined function: "+t+"/"+i);e=n[3],c[n[2]]=t[i].apply(t,r.slice(1))||{},e=0}function O(){i=1,U()}function k(t,r){n(r).forEach(function(n){t[n]=r[n]})}b("$beforeunload",O),m("Config",{instance:function(n){k(f,n)}}),u.plugin=D(function(n){n(t)}),t.config=f,t.register=m,t.on=w,t.once=b,t.blank=p,t.emit=function(n,t,r){for(var i=h[n]||[],e=0;e<i.length;)!1===i[e](t)?i[o](e,1):e++;v[n]=t||{},r&&r.buffered&&(d[n]||(d[n]=[]),100<=d[n].length&&d[n].shift(),d[n].push(t||{}))},t.UUID=function(){return[E(),E(),E(),E()].join("-")},t.time=function(n){var t=e?new Date(e.time):new Date;return"ISO"===n?t.toISOString():t.getTime()},t.error=y,t.warn=function(n,t){if(u("Errors")("logWarn",n),f.DEBUG)throw t||n},t.exec=D,t.timeout=S,t.interval=function(n,t){return r.setInterval(D(n),t)},(t.global=r).csa._s.push=function(n){n[0]in c&&(!a.length||i)?(I(n),a.length&&g!==l&&U()):a[o](s++,0,n)},U(),S(function(){S(O,f.SkipMissingPluginsTimeout||5e3)},1)}("undefined"!=typeof window?window:global);csa.plugin(function(o){var f="addEventListener",e="requestAnimationFrame",t=o.exec,r=o.global,u=o.on;o.raf=function(n){if(r[e])return r[e](t(n))},o.on=function(n,e,t,r){if(n&&"function"==typeof n[f]){var i=o.exec(t);return n[f](e,i,r),function(){n.removeEventListener(e,i,r)}}return"string"==typeof n?u(n,e,t,r):o.blank}});csa.plugin(function(o){var t,n,r={},e="localStorage",c="sessionStorage",a="local",i="session",u=o.exec;function s(e,t){var n;try{r[t]=!!(n=o.global[e]),n=n||{}}catch(e){r[t]=!(n={})}return n}function f(){t=t||s(e,a),n=n||s(c,i)}function l(e){return e&&e[i]?n:t}o.store=u(function(e,t,n){f();var o=l(n);return e?t?void(o[e]=t):o[e]:Object.keys(o)}),o.storageSupport=u(function(){return f(),r}),o.deleteStored=u(function(e,t){f();var n=l(t);if("function"==typeof e)for(var o in n)n.hasOwnProperty(o)&&e(o,n[o])&&delete n[o];else delete n[e]})});csa.plugin(function(n){n.types={ovl:function(n){var r=[];if(n)for(var i in n)n.hasOwnProperty(i)&&r.push(n[i]);return r}}});csa.plugin(function(a){var e=a.config,n="Errors",c="fcsmln",s=e["KillSwitch."+n];function r(n){return function(e){a("Metrics",{producerId:"csa",dimensions:{message:e}})("recordMetric",n,1)}}function t(r){var t,o,l=a("Events",{producerId:r.producerId,lob:e.lob||"0"}),i=["name","type","csm","adb"],u={url:"pageURL",file:"f",line:"l",column:"c"};this.log=function(e){if(!s&&!function(e){if(!e)return!0;for(var n in e)return!1;return!0}(e)){var n=r.logOptions||{ent:{page:["pageType","subPageType","requestId"]}};l("log",function(n){return t=a.UUID(),o={messageId:t,schemaId:r.schemaId||"<ns>.Error.6",errorMessage:n.m||null,attribution:n.attribution||null,logLevel:"FATAL",url:null,file:null,line:null,column:null,stack:n.s||[],context:n.cinfo||{},metadata:{}},n.logLevel&&(o.logLevel=""+n.logLevel),i.forEach(function(e){n[e]&&(o.metadata[e]=n[e])}),c in n&&(o.metadata[c]=n[c]+""),"INFO"===n.logLevel||Object.keys(u).forEach(function(e){"number"!=typeof n[u[e]]&&"string"!=typeof n[u[e]]||(o[e]=""+n[u[e]])}),o}(e),n)}}}a.register(n,{instance:function(e){return new t(e||{})},logError:r("jsError"),logWarn:r("jsWarn")})});csa.plugin(function(o){var r,e,n,t,a,i="function",u="willDisappear",f="$app.",p="$document.",c="focus",s="blur",d="active",l="resign",$=o.global,b=o.exec,m=o.config["Transport.AnonymizeRequests"]||!1,g=o("Events"),h=$.location,v=$.document||{},y=$.P||{},P=(($.performance||{}).navigation||{}).type,w=o.on,k=o.emit,E=v.hidden,T={};h&&v&&(w($,"beforeunload",D),w($,"pagehide",D),w(v,"visibilitychange",R(p,function(){return v.visibilityState||"unknown"})),w(v,c,R(p+c)),w(v,s,R(p+s)),y.when&&y.when("mash").execute(function(e){e&&(w(e,"appPause",R(f+"pause")),w(e,"appResume",R(f+"resume")),R(f+"deviceready")(),$.cordova&&$.cordova.platformId&&R(f+cordova.platformId)(),w(v,d,R(f+d)),w(v,l,R(f+l)))}),e=$.app||{},n=b(function(){k(f+"willDisappear"),D()}),a=typeof(t=e[u])==i,e[u]=b(function(){n(),a&&t()}),$.app||($.app=e),"complete"===v.readyState?A():w($,"load",A),E?S():x(),o.on("$app.blur",S),o.on("$app.focus",x),o.on("$document.blur",S),o.on("$document.focus",x),o.on("$document.hidden",S),o.on("$document.visible",x),o.register("SPA",{newPage:I}),I({transitionType:{0:"hard",1:"refresh",2:"back-button"}[P]||"unknown"}));function I(n,e){var t=!!r,a=(e=e||{}).keepPageAttributes;t&&(k("$beforePageTransition"),k("$pageTransition")),t&&!a&&g("removeEntity","page"),r=o.UUID(),a?T.id=r:T={schemaId:"<ns>.PageEntity.2",id:r,url:m?h.href.split("?")[0]:h.href,server:h.hostname,path:h.pathname,referrer:m?v.referrer.split("?")[0]:v.referrer,title:v.title},Object.keys(n||{}).forEach(function(e){T[e]=n[e]}),g("setEntity",{page:T}),k("$pageChange",T,{buffered:1}),t&&k("$afterPageTransition")}function A(){k("$load"),k("$ready"),k("$afterload")}function D(){k("$ready"),k("$beforeunload"),k("$unload"),k("$afterunload")}function S(){E||(k("$visible",!1,{buffered:1}),E=!0)}function x(){E&&(k("$visible",!0,{buffered:1}),E=!1)}function R(n,t){return b(function(){var e=typeof t==i?n+t():n;k(e)})}});csa.plugin(function(c){var e="Events",n="UNKNOWN",s="id",a="all",i="messageId",o="timestamp",u="producerId",r="application",f="obfuscatedMarketplaceId",d="entities",l="schemaId",p="version",v="attributes",g="<ns>",b="lob",t="session",h=c.config,m=(c.global.location||{}).host,I=h[e+".Namespace"]||"csa_other",y=h.Application||"Other"+(m?":"+m:""),O=h["Transport.AnonymizeRequests"]||!1,E=c("Transport"),U={},A=function(e,t){Object.keys(e).forEach(t)};function N(n,i,o){A(i,function(e){var t=o===a||(o||{})[e];e in n||(n[e]={version:1,id:i[e][s]||c.UUID()}),S(n[e],i[e],t)})}function S(t,n,i){A(n,function(e){!function(e,t,n){return"string"!=typeof t&&e!==p?c.error("Attribute is not of type string: "+e):!0===n||1===n||(e===s||!!~(n||[]).indexOf(e))}(e,n[e],i)||(t[e]=n[e])})}function k(o,e,r){A(e,function(e){var t=o[e];if(t[l]){var n={},i={};n[s]=t[s],n[u]=t[u]||r[u],n[l]=t[l],n[p]=t[p]++,n[v]=i,w(n,r),S(i,t,1),D(i),E("log",n)}})}function w(e,t){e[o]=function(e){return"number"==typeof e&&(e=new Date(e).toISOString()),e||c.time("ISO")}(e[o]),e[i]=e[i]||c.UUID(),e[r]=y,e[f]=h.ObfuscatedMarketplaceId||n,e[l]=e[l].replace(g,I),t&&t[b]&&(e[b]=t[b])}function D(e){delete e[p],delete e[l],delete e[u]}function T(o){var r={};this.log=function(e,t){var n={},i=(t||{}).ent;return e?"string"!=typeof e[l]?c.error("A valid schema id is required for the event"):(w(e,o),N(n,U,i),N(n,r,i),N(n,e[d]||{},i),A(n,function(e){D(n[e])}),e[u]=o[u],e[d]=n,t&&t[b]&&(e[b]=t[b]),void E("log",e,t)):c.error("The event cannot be undefined")},this.setEntity=function(e){O&&delete e[t],N(r,e,a),k(r,e,o)}}h["KillSwitch."+e]||c.register(e,{setEntity:function(e){O&&delete e[t],c.emit("$entities.set",e,{buffered:1}),N(U,e,a),k(U,e,{producerId:"csa",lob:h[b]||"0"})},removeEntity:function(e){delete U[e]},instance:function(e){return new T(e)}})});csa.plugin(function(s){var c,g="Transport",l="post",f="preflight",r="csa.cajun.",i="store",a="deleteStored",u="sendBeacon",t="__merge",e="messageId",n=".FlushInterval",o=0,d=s.config[g+".BufferSize"]||2e3,h=s.config[g+".RetryDelay"]||1500,p=s.config[g+".AnonymizeRequests"]||!1,v={},y=0,m=[],E=s.global,R=E.document,b=s.timeout,k=E.Object.keys,w=s.config[g+n]||5e3,I=w,O=s.config[g+n+".BackoffFactor"]||1,S=s.config[g+n+".BackoffLimit"]||3e4,B=0;function T(n){if(864e5<s.time()-+new Date(n.timestamp))return s.warn("Event is too old: "+n);y<d&&(n[e]in v||(v[n[e]]=n,y++),"function"==typeof n[t]&&n[t](v[n[e]]),!B&&o&&(B=b(q,function(){var n=I;return I=Math.min(n*O,S),n}())))}function q(){m.forEach(function(e){var o=[];k(v).forEach(function(n){var t=v[n];e.accepts(t)&&o.push(t)}),o.length&&(e.chunks?e.chunks(o).forEach(function(n){D(e,n)}):D(e,o))}),v={},B=0}function D(t,e){function o(){s[a](r+n)}var n=s.UUID();s[i](r+n,JSON.stringify(e)),[function(n,t,e){var o=E.navigator||{},r=E.cordova||{};if(p)return 0;if(!o[u]||!n[l])return 0;n[f]&&r&&"ios"===r.platformId&&!c&&((new Image).src=n[f]().url,c=1);var i=n[l](t);if(!i.type&&o[u](i.url,i.body))return e(),1},function(n,t,e){if(!n[l])return 0;var o=n[l](t),r=o.url,i=o.body,c=o.type,f=new XMLHttpRequest,a=0;function u(n,t,e){f.open("POST",n),f.withCredentials=!p,e&&f.setRequestHeader("Content-Type",e),f.send(t)}return f.onload=function(){f.status<299?e():s.config[g+".XHRRetries"]&&a<3&&b(function(){u(r,i,c)},++a*h)},u(r,i,c),1}].some(function(n){try{return n(t,e,o)}catch(n){}})}k&&(s.once("$afterload",function(){o=1,function(e){(s[i]()||[]).forEach(function(n){if(!n.indexOf(r))try{var t=s[i](n);s[a](n),JSON.parse(t).forEach(e)}catch(n){s.error(n)}})}(T),s.on(R,"visibilitychange",q,!1),q()}),s.once("$afterunload",function(){o=1,q()}),s.on("$afterPageTransition",function(){y=0,I=w}),s.register(g,{log:T,register:function(n){m.push(n)}}))});csa.plugin(function(n){var r=n.config["Events.SushiEndpoint"];n("Transport")("register",{accepts:function(n){return n.schemaId},post:function(n){var t=n.map(function(n){return{data:n}});return{url:r,body:JSON.stringify({events:t})}},preflight:function(){var n,t=/\/\/(.*?)\//.exec(r);return t&&t[1]&&(n="https://"+t[1]+"/ping"),{url:n}},chunks:function(n){for(var t=[];500<n.length;)t.push(n.splice(0,500));return t.push(n),t}})});csa.plugin(function(n){var t,a,o,r,e=n.config,i="PageViews",d=e[i+".ImpressionMinimumTime"]||1e3,s="hidden",c="innerHeight",l="innerWidth",g="renderedTo",f=g+"Viewed",m=g+"Meaningful",u=g+"Impressed",p=1,h=2,v=3,w=4,P=5,y="loaded",I=7,b=8,T=n.global,S=n.on,E=n("Events",{producerId:"csa",lob:e.lob||"0"}),K=T.document,V={},$={},M=P,R=e["KillSwitch."+i],H=e["KillSwitch.PageRender"],W=e["KillSwitch.PageImpressed"];function j(e){if(!V[I]){if(V[e]=n.time(),e!==v&&e!==y||(t=t||V[e]),t&&M===w){if(a=a||V[e],!R)(i={})[m]=t-o,i[f]=a-o,k("PageView.5",i);r=r||n.timeout(x,d)}var i;if(e!==P&&e!==p&&e!==h||(clearTimeout(r),r=0),e!==p&&e!==h||H||k("PageRender.4",{transitionType:e===p?"hard":"soft"}),e===I&&!W)(i={})[m]=t-o,i[f]=a-o,i[u]=V[e]-o,k("PageImpressed.3",i)}}function k(e,i){$[e]||(i.schemaId="<ns>."+e,E("log",i,{ent:"all"}),$[e]=1)}function q(){0===T[c]&&0===T[l]?(M=b,n("Events")("setEntity",{page:{viewport:"hidden-iframe"}})):M=K[s]?P:w,j(M)}function x(){j(I),r=0}function z(){var e=o?h:p;V={},$={},a=t=0,o=n.time(),j(e),q()}function A(){var e=K.readyState;"interactive"===e&&j(v),"complete"===e&&j(y)}K&&void 0!==K[s]?(z(),S(K,"visibilitychange",q,!1),S(K,"readystatechange",A,!1),S("$afterPageTransition",z),S("$timing:loaded",A),n.once("$load",A)):n.warn("Page visibility not supported")});csa.plugin(function(c){var s=c.config["Interactions.ParentChainLength"]||35,e="click",r="touches",f="timeStamp",o="length",u="pageX",g="pageY",p="pageXOffset",h="pageYOffset",m=250,v=5,d=200,l=.5,t={capture:!0,passive:!0},X=c.global,Y=c.emit,n=c.on,x=X.Math.abs,a=(X.document||{}).documentElement||{},y={x:0,y:0,t:0,sX:0,sY:0},N={x:0,y:0,t:0,sX:0,sY:0};function b(t){if(t.id)return"//*[@id='"+t.id+"']";var e=function(t){var e,n=1;for(e=t.previousSibling;e;e=e.previousSibling)e.nodeName===t.nodeName&&(n+=1);return n}(t),n=t.nodeName;return 1!==e&&(n+="["+e+"]"),t.parentNode&&(n=b(t.parentNode)+"/"+n),n}function I(t,e,n){var a=c("Content",{target:n}),i={schemaId:"<ns>.ContentInteraction.2",interaction:t,interactionData:e,messageId:c.UUID()};if(n){var r=b(n);r&&(i.attribution=r);var o=function(t){for(var e=t,n=e.tagName,a=!1,i=t?t.href:null,r=0;r<s;r++){if(!e||!e.parentElement){a=!0;break}n=(e=e.parentElement).tagName+"/"+n,i=i||e.href}return a||(n=".../"+n),{pc:n,hr:i}}(n);o.pc&&(i.interactionData.parentChain=o.pc),o.hr&&(i.interactionData.href=o.hr)}a("log",i),Y("$content.interaction",{e:i,w:a})}function i(t){I(e,{interactionX:""+t.pageX,interactionY:""+t.pageY},t.target)}function C(t){if(t&&t[r]&&1===t[r][o]){var e=t[r][0];N=y={e:t.target,x:e[u],y:e[g],t:t[f],sX:X[p],sY:X[h]}}}function D(t){if(t&&t[r]&&1===t[r][o]&&y&&N){var e=t[r][0],n=t[f],a=n-N.t,i={e:t.target,x:e[u],y:e[g],t:n,sX:X[p],sY:X[h]};N=i,d<=a&&(y=i)}}function E(t){if(t){var e=x(y.x-N.x),n=x(y.y-N.y),a=x(y.sX-N.sX),i=x(y.sY-N.sY),r=t[f]-y.t;if(m<1e3*e/r&&v<e||m<1e3*n/r&&v<n){var o=n<e;o&&a&&e*l<=a||!o&&i&&n*l<=i||I((o?"horizontal":"vertical")+"-swipe",{interactionX:""+y.x,interactionY:""+y.y,endX:""+N.x,endY:""+N.y},y.e)}}}n(a,e,i,t),n(a,"touchstart",C,t),n(a,"touchmove",D,t),n(a,"touchend",E,t)});csa.plugin(function(r){var a,o,t,c,e,n="MutationObserver",f="observe",u="disconnect",i="mutObs",l="_csa_flt",b="_csa_llt",m="_csa_mr",d="_csa_mi",v="lastChild",p="length",_={childList:!0,subtree:!0},g=10,h=25,s=1e3,y=4,O=r.global,k=O.document,w=k.body||k.documentElement,I=Date.now,L=[],B=[],M=[],Y=0,$=0,x=0,A=1,C=[],D=[],E=0,F=r.blank,N={buffered:1},S=0;function T(e){r.global.ue_csa_ss_tag||r.emit("$csmTag:"+e,0,N)}I&&O[n]?(T(i+"Yes"),Y=0,o=new O[n](j),(t=new O[n](V))[f](w,{attributes:!0,subtree:!0,attributeFilter:["src"],attributeOldValue:!0}),F=r.on(O,"scroll",q,{passive:!0}),r.once("$ready",H),A&&(G(),e=r.interval(z,s)),r.register("SpeedIndexBuffers",{getBuffers:function(e){e&&(H(),q(),e(Y,C,L,B,M),o&&o[u](),t&&t[u](),F())},registerListener:function(e){a=e},replayModuleIsLive:function(){r.timeout(H,0)}})):T(i+"No");function V(e){L.push({t:I(),m:e})}function j(e){B.push({t:I(),m:e}),S||T(i+"Active"),S=x=1,a&&a()}function q(){x&&(M.push({t:I(),y:$}),$=O.pageYOffset,x=0)}function z(){var e=I();(!c||s<e-c)&&G()}function G(){for(var e=w,t=I(),n=[],u=[],i=0,s=0;e;)e[l]?++i:(e[l]=t,n.push(e),s=1),u[p]<y&&u.push(e),e[d]=E,e[b]=t,e=e[v];s&&(i<D[p]&&function(e){for(var t=e,n=D[p];t<n;t++){var u=D[t];if(u){if(u[m])break;if(u[d]<E){u[m]=1,o[f](u,_);break}}}}(i),D=u,C.push({t:t,m:n}),++E,x=s,a&&a()),A&&r.timeout(G,s?g:h),c=t}function H(){A&&(A=0,e&&O.clearInterval(e),e=null,G(),o[f](w,_))}}); var ue_csa_ss_tag = true, ue_dsbl_ss_um = false; csa.plugin(function(b){var a=b.global,f=a.uet,g=a.uex,c=a.ue,d=a.Object,h=0,e={largestContentfulPaint:"lcp",visuallyLoaded50:"vl50",visuallyLoaded90:"vl90",visuallyLoaded100:"vl100"},l="perfNo perfYes browserQuiteFn browserQuiteUd browserQuiteLd browserQuiteMut mutObsNo mutObsYes mutObsActive startVL endVL".split(" ");a.ue_dsbl_ss_um||(e.speedIndex="si",e.atfSpeedIndex="atfsi");b&&f&&g&&d.keys&&c&&(b.once("$ditched.beforemitigation",function(){h=1}),d.keys(e).forEach(function(a){b.on("$timing:"+a, function(b){var k=e[a];if(c.isl||h){var d="csa:"+k;f(k,d,void 0,b);g("at",d)}else f(k,void 0,void 0,b)})}),a.ue_csa_ss_tag||l.forEach(function(a){b.on("$csmTag:"+a,function(){c.tag&&c.tag(a);(c.isl||h)&&g("at","csa:"+a)},{buffered:1})}))}); window.rx = { 'rid':'8CD8WFQGA8E5PSWF02S4', 'sid':'146-2461427-5656742', 'c':{ 'rxp':'/rd/uedata' }}; </script> <script>window.ue && ue.count && ue.count('CSMLibrarySize', 16679)</script> <!-- sp:end-feature:csm:body-open --> <!-- sp:feature:nav-inline-js --> <!-- NAVYAAN JS --> <script type="text/javascript">!function(n){function e(n,e){return{m:n,a:function(n){return[].slice.call(n)}(e)}}document.createElement("header");var r=function(n){function u(n,r,u){n[u]=function(){a._replay.push(r.concat(e(u,arguments)))}}var a={};return a._sourceName=n,a._replay=[],a.getNow=function(n,e){return e},a.when=function(){var n=[e("when",arguments)],r={};return u(r,n,"run"),u(r,n,"declare"),u(r,n,"publish"),u(r,n,"build"),r.depends=n,r.iff=function(){var r=n.concat([e("iff",arguments)]),a={};return u(a,r,"run"),u(a,r,"declare"),u(a,r,"publish"),u(a,r,"build"),a},r},u(a,[],"declare"),u(a,[],"build"),u(a,[],"publish"),u(a,[],"importEvent"),r._shims.push(a),a};r._shims=[],n.$Nav||(n.$Nav=r("rcx-nav")),n.$Nav.make||(n.$Nav.make=r)}(window)</script><script type="text/javascript"> $Nav.importEvent('navbarJS-beaconbelt'); $Nav.declare('img.sprite', { 'png32': 'https://m.media-amazon.com/images/G/01/gno/sprites/nav-sprite-global-1x-reorg-privacy._CB541706272_.png', 'png32-2x': 'https://m.media-amazon.com/images/G/01/gno/sprites/nav-sprite-global-2x-reorg-privacy._CB541706272_.png' }); $Nav.declare('img.timeline', { 'timeline-icon-2x': 'https://m.media-amazon.com/images/G/01/gno/sprites/timeline_sprite_2x._CB443581191_.png' }); window._navbarSpriteUrl = 'https://m.media-amazon.com/images/G/01/gno/sprites/nav-sprite-global-1x-reorg-privacy._CB541706272_.png'; $Nav.declare('img.pixel', 'https://m.media-amazon.com/images/G/01/x-locale/common/transparent-pixel._CB485935036_.gif'); </script> <img src="https://m.media-amazon.com/images/G/01/gno/sprites/nav-sprite-global-1x-reorg-privacy._CB541706272_.png" style="display:none" alt=""/> <script type="text/javascript">var nav_t_after_preload_sprite = + new Date();</script> <script> (window.AmazonUIPageJS ? AmazonUIPageJS : P).when('navCF').execute(function() { (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https://images-na.ssl-images-amazon.com/images/I/51V5yVZxXVL._RC|71ivn62FYHL.js,01QvReFeJyL.js,01VfhmbHmKL.js,71fUQ31BV4L.js,41jBieyCvYL.js,01wXnKULArL.js,01+pnQJuQ0L.js,21Un7Tx1UGL.js,4122so6jZwL.js,51HrkAbbpLL.js,31pICZB5M9L.js,11lw6J7z8iL.js,31NSDarX4TL.js,01VYGE8lGhL.js,01tDwkxEoCL.js_.js?AUIClients/NavDesktopUberAsset#desktop.language-en.us.878681-T1.803398-T1.1089549-T1.310484-T1.1043986-T1.872752-T1.1089768-T1.836079-T1.1011005-T1'); }); </script> <!-- sp:end-feature:nav-inline-js --> <!-- sp:feature:nav-skeleton --> <!-- sp:end-feature:nav-skeleton --> <!-- sp:feature:navbar --> <!--Pilu --> <!-- NAVYAAN --> <!-- navmet initial definition --> <script type='text/javascript'> if(window.navmet===undefined) { window.navmet=[]; if (window.performance && window.performance.timing && window.ue_t0) { var t = window.performance.timing; var now = + new Date(); window.navmet.basic = { 'networkLatency': (t.responseStart - t.fetchStart), 'navFirstPaint': (now - t.responseStart), 'NavStart': (now - window.ue_t0) }; window.navmet.push({key:"NavFirstPaintStart",end:+new Date(),begin:window.ue_t0}); } } if (window.ue_t0) { window.navmet.push({key:"NavMainStart",end:+new Date(),begin:window.ue_t0}); } </script> <script type='text/javascript'>window.navmet.tmp=+new Date();</script> <script type='text/javascript'> // Nav start should be logged at this place only if request is NOT progressively loaded. // For progressive loading case this metric is logged as part of skeleton. // Presence of skeleton signals that request is progressively loaded. if(!document.getElementById("navbar-skeleton")) { window.uet && uet('ns'); } window._navbar = (function (o) { o.componentLoaded = o.loading = function(){}; o.browsepromos = {}; o.issPromos = []; return o; }(window._navbar || {})); window._navbar.declareOnLoad = function () { window.$Nav && $Nav.declare('page.load'); }; if (window.addEventListener) { window.addEventListener("load", window._navbar.declareOnLoad, false); } else if (window.attachEvent) { window.attachEvent("onload", window._navbar.declareOnLoad); } else if (window.$Nav) { $Nav.when('page.domReady').run("OnloadFallbackSetup", function () { window._navbar.declareOnLoad(); }); } window.$Nav && $Nav.declare('logEvent.enabled', 'false'); window.$Nav && $Nav.declare('config.lightningDeals', {}); </script> <style mark="aboveNavInjectionCSS" type="text/css"> #nav-flyout-ewc .nav-flyout-buffer-left { display: none; } #nav-flyout-ewc .nav-flyout-buffer-right { display: none; } div#navSwmHoliday.nav-focus {border: none;margin: 0;} </style> <script mark="aboveNavInjectionJS" type="text/javascript"> try { if(window.navmet===undefined)window.navmet=[]; if(window.$Nav) { $Nav.when('$', 'config', 'flyout.accountList', 'SignInRedirect', 'dataPanel').run('accountListRedirectFix', function ($, config, flyout, SignInRedirect, dataPanel) { if (!config.accountList) { return; } flyout.getPanel().onData(function (data) { if (SignInRedirect) { var $anchors = $('[data-nav-role=signin]', flyout.elem()); $.each($anchors, function(i, anchorEl) {SignInRedirect.setRedirectUrl($(anchorEl), null, null);});}});}); $Nav.when('$').run('defineIsArray', function(jQuery) { if(jQuery.isArray===undefined) { jQuery.isArray=function(param) { if(param.length===undefined) { return false; } return true; }; } }); $Nav.declare('config.cartFlyoutDisabled', 'true'); $Nav.when('$','$F','config','logEvent','panels','phoneHome','dataPanel','flyouts.renderPromo','flyouts.sloppyTrigger','flyouts.accessibility','util.mouseOut','util.onKey','debug.param').build('flyouts.buildSubPanels',function($,$F,config,logEvent,panels,phoneHome,dataPanel,renderPromo,createSloppyTrigger,a11yHandler,mouseOutUtility,onKey,debugParam){var flyoutDebug=debugParam('navFlyoutClick');return function(flyout,event){var linkKeys=[];$('.nav-item',flyout.elem()).each(function(){var $item=$(this);linkKeys.push({link:$item,panelKey:$item.attr('data-nav-panelkey')});});if(linkKeys.length===0){return;} var visible=false;var $parent=$('<div class=\'nav-subcats\'></div>').appendTo(flyout.elem());var panelGroup=flyout.getName()+'SubCats';var hideTimeout=null;var sloppyTrigger=createSloppyTrigger($parent);var showParent=function(){if(hideTimeout){clearTimeout(hideTimeout);hideTimeout=null;} if(visible){return;} var height=$('#nav-flyout-shopAll').height(); $parent.css({'height': height});$parent.animate({width:'show'},{duration:200,complete:function(){$parent.css({overflow:'visible'});}});visible=true;};var hideParentNow=function(){$parent.stop().css({overflow:'hidden',display:'none',width:'auto',height:'auto'});panels.hideAll({group:panelGroup});visible=false;if(hideTimeout){clearTimeout(hideTimeout);hideTimeout=null;}};var hideParent=function(){if(!visible){return;} if(hideTimeout){clearTimeout(hideTimeout);hideTimeout=null;} hideTimeout=setTimeout(hideParentNow,10);};flyout.onHide(function(){sloppyTrigger.disable();hideParentNow();this.elem().hide();});var addPanel=function($link,panelKey){var panel=dataPanel({className:'nav-subcat',dataKey:panelKey,groups:[panelGroup],spinner:false,visible:false});if(!flyoutDebug){var mouseout=mouseOutUtility();mouseout.add(flyout.elem());mouseout.action(function(){panel.hide();});mouseout.enable();} var a11y=a11yHandler({link:$link,onEscape:function(){panel.hide();$link.focus();}});var logPanelInteraction=function(promoID,wlTriggers){var logNow=$F.once().on(function(){var panelEvent=$.extend({},event,{id:promoID});if(config.browsePromos&&!!config.browsePromos[promoID]){panelEvent.bp=1;} logEvent(panelEvent);phoneHome.trigger(wlTriggers);});if(panel.isVisible()&&panel.hasInteracted()){logNow();}else{panel.onInteract(logNow);}};panel.onData(function(data){renderPromo(data.promoID,panel.elem());logPanelInteraction(data.promoID,data.wlTriggers);});panel.onShow(function(){var columnCount=$('.nav-column',panel.elem()).length;panel.elem().addClass('nav-colcount-'+columnCount);showParent();var $subCatLinks=$('.nav-subcat-links > a',panel.elem());var length=$subCatLinks.length;if(length>0){var firstElementLeftPos=$subCatLinks.eq(0).offset().left;for(var i=1;i<length;i++){if(firstElementLeftPos===$subCatLinks.eq(i).offset().left){$subCatLinks.eq(i).addClass('nav_linestart');}} if($('span.nav-title.nav-item',panel.elem()).length===0){var catTitle=$.trim($link.html());catTitle=catTitle.replace(/ref=sa_menu_top/g,'ref=sa_menu');var $subPanelTitle=$('<span class=\'nav-title nav-item\'>'+ catTitle+'</span>');panel.elem().prepend($subPanelTitle);}} $link.addClass('nav-active');});panel.onHide(function(){$link.removeClass('nav-active');hideParent();a11y.disable();sloppyTrigger.disable();});panel.onShow(function(){a11y.elems($('a, area',panel.elem()));});sloppyTrigger.register($link,panel);if(flyoutDebug){$link.click(function(){if(panel.isVisible()){panel.hide();}else{panel.show();}});} var panelKeyHandler=onKey($link,function(){if(this.isEnter()||this.isSpace()){panel.show();}},'keydown',false);$link.focus(function(){panelKeyHandler.bind();}).blur(function(){panelKeyHandler.unbind();});panel.elem().appendTo($parent);};var hideParentAndResetTrigger=function(){hideParent();sloppyTrigger.disable();};for(var i=0;i<linkKeys.length;i++){var item=linkKeys[i];if(item.panelKey){addPanel(item.link,item.panelKey);}else{item.link.mouseover(hideParentAndResetTrigger);}}};});}; } catch ( err ) { if ( window.$Nav ) { window.$Nav.when('metrics', 'logUeError').run(function(metrics, log) { metrics.increment('NavJS:AboveNavInjection:error'); log(err.toString(), { 'attribution': 'rcx-nav', 'logLevel': 'FATAL' }); }); } } </script> <noscript> <style type="text/css"><!-- #navbar #nav-shop .nav-a:hover { color: #ff9900; text-decoration: underline; } #navbar #nav-search .nav-search-facade, #navbar #nav-tools .nav-icon, #navbar #nav-shop .nav-icon, #navbar #nav-subnav .nav-hasArrow .nav-arrow { display: none; } #navbar #nav-search .nav-search-submit, #navbar #nav-search .nav-search-scope { display: block; } #nav-search .nav-search-scope { padding: 0 5px; } #navbar #nav-search .nav-search-dropdown { position: relative; top: 5px; height: 23px; font-size: 14px; opacity: 1; filter: alpha(opacity = 100); } --></style> </noscript> <script type='text/javascript'>window.navmet.push({key:'PreNav',end:+new Date(),begin:window.navmet.tmp});</script> <a id='nav-top'></a> <a id="skiplink" tabindex="0" class="skip-link">Skip to main content</a> <script type='text/javascript'>window.navmet.main=+new Date();</script> <header id="navbar-main" class = "nav-opt-sprite nav-flex nav-locale-us nav-lang-en nav-ssl nav-unrec nav-progressive-attribute"> <div id='navbar' cel_widget_id='Navigation-desktop-navbar' role='navigation' class="nav-sprite-v1 celwidget nav-bluebeacon nav-a11y-t1 bold-focus-hover layout2 nav-flex layout3 layout3-alt nav-celnav-t11-spruce nav-packard-glow hamburger nav-progressive-attribute"> <div id='nav-belt'> <div class='nav-left'> <script type='text/javascript'>window.navmet.tmp=+new Date();</script> <div id="nav-logo" class="nav-celnav-t11-spruce nav-progressive-attribute"> <a href="/ref=nav_logo" id="nav-logo-sprites" class="nav-logo-link nav-progressive-attribute" aria-label="Amazon"> <span class="nav-sprite nav-logo-base"></span> <span id="logo-ext" class="nav-sprite nav-logo-ext nav-progressive-content"></span> <span class="nav-logo-locale">.us</span> </a> </div> <script type='text/javascript'>window.navmet.push({key:'Logo',end:+new Date(),begin:window.navmet.tmp});</script> <div id="nav-global-location-slot"> <span id="nav-global-location-data-modal-action" class="a-declarative nav-progressive-attribute" data-a-modal='{&quot;width&quot;:375, &quot;closeButton&quot;:&quot;true&quot;,&quot;popoverLabel&quot;:&quot;Choose your location&quot;, &quot;ajaxHeaders&quot;:{&quot;anti-csrftoken-a2z&quot;:&quot;hAPFx095MOATvMLX3qykpyTn0LnHypo2z2tgYUfXLEWfAAAAAGdBro0AAAAB&quot;}, &quot;name&quot;:&quot;glow-modal&quot;, &quot;url&quot;:&quot;/portal-migration/hz/glow/get-rendered-address-selections?deviceType&#x3D;desktop&amp;pageType&#x3D;PromotionsDiscoveryHz&amp;storeContext&#x3D;NoStoreName&amp;actionSource&#x3D;desktop-modal&quot;, &quot;footer&quot;:&quot;&lt;span class&#x3D;\&quot;a-declarative\&quot; data-action&#x3D;\&quot;a-popover-close\&quot; data-a-popover-close&#x3D;\&quot;{}\&quot;&gt;&lt;span class&#x3D;\&quot;a-button a-button-primary\&quot;&gt;&lt;span class&#x3D;\&quot;a-button-inner\&quot;&gt;&lt;button name&#x3D;\&quot;glowDoneButton\&quot; class&#x3D;\&quot;a-button-text\&quot; type&#x3D;\&quot;button\&quot;&gt;Done&lt;/button&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&quot;,&quot;header&quot;:&quot;Choose your location&quot;}' data-action="a-modal"> <a id="nav-global-location-popover-link" role="button" tabindex="0" class="nav-a nav-a-2 a-popover-trigger a-declarative nav-progressive-attribute" href=""> <div class="nav-sprite nav-progressive-attribute" id="nav-packard-glow-loc-icon"></div> <div id="glow-ingress-block"> <span class="nav-line-1 nav-progressive-content" id="glow-ingress-line1"> Deliver to </span> <span class="nav-line-2 nav-progressive-content" id="glow-ingress-line2"> Singapore </span> </div> </a> </span> <input data-addnewaddress="add-new" id="unifiedLocation1ClickAddress" name="dropdown-selection" type="hidden" value="add-new" class="nav-progressive-attribute" /> <input data-addnewaddress="add-new" id="ubbShipTo" name="dropdown-selection-ubb" type="hidden" value="add-new" class="nav-progressive-attribute"/> <input id="glowValidationToken" name="glow-validation-token" type="hidden" value="hAPFx095MOATvMLX3qykpyTn0LnHypo2z2tgYUfXLEWfAAAAAGdBro0AAAAB" class="nav-progressive-attribute"/> <input id="glowDestinationType" name="glow-destination-type" type="hidden" value="COUNTRY" class="nav-progressive-attribute"/> </div> <div id="nav-global-location-toaster-script-container" class="nav-progressive-content"> <!-- NAVYAAN-GLOW-NAV-TOASTER --> <script> P.when('glow-toaster-strings').execute(function(S) { S.load({"glow-toaster-address-change-error":"An error has occurred and the address has not been updated. Please try again.","glow-toaster-unknown-error":"An error has occurred. Please try again."}); }); </script> <script> P.when('glow-toaster-manager').execute(function(M) { M.create({"pageType":"PromotionsDiscoveryHz","aisTransitionState":null,"rancorLocationSource":"REALM_DEFAULT"}) }); </script> </div> </div> <div class='nav-fill'> <script type='text/javascript'>window.navmet.tmp=+new Date();</script> <div id="nav-search"> <div id="nav-bar-left"></div> <form id="nav-search-bar-form" accept-charset="utf-8" action="/s/ref=nb_sb_noss" class="nav-searchbar nav-progressive-attribute" method="GET" name="site-search" role="search" > <div class="nav-left"> <div id="nav-search-dropdown-card"> <div class="nav-search-scope nav-sprite"> <div class="nav-search-facade" data-value="search-alias=aps"> <span id="nav-search-label-id" class="nav-search-label nav-progressive-content">All</span> <i class="nav-icon"></i> </div> <label id="searchDropdownDescription" for="searchDropdownBox" class="nav-progressive-attribute" style="display:none">Select the department you want to search in</label> <select aria-describedby="searchDropdownDescription" class="nav-search-dropdown searchSelect nav-progressive-attrubute nav-progressive-search-dropdown" data-nav-digest="k+fyIAyB82R9jVEmroQ0OWwSW3A=" data-nav-selected="0" id="searchDropdownBox" name="url" style="display: block;" tabindex="0" title="Search in" > <option selected="selected" value="search-alias=aps">All Departments</option> <option value="search-alias=arts-crafts-intl-ship">Arts & Crafts</option> <option value="search-alias=automotive-intl-ship">Automotive</option> <option value="search-alias=baby-products-intl-ship">Baby</option> <option value="search-alias=beauty-intl-ship">Beauty & Personal Care</option> <option value="search-alias=stripbooks-intl-ship">Books</option> <option value="search-alias=fashion-boys-intl-ship">Boys' Fashion</option> <option value="search-alias=computers-intl-ship">Computers</option> <option value="search-alias=deals-intl-ship">Deals</option> <option value="search-alias=digital-music">Digital Music</option> <option value="search-alias=electronics-intl-ship">Electronics</option> <option value="search-alias=fashion-girls-intl-ship">Girls' Fashion</option> <option value="search-alias=hpc-intl-ship">Health & Household</option> <option value="search-alias=kitchen-intl-ship">Home & Kitchen</option> <option value="search-alias=industrial-intl-ship">Industrial & Scientific</option> <option value="search-alias=digital-text">Kindle Store</option> <option value="search-alias=luggage-intl-ship">Luggage</option> <option value="search-alias=fashion-mens-intl-ship">Men's Fashion</option> <option value="search-alias=movies-tv-intl-ship">Movies & TV</option> <option value="search-alias=music-intl-ship">Music, CDs & Vinyl</option> <option value="search-alias=pets-intl-ship">Pet Supplies</option> <option value="search-alias=instant-video">Prime Video</option> <option value="search-alias=software-intl-ship">Software</option> <option value="search-alias=sporting-intl-ship">Sports & Outdoors</option> <option value="search-alias=tools-intl-ship">Tools & Home Improvement</option> <option value="search-alias=toys-and-games-intl-ship">Toys & Games</option> <option value="search-alias=videogames-intl-ship">Video Games</option> <option value="search-alias=fashion-womens-intl-ship">Women's Fashion</option> </select> </div> </div> </div> <div class="nav-fill"> <div class="nav-search-field "> <div class="ac-input-container"> <div class="ac-live-field" id="ac-liveField" role="status" aria-atomic="true" aria-live="polite"></div> <div class="ac-input-overlay" aria-hidden="true"> <span class="ac-ghost" id="ac-predictive-text"> <span class="ac-current-input" id="ac-prefix"></span><span class="ac-ghost-suggestion" id="ac-prediction"></span> </span> </div> <label for="twotabsearchtextbox" style="display: none;">Search Amazon</label> <input type="text" id="twotabsearchtextbox" value="" name="field-keywords" autocomplete="off" placeholder="Search Amazon" class="nav-input nav-progressive-attribute" dir="auto" tabindex="0" aria-label="Search Amazon" role="searchbox" aria-autocomplete="list" aria-controls="sac-autocomplete-results-container" aria-expanded="false" aria-haspopup="grid" spellcheck="false" > </div> </div> <div id="nav-iss-attach"></div> </div> <div class="nav-right"> <div class="nav-search-submit nav-sprite"> <span id="nav-search-submit-text" class="nav-search-submit-text nav-sprite nav-progressive-attribute" aria-label="Go"> <input id="nav-search-submit-button" type="submit" class="nav-input nav-progressive-attribute" value="Go" tabindex="0"> </span> </div> </div> </form> </div> <script type='text/javascript'>window.navmet.push({key:'Search',end:+new Date(),begin:window.navmet.tmp});</script> </div> <div class='nav-right'> <script type='text/javascript'>window.navmet.tmp=+new Date();</script> <div id='nav-tools' class="layoutToolbarPadding"> <a href="/customer-preferences/edit?ie=UTF8&preferencesReturnUrl=%2F&ref_=topnav_lang_ais" id="icp-nav-flyout" class="nav-a nav-a-2 icp-link-style-2" aria-label="Choose a language for shopping."> <span class="icp-nav-link-inner"> <span class="nav-line-1"> </span> <span class="nav-line-2"> <span class="icp-nav-flag icp-nav-flag-us icp-nav-flag-lop"></span> <div>EN</div> <span class="nav-icon nav-arrow"></span> </span> </span> </a> <a href="https://www.amazon.com/ap/signin?openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fpromotion%2Fpsp%2FA2OD29RWOSXA27%2F%3F_encoding%3DUTF8%26redirectAsin%3DB0BBG2SH1B%26redirectMerchantId%3DA1UPHU2B8LTG19%26ref%3Dpsp_external%26source%3Ddp_cxcw%26ref_%3Dnav_ya_signin&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.assoc_handle=usflex&openid.mode=checkid_setup&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0" class="nav-a nav-a-2 nav-progressive-attribute" data-nav-ref="nav_ya_signin" data-nav-role="signin" data-ux-jq-mouseenter="true" id="nav-link-accountList" tabindex="0" data-csa-c-type="link" data-csa-c-slot-id="nav-link-accountList" data-csa-c-content-id="nav_ya_signin"> <div class="nav-line-1-container"><span id="nav-link-accountList-nav-line-1" class="nav-line-1 nav-progressive-content">Hello, sign in</span></div> <span class="nav-line-2 ">Account & Lists<span class="nav-icon nav-arrow"></span> </span> </a> <a href="/gp/css/order-history?ref_=nav_orders_first" class="nav-a nav-a-2 nav-progressive-attribute" id="nav-orders" tabindex="0"> <span class="nav-line-1">Returns</span> <span class="nav-line-2">& Orders<span class="nav-icon nav-arrow"></span></span> </a> <a href="/gp/cart/view.html?ref_=nav_cart" aria-label="0 items in cart" class="nav-a nav-a-2 nav-progressive-attribute" id="nav-cart"> <div id="nav-cart-count-container"> <span id="nav-cart-count" aria-hidden="true" class="nav-cart-count nav-cart-0 nav-progressive-attribute nav-progressive-content">0</span> <span class="nav-cart-icon nav-sprite"></span> </div> <div id="nav-cart-text-container" class=" nav-progressive-attribute"> <span aria-hidden="true" class="nav-line-1"> </span> <span aria-hidden="true" class="nav-line-2"> Cart <span class="nav-icon nav-arrow"></span> </span> </div> </a> </div> <script type='text/javascript'>window.navmet.push({key:'Tools',end:+new Date(),begin:window.navmet.tmp});</script> </div> </div> <div id='nav-main' class='nav-sprite'> <div class='nav-left'> <script type='text/javascript'>window.navmet.tmp=+new Date();</script> <a href="/gp/site-directory?ref_=nav_em_js_disabled" id="nav-hamburger-menu" role="button" aria-label="Open All Categories Menu" aria-expanded="false" data-csa-c-type="widget" data-csa-c-slot-id="HamburgerMenuDesktop" data-csa-c-interaction-events="click" > <i class="hm-icon nav-sprite"></i> <span class="hm-icon-label">All</span> </a> <script type="text/javascript"> var hmenu = document.getElementById("nav-hamburger-menu"); hmenu.setAttribute("href", "javascript: void(0)"); window.navHamburgerMetricLogger = function() { if (window.ue && window.ue.count) { var metricName = "Nav:Hmenu:IconClickActionPending"; window.ue.count(metricName, (ue.count(metricName) || 0) + 1); } window.$Nav && $Nav.declare("navHMenuIconClicked",!0); window.$Nav && $Nav.declare("navHMenuIconClickedNotReadyTimeStamp", Date.now()); }; hmenu.addEventListener("click", window.navHamburgerMetricLogger); window.$Nav && $Nav.declare('hamburgerMenuIconAvailableOnLoad', false); </script> <script type='text/javascript'>window.navmet.push({key:'HamburgerMenuIcon',end:+new Date(),begin:window.navmet.tmp});</script> </div> <div class='nav-fill'> <div id="nav-shop"> </div> <div id='nav-xshop-container'> <div id='nav-xshop' class="nav-progressive-content"> <script type='text/javascript'>window.navmet.tmp=+new Date();</script> <a href="/gp/goldbox?ref_=nav_cs_gb" class="nav-a " tabindex="0" data-csa-c-type="link" data-csa-c-slot-id="nav_cs_0" data-csa-c-content-id="nav_cs_gb">Today's Deals</a> <a href="/gp/help/customer/display.html?nodeId=508510&ref_=nav_cs_customerservice" class="nav-a " tabindex="0" data-csa-c-type="link" data-csa-c-slot-id="nav_cs_1" data-csa-c-content-id="nav_cs_customerservice">Customer Service</a> <a href="/gp/browse.html?node=16115931011&ref_=nav_cs_registry" class="nav-a " tabindex="0" data-csa-c-type="link" data-csa-c-slot-id="nav_cs_2" data-csa-c-content-id="nav_cs_registry">Registry</a> <a href="/gift-cards/b/?ie=UTF8&node=2238192011&ref_=nav_cs_gc" class="nav-a " tabindex="0" data-csa-c-type="link" data-csa-c-slot-id="nav_cs_3" data-csa-c-content-id="nav_cs_gc">Gift Cards</a> <a href="/b/?_encoding=UTF8&ld=AZUSSOA-sell&node=12766669011&ref_=nav_cs_sell" class="nav-a " tabindex="0" data-csa-c-type="link" data-csa-c-slot-id="nav_cs_4" data-csa-c-content-id="nav_cs_sell">Sell</a> <a href="/gp/help/customer/accessibility" aria-label="Click to call our Disability Customer Support line, or reach us directly at 1-888-283-1678" class="nav-hidden-aria " tabindex="0" data-csa-c-type="link" data-csa-c-slot-id="nav_cs_5" >Disability Customer Support</a> <script type='text/javascript'>window.navmet.push({key:'CrossShop',end:+new Date(),begin:window.navmet.tmp});</script> </div> </div> </div> <div class='nav-right'> <script type='text/javascript'>window.navmet.tmp=+new Date();</script><!-- Navyaan SWM --> <div id="nav-swmslot" class="nav-swm-text-widget"> <a href="/blackfriday/?_encoding=UTF8&ref_=nav_swm_US_BFCM23HP_DO_GWHP_Desk_SWM_BF_Day2to5&pf_rd_p=48d27570-fcd0-4347-83ac-c96a2acc2139&pf_rd_s=nav-sitewide-msg-text-export&pf_rd_t=4201&pf_rd_i=navbar-4201&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=8CD8WFQGA8E5PSWF02S4" id="swm-link" class="nav_a nav-swm-text nav-progressive-attribute nav-progressive-content">Shop Black Friday deals</a> </div><script type='text/javascript'>window.navmet.push({key:'SWM',end:+new Date(),begin:window.navmet.tmp});</script> </div> </div> <div id='nav-subnav-toaster'></div> <div id="nav-progressive-subnav"> </div> </div> </header> <script type='text/javascript'>window.navmet.push({key:'NavBar',end:+new Date(),begin:window.navmet.main});</script> <script type="text/javascript"> if (window.ue_t0) { window.navmet.push({key:"NavMainPaintEnd",end:+new Date(),begin:window.ue_t0}); window.navmet.push({key:"NavFirstPaintEnd",end:+new Date(),begin:window.ue_t0}); } </script> <script type='text/javascript'> <!-- window.$Nav && $Nav.declare('config.fixedBarBeacon',false); window.$Nav && $Nav.when("data").run(function(data) { data({"freshTimeout":{"template":{"name":"flyoutError","data":{"error":{"title":"<style>#nav-flyout-fresh{width:269px;padding:0;}#nav-flyout-fresh .nav-flyout-content{padding:0;}</style><a href='/amazonfresh'><img src='https://images-na.ssl-images-amazon.com/images/G/01/omaha/images/yoda/flyout_72dpi._V270255989_.png' /></a>"}}}},"cartTimeout":{"template":{"name":"flyoutError","data":{"error":{"button":{"text":"Your Cart","url":"/gp/cart/view.html?ref_=nav_err_cart_timeout"},"title":"Oops!","paragraph":"Unable to retrieve your cart."}}}},"primeTimeout":{"template":{"name":"flyoutError","data":{"error":{"title":"<a href='/gp/prime'><img src='https://images-na.ssl-images-amazon.com/images/G/01/prime/piv/YourPrimePIV_fallback_CTA._V327346943_.jpg' /></a>"}}}},"ewcTimeout":{"template":{"name":"flyoutError","data":{"error":{"button":{"text":"Your Cart","url":"/gp/cart/view.html?ref_=nav_err_ewc_timeout"},"title":"Oops!","paragraph":"There's a problem loading your cart right now."}}}},"errorWishlist":{"template":{"name":"flyoutError","data":{"error":{"button":{"text":"Your Wishlist","url":"/gp/registry/wishlist/?ref_=nav_err_wishlist"},"title":"Oops!","paragraph":"Unable to retrieve your wishlist"}}}},"emptyWishlist":{"template":{"name":"flyoutError","data":{"error":{"button":{"text":"Your Wishlist","url":"/gp/registry/wishlist/?ref_=nav_err_empty_wishlist"},"title":"Oops!","paragraph":"Your list is empty"}}}},"yourAccountContent":{"template":{"name":"flyoutError","data":{"error":{"button":{"text":"Your Account","url":"/gp/css/homepage.html?ref_=nav_err_youraccount"},"title":"Oops!","paragraph":"Unable to retrieve your account"}}}},"shopAllTimeout":{"template":{"name":"flyoutError","data":{"error":{"paragraph":"Unable to retrieve departments, please try again later"}}}},"kindleTimeout":{"template":{"name":"flyoutError","data":{"error":{"paragraph":"Unable to retrieve list, please try again later"}}}}}); }); window.$Nav && $Nav.when("util.templates").run("FlyoutErrorTemplate", function(templates) { templates.add("flyoutError", "<# if(error.title) { #><span class='nav-title'><#=error.title #></span><# } #><# if(error.paragraph) { #><p class='nav-paragraph'><#=error.paragraph #></p><# } #><# if(error.button) { #><a href='<#=error.button.url #>' class='nav-action-button' ><span class='nav-action-inner'><#=error.button.text #></span></a><# } #>"); }); if (typeof uet == 'function') { uet('bb', 'iss-init-pc', {wb: 1}); } if (!window.$SearchJS && window.$Nav) { window.$SearchJS = $Nav.make('sx'); } var opts = { host: "completion.amazon.com/search/complete" , marketId: "1" , obfuscatedMarketId: "ATVPDKIKX0DER" , searchAliases: [] , filterAliases: [] , pageType: "PromotionsDiscoveryHz" , requestId: "8CD8WFQGA8E5PSWF02S4" , sessionId: "146-2461427-5656742" , language: "en_US" , customerId: "" , asin: "" , b2b: 0 , fresh: 0 , isJpOrCn: 0 , isUseAuiIss: 1 }; var issOpts = { fallbackFlag: 1 , isDigitalFeaturesEnabled: 0 , isWayfindingEnabled: 1 , dropdown: "select.searchSelect" , departmentText: "in {department}" , suggestionText: "Search suggestions" , recentSearchesTreatment: "C" , authorSuggestionText: "Explore books by XXAUTHXX" , translatedStringsMap: {"sx-recent-searches":"Recent searches","sx-your-recent-search":"Inspired by your recent search"} , biaTitleText: "" , biaPurchasedText: "" , biaViewAllText: "" , biaViewAllManageText: "" , biaAndText: "" , biaManageText: "" , biaWeblabTreatment: "" , issNavConfig: {} , np: 0 , issCorpus: [] , cf: 1 , removeDeepNodeISS: "" , trendingTreatment: "C" , useAPIV2: "" , opfSwitch: "" , isISSDesktopRefactorEnabled: "1" , useServiceHighlighting: "true" , isInternal: 0 , isAPICachingDisabled: true , isBrowseNodeScopingEnabled: false , isStorefrontTemplateEnabled: false , disableAutocompleteOnFocus: "" }; if (opts.isUseAuiIss === 1 && window.$Nav) { window.$Nav.when('sx.iss').run('iss-mason-init', function(iss){ var issInitObj = buildIssInitObject(opts, issOpts, true); new iss.IssParentCoordinator(issInitObj); $SearchJS.declare('canCreateAutocomplete', issInitObj); }); } else if (window.$SearchJS) { var iss; // BEGIN Deprecated globals var issHost = opts.host , issMktid = opts.marketId , issSearchAliases = opts.searchAliases , updateISSCompletion = function() { iss.updateAutoCompletion(); }; // END deprecated globals $SearchJS.when('jQuery', 'search-js-autocomplete-lib').run('autocomplete-init', initializeAutocomplete); $SearchJS.when('canCreateAutocomplete').run('createAutocomplete', createAutocomplete); } // END conditional for window.$SearchJS function initializeAutocomplete(jQuery) { var issInitObj = buildIssInitObject(opts, issOpts); $SearchJS.declare("canCreateAutocomplete", issInitObj); } // END initializeAutocomplete function initSearchCsl(searchCSL, issInitObject) { searchCSL.init( opts.pageType, (window.ue && window.ue.rid) || opts.requestId ); $SearchJS.declare("canCreateAutocomplete", issInitObject); } // END initSearchCsl function createAutocomplete(issObject) { iss = new AutoComplete(issObject); $SearchJS.publish("search-js-autocomplete", iss); logMetrics(); } // END createAutocomplete function buildIssInitObject(opts, issOpts, isNewIss) { var issInitObj = { src: opts.host , sessionId: opts.sessionId , requestId: opts.requestId , mkt: opts.marketId , obfMkt: opts.obfuscatedMarketId , pageType: opts.pageType , language: opts.language , customerId: opts.customerId , fresh: opts.fresh , b2b: opts.b2b , aliases: opts.searchAliases , fb: issOpts.fallbackFlag , isDigitalFeaturesEnabled: issOpts.isDigitalFeaturesEnabled , isWayfindingEnabled: issOpts.isWayfindingEnabled , issPrimeEligible: issOpts.issPrimeEligible , deptText: issOpts.departmentText , sugText: issOpts.suggestionText , filterAliases: opts.filterAliases , biaWidgetUrl: opts.biaWidgetUrl , recentSearchesTreatment: issOpts.recentSearchesTreatment , authorSuggestionText: issOpts.authorSuggestionText , translatedStringsMap: issOpts.translatedStringsMap , biaTitleText: "" , biaPurchasedText: "" , biaViewAllText: "" , biaViewAllManageText: "" , biaAndText: "" , biaManageText: "" , biaWeblabTreatment: "" , issNavConfig: issOpts.issNavConfig , cf: issOpts.cf , ime: opts.isJpOrCn , mktid: opts.marketId , qs: opts.isJpOrCn , issCorpus: issOpts.issCorpus , deepNodeISS: { searchAliasAccessor: function($) { return (window.SearchPageAccess && window.SearchPageAccess.searchAlias()) || $('select.searchSelect').children().attr('data-root-alias'); }, searchAliasDisplayNameAccessor: function() { return (window.SearchPageAccess && window.SearchPageAccess.searchAliasDisplayName()); } } , removeDeepNodeISS: issOpts.removeDeepNodeISS , trendingTreatment: issOpts.trendingTreatment , useAPIV2: issOpts.useAPIV2 , opfSwitch: issOpts.opfSwitch , isISSDesktopRefactorEnabled: issOpts.isISSDesktopRefactorEnabled , useServiceHighlighting: issOpts.useServiceHighlighting , isInternal: issOpts.isInternal , isAPICachingDisabled: issOpts.isAPICachingDisabled , isBrowseNodeScopingEnabled: issOpts.isBrowseNodeScopingEnabled , isStorefrontTemplateEnabled: issOpts.isStorefrontTemplateEnabled , disableAutocompleteOnFocus: issOpts.disableAutocompleteOnFocus , asin: opts.asin }; // If we aren't using the new ISS then we need to add these properties if (!isNewIss) { issInitObj.dd = issOpts.dropdown; // The element with id searchDropdownBox doesn't exist in C. issInitObj.imeSpacing = issOpts.imeSpacing; issInitObj.isNavInline = 1; issInitObj.triggerISSOnClick = 0; issInitObj.sc = 1; issInitObj.np = issOpts.np; } return issInitObj; } // END buildIssInitObject function logMetrics() { if (typeof uet == 'function' && typeof uex == 'function') { uet('be', 'iss-init-pc', { wb: 1 }); uex('ld', 'iss-init-pc', { wb: 1 }); } } // END logMetrics window.$Nav && $Nav.declare('config.navDeviceType','desktop'); window.$Nav && $Nav.declare('config.navDebugHighres',false); window.$Nav && $Nav.declare('config.pageType','PromotionsDiscoveryHz'); window.$Nav && $Nav.declare('config.subPageType','null'); window.$Nav && $Nav.declare('config.dynamicMenuUrl','\x2Fgp\x2Fnavigation\x2Fajax\x2Fdynamic\x2Dmenu.html'); window.$Nav && $Nav.declare('config.dismissNotificationUrl','\x2Fgp\x2Fnavigation\x2Fajax\x2Fdismissnotification.html'); window.$Nav && $Nav.declare('config.enableDynamicMenus',true); window.$Nav && $Nav.declare('config.isInternal',false); window.$Nav && $Nav.declare('config.isBackup',false); window.$Nav && $Nav.declare('config.isRecognized',false); window.$Nav && $Nav.declare('config.transientFlyoutTrigger','\x23nav\x2Dtransient\x2Dflyout\x2Dtrigger'); window.$Nav && $Nav.declare('config.subnavFlyoutUrl','\x2Fnav\x2Fajax\x2FsubnavFlyout'); window.$Nav && $Nav.declare('config.isSubnavFlyoutMigrationEnabled',true); window.$Nav && $Nav.declare('config.recordEvUrl','\x2Fgp\x2Fnavigation\x2Fajax\x2Frecordevent.html'); window.$Nav && $Nav.declare('config.recordEvInterval',15000); window.$Nav && $Nav.declare('config.sessionId','146\x2D2461427\x2D5656742'); window.$Nav && $Nav.declare('config.requestId','8CD8WFQGA8E5PSWF02S4'); window.$Nav && $Nav.declare('config.alexaListEnabled',true); window.$Nav && $Nav.declare('config.readyOnATF',false); window.$Nav && $Nav.declare('config.dynamicMenuArgs',{"rid":"8CD8WFQGA8E5PSWF02S4","isFullWidthPrime":0,"isPrime":0,"dynamicRequest":1,"weblabs":"","isFreshRegionAndCustomer":"","primeMenuWidth":310}); window.$Nav && $Nav.declare('config.customerName',false); window.$Nav && $Nav.declare('config.customerCountryCode','SG'); window.$Nav && $Nav.declare('config.yourAccountPrimeURL',null); window.$Nav && $Nav.declare('config.yourAccountPrimeHover',true); window.$Nav && $Nav.declare('config.searchBackState',{}); window.$Nav && $Nav.declare('nav.inline'); (function (i) { if(window._navbarSpriteUrl) { i.onload = function() {window.uet && uet('ne')}; i.src = window._navbarSpriteUrl; } }(new Image())); window.$Nav && $Nav.declare('config.autoFocus',false); window.$Nav && $Nav.declare('config.responsiveTouchAgents',["ieTouch"]); window.$Nav && $Nav.declare('config.responsiveGW',false); window.$Nav && $Nav.declare('config.pageHideEnabled',false); window.$Nav && $Nav.declare('config.sslTriggerType','flyoutProximityLarge'); window.$Nav && $Nav.declare('config.sslTriggerRetry',0); window.$Nav && $Nav.declare('config.doubleCart',false); window.$Nav && $Nav.declare('config.signInOverride',true); window.$Nav && $Nav.declare('config.signInTooltip',true); window.$Nav && $Nav.declare('config.isPrimeMember',false); window.$Nav && $Nav.declare('config.packardGlowTooltip',false); window.$Nav && $Nav.declare('config.packardGlowFlyout',false); window.$Nav && $Nav.declare('config.rightMarginAlignEnabled',true); window.$Nav && $Nav.declare('config.flyoutAnimation',false); window.$Nav && $Nav.declare('config.campusActivation','null'); window.$Nav && $Nav.declare('config.primeTooltip',false); window.$Nav && $Nav.declare('config.primeDay',false); window.$Nav && $Nav.declare('config.disableBuyItAgain',false); window.$Nav && $Nav.declare('config.enableCrossShopBiaFlyout',false); window.$Nav && $Nav.declare('config.pseudoPrimeFirstBrowse',null); window.$Nav && $Nav.declare('config.sdaYourAccount',false); window.$Nav && $Nav.declare('config.csYourAccount',{"url":"/gp/youraccount/navigation/sidepanel"}); window.$Nav && $Nav.declare('config.cartFlyoutDisabled',true); window.$Nav && $Nav.declare('config.isTabletBrowser',false); window.$Nav && $Nav.declare('config.HmenuProximityArea',[200,200,200,200]); window.$Nav && $Nav.declare('config.HMenuIsProximity',true); window.$Nav && $Nav.declare('config.isPureAjaxALF',false); window.$Nav && $Nav.declare('config.accountListFlyoutRedesign',false); window.$Nav && $Nav.declare('config.navfresh',false); window.$Nav && $Nav.declare('config.isFreshRegion',false); if (window.ue && ue.tag) { ue.tag('navbar'); }; window.$Nav && $Nav.declare('config.blackbelt',true); window.$Nav && $Nav.declare('config.beaconbelt',true); window.$Nav && $Nav.declare('config.accountList',true); window.$Nav && $Nav.declare('config.iPadTablet',false); window.$Nav && $Nav.declare('config.searchapiEndpoint',false); window.$Nav && $Nav.declare('config.timeline',false); window.$Nav && $Nav.declare('config.timelineAsinPriceEnabled',false); window.$Nav && $Nav.declare('config.timelineDeleteEnabled',false); window.$Nav && $Nav.declare('config.extendedFlyout',false); window.$Nav && $Nav.declare('config.flyoutCloseDelay',600); window.$Nav && $Nav.declare('config.pssFlag',0); window.$Nav && $Nav.declare('config.isPrimeTooltipMigrated',false); window.$Nav && $Nav.declare('config.hashCustomerAndSessionId','f4e2fe95aae1c6aeab205ab9d6f3ebb4397e0e08'); window.$Nav && $Nav.declare('config.isExportMode',true); window.$Nav && $Nav.declare('config.languageCode','en_US'); window.$Nav && $Nav.declare('config.environmentVFI','AmazonNavigationCards\x2Fdevelopment\x40B6268433352\x2DAL2_aarch64'); window.$Nav && $Nav.declare('config.isHMenuBrowserCacheDisable',false); window.$Nav && $Nav.declare('config.signInUrlWithRefTag','https\x3A\x2F\x2Fwww.amazon.com\x2Fap\x2Fsignin\x3Fopenid.pape.max_auth_age\x3D0\x26openid.return_to\x3Dhttps\x253A\x252F\x252Fwww.amazon.com\x252Fpromotion\x252Fpsp\x252FA2OD29RWOSXA27\x252F\x253F_encoding\x253DUTF8\x2526redirectAsin\x253DB0BBG2SH1B\x2526redirectMerchantId\x253DA1UPHU2B8LTG19\x2526ref\x253Dpsp_external\x2526source\x253Ddp_cxcw\x2526ref_\x253DnavSignInUrlRefTagPlaceHolder\x26openid.identity\x3Dhttp\x253A\x252F\x252Fspecs.openid.net\x252Fauth\x252F2.0\x252Fidentifier_select\x26openid.assoc_handle\x3Dusflex\x26openid.mode\x3Dcheckid_setup\x26openid.claimed_id\x3Dhttp\x253A\x252F\x252Fspecs.openid.net\x252Fauth\x252F2.0\x252Fidentifier_select\x26openid.ns\x3Dhttp\x253A\x252F\x252Fspecs.openid.net\x252Fauth\x252F2.0'); window.$Nav && $Nav.declare('config.regionalStores',[]); window.$Nav && $Nav.declare('config.isALFRedesignPT2',true); window.$Nav && $Nav.declare('config.isNavALFRegistryGiftList',false); window.$Nav && $Nav.declare('config.marketplaceId','ATVPDKIKX0DER'); window.$Nav && $Nav.declare('config.exportTransitionState',null); window.$Nav && $Nav.declare('config.enableAeeXopFlyout',false); window.$Nav && $Nav.declare('config.isPrimeFlyoutMigrationEnabled',false); window.$Nav && $Nav.declare('config.isAjaxPaymentNotificationMigrated',false); window.$Nav && $Nav.declare('config.isAjaxPaymentSuppressNotificationMigrated',false); if (window.P && typeof window.P.declare === "function" && typeof window.P.now === "function") { window.P.now('packardGlowIngressJsEnabled').execute(function(glowEnabled) { if (!glowEnabled) { window.P.declare('packardGlowIngressJsEnabled', true); } }); window.P.now('packardGlowStoreName').execute(function(storeName) { if (!storeName) { window.P.declare('packardGlowStoreName','generic'); } }); } window.$Nav && $Nav.declare('configComplete'); --> </script> <a id="skippedLink" tabindex="-1"></a> <script type='text/javascript'>window.navmet.MainEnd = new Date();</script> <script type="text/javascript"> if (window.ue_t0) { window.navmet.push({key:"NavMainEnd",end:+new Date(),begin:window.ue_t0}); } </script> <!-- sp:end-feature:navbar --> <!-- sp:feature:configured-sitewide-before-host-atf-assets --> <!-- sp:end-feature:configured-sitewide-before-host-atf-assets --> <!-- sp:feature:host-atf --> <!-- ATF content --> <body class="a-m-us a-aui_72554-c a-aui_a11y_2_750578-t2 a-aui_a11y_6_837773-t2 a-aui_a11y_sr_678508-c a-aui_amzn_img_959719-c a-aui_amzn_img_gate_959718-c a-aui_killswitch_csa_logger_372963-c a-aui_pci_risk_banner_210084-c a-aui_template_weblab_cache_333406-c a-aui_tnr_v2_180836-c"><div id="a-page"><script type="a-state" data-a-state="{&quot;key&quot;:&quot;a-wlab-states&quot;}">{"AUI_A11Y_2_750578":"T2","AUI_A11Y_6_837773":"T2"}</script> <script> //Height of the cart (46px) and banner (60px), used to set offset from footer const stickyCartHeight = 106; window.P.when("A", "a-popover", "ready").register("common_module", function (A, popover) { let $ = A.$; return { isEmpty: function (obj) { return (typeof obj == "undefined" || obj == null || obj == "" || obj == "null" || obj == "Null" || obj == "NULL"); }, isNotEmpty: function (obj) { return !this.isEmpty(obj); }, gotoAnchor: function (selector) { if ($(selector) && $(selector).offset()) { const isOnVisibleScreen = $(selector).offset().top + $(selector).outerHeight() > $(window).scrollTop(); if (!isOnVisibleScreen && $(selector)[0]) { $(selector)[0].scrollIntoView(); } } }, createPopover: function (triggerSelector, preloadContentName, activate = "onclick", width = "auto", height = "auto", position = "triggerVertical") { let $trigger = $(triggerSelector); let options = { "name": preloadContentName, "activate": activate, "max-width": Math.max(500, window.innerWidth / 2), "max-height": window.innerHeight / 2, "width": width, "height": height, "position": position, "overflow": "scroll", "closeButton": true, }; popover.create($trigger, options); }, hidePopover: function(preloadContentName) { if (popover.get(preloadContentName)) { popover.get(preloadContentName).hide(); } }, // Change styles when elements are focused/activated focus: function (allElements, element) { allElements.removeClass("a-text-bold"); element.addClass("a-text-bold"); }, // removes existing parameters and adds new parameter for reftag setReftag: function (reftag) { const url = new URL(window.location.href); url.searchParams.set('ref', reftag); url.searchParams.delete('source'); window.history.replaceState(null, null, url); }, // append ref parameter to existing parameters appendReftag: function (reftag) { const url = new URL(window.location.href); url.searchParams.append('ref', reftag); window.history.replaceState(null, null, url); }, // Sets product category parameter setProductCategory: function (category) { const url = new URL(window.location.href); url.searchParams.set('productCategory', category); window.history.pushState(null, null, url); }, // Reset product category resetProductCategory: function () { const url = new URL(window.location.href); url.searchParams.set('productCategory', ''); window.history.pushState(null, null, url); }, clientSideMetrics: function(data) { $.ajax({ type: "GET", url: "/promotion/psp/csm", data: $.param(data, true), dataType: "json", contentType: "application/x-www-form-urlencoded; charset=UTF-8", }); } } }); if (true || false) { //On-scroll function that controls when the sticky cart appears and disappears window.onscroll = function() {myFunction() function myFunction() { window.P.when("A", "ready").execute(function (A) { let $ = A.$; /* * Safari when making sticky cart hide and reappear adds an "overflow:hidden" property * This is undesired because it makes cart not appear once opened */ $("#topCart_gridItem").css("overflow",""); //Sticky cart is displayed in between the bounds of 100 pixels and once the footer is reached if (scrollY > 100 & document.getElementById("navFooter").getBoundingClientRect().top >= stickyCartHeight) { $("#topBannerContainer").show(10).addClass("stickyBanner"); $("#topCart_gridItem").show(10).addClass("topStickyCart"); $("#bannerId").addClass("hidden"); $("#promotionSchedule").addClass("hidden"); } else if (scrollY < 100) { /* * Browsers toggle CSS values display: block and display: none when using the .hide() * and .show() methods. There is some inconsistency where in rare cases this toggling * does not occur and therefore leaves it on display: none when display: block is desired. * Adding the CSS ourselves ensures that we do not rely on this toggle to happen. */ $("#topBannerContainer").removeClass("stickyBanner").css("display", "block"); $("#topCart_gridItem").removeClass("topStickyCart").css("display", "block"); $("#bannerId").removeClass("hidden"); $("#promotionSchedule").removeClass("hidden"); } else { $("#topBannerContainer").hide(10).addClass("stickyBanner"); $("#topCart_gridItem").hide(10).addClass("topStickyCart"); $("#bannerId").removeClass("hidden"); $("#promotionSchedule").removeClass("hidden"); } }); }} } window.P.when("A", "ready").execute(function (A) { let $ = A.$; // Set min-width of PSP page, getting the value from navbar if ($("#navbar")) { $("#promotionShoppingPageGlobalContainer").css("min-width", $("#navbar").css("min-width")); } if ($("#navbar-backup-backup")) { $("#promotionShoppingPageGlobalContainer").css("min-width", $("#navbar-backup-backup").css("min-width")); } // Hide rhf-container, this holds the SP sign-in button and recommendation $("#rhf").hide(); $("#rhf-container").hide(); }); window.P.when("A", "ready").execute(function (A) { let $ = A.$; let signInURL = "/ap/signin?_encoding=UTF8&openid.assoc_handle=" + "amzn_pdhs_us" + "&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select" + "&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select" + "&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0" + "&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0" + "&openid.pape.max_auth_age=0&openid.return_to=" + window.location.href + "&" + "ref=psp_pc_log"; if ($("#signInButton")) { $("#signInButton").attr("href", signInURL); } if ($("#primeExclusiveSignInLink")) { $("#primeExclusiveSignInLink").attr("href", signInURL); } if ($("#clipCouponSignIn") && true) { $("#clipCouponSignIn").attr("href", signInURL); } }); window.P.when("A", "common_module", "ready").execute(function (A, commonModule) { let $ = A.$; if ($("#todaysDeal") && commonModule.isNotEmpty($("#todaysDeal"))) { $("#todaysDeal").attr("href", "/gp/goldbox"); $("#amazonCoupon").attr("href", "/deals?bubble-id=deals-collection-coupons"); } }); </script> <script> let isClipped = false; let isQualified = false; let hasBeenAutoRedeem = false; //TODO: Need to handle All Department case for Stockup and Save. isFilterOrSort has to be set correctly in places to function Alldepartments in refinements correctly. /** isFilterOrSort is true if any filter or sort refinement has been selected. isFilterOrSort is only false if there are no refinements specified. * Carousels are only shown if they are enabled and isFilterOrSort is false (that is, that no refinements have been selected) * if any refinements have been selected, the PSP will render like normal (without any carousels) */ let isFilterOrSort = false; let loadRenderLoadProductInfoListAjaxRequest; let isServerResponseEmpty = false; let totalCloneTime = 0; let totalRenderTime = 0; let carouselRenderTimes = []; let pageRenderEndTime; let productCategoryToReftagSuffix = new Map(); // only used for carousel view to store reftagSuffix for a productCategory // Comma separated Amabot slots let amabotSlots = "promo-shopping-page-bottom-1"; let SUSPageId = "stockupandsave"; // Adding this code block to initialize any uninitialized carousels with the suggestion from - https://sage.amazon.com/questions/142988#143036 // Copied the code from AUI documentation - https://evergreen.corp.amazon.com/aui/v3/components/carousel/api-overview/ window.P.when("a-carousel-framework").register("init-faster", function (framework) { P.when("cf").execute(function () { // 'cf' is a marker to ensure when javascript executes, the markup for carousel is present on the page. framework.createAll(); framework.initializeAll(); }); }); window.P.when("common_module", "jQuery").register("queryParameterAjax_module", function (commonModule, $) { // QueryParameter Model, should contain corresponding attributes of model on the backend side. let reftag = ""; let carousel; // count of currently visible products on the page const SUS_VISIBLE_PRODUCTS_COUNT = false ? 3 : 6; let asinToIntervalIdMap = new Map(); let asinToEndsInTimeMap = new Map(); let lightningDealAsins = []; let refinementToCarouselMap = new Map(); let availableProductCategories = []; const redirectAsin = "B0BBG2SH1B"; const redirectMerchantId = "A1UPHU2B8LTG19"; let productCategory = ""; const queryParameter = { "promotionId": "A2OD29RWOSXA27", // if numberOfProductSelections > 1, then it is BXGY promotion, so the productSelection here will be "0" which will be looking at qualifying item by default. // If numberOfProductSelections <= 1, then no need for this field as there is only one productSelection so make it "" "applicabilityIndex": "", "productCategory": productCategory, "subProductCategory": "", "avgCustomerReview": "0", // TODO default to 1, but I didn't find any customerReview in ES "priceTierMin": "", "priceTierMax": "", "bestSeller": "0", "searchKeyword": "", "sortBy": "1", "sortId": [], "redirectAsin": redirectAsin, "redirectMerchantId": redirectMerchantId, "isDebug": 0, "includedDebugMethods": [], "isVPC": false, "promotionMerchantId": "A1UPHU2B8LTG19", "isSNSOnly": false, "isSUSOnly": false, "isCarouselPilot": false, "isPreview": false, "defaultGroupingId": "", "recordedGroupingIds": [], "selectedBrands": [], }; return { cachedPromotionShoppingPageResponse: null, cachedRecordedGroupingIds: [], queryParameterKeys: { "promotionId": "promotionId", "applicabilityIndex": "applicabilityIndex", "productCategory": "productCategory", "subProductCategory": "subProductCategory", "avgCustomerReview": "avgCustomerReview", "priceTierMin": "priceTierMin", "priceTierMax": "priceTierMax", "bestSeller": "bestSeller", "searchKeyword": "searchKeyword", "sortBy": "sortBy", "sortId": "sortId", "recordedGroupingIds": "recordedGroupingIds", "selectedBrands": "selectedBrands", }, reset: function () { queryParameter["applicabilityIndex"] = ""; queryParameter["productCategory"] = ""; queryParameter["subProductCategory"] = ""; queryParameter["avgCustomerReview"] = "0"; queryParameter["priceTierMin"] = ""; queryParameter["priceTierMax"] = ""; queryParameter["bestSeller"] = "0"; queryParameter["searchKeyword"] = ""; queryParameter["sortBy"] = "1"; queryParameter["sortId"] = []; queryParameter["redirectAsin"] = redirectAsin; queryParameter["redirectMerchantId"] = redirectMerchantId; queryParameter["includedDebugMethods"] = []; queryParameter["defaultGroupingId"] = ""; queryParameter["recordedGroupingIds"] = []; queryParameter["selectedBrands"] = []; this.cachedPromotionShoppingPageResponse = null; this.cachedRecordedGroupingIds = []; reftag = ""; asinToIntervalIdMap = new Map(); asinToEndsInTimeMap = new Map(); lightningDealAsins = []; $("#productInfoList").empty(); this.firstPageLoad(); }, resetSelection: function () { let that = this; $("#resetSelection").click(function() { that.reset(); // for cart $("#keywordSearchInputText").val(""); // keyword // applicabilityIndex $("#viewList [data-name=qualifyingItemsRadio]").attr("checked", true) $("#viewList [data-name=benefitItemsRadio]").attr("checked", false) // department $("#brandList .progressBarTierText").attr("checked", false); // review $("#reviewStarOptionsClear").addClass("hidden"); $("[data-name=reviewStartOptions]").removeClass("a-text-bold"); // price tiers + custom input range $("#priceTierClear").addClass("hidden"); $("[data-name=priceTierOptions]").removeClass("a-text-bold"); $("#minPriceInput").val(""); $("#maxPriceInput").val(""); // bestseller $("#bestSellerCheckbox").attr("checked", false); // sort by P.when("a-dropdown").execute(function (dropdown) { dropdown.getSelect("sortBy_dropdownSelect").setValue("1"); }); // for mobile $("[name=menuButton]").removeClass("menuButtonFocus"); $("#viewBox").empty(); $("#departmentBox").empty(); $("#brandsBox").empty(); $("#customerReviewBox").empty(); $("#priceTierBox").empty(); $("#bestsellerBox").empty(); $("#sortByBox").empty(); that.showClearButton(); $($("#sortByText [name=menuButton]")[0]).addClass("menuButtonFocus"); }); }, // public function getValue: function (key) { return queryParameter[key]; }, // public function showMore: function (key, value) { if (queryParameter[key] != value) { this.getRefTag(key, value); queryParameter[key] = value; } // 1. render page from cache let startTime = new Date().getTime(); this.renderProductInfoList(); let endTime = new Date().getTime(); let data = { "startTime" : startTime, "endTime" : endTime, "metricsName": "productInfoListShowMore" } commonModule.clientSideMetrics(data); // 2. cache next page this.loadProductInfoList(); }, // public function: refinement, keyword search, sort by use case filterOrSort: function (key, value) { //removes redirect item from first in product grid after refinement queryParameter["redirectAsin"] = ""; queryParameter["redirectMerchantId"] = ""; if (key == "productCategory") { productCategory = value; } if (key === this.queryParameterKeys.selectedBrands) { queryParameter[this.queryParameterKeys.priceTierMin] = ""; queryParameter[this.queryParameterKeys.priceTierMax] = ""; $("#minPriceInput").val(""); $("#maxPriceInput").val(""); $("#priceTierClear").addClass("hidden"); if (queryParameter[key].indexOf(value) !== -1) { queryParameter[key].splice(queryParameter[key].indexOf(value), 1); } else { queryParameter[key].push(value); } this.getRefTag(key, value); this.firstPageLoad(); } else { if (queryParameter[key] != value) { // Per discussion with UXD, for now only reset price tier when selecting departments this.checkIsResetNeededForPriceTier(key); queryParameter[key] = value; this.getRefTag(key, value); this.firstPageLoad(); } } }, // public function: refinement, keyword search, sort by use case filterOrSort2: function (key1, value1, key2, value2) { //removes redirect item from first in product grid after refinement queryParameter["redirectAsin"] = ""; queryParameter["redirectMerchantId"] = ""; if (queryParameter[key1] != value1 || queryParameter[key2] != value2) { if (queryParameter[key1] != value1 && queryParameter[key2] != value2) { this.getRefTag(key1, value1); queryParameter[key1] = value1; this.getRefTag(key2, value2); queryParameter[key2] = value2; this.checkIsResetNeededForPriceTier(key1); this.checkIsResetNeededForPriceTier(key2); commonModule.setReftag("psp_pc_re_pmin_"); commonModule.appendReftag("psp_pc_re_pmax_"); } else if (queryParameter[key1] != value1 ) { this.getRefTag(key1, value1); queryParameter[key1] = value1; this.checkIsResetNeededForPriceTier(key1); commonModule.setReftag("psp_pc_re_pmin_"); } else { this.getRefTag(key2, value2); queryParameter[key2] = value2; this.checkIsResetNeededForPriceTier(key2); commonModule.setReftag("psp_pc_re_pmax_"); } this.firstPageLoad(); } }, checkIsResetNeededForPriceTier: function (key) { if (key === this.queryParameterKeys.productCategory || key === this.queryParameterKeys.subProductCategory || key === this.queryParameterKeys.applicabilityIndex) { queryParameter[this.queryParameterKeys.priceTierMin] = ""; queryParameter[this.queryParameterKeys.priceTierMax] = ""; queryParameter[this.queryParameterKeys.selectedBrands] = []; $("#minPriceInput").val(""); $("#maxPriceInput").val(""); $("#priceTierClear").addClass("hidden"); if (key === this.queryParameterKeys.productCategory) { queryParameter[this.queryParameterKeys.subProductCategory] = ""; } } }, checkFilterOrSort: function () { return !(commonModule.isEmpty(queryParameter["applicabilityIndex"]) && commonModule.isEmpty(queryParameter["productCategory"]) && (commonModule.isEmpty(queryParameter["subProductCategory"])) && commonModule.isEmpty(queryParameter["searchKeyword"]) && (commonModule.isEmpty(queryParameter["avgCustomerReview"]) || queryParameter["avgCustomerReview"] == "0") && ((commonModule.isEmpty(queryParameter["priceTierMin"]) || queryParameter["priceTierMin"] == "") && (commonModule.isEmpty(queryParameter["priceTierMax"]) || queryParameter["priceTierMax"] == "")) && (commonModule.isEmpty(queryParameter["bestSeller"]) || queryParameter["bestSeller"] == "0") && (commonModule.isEmpty(queryParameter["sortBy"]) || queryParameter["sortBy"] == "1") && (commonModule.isEmpty(queryParameter["selectedBrands"]) || queryParameter["selectedBrands"].length == 0)); }, // private function firstPageLoad: function () { if (loadRenderLoadProductInfoListAjaxRequest && loadRenderLoadProductInfoListAjaxRequest.readyState != 4) { loadRenderLoadProductInfoListAjaxRequest.abort(); } // 0. make sure that isFilterOrSort is set correctly before any loading takes place so that SUS renders correctly with passed category value isFilterOrSort = this.checkFilterOrSort(); // 1. render refinement this.loadRenderRefinement(); this.ensureHowToClaimExpanderExpanded(); // 2. load and render product and cache 2nd page this.cachedPromotionShoppingPageResponse = null; this.cachedRecordedGroupingIds = []; queryParameter["sortId"] = []; $("#productInfoList").empty(); this.loadRenderLoadProductInfoList(); }, // private function: load and render product and cache 2nd page loadRenderLoadProductInfoList: function () { if (commonModule.isEmpty(this.cachedPromotionShoppingPageResponse) || !this.cachedPromotionShoppingPageResponse["reachBottom"]) { let startTime = new Date().getTime(); let that = this; let productInfoListParam = { "promotionId": queryParameter["promotionId"], "avgCustomerReview": queryParameter["avgCustomerReview"], "priceTierMin" : queryParameter["priceTierMin"], "priceTierMax" : queryParameter["priceTierMax"], "bestSeller": queryParameter["bestSeller"], "sortId": JSON.stringify(queryParameter["sortId"]), "applicabilityIndex": queryParameter["applicabilityIndex"], "productCategory": queryParameter["productCategory"], "searchKeyword": queryParameter["searchKeyword"], "redirectAsin": queryParameter["redirectAsin"], "redirectMerchantId": queryParameter["redirectMerchantId"], "productCategories": JSON.stringify(availableProductCategories), "subProductCategory": queryParameter["subProductCategory"], "selectedBrands": JSON.stringify(queryParameter["selectedBrands"]), "promotionMerchantId": queryParameter["promotionMerchantId"], "isSNSOnly": queryParameter["isSNSOnly"], "isSUSOnly": queryParameter["isSUSOnly"], "isCarouselPilot": queryParameter["isCarouselPilot"], "isPrimeShippingEligible": "CUSTOMER_ELIGIBLE" != "CUSTOMER_PRIME_INELIGIBLE", "isPreview": "false", "isFirstPageLoadRequest": !isFilterOrSort, "recordedGroupingIds": JSON.stringify(queryParameter["recordedGroupingIds"]), "anti-csrftoken-a2z": 'hH/ldrQIChp0nvEPKYA+HRfL8+X+qPSqX9JmyUgf+RucAAAAAGdBro0AAAAB' }; this.showSpin(); loadRenderLoadProductInfoListAjaxRequest = $.ajax({ type: "POST", url: this.getProductInfoControllerURL(), data: productInfoListParam, dataType: "json", contentType: "application/x-www-form-urlencoded; charset=UTF-8", success: function (promotionShoppingPageResponse) { let serverCallEndTime = new Date().getTime(); if (false) { appendDebugJSON("product_info_list", promotionShoppingPageResponse["debugJson"]); } that.cachedPromotionShoppingPageResponse = promotionShoppingPageResponse; // We show the Show More button after calling for product List that.renderProductInfoList(); let endTime = new Date().getTime(); that.recordSUSLatencyMetrics(startTime, serverCallEndTime, "susServerCall") that.recordSUSLatencyMetrics(startTime, endTime, "susFirstPageLoad"); that.recordSUSLatencyMetrics(startTime, startTime + totalRenderTime, "renderAsinFunction"); that.recordSUSLatencyMetrics(startTime, startTime + totalCloneTime, "cloneAsinFunction"); carouselRenderTimes.forEach(time => that.recordSUSLatencyMetrics(startTime, startTime + time, "perCarouselRender")); that.recordVisibleProductsRenderTime(startTime, pageRenderEndTime); let data = { "startTime" : startTime, "endTime" : endTime, "metricsName": "productInfoListFirstPageLoad" } commonModule.clientSideMetrics(data); if (!promotionShoppingPageResponse["reachBottom"] && commonModule.isNotEmpty(queryParameter["sortId"])) { that.loadProductInfoList(); } }, error: function () { $("#pspSpinner").addClass("hidden"); $("#a-page").removeClass("halfOpacity"); $("#a-page").attr("disabled", false); // Only add hideSpin here because renderProductInfoList will hideSpin when rendering that.hideSpin(); } }); } }, // private function loadProductInfoList: function () { if (commonModule.isEmpty(this.cachedPromotionShoppingPageResponse) || !this.cachedPromotionShoppingPageResponse["reachBottom"]) { queryParameter["recordedGroupingIds"] = this.cachedRecordedGroupingIds; let productInfoListParam = { "promotionId": queryParameter["promotionId"], "avgCustomerReview": queryParameter["avgCustomerReview"], "priceTierMin" : queryParameter["priceTierMin"], "priceTierMax" : queryParameter["priceTierMax"], "bestSeller": queryParameter["bestSeller"], "sortId": JSON.stringify(queryParameter["sortId"]), "applicabilityIndex": queryParameter["applicabilityIndex"], "productCategory": queryParameter["productCategory"], "searchKeyword": queryParameter["searchKeyword"], "redirectAsin": queryParameter["redirectAsin"], "redirectMerchantId": queryParameter["redirectMerchantId"], "productCategories": JSON.stringify(availableProductCategories), "subProductCategory": queryParameter["subProductCategory"], "selectedBrands": JSON.stringify(queryParameter["selectedBrands"]), "promotionMerchantId": queryParameter["promotionMerchantId"], "isSNSOnly": queryParameter["isSNSOnly"], "isSUSOnly": queryParameter["isSUSOnly"], "isCarouselPilot": queryParameter["isCarouselPilot"], "isPrimeShippingEligible": "CUSTOMER_ELIGIBLE" != "CUSTOMER_PRIME_INELIGIBLE", "isPreview": "false", "recordedGroupingIds": JSON.stringify(queryParameter["recordedGroupingIds"]), "anti-csrftoken-a2z": 'hH/ldrQIChp0nvEPKYA+HRfL8+X+qPSqX9JmyUgf+RucAAAAAGdBro0AAAAB' }; let that = this; $("#showMoreBtnContainer").addClass("hidden"); $.ajax({ type: "POST", url: this.getProductInfoControllerURL(), data: productInfoListParam, dataType: "json", contentType: "application/x-www-form-urlencoded; charset=UTF-8", success: function (promotionShoppingPageResponse) { if (false) { appendDebugJSON("product_info_list", promotionShoppingPageResponse["debugJson"]); } that.cachedPromotionShoppingPageResponse = promotionShoppingPageResponse; if (!false || isFilterOrSort ) { // We show the Show More button after calling for product List $("#showMoreBtnContainer").removeClass("hidden"); // If a promotion has outdated ES records, then it is more likely it has a false positive show more button shown at last page, since the ES records available for last page can be fewer. if (promotionShoppingPageResponse["reachBottom"]) { // If we are at last page, then we do a check to see if there are productInfos available, if not hide the show more button if (commonModule.isEmpty(promotionShoppingPageResponse) || commonModule.isEmpty(promotionShoppingPageResponse["viewModels"]["PRODUCT_INFO_LIST"])) { $("#showMoreBtnContainer").addClass("hidden"); } } } }, error: function () { $("#pspSpinner").addClass("hidden"); $("#a-page").removeClass("halfOpacity"); $("#a-page").attr("disabled", false); } }); } }, // private function renderAsinFaceOutTemplate: function (productInfo, productGrid, dpLink, ldMerchantToAsins) { productGrid.attr("data-asin", productInfo["asin"]); productGrid.attr("data-merchant", productInfo["merchantId"]); // 2. Fill in corresponding data queryParameter["sortId"] = productInfo["sortId"]; // Best Seller badge if (commonModule.isNotEmpty(productInfo["badgeType"])) { productGrid.find("div[name=bestSellerBadgeBox]").removeClass("invisible"); } // Image this.renderImageForProductGrid(productInfo, productGrid, dpLink); // Title productGrid.find("div[name=productTitleBox]").find("[data-name=productTitle]").text(productInfo["title"]); productGrid.find("div[name=productTitleBox]").find("[data-name=productTitle]").attr("href", dpLink); // ByLineInfoV2 productGrid.find("[data-name=productByLineInfoV2]").text(productInfo["byLineInfoV2"]); // empty span added to fill up line so that alignment doesn't break when no brand name is given if (commonModule.isEmpty(productInfo["byLineInfoV2"])) { productGrid.find("[data-name=productByLineInfoV2]").html('<span class="inlineBlock"></span>'); productGrid.find("[data-name=productByLineInfoV2]").addClass("invisible"); } // Review if (commonModule.isNotEmpty(productInfo["customerReviewsSummary"])) { let productCustomerReviewBox = productGrid.find("[name=productCustomerReviewBox]"); productCustomerReviewBox.find("[name=productReviewStars]").addClass(productInfo["customerReviewsSummary"]["reviewStarCss"]); productCustomerReviewBox.find("[name=productReviewStars]").attr("title", productInfo["customerReviewsSummary"]["displayString"]); productCustomerReviewBox.find("[name=productReviewRating]").text(productInfo["customerReviewsSummary"]["displayString"]); productCustomerReviewBox.find("[name=productReviewRatingShortString]").text(productInfo["customerReviewsSummary"]["shortDisplayString"]); if (commonModule.isNotEmpty(productInfo["customerReviewsSummary"]["count"])) { productCustomerReviewBox.find("[name=productReviewCount]").text(productInfo["customerReviewsSummary"]["count"]); } productCustomerReviewBox.removeClass("invisible"); } // Limited Time Deal if (productInfo["lightningDeal"]) { productGrid.find("div[name=limitedTimeDeal]").removeClass("hidden"); // If LTD is present, variable spacing is added to maintain alignment. productGrid.find("[name=variableSpacing]").removeClass("displayNone"); let ldBarPercentSection = productGrid.find("div[name=ldBarPercentSection]"); ldBarPercentSection.removeClass("hidden"); this.startLdEndTimer(productInfo["secondsLeftToClaim"], productInfo["asin"]); this.displayLdEndTime(ldBarPercentSection, productInfo["asin"]); ldBarPercentSection.find("[name=ldFilledBar]").width(productInfo["percentageClaimedBar"]); ldBarPercentSection.find("[data-name=percentClaimed]").text(productInfo["percentageClaimed"]); if (!lightningDealAsins.includes(productInfo["asin"])) { lightningDealAsins.push(productInfo["asin"]); let merchantId = productInfo["merchantId"]; if (!ldMerchantToAsins[merchantId]) { ldMerchantToAsins[merchantId] = []; } ldMerchantToAsins[merchantId].push(productInfo["asin"]); } } // price let price = this.renderPriceForProductGrid(productInfo, productGrid); // SNS Description if (commonModule.isNotEmpty(productInfo["snsPromotionMessage"])) { let snsPromotionMessageBox = productGrid.find("[name=productSNSPromotionMessageBox]") snsPromotionMessageBox.find("[data-name=snsPromotionMessage]").html(productInfo["snsPromotionMessage"]) snsPromotionMessageBox.removeClass("hidden"); } // Prime & delivery // Badge let deliveryInfoBox = productGrid.find("[name=productDeliveryBox]"); if (commonModule.isNotEmpty(productInfo["deliveryBadge"])) { deliveryInfoBox.find("[name=deliveryBadge]").html(productInfo["deliveryBadge"]); deliveryInfoBox.find("[name=deliveryBadge]").removeClass("invisible"); deliveryInfoBox.removeClass("invisible"); } else { // empty span added to maintain alignment when a delivery badge is not present deliveryInfoBox.find("[name=deliveryBadge]").html('<span class="inlineBlock"></span>'); } // Message if (commonModule.isNotEmpty(productInfo["deliveryMessage"])) { deliveryInfoBox.find("[data-name=deliveryMessage]").html(productInfo["deliveryMessage"]); deliveryInfoBox.find("[data-name=deliveryMessage]").removeClass("invisible"); deliveryInfoBox.removeClass("invisible"); } else { // empty span added to maintain alignment when a delivery message is not present deliveryInfoBox.find("[data-name=deliveryMessage]").html('<span class="inlineBlock"></span>'); } // Availability let productAvailabilityBox = productGrid.find("[name=productAvailabilityBox]"); if (commonModule.isNotEmpty(productInfo["availabilityMessage"]) && productInfo["lightningDeal"] == false) { productAvailabilityBox.find("[data-name=availabilityMessage]").text(productInfo["availabilityMessage"]) productAvailabilityBox.removeClass("invisible"); } else { // empty span added to maintain alignment when an availability message is not present productAvailabilityBox.find("[data-name=availabilityMessage]").html('<span class="inlineBlock"></span>'); } return price; }, // private function renderVariationalAsinFaceOutTemplate: function (productInfo, productGrid, dpLink, ldMerchantToAsins, productCategory) { let previousAsin = productGrid.attr("data-asin"); this.renderAsinFaceOutTemplate(productInfo, productGrid, dpLink, ldMerchantToAsins) // Stop previous displaying lightning deal timer, if any. if (commonModule.isNotEmpty(previousAsin) && asinToIntervalIdMap.has(previousAsin)) { clearInterval(asinToIntervalIdMap.get(previousAsin)); asinToIntervalIdMap.delete(previousAsin); } productGrid.attr("data-asin", productInfo["asin"]); productGrid.attr("data-merchant", productInfo["merchantId"]); // Add to cart / LD (View Item/View options) let addToCartBtnBox = productGrid.find("div[name=addToCartBtnBox]"); let selectBtnBox = productGrid.find("[name=selectBtnBox]"); let ldBarPercentSection = productGrid.find("div[name=ldBarPercentSection]"); let viewItemBtnBox = productGrid.find("[name=viewItemBtnBox]"); if (productInfo["blockATCAsin"]) { // Render the select button for blockATCAsin offers selectBtnBox.removeClass("hidden"); selectBtnBox.find("[name=selectBtn]").attr("href", dpLink); addToCartBtnBox.addClass("hidden"); productGrid.find("div[name=limitedTimeDeal]").addClass("hidden"); ldBarPercentSection.addClass("hidden"); viewItemBtnBox.addClass("hidden"); } else if (productInfo["lightningDeal"] || (false)) { // View Item, as discussed with frontend UX designer, showing View item here viewItemBtnBox.removeClass("hidden"); viewItemBtnBox.find("[name=viewItemBtn]").attr("href", dpLink); addToCartBtnBox.find("[name=addToCartBtn]").addClass("hidden"); addToCartBtnBox.find("[name=addVariationalASINToCartBtn]").addClass("hidden"); addToCartBtnBox.addClass("hidden"); selectBtnBox.addClass("hidden"); if (!productInfo["lightningDeal"]) { ldBarPercentSection.addClass("hidden"); } else { ldBarPercentSection.removeClass("hidden"); } } else { productGrid.find("div[name=limitedTimeDeal]").addClass("hidden"); ldBarPercentSection.addClass("hidden"); viewItemBtnBox.addClass("hidden"); selectBtnBox.addClass("hidden"); if (productInfo["parentAsin"] || commonModule.isEmpty(productInfo["offerListingId"])) { // See options addToCartBtnBox.removeClass("hidden"); addToCartBtnBox.find("[name=seeOptionsBtn]").removeClass("hidden"); addToCartBtnBox.find("[name=seeOptionsBtn]").attr("href", productInfo["detailPageLink"]); } else { // Add to cart let data_json = { "asin": productInfo["asin"], "offerListingId": productInfo["offerListingId"], "merchantId": productInfo["merchantId"], "canonicalAsin": productInfo["canonicalAsin"], "quantity": productInfo["quantity"], "minimumOrderQuantity": productInfo["minimumOrderQuantity"] }; // set reftagSuffix only for carousel view if (false && !isFilterOrSort) { data_json["reftagSuffix"] = productCategoryToReftagSuffix.get(productCategory); } // with color selector, after switched a color, customer need to chooes from the size dropdown again addToCartBtnBox.removeClass("hidden"); addToCartBtnBox.find("[name=addToCartBtn]").addClass("hidden"); addToCartBtnBox.find("[name=addVariationalASINToCartBtn]").removeClass("hidden"); addToCartBtnBox.find("[type=submit]").attr("data-json", JSON.stringify(data_json)); addToCartBtnBox.find("[type=submit]").addClass("inputCursorDisabled"); } } // redeem coupon, logic to execute only once is in the redeemCoupon method this.redeemCoupon(productInfo["asin"], productInfo["offerListingId"]); }, // private function renderAsinFaceOut: function (productInfo, productGrid, dpLink, ldMerchantToAsins, productCategory) { let startTime = new Date().getTime(); let price = this.renderAsinFaceOutTemplate(productInfo, productGrid, dpLink, ldMerchantToAsins) // productVariationData let variationalEntries = new Map(Object.entries(productInfo["variationData"])); if (variationalEntries.size > 0) { productGrid.find("div[name=productVariationDataForPlainAsin").removeClass("hidden"); let notFirst = false; for (let [key, value] of variationalEntries) { if (key !== "order") { if (notFirst){ productGrid.find("[data-name=productVariationDataForPlainAsin]").append('<li class="sc-product-variation clamp1 variationItem" aria-label=""><span class="a-size-base a-text-bold" aria-label="">' + key + ":" + '</span><span class="a-size-small" aria-label=""> ' + value + '</span></li>'); } else { productGrid.find("[data-name=productVariationDataForPlainAsin]").append('<li class="sc-product-variation clamp1" aria-label=""><span class="a-size-base a-text-bold" aria-label="">' + key + ":" + '</span><span class="a-size-small" aria-label=""> ' + value + '</span></li>'); } notFirst = true } } if(notFirst){ // variable spacing productGrid.find("[name=variableSpacing]").removeClass("displayNone"); // adding margin to LTD productGrid.find("div[name=limitedTimeDeal]").addClass("limitedTimeDealSpacing"); } } let addToCartBtnBox = productGrid.find("div[name=addToCartBtnBox]"); // Add to cart / LD (View Item/View options) / Select (GiftCard offers) if (productInfo["blockATCAsin"]) { // Render the select button for blockATCAsin offers let selectBtnBox = productGrid.find("[name=selectBtnBox]"); selectBtnBox.removeClass("hidden"); selectBtnBox.find("[name=selectBtn]").attr("href", dpLink); addToCartBtnBox.addClass("hidden"); } else if (productInfo["lightningDeal"] || (false)) { // View Item let viewItemBtnBox = productGrid.find("[name=viewItemBtnBox]"); viewItemBtnBox.removeClass("hidden"); viewItemBtnBox.find("[name=viewItemBtn]").attr("href", dpLink); addToCartBtnBox.addClass("hidden"); } else { if (productInfo["parentAsin"] || commonModule.isEmpty(productInfo["offerListingId"])) { // See options addToCartBtnBox.find("[name=seeOptionsBtn]").removeClass("hidden"); addToCartBtnBox.find("[name=seeOptionsBtn]").attr("href", productInfo["detailPageLink"]); } else { // Add to cart let data_json = { "asin": productInfo["asin"], "price": price, "quantity": productInfo["quantity"], "minimumOrderQuantity": productInfo["minimumOrderQuantity"], "offerListingId": productInfo["offerListingId"], "merchantId": productInfo["merchantId"], "canonicalAsin": productInfo["canonicalAsin"], }; // set reftagSuffix only for carousel view if (false && !isFilterOrSort) { data_json["reftagSuffix"] = productCategoryToReftagSuffix.get(productCategory); } addToCartBtnBox.find("[name=addToCartBtn]").removeClass("hidden"); addToCartBtnBox.find("[type=submit]").attr("data-json", JSON.stringify(data_json)); } } // redeem coupon, logic to execute only once is in the redeemCoupon method this.redeemCoupon(productInfo["asin"], productInfo["offerListingId"]); totalRenderTime += (new Date().getTime() - startTime); }, renderVariationalDataForFaceOut: function (productGrid, productInfo, dpLink, productCategory) { let previousAsin = productGrid.attr("data-asin"); let ldMerchantToAsins = {}; // Stop previous displaying lightning deal timer, if any. if (asinToIntervalIdMap.has(previousAsin)) { clearInterval(asinToIntervalIdMap.get(previousAsin)); asinToIntervalIdMap.delete(previousAsin); } productGrid.attr("data-asin", productInfo["asin"]); productGrid.attr("data-merchant", productInfo["merchantId"]); // Best Seller badge if (commonModule.isNotEmpty(productInfo["badgeType"])) { productGrid.find("div[name=bestSellerBadgeBox]").removeClass("invisible"); } else { productGrid.find("div[name=bestSellerBadgeBox]").addClass("invisible"); } // Image this.renderImageForProductGrid(productInfo, productGrid, dpLink); // Title productGrid.find("div[name=productTitleBox]").find("[data-name=productTitle]").text(productInfo["title"]); productGrid.find("div[name=productTitleBox]").find("[data-name=productTitle]").attr("href", dpLink); // Limited Time Deal if (productInfo["lightningDeal"]) { productGrid.find("div[name=limitedTimeDeal]").removeClass("hidden"); // If LTD is present, variable spacing is added to maintain alignment. productGrid.find("[name=variableSpacing]").removeClass("displayNone"); let ldBarPercentSection = productGrid.find("div[name=ldBarPercentSection]"); ldBarPercentSection.removeClass("hidden"); this.displayLdEndTime(ldBarPercentSection, productInfo["asin"]); ldBarPercentSection.find("[name=ldFilledBar]").width(productInfo["percentageClaimedBar"]); ldBarPercentSection.find("[data-name=percentClaimed]").text(productInfo["percentageClaimed"]); if (!lightningDealAsins.includes(productInfo["asin"])) { lightningDealAsins.push(productInfo["asin"]); let merchantId = productInfo["merchantId"]; if (!ldMerchantToAsins[merchantId]) { ldMerchantToAsins[merchantId] = []; } ldMerchantToAsins[merchantId].push(productInfo["asin"]); this.continuousUpdateClaim(ldMerchantToAsins); } } else { let ldBarPercentSection = productGrid.find("div[name=ldBarPercentSection]"); productGrid.find("div[name=limitedTimeDeal]").addClass("hidden"); ldBarPercentSection.addClass("hidden"); } // price let price = this.renderPriceForProductGrid(productInfo, productGrid); // SNS Description if (commonModule.isNotEmpty(productInfo["snsPromotionMessage"])) { let snsPromotionMessageBox = productGrid.find("[name=productSNSPromotionMessageBox]") snsPromotionMessageBox.find("[data-name=snsPromotionMessage]").html(productInfo["snsPromotionMessage"]) snsPromotionMessageBox.removeClass("hidden"); } else { let snsPromotionMessageBox = productGrid.find("[name=productSNSPromotionMessageBox]") snsPromotionMessageBox.addClass("hidden"); } // Prime & delivery let deliveryInfoBox = productGrid.find("[name=productDeliveryBox]"); if (commonModule.isNotEmpty(productInfo["deliveryMessage"])) { deliveryInfoBox.find("[data-name=productDelivery]").html(productInfo["deliveryMessage"]); deliveryInfoBox.removeClass("invisible"); deliveryInfoBox.removeClass("hidden"); } else { deliveryInfoBox.addClass("invisible"); deliveryInfoBox.addClass("hidden") } // Availability if (commonModule.isNotEmpty(productInfo["availabilityMessage"]) && productInfo["lightningDeal"] == false) { let productAvailabilityBox = productGrid.find("[name=productAvailabilityBox]"); productAvailabilityBox.find("[data-name=availabilityMessage]").text(productInfo["availabilityMessage"]) productAvailabilityBox.removeClass("invisible"); productAvailabilityBox.removeClass("hidden"); } else { let productAvailabilityBox = productGrid.find("[name=productAvailabilityBox]"); productAvailabilityBox.addClass("invisible"); // empty span added to maintain alignment when an availability message is not present productAvailabilityBox.find("[data-name=availabilityMessage]").html('<span class="inlineBlock"></span>'); } // Add to cart / LD (View Item/View options) let addToCartBtnBox = productGrid.find("div[name=addToCartBtnBox]"); if (productInfo["blockATCAsin"]) { // Render the select button for blockATCAsin offers let selectBtnBox = productGrid.find("[name=selectBtnBox]"); selectBtnBox.removeClass("hidden"); selectBtnBox.find("[name=selectBtn]").attr("href", dpLink); addToCartBtnBox.addClass("hidden"); } else if (productInfo["lightningDeal"] || false) { // View Item let viewItemBtnBox = productGrid.find("[name=viewItemBtnBox]"); viewItemBtnBox.removeClass("hidden"); viewItemBtnBox.find("[name=viewItemBtn]").attr("href", dpLink); addToCartBtnBox.find("[name=addToCartBtn]").addClass("hidden"); addToCartBtnBox.find("[name=addVariationalASINToCartBtn]").addClass("hidden"); addToCartBtnBox.addClass("hidden"); } else { let viewItemBtnBox = productGrid.find("[name=viewItemBtnBox]"); viewItemBtnBox.addClass("hidden"); if (productInfo["parentAsin"] || commonModule.isEmpty(productInfo["offerListingId"])) { // See options addToCartBtnBox.find("[name=seeOptionsBtn]").removeClass("hidden"); addToCartBtnBox.find("[name=seeOptionsBtn]").attr("href", productInfo["detailPageLink"]); } else { // Add to cart let data_json = { "asin": productInfo["asin"], "offerListingId": productInfo["offerListingId"], "price": price, "quantity": productInfo["quantity"], "minimumOrderQuantity": productInfo["minimumOrderQuantity"], "merchantId": productInfo["merchantId"], "canonicalAsin": productInfo["canonicalAsin"], }; // set reftagSuffix only for carousel view if (false && !isFilterOrSort) { data_json["reftagSuffix"] = productCategoryToReftagSuffix.get(productCategory); } addToCartBtnBox.find("[name=addVariationalASINToCartBtn]").addClass("hidden"); addToCartBtnBox.find("[name=addToCartBtn]").removeClass("hidden"); addToCartBtnBox.find("[data-name=addToCartBtn]").attr("data-json", JSON.stringify(data_json)); addToCartBtnBox.find("[data-name=addToCartBtn]").removeClass("inputCursorDisabled"); } addToCartBtnBox.removeClass("hidden"); } // redeem coupon, logic to execute only once is in the redeemCoupon method this.redeemCoupon(productInfo["asin"], productInfo["offerListingId"]); }, processVariationalData: function (variationalData) { let processedVariationalData = ""; let variationalEntries = new Map(Object.entries(variationalData)) for (let [key, value] of variationalEntries) { if (key === "order") { break } processedVariationalData += key + value; } return processedVariationalData; }, // private function renderVariationColorDimension: function (productInfo, productGrid, productInfos, ldMerchantToAsins, productCategory) { let nonMetadataColorMap = new Map(); let hasMetadataColorMap = new Map(); let colorNameToMetadataMap = new Map(); // data comes in sorted way by sortId, recording popular rank of color for (let i = 0; i < productInfos.length; i += 1) { if (!colorNameToMetadataMap.has(productInfos[i]["variationData"]["color_name"])) { colorNameToMetadataMap.set(productInfos[i]["variationData"]["color_name"], productInfos[i]["variationData"]["color_metadata"]); if (commonModule.isNotEmpty(productInfos[i]["variationData"]["color_metadata"])) { hasMetadataColorMap.set(productInfos[i]["variationData"]["color_name"], []); } else { nonMetadataColorMap.set(productInfos[i]["variationData"]["color_name"], []); } } } // after we get the ranked color metadatas, then we resort to detail page displaying order to display size in a organized way productInfos.sort((a, b) => (parseInt(a["variationData"]["order"]) - parseInt(b["variationData"]["order"]))) for (let i = 0; i < productInfos.length; i += 1) { if (commonModule.isNotEmpty(productInfos[i]["variationData"]["color_metadata"])) { hasMetadataColorMap.get(productInfos[i]["variationData"]["color_name"]).push(productInfos[i]); } else { nonMetadataColorMap.get(productInfos[i]["variationData"]["color_name"]).push(productInfos[i]); } } if (commonModule.isEmpty(productInfo["variationData"]["color_metadata"]) && hasMetadataColorMap.size > 0) { // if the most popular variational children doesn't have color metadata, rerendering ASIN faceout with the ranked first one has the color metadata productInfo = hasMetadataColorMap.values().next().value.at(0); this.renderVariationalAsinFaceOutTemplate(productInfo, productGrid, this.getDpLinkForProductInfo(productInfo, productCategory), ldMerchantToAsins, productCategory); } // we need at least two available color metadata to render color selector if (hasMetadataColorMap.size > 1) { // displaying color selector section productGrid.find("[name=productVariationData]").removeClass("hidden"); productGrid.find("[name=productVariationDataColorSelector]").removeClass("hidden"); productGrid.find("div[name=limitedTimeDeal]").addClass("paddingTop16"); // rendering color selector and return selected color's productInfoList to render size dropdown productInfos = this.renderVariationalColorDots(productGrid, hasMetadataColorMap, colorNameToMetadataMap, nonMetadataColorMap, ldMerchantToAsins, productCategory); } else if (hasMetadataColorMap.size === 1) { // since we only have one available colorMetadata, we will also render this color in a single asin faceout // checking if the colorMetadata available productInfos contains the original product used to render this productGrid template, if so render in place productInfos = hasMetadataColorMap.values().next().value; if (productInfos.find(product => product["sortId"].at(0) === productInfo["sortId"].at(0) && product["asin"] === productInfo["asin"])) { if (productInfos.length > 1) { this.renderVariationalAsinFaceOutTemplate(productInfos[0], productGrid, this.getDpLinkForProductInfo(productInfos[0], productCategory), ldMerchantToAsins, productCategory); this.renderSizeDropDown(productInfos[0], productGrid, productInfos, ldMerchantToAsins, productCategory); } else { this.renderVariationalAsinFaceOutTemplate(productInfos[0], productGrid, this.getDpLinkForProductInfo(productInfos[0], productCategory), ldMerchantToAsins, productCategory); this.renderVariationalToPlainAsin(productInfos[0], productGrid, productCategory); } } productInfos = []; } else { productInfos = []; // if it is redirectOffer and redirectOffer not having color metadata and the related offer do not as well, then keep the redirectoffer in plain asin faceout // the redirect asin faceout will only be handled here as its sortId is empty. However, the same product may show up again in another asin faceout if there are similar Asins valid for a selector if (queryParameter["redirectAsin"] === productInfo["asin"] && queryParameter["redirectMerchantId"] === productInfo["merchantId"]) { this.renderVariationalToPlainAsin(productInfo, productGrid, productCategory); } } // for colors not having color metadata at all for (let nonColorMetadataProductInfoList of nonMetadataColorMap.values()) { // checking if the nonColorMetadataProductInfoList contains the original product used to render this productGrid template, if so render in place // redirectOffer will not handled in this if as redirectOffer's sortId is empty if (nonColorMetadataProductInfoList.find(product => product["sortId"].at(0) === productInfo["sortId"].at(0) && product["asin"] === productInfo["asin"])) { if (nonColorMetadataProductInfoList.length > 1) { this.renderVariationalAsinFaceOutTemplate(nonColorMetadataProductInfoList[0], productGrid, this.getDpLinkForProductInfo(nonColorMetadataProductInfoList[0], productCategory), ldMerchantToAsins, productCategory); this.renderSizeDropDown(nonColorMetadataProductInfoList[0], productGrid, nonColorMetadataProductInfoList, ldMerchantToAsins, productCategory); } else { this.renderVariationalAsinFaceOutTemplate(nonColorMetadataProductInfoList[0], productGrid, this.getDpLinkForProductInfo(nonColorMetadataProductInfoList[0], productCategory), ldMerchantToAsins, productCategory); this.renderVariationalToPlainAsin(nonColorMetadataProductInfoList[0], productGrid, productCategory); } } else { // if not contains the original productInfo, render in newly created productGrid let anotherColorProductGrid = $("#productGridTemplate [name=productGrid]").clone(); if (nonColorMetadataProductInfoList.length > 1) { this.renderVariationalAsinFaceOutTemplate(nonColorMetadataProductInfoList[0], anotherColorProductGrid, this.getDpLinkForProductInfo(nonColorMetadataProductInfoList[0], productCategory), ldMerchantToAsins, productCategory); this.renderSizeDropDown(nonColorMetadataProductInfoList[0], anotherColorProductGrid, nonColorMetadataProductInfoList, ldMerchantToAsins); } else { // if redirectOffer's corresponding original sort order compliant offer is treated as plain Asin, then don't show it again // here checking if it is not the same offer as redirectOffer, rendering if (!(queryParameter["redirectAsin"] === productInfo["asin"] && queryParameter["redirectMerchantId"] === productInfo["merchantId"]) || (nonColorMetadataProductInfoList[0]["asin"] !== productInfo["asin"] || queryParameter["redirectMerchantId"] !== productInfo["merchantId"])) { this.renderVariationalAsinFaceOutTemplate(nonColorMetadataProductInfoList[0], anotherColorProductGrid, this.getDpLinkForProductInfo(nonColorMetadataProductInfoList[0], productCategory), ldMerchantToAsins, productCategory); this.renderVariationalToPlainAsin(nonColorMetadataProductInfoList[0], anotherColorProductGrid); } else { // If it is the same offer as redirectOffer, skipping continue; } } $("#productInfoList").append(anotherColorProductGrid); } } return productInfos; }, // private function - which only render color dots when more than two color metadata available renderVariationalColorDots: function (productGrid, hasMetadataColorMap, colorNameToMetadataMap, nonMetadataColorMap, ldMerchantToAsins, productCategory) { let that = this; let dotMaximumNumber = 0; let colorIndexCounter = 0; let popoverIcon = productGrid.find("[name=seeMoreColors] a i") let hasMetadataColorList = Array.from(hasMetadataColorMap.keys()); // variables depends on device type let colorMetadataInPopoverContent; let colorDotClass; let popoverType; // Initializing variables based on device type if (true) { dotMaximumNumber = 6; popoverType = "a-popover"; colorMetadataInPopoverContent = '<ul class="listNonDecrot">'; colorDotClass = "colorDotInPopover"; } else { dotMaximumNumber = 3; popoverType = "a-modal"; colorMetadataInPopoverContent = '<ul class="listNonDecrotNonDesktop">'; colorDotClass = "colorDotInPopoverNonDesktop"; } for (let i = 0; i < Math.min(dotMaximumNumber, hasMetadataColorList.length); i++) { let timer; let colorName = hasMetadataColorList.at(i); let colorMetadata = colorNameToMetadataMap.get(colorName); let colorDot = productGrid.find("#ColorSelectorColorDotDivTemplate div").clone(); colorDot.find("[name=ColorSelectorColorDotInnerFill]").css("background-color", colorMetadata) colorDot.attr("data-color-index", colorIndexCounter++); if (true) { P.when("A", "a-tooltip", "ready").execute(function (A, popover) { let instance = popover.get(colorDot); instance.attrs("dataStrategy", "inline"); instance.attrs("activate", "onclick"); instance.update({"content": hasMetadataColorList.at(colorDot.attr("data-color-index"))}); colorDot.mouseenter(function (event) { event.preventDefault(); timer = setTimeout(function () { instance.show(); }, 500); }).mouseleave(function (event) { event.preventDefault(); clearTimeout(timer); instance.hide(); }); // make the popover trigger invisible so that it will actually occupy a place and thus connected with colordot // make the trigger flexDisplay so that the trigger will be located at the same place at the color dot colorDot.find("i").addClass("invisible"); colorDot.find("i").addClass("flexDisplay"); }); } colorDot.hover(function (event) { event.preventDefault(); colorDot.addClass("colorDotMouseover") }, function (event) { event.preventDefault(); colorDot.removeClass("colorDotMouseover") }); colorDot.click(function (event) { event.preventDefault(); productGrid.find(".colorDotSelected").removeClass("colorDotSelected"); colorDot.addClass("colorDotSelected"); // displaying selected color name in color dots popover productGrid.find("[name=seeMoreColors] a").text(hasMetadataColorList.at(colorDot.attr("data-color-index"))); // showing popover icon productGrid.find("[name=seeMoreColors] i").removeClass("hidden"); productGrid.find("[name=seeMoreColors] a").append(popoverIcon); productGrid.find("[name=seeMoreColors]").removeClass("hidden"); // rendering selected color's size dropdown if applicable let productInfos = hasMetadataColorMap.get(hasMetadataColorList.at(colorDot.attr("data-color-index"))); that.renderVariationalAsinFaceOutTemplate(productInfos[0], productGrid, that.getDpLinkForProductInfo(productInfos[0], productCategory), ldMerchantToAsins, productCategory); that.renderSizeDropDown(productInfos[0], productGrid, productInfos, ldMerchantToAsins, productCategory); }) productGrid.find("#productVariationDataColorSelectorDotList").append(colorDot); // highlight leftmost color dot if (i == 0) { colorDot.addClass("colorDotSelected"); } } // control the max width to make it only shows full name when there is enough space left if (true) { productGrid.find("[name=seeMoreColors]").css("max-width", productGrid.find("[name=productInnerGrid]").width() - productGrid.find("#productVariationDataColorSelectorDotList").width() - 5); productGrid.find("[name=seeMoreColors] a").css("max-width", productGrid.find("[name=productInnerGrid]").width() - productGrid.find("#productVariationDataColorSelectorDotList").width() - 23); productGrid.find("[name=seeMoreColors]").css("min-width", 20); } else { productGrid.find("[name=seeMoreColors]").css("max-width", productGrid.find("[name=productInnerGrid]").width() - productGrid.find("#productVariationDataColorSelectorDotList").width() - 0.5 * parseFloat(getComputedStyle(document.documentElement).fontSize)); productGrid.find("[name=seeMoreColors] a").css("max-width", productGrid.find("[name=productInnerGrid]").width() - productGrid.find("#productVariationDataColorSelectorDotList").width() - 2.3 * parseFloat(getComputedStyle(document.documentElement).fontSize)); productGrid.find("[name=seeMoreColors]").css("min-width", 2 * parseFloat(getComputedStyle(document.documentElement).fontSize)); } // rendering popover for color dots when available color metadata exceeds maximum allowed number of color dots. { colorIndexCounter = 0; for (let i = 0; i < hasMetadataColorList.length; i++) { let colorName = hasMetadataColorList.at(i); let colorMetadata = colorNameToMetadataMap.get(colorName); if (i == 0) { colorMetadataInPopoverContent += '<li class="popoverDropdownLi popoverDropdownActiveLi" data-color-index=' + colorIndexCounter++ + '><div class=""><span class="' + colorDotClass + '"style="background-color:' + colorMetadata + ';border-radius:8.5px;width:17px;height:17px;float:left;"></span><span>' + colorName + '</span></div></li>' } else { colorMetadataInPopoverContent += '<li class="popoverDropdownLi" data-color-index=' + colorIndexCounter++ + '><div class=""><span class="' + colorDotClass + '"style="background-color:' + colorMetadata + ';border-radius:8.5px;width:17px;height:17px;float:left;"></span><span>' + colorName + '</span></div></li>' } } colorMetadataInPopoverContent += '</ul>' // displaying color dots popover if ((hasMetadataColorList.length - dotMaximumNumber) > 0) { productGrid.find("[name=seeMoreColors]").removeClass("hidden"); productGrid.find("[name=seeMoreColors] a").text("+" + (hasMetadataColorList.length - dotMaximumNumber) + " more"); productGrid.find("[name=seeMoreColors] a").css("outline", "none"); productGrid.find("[name=seeMoreColors] a").addClass("seeMoreColorsControl"); } P.when("A", popoverType, "ready").execute(function (A, popover) { let instance = popover.get(productGrid.find("[name=seeMoreColors]")); instance.attrs("dataStrategy", "inline"); instance.attrs("activate", "onclick"); instance.update({"content" : colorMetadataInPopoverContent}); instance.attrs("closeButton", false); instance.attrs("padding", "none"); if (popoverType === "a-popover") { instance.attrs("position", "triggerVertical"); instance.attrs("max-height", "300px"); } else { instance.attrs("header", "Color:"); instance.attrs("max-width", "30rem"); instance.attrs("max-height", "60rem"); instance.attrs("min-width", "20rem"); } }); productGrid.find("[name=seeMoreColors]").click(function (event) { event.preventDefault(); P.when("A", popoverType, "ready").execute(function (A, popover) { // rendering highlight effect for selected color dot in color dots popover let instance = popover.get(productGrid.find("[name=seeMoreColors]")); let colorIndex = productGrid.find(".colorDotSelected").attr("data-color-index"); instance.getContent().find("li").removeClass("popoverDropdownActiveLi"); instance.getContent().find("[data-color-index=" + colorIndex + "]").addClass("popoverDropdownActiveLi"); // bind window scroll one time monitoring event $(window).one("scroll", function (event) { event.preventDefault(); if (instance.isActive()) { instance.hide(); } }) // bind click event for color dot items in color dots popover instance.getContent().find("li").click(function () { event.preventDefault(); instance.getContent().find("li").removeClass("popoverDropdownActiveLi"); $(this).addClass("popoverDropdownActiveLi"); productGrid.find("[name=seeMoreColors] a").text($(this).text()); productGrid.find("[name=seeMoreColors] a").append(popoverIcon); instance.hide(); // replace last color dot in productGrid with selected color dot if selected color is only resides in color dots popover if ($(this).attr("data-color-index") >= dotMaximumNumber - 1 && productGrid.find(".productVariationDataColorSelectorDotDiv").last().attr("data-color-index") != $(this).attr("data-color-index")) { productGrid.find(".productVariationDataColorSelectorDotDiv").last().attr("data-color-index", $(this).attr("data-color-index")); productGrid.find(".productVariationDataColorSelectorDotDiv").last().find(".ColorSelectorColorDotInnerFill").css("background-color", colorNameToMetadataMap.get(hasMetadataColorList.at($(this).attr("data-color-index")))); // update tooltip of the last color dot for desktop if (true) { P.when("A", "a-tooltip", "ready").execute(function (A, popover) { let instance = popover.get(productGrid.find(".productVariationDataColorSelectorDotDiv").last()); instance.update({"content": hasMetadataColorList.at(productGrid.find(".productVariationDataColorSelectorDotDiv").last().attr("data-color-index"))}); }); } } productGrid.find(".productVariationDataColorSelectorDotDiv").removeClass("colorDotSelected"); productGrid.find("#productVariationDataColorSelectorDotList").find("[data-color-index=" + $(this).attr("data-color-index") + "]").addClass("colorDotSelected"); // render size dropdown for selected color let productInfos = hasMetadataColorMap.get(hasMetadataColorList.at($(this).attr("data-color-index"))); that.renderVariationalAsinFaceOutTemplate(productInfos[0], productGrid, that.getDpLinkForProductInfo(productInfos[0], productCategory), ldMerchantToAsins, productCategory); that.renderSizeDropDown(productInfos[0], productGrid, productInfos, ldMerchantToAsins, productCategory); }) // render hover effect for items in color dots popover instance.getContent().find("li").hover(function (event) { event.preventDefault(); $(this).addClass("popoverDropdownLiMouseover"); }, function (event) { event.preventDefault(); $(this).removeClass("popoverDropdownLiMouseover"); } ) }); }) } return hasMetadataColorMap.get(hasMetadataColorList.at(0)); }, // private function renderVariationalDropDown: function (productInfo, productGrid, productInfos, ldMerchantToAsins, productCategory) { let that = this; let productInfosInDropdown; let ungroupedProductInfoList = []; if (commonModule.isEmpty(productInfo["variationData"]["order"])) { this.renderVariationalToPlainAsin(productInfo, productGrid, productCategory); return; } let standardGroupIndex = this.processVariationalData(productInfo["variationData"]); let passedProductInfoList = []; for (let i = 0; i < productInfos.length; i += 1) { let groupIndex = this.processVariationalData(productInfos[i]["variationData"]); if (standardGroupIndex === groupIndex) { passedProductInfoList.push(productInfos[i]); } else { ungroupedProductInfoList.push(productInfos[i]); } } if (passedProductInfoList.length > 1) { if (commonModule.isNotEmpty(productInfo["variationData"]["color_name"])) { // only when there are multiple colors have the metadata, will productInfosInDropdown not being empty. productInfosInDropdown = that.renderVariationColorDimension(productInfo, productGrid, productInfos, ldMerchantToAsins, productCategory); } else { passedProductInfoList.sort((a, b) => (parseInt(a["variationData"]["order"]) - parseInt(b["variationData"]["order"]))) productInfosInDropdown = passedProductInfoList; } if (commonModule.isNotEmpty(productInfosInDropdown) && productInfosInDropdown.length > 0) { // those, rendering size dropdown for color dots occupied productGrid or rendering size dropdown for 'size' only variational family, which must have more than 1 children this.renderSizeDropDown(productInfosInDropdown[0], productGrid, productInfosInDropdown, ldMerchantToAsins, productCategory); } } else { this.renderVariationalToPlainAsin(productInfo, productGrid, productCategory); } // render leftover ungrouped asins for (let i = 0; i < ungroupedProductInfoList.length; ++i) { // 1. Create the product cell by cloning the grid template, clone the product grid template from productInfoList.jsp#productGridTemplate[name=productGrid] let productGrid = $("#productGridTemplate [name=productGrid]").clone(); this.renderAsinFaceOut(ungroupedProductInfoList[i], productGrid, this.getDpLink(ungroupedProductInfoList, i, productCategory), ldMerchantToAsins, productCategory); // 3. Append the product cell to the product list $("#productInfoList").append(productGrid); } }, // private function renderSizeDropDown: function (productInfo, productGrid, productInfos, ldMerchantToAsins, productCategory) { let that = this; // showing outdate indexed product in another productGrids let ungroupedProductInfoList = []; let standardGroupIndex = this.processVariationalData(productInfo["variationData"]); let passedProductInfoList = []; for (let i = 0; i < productInfos.length; i += 1) { let groupIndex = this.processVariationalData(productInfos[i]["variationData"]); if (standardGroupIndex === groupIndex) { passedProductInfoList.push(productInfos[i]); } else { ungroupedProductInfoList.push(productInfos[i]); } } // if no size dimension no handling at all if (productInfo["variationData"]["size_name"]) { // if there are more than 1 size, render size dropdown if (passedProductInfoList.length > 1) { productGrid.find("[name=chooseSizePromptBox]").removeClass("invisible"); // re-display hidden dropdown if (true) { productGrid.find(".desktopDropdown").removeClass("hidden"); } else if (false) { productGrid.find(".mobileDropdown").removeClass("hidden"); } else { productGrid.find(".tabletDropdown").removeClass("hidden"); } // hide size label since we are showing dropdown now productGrid.find(".marginForSizeLabel").addClass("hidden"); // rendering dropdown const dropDownIdPrefix = 'VariationalDropDown'; // use the new number as dropdownId to unbind previously bound events P.when("a-dropdown", "A", "ready").execute(function (dropdown, A) { productGrid.find("[name=productVariationData]").removeClass("hidden"); productGrid.find("[name=productVariationDataSizeSelector]").removeClass("hidden"); // variable spacing productGrid.find("[name=variableSpacing]").removeClass("displayNone"); // adding margin to LTD productGrid.find("div[name=limitedTimeDeal]").addClass("limitedTimeDealSpacing"); productGrid.find("[name=productVariationDataDropDown]").attr("id", dropDownIdPrefix + passedProductInfoList[0]["sortId"].at(0)); let sizeDropdown = dropdown.getSelect(productGrid.find("[name=productVariationDataDropDown]")); let dropdownSelectEvent = "a:dropdown:" + productGrid.find("[name=productVariationDataDropDown]").attr("id") + ":select"; // removes size options for previous selected color sizeDropdown.removeOptions(Array.from(Array(sizeDropdown.getOptions().size()).keys())); for (let i = 0; i < passedProductInfoList.length; i += 1) { if (passedProductInfoList[i]["lightningDeal"]) { that.startLdEndTimer(passedProductInfoList[i]["secondsLeftToClaim"], passedProductInfoList[i]["asin"]); } let variationDataMap = new Map(Object.entries(passedProductInfoList[i]["variationData"])); sizeDropdown.addOption({ text: variationDataMap.get("size_name"), value: i.toString() }, i); } A.on(dropdownSelectEvent, function (data) { that.renderVariationalDataForFaceOut(productGrid, passedProductInfoList[data.value], that.getDpLink(passedProductInfoList, data.value, productCategory), productCategory) productGrid.find("[name=chooseSizePromptBox]").addClass("invisible"); }); }) } else { that.renderTheOnlySizeAvailable(productInfo, productGrid, productCategory); } } else { // when only color dimension available productGrid.find("[name=chooseSizePromptBox]").addClass("invisible"); that.rerenderATCForNonSelectableProductGrid(passedProductInfoList[0], productGrid, productCategory); } // render leftover ungrouped asins for (let i = 0; i < ungroupedProductInfoList.length; ++i) { // 1. Create the product cell by cloning the grid template, clone the product grid template from productInfoList.jsp#productGridTemplate[name=productGrid] let productGrid = $("#productGridTemplate [name=productGrid]").clone(); this.renderAsinFaceOut(ungroupedProductInfoList[i], productGrid, this.getDpLink(ungroupedProductInfoList, i, productCategory), ldMerchantToAsins, productCategory); // 3. Append the product cell to the product list $("#productInfoList").append(productGrid); } }, // private function renderTheOnlySizeAvailable: function (productInfo, productGrid, productCategory) { // productVariationData productGrid.find("[name=chooseSizePromptBox]").addClass("invisible"); // hide size dropdown && showing size label if (true) { productGrid.find(".desktopDropdown").addClass("hidden"); } else if (false) { productGrid.find(".mobileDropdown").addClass("hidden"); } else { productGrid.find(".tabletDropdown").addClass("hidden"); } productGrid.find("[name=productVariationDataSizeSelector]").removeClass("hidden"); productGrid.find(".marginForSizeLabel").removeClass("hidden"); productGrid.find(".marginForSizeLabel").text(productInfo["variationData"]["size_name"]); this.rerenderATCForNonSelectableProductGrid(productInfo, productGrid, productCategory); }, // private function renderVariationalToPlainAsin: function (productInfo, productGrid, productCategory) { // productVariationData productGrid.find("[name=chooseSizePromptBox]").addClass("invisible"); productGrid.find("[name=productVariationData]").addClass("hidden"); this.getVariationalDataForAsin(productInfo["asin"], productGrid); this.rerenderATCForNonSelectableProductGrid(productInfo, productGrid, productCategory); }, // private function - rerender addToCart Button related sections rerenderATCForNonSelectableProductGrid: function (productInfo, productGrid, productCategory) { // price let price; if (productInfo["priceInfo"]["priceToPay"]) { price = productInfo["priceInfo"]["priceToPay"]["displayString"]; } // Add to cart / LD (View Item/View options) let viewItemBtnBox = productGrid.find("[name=viewItemBtnBox]"); let addToCartBtnBox = productGrid.find("div[name=addToCartBtnBox]"); if (productInfo["blockATCAsin"]) { // Render the select button for blockATCAsin offers let selectBtnBox = productGrid.find("[name=selectBtnBox]"); selectBtnBox.removeClass("hidden"); selectBtnBox.find("[name=selectBtn]").attr("href", this.getDpLinkForProductInfo(productInfo, productCategory)); addToCartBtnBox.addClass("hidden"); } else if (productInfo["lightningDeal"] || false) { // View Item viewItemBtnBox.removeClass("hidden"); viewItemBtnBox.find("[name=viewItemBtn]").attr("href", this.getDpLinkForProductInfo(productInfo, productCategory)); addToCartBtnBox.find("[name=addVariationalASINToCartBtn]").addClass("hidden"); addToCartBtnBox.addClass("hidden"); } else { viewItemBtnBox.addClass("hidden"); if (productInfo["parentAsin"] || commonModule.isEmpty(productInfo["offerListingId"])) { // See options addToCartBtnBox.find("[name=seeOptionsBtn]").removeClass("hidden"); addToCartBtnBox.find("[name=seeOptionsBtn]").attr("href", productInfo["detailPageLink"]); } else { // Add to cart let data_json = { "asin": productInfo["asin"], "offerListingId": productInfo["offerListingId"], "price": price, "quantity": productInfo["quantity"], "merchantId": productInfo["merchantId"], "canonicalAsin": productInfo["canonicalAsin"], "minimumOrderQuantity": productInfo["minimumOrderQuantity"] }; // set reftagSuffix only for carousel view if (false && !isFilterOrSort) { data_json["reftagSuffix"] = productCategoryToReftagSuffix.get(productCategory); } addToCartBtnBox.find("[name=addVariationalASINToCartBtn]").addClass("hidden"); addToCartBtnBox.find("[name=addToCartBtn]").removeClass("hidden"); addToCartBtnBox.find("[data-name=addToCartBtn]").attr("data-json", JSON.stringify(data_json)); addToCartBtnBox.find("[data-name=addToCartBtn]").removeClass("inputCursorDisabled"); } } // redeem coupon, logic to execute only once is in the redeemCoupon method this.redeemCoupon(productInfo["asin"], productInfo["offerListingId"]); }, // private function renderAsVariationalAsin: function (productInfo, productGrid, dpLink, ldMerchantToAsins, productCategory) { let startTime = new Date().getTime(); let that = this; that.renderVariationalAsinFaceOutTemplate(productInfo, productGrid, dpLink, ldMerchantToAsins, productCategory); let currentSortId = queryParameter["sortId"]; queryParameter["defaultGroupingIdForColorAndSize"] = productInfo["defaultGroupingIdForColorAndSize"]; that.cachedRecordedGroupingIds.push(productInfo["defaultGroupingIdForColorAndSize"]); queryParameter["recordedGroupingIds"] = []; $.ajax({ type: "GET", url: "/promotion/psp/productInfoListForVariationalAsin", data: $.param(queryParameter, true), dataType: "json", contentType: "application/x-www-form-urlencoded; charset=UTF-8", success: function (productInfos) { let variationalAsinDataPopulatedBack = false; if (productInfos.length <= 1) { that.renderVariationalToPlainAsin(productInfo, productGrid, productCategory); } else { // Populating VariationalData from SubWorkflow back to MajorWorkflow for (let productInfoEntry of productInfos) { if (productInfo["asin"] === productInfoEntry["asin"]) { productInfo["variationData"] = productInfoEntry["variationData"]; variationalAsinDataPopulatedBack = true; break; } } if (variationalAsinDataPopulatedBack) { that.renderVariationalDropDown(productInfo, productGrid, productInfos, ldMerchantToAsins, productCategory); } else { that.renderVariationalToPlainAsin(productInfo, productGrid, productCategory); let newProductGrid = $("#productGridTemplate [name=productGrid]").clone(); that.renderVariationalAsinFaceOutTemplate(productInfos[0], newProductGrid, that.getDpLink(productInfos, 0, productCategory), ldMerchantToAsins, productCategory); that.renderVariationalDropDown(productInfos[0], newProductGrid, productInfos, ldMerchantToAsins, productCategory); // 3. Append the product cell to the product list $("#productInfoList").append(productGrid); $("#productInfoList").append(newProductGrid); } } }, error: function () { that.renderVariationalToPlainAsin(productInfo, productGrid, productCategory); } }) queryParameter["sortId"] = currentSortId; queryParameter["recordedGroupingIds"] = that.cachedRecordedGroupingIds; queryParameter["defaultGroupingId"] = ""; queryParameter["defaultGroupingIdForColorAndSize"] = ""; totalRenderTime += (new Date().getTime() - startTime); }, // private function renderPriceForProductGrid: function (productInfo, productGrid) { let price; if (productInfo["priceInfo"]["priceToPay"] || productInfo["priceInfo"]["pricePerUnit"] || productInfo["priceInfo"]["basicPrice"]) { let productPriceBox = productGrid.find("div[name=productPriceBox]"); price = productInfo["priceInfo"]["priceToPay"]["displayString"]; productPriceBox.find("[name=productPriceToPay]").attr("aria-label", productInfo["priceInfo"]["priceToPay"]["displayString"]); productPriceBox.find(".a-price-symbol").text(productInfo["priceInfo"]["priceToPay"]["symbol"]); productPriceBox.find(".a-price-whole").text(productInfo["priceInfo"]["priceToPay"]["whole"]); productPriceBox.find(".a-price-decimal").text(productInfo["priceInfo"]["priceToPay"]["separator"]); productPriceBox.find(".a-price-fraction").text(productInfo["priceInfo"]["priceToPay"]["fraction"]); if (productInfo["priceInfo"]["symbolLast"]) { productPriceBox.find("[name=symbolLast]").removeClass("hidden"); } else { productPriceBox.find("[name=symbolFirst]").removeClass("hidden"); } if (productInfo["priceInfo"]["pricePerUnit"]) { productPriceBox.find("[name=pricePerUnit]").text("("+productInfo["priceInfo"]["pricePerUnit"]+")"); productPriceBox.find("[name=pricePerUnit]").attr("aria-label", productInfo["priceInfo"]["pricePerUnit"]); } if (productInfo["priceInfo"]["bottlingDepositFeeDE"]) { productPriceBox.find("[name=bottlingDepositFee]").text(productInfo["priceInfo"]["bottlingDepositFeeDE"]); productPriceBox.find("[name=bottlingDepositFee]").attr("aria-label", productInfo["priceInfo"]["bottlingDepositFeeDE"]); } if (productInfo["priceInfo"]["basicPrice"]) { if(true) { productPriceBox.find("[name=basicPrice]").text(productInfo["priceInfo"]["basicPrice"]["displayString"]); productPriceBox.find("[name=basicPrice]").attr("aria-label", productInfo["priceInfo"]["basicPrice"]["displayString"]); } else if (true) { //Buy1 - Show Omnibus if applicable if (productInfo["priceInfo"]["basisPriceType"] == "OMNIBUS_PRICE" || productInfo["priceInfo"]["basisPriceType"] == "OMNIBUS_PRICE_STRIKETHROUGH") { //Handle Omnibus Price for EU //Message var omnibusPriceMessage = productInfo["priceInfo"]["basisPriceLabel"] + ": " + productInfo["priceInfo"]["basicPrice"]["displayString"]; productGrid.find("[name=omnibusContainer").removeClass("hidden") productGrid.find("[name=omnibusPrice]").text(omnibusPriceMessage); productGrid.find("[name=omnibusPrice]").attr("aria-label", omnibusPriceMessage); //Popover productGrid.find("[id=omnibusPopoverAction]").attr("data-a-popover", "{\"inlineContent\":\"" + productInfo["priceInfo"]["basisPricePopover"] + "\"}"); productGrid.find("[id=omnibusPopover]").attr("class", "a-popover-trigger a-declarative a-size-small"); //remove hidden //variable spacing productGrid.find("[name=variableSpacing]").removeClass("displayNone"); //adding margin to LTD productGrid.find("div[name=limitedTimeDeal]").addClass("limitedTimeDealSpacing"); //adding margin to dropdown productGrid.find("[name=productVariationData]").addClass("selectorMargin"); //adding margin to attributes productGrid.find("div[name=productVariationDataForPlainAsin").addClass("attributesMargin"); } else { //Handle Strikethrough Price for non-EU productPriceBox.find("[name=basicPrice]").text(productInfo["priceInfo"]["basicPrice"]["displayString"]); productPriceBox.find("[name=basicPrice]").attr("aria-label", productInfo["priceInfo"]["basicPrice"]["displayString"]); } } else if (productInfo["priceInfo"]["basicPriceType"] != "OMNIBUS_PRICE") { //buy X - Don't show Omnibus productPriceBox.find("[name=basicPrice]").text(productInfo["priceInfo"]["basicPrice"]["displayString"]); productPriceBox.find("[name=basicPrice]").attr("aria-label", productInfo["priceInfo"]["basicPrice"]["displayString"]); } } productPriceBox.removeClass("invisible"); } return price }, // private function renderImageForProductGrid: function (productInfo, productGrid, dpLink) { let productImageBox = productGrid.find("div[name=productImageBox]"); productImageBox.find("img[name='productImage']").attr("src", productInfo["imgURL"]); productImageBox.find("img[name='productImage']").attr("alt", productInfo["imgAlt"]); productImageBox.find("img[name='productImage']").attr("title", productInfo["imgAlt"]); productImageBox.find("[data-name='productImageUrl']").attr("href", dpLink); }, getVariationalDataForAsin: function (asin, productGrid) { let getItemVariationalDataRequest = { "asin": asin }; $.ajax({ type: "GET", url: "/promotion/twister/variationalData", data: getItemVariationalDataRequest, contentType: 'application/x-www-form-urlencoded; charset=UTF-8;', success: function (variationalData) { let variationalEntries = new Map(Object.entries(variationalData)); if (variationalEntries.size > 0) { productGrid.find("div[name=productVariationDataForPlainAsin").removeClass("hidden"); let notFirst = false; for (let [key, value] of variationalEntries) { if (notFirst){ productGrid.find("[data-name=productVariationDataForPlainAsin]").append('<li class="sc-product-variation clamp1 variationItem" aria-label=""><span class="a-size-base a-text-bold" aria-label="">' + key + ":" + '</span><span class="a-size-base" aria-label=""> ' + value + '</span></li>'); } else { productGrid.find("[data-name=productVariationDataForPlainAsin]").append('<li class="sc-product-variation clamp1" aria-label=""><span class="a-size-base a-text-bold" aria-label="">' + key + ":" + '</span><span class="a-size-base" aria-label=""> ' + value + '</span></li>'); } notFirst = true } if(notFirst){ // variable spacing productGrid.find("[name=variableSpacing]").removeClass("displayNone"); // adding margin to LTD productGrid.find("div[name=limitedTimeDeal]").addClass("limitedTimeDealSpacing"); } } } }) }, // private function renderProductInfoList: function () { let startTime = new Date().getTime(); let promotionShoppingPageResponse = this.cachedPromotionShoppingPageResponse; let productInfoArray; let pageId = "A2OD29RWOSXA27"; const redundantProductInfoListContainer = document.getElementsByClassName("productInfoListContainer"); // since Amabot content is currently supported for "Carousel" view, // this method cleans any leftover content when user switches between carousel and grid view this.cleanupAmabotContent(); if (false && !isFilterOrSort) { // setting productInfoArray to empty list if the response is null or undefined productInfoArray = promotionShoppingPageResponse["viewModels"]["PRODUCT_INFO_LIST_SUS"] || []; productInfoArray = productInfoArray.slice(0, 7); // only hide productInfoListContainer if we have products to show in carousel if (productInfoArray.length !== 0) { redundantProductInfoListContainer[0].classList.add("hidden"); } this.mapProductCategoryToCarousel("productInfoCarousel", productInfoArray); this.hideUnusedCarousels("productInfoCarousel", productInfoArray); $("#productInfoListCarouselContainer").removeClass("hidden"); $("#productGridTemplate [name=productGrid]").removeClass("productGrid"); $("#productGridTemplate [name=productGrid]").addClass("productGridForSUS"); // For SUS workflow, if the productInfoMap is empty then we need to call the addProductToPage method to render the error page. if (productInfoArray.length === 0) { isServerResponseEmpty = true; // This method is called to render the error page. this.addProductToPage("", [], startTime, false) } for (let productInfoForSUS of productInfoArray) { let carosuelRenderStartTime = new Date().getTime(); // Store reftagSuffix for a productCategory productCategoryToReftagSuffix.set(productInfoForSUS.productCategory, productInfoForSUS.reftagSuffix); $("#productInfoList").addClass("hidden"); let carouselName = refinementToCarouselMap.get(productInfoForSUS["productCategory"]); // only rendering the visible products on the page first. let visibleProductInfos = productInfoForSUS["productInfos"].slice(0, SUS_VISIBLE_PRODUCTS_COUNT); this.addProductToPage(productInfoForSUS["productCategory"], visibleProductInfos, startTime, false); this.hideEmptyResponseCarousel(carouselName, productInfoForSUS["productInfos"]); carouselRenderTimes.push(new Date().getTime() - carosuelRenderStartTime); } this.initializeCarousels(productInfoArray); this.hideEmptyCarouselCards(productInfoArray); // This call is Carousel view specific. if (false) { pageId = SUSPageId; } this.renderAmabotContent(pageId); const carouselElement = document.getElementsByClassName("a-carousel"); for (let i = 0; i < carouselElement.length; i++) { carouselElement[i].classList.add("displayFlex"); } const carouselCardElement = document.getElementsByClassName("a-carousel-card"); for (let i = 0; i < carouselCardElement.length; i++) { carouselCardElement[i].classList.add("displayFlex"); } } else { // show productInfoListContainer redundantProductInfoListContainer[0].classList.remove("hidden"); $("#productInfoListCarouselContainer").addClass("hidden"); $("#productInfoList").removeClass("hidden"); $("#productGridTemplate [name=productGrid]").addClass("productGrid"); let productInfoList = promotionShoppingPageResponse["viewModels"]["PRODUCT_INFO_LIST"]; if (!productInfoList || productInfoList.length === 0) { isServerResponseEmpty = true; } this.addProductToPage("", productInfoList, startTime, false); } this.hideSpin(); pageRenderEndTime = new Date().getTime(); // rendering rest of the products which are not currently visible on the page. if (false && !isFilterOrSort) { for (let productInfo of productInfoArray) { if (productInfo["productInfos"] && productInfo["productInfos"].length >= SUS_VISIBLE_PRODUCTS_COUNT) { let restOfProductInfos = productInfo["productInfos"].slice(SUS_VISIBLE_PRODUCTS_COUNT); this.addProductToPage(productInfo["productCategory"], restOfProductInfos, startTime, true); } } } }, // This method removes any previously loaded amabot content cleanupAmabotContent: function () { let slots = amabotSlots.split(","); for (const slot of slots) { $("#" + slot).empty(); } }, // This method renders the content received from amabotContent controller to its specific slot. renderAmabotContent: function (pageId) { let amabotRequest = { "pageId": pageId, "slots": amabotSlots }; $.ajax({ type: "GET", url: "/promotion/psp/amabotContent", data: amabotRequest, dataType: "json", contentType: "application/x-www-form-urlencoded; charset=UTF-8", success: function (slotToContent) { if (slotToContent) { let slots = amabotSlots.split(","); for (const slot of slots) { let slotElement = $("#" + slot); let content = slotToContent[slot]; if (slotElement && content) { slotElement.append(content); } } } }, error: function (e) { console.log(e.status); console.log(e.responseText); } }); }, // capture stock up and save carousel and base page latency metrics recordSUSLatencyMetrics: function (startTime, endTime, metricsPrefix) { if ((false || false) && !isFilterOrSort && !isServerResponseEmpty) { let metricsName = metricsPrefix; metricsName += false ? "_carousel" : "_base"; metricsName += false ? "_mobile" : "_desktop"; metricsName += false ? "_cp" : ""; let data = { "startTime" : startTime, "endTime" : endTime, "metricsName": metricsName } commonModule.clientSideMetrics(data); } }, // capture render times for products that are visible on the page recordVisibleProductsRenderTime: function (startTime, endTime) { if ((false || false) && !isFilterOrSort && !isServerResponseEmpty) { let metricsName = false ? "SUS_Carousel_Page" : "SUS_Base_Page"; metricsName += false ? "_cp" : ""; let data = { "startTime" : startTime, "endTime" : endTime, "metricsName": metricsName } commonModule.clientSideMetrics(data); } }, initializeCarousels: function (productInfoArray) { P.when("a-carousel-framework", "ready").execute("get-the-carousel", function (framework) { for (let i = 0; i < productInfoArray.length; i++) { let carouselElement = document.getElementById(refinementToCarouselMap.get(productInfoArray[i]["productCategory"])); let carousel = framework.getCarousel(carouselElement); carousel.setAttr("set_size", productInfoArray[i]["productInfos"].length); $("#productInfoCarousel_" + i).attr("data-a-carousel-options", "{\"name\":\"productInfoCarousel_" + i + "\",\"set_size\":\"" + productInfoArray[i]["productInfos"].length + "\",\"auto_adjust_height\":\"true\"}"); } }); }, hideEmptyCarouselCards: function (productInfoArray) { for (let i = 0; i < productInfoArray.length; i++) { let productInfoLength = productInfoArray[i]["productInfos"].length; let cards = $("#productInfoCarousel_" + i).children().children().children(); cards = cards.children(".a-carousel-viewport").children().children(); cards.slice(productInfoLength).empty(); } }, hideEmptyResponseCarousel: function(carouselName, productInfo) { if (productInfo.length == 0) { $("#" + carouselName).addClass("hidden"); } }, addProductToPage: function (productCategory, productInfoList, startTime, deferredRendering) { // If pass-in promotionShoppingPageResponse doesn't exist, render from cached promotionShoppingPageResponse let promotionShoppingPageResponse = this.cachedPromotionShoppingPageResponse; if (!deferredRendering) { this.showSpin(); } // show error message or render product list // Only looking at 100% valid productInfo to avoid showing empty page instead of the correct error page let filteredProductInfoList = productInfoList.filter(productInfo => productInfo["failedGroupingId"] === false); if (commonModule.isEmpty(promotionShoppingPageResponse) || commonModule.isEmpty(filteredProductInfoList)) { $("#showMoreBtnContainer").addClass("hidden"); let endTime = new Date().getTime(); if (commonModule.isEmpty(queryParameter["sortId"]) || queryParameter["sortId"] == [] || queryParameter["sortId"].length == 0) { // No selection if (commonModule.isEmpty(queryParameter["productCategory"]) && commonModule.isEmpty(queryParameter["searchKeyword"]) && (commonModule.isEmpty(queryParameter["avgCustomerReview"]) || queryParameter["avgCustomerReview"] == "0") && ((commonModule.isEmpty(queryParameter["priceTierMin"]) || queryParameter["priceTierMin"] == "") && (commonModule.isEmpty(queryParameter["priceTierMax"]) || queryParameter["priceTierMax"] == "")) && (commonModule.isEmpty(queryParameter["bestSeller"]) || queryParameter["bestSeller"] == "0") && (commonModule.isEmpty(queryParameter["sortBy"]) || queryParameter["sortBy"] == "1")) { $("#errorMessageWithSelection").addClass("hidden"); $("#errorMessageWithSuppressedProducts").addClass("hidden"); $("#errorMessageWithoutSelection").removeClass("hidden"); let data = { "startTime": startTime, "endTime": endTime, "promotionId": "A2OD29RWOSXA27", "metricsName" : "productInfoListErrorPage" } commonModule.clientSideMetrics(data); } else { let data = { "startTime": startTime, "endTime": endTime, "promotionId": "A2OD29RWOSXA27", "metricsName" : "productInfoListErrorPageRefinements" } commonModule.clientSideMetrics(data); $("#errorMessageWithoutSelection").addClass("hidden"); $("#errorMessageWithSuppressedProducts").addClass("hidden"); $("#errorMessageWithSelection").removeClass("hidden"); } } } //Check first ASIN to see if it suppressed do to legal requirements in JP and show error page else if (this.isProductRestricted(productInfoList)) { $("#showMoreBtnContainer").addClass("hidden"); $("#errorMessageWithoutSelection").addClass("hidden"); $("#errorMessageWithSelection").addClass("hidden"); $("#errorMessageWithSuppressedProducts").removeClass("hidden"); $("#couponClippingContainer").addClass("hidden"); } // No errors found render product asin grid else { $("#errorMessageWithoutSelection").addClass("hidden"); $("#errorMessageWithSelection").addClass("hidden"); $("#errorMessageWithSuppressedProducts").addClass("hidden"); if (!false || isFilterOrSort) { $("#showMoreBtnContainer").removeClass("hidden"); } let ldMerchantToAsins = {}; for (let i = 0; i < productInfoList.length; ++i) { if (productInfoList[i] != undefined && !productInfoList[i]["failedGroupingId"]) { // 1. Create the product cell by cloning the grid template, clone the product grid template from productInfoList.jsp#productGridTemplate[name=productGrid] let cloneStartTime = new Date().getTime(); let productGrid = $("#productGridTemplate [name=productGrid]").clone(); totalCloneTime += (new Date().getTime() - cloneStartTime); let productInfoPosInCarousel = deferredRendering ? i + SUS_VISIBLE_PRODUCTS_COUNT : i; if (productInfoList[i]["defaultGroupingId"] != undefined) { if (true === productInfoList[i]["variationalAsin"]) { this.renderAsVariationalAsin(productInfoList[i], productGrid, this.getDpLink(productInfoList, i, productCategory), ldMerchantToAsins, productCategory) // 3. Append the product cell to the product list // We still need productInfoList since search and sort still required us to revert back to the productInfoList UI. $("#productInfoList").append(productGrid); if (false && !isFilterOrSort) { // Append the product cell to the product carousel this.setCarouselElement(refinementToCarouselMap.get(productCategory), productGrid, productInfoPosInCarousel); } } else { this.renderAsinFaceOut(productInfoList[i], productGrid, this.getDpLink(productInfoList, i, productCategory), ldMerchantToAsins, productCategory) // 3. Append the product cell to the product list // We still need productInfoList since search and sort still required us to revert back to the productInfoList UI. $("#productInfoList").append(productGrid); if (false && !isFilterOrSort) { // Append the product cell to the product carousel this.setCarouselElement(refinementToCarouselMap.get(productCategory), productGrid, productInfoPosInCarousel); } } } else { this.renderAsinFaceOut(productInfoList[i], productGrid, this.getDpLink(productInfoList, i, productCategory), ldMerchantToAsins, productCategory); // 3. Append the product cell to the product list // We still need productInfoList since search and sort still required us to revert back to the productInfoList UI. $("#productInfoList").append(productGrid); if (false && !isFilterOrSort) { // Append the product cell to the product carousel this.setCarouselElement(refinementToCarouselMap.get(productCategory), productGrid, productInfoPosInCarousel); } } } else if (productInfoList[i] != undefined && productInfoList[i]["failedGroupingId"]) { let that = this; let productInfoPosInCarousel = deferredRendering ? i + SUS_VISIBLE_PRODUCTS_COUNT : i; let currentSortId = queryParameter["sortId"]; queryParameter["defaultGroupingIdForColorAndSize"] = productInfoList[i]["defaultGroupingIdForColorAndSize"]; queryParameter["recordedGroupingIds"] = []; // reset sortId to original failed one queryParameter["sortId"] = productInfoList[i]["sortId"]; $.ajax({ type: "GET", url: "/promotion/psp/productInfoListForVariationalAsin", data: $.param(queryParameter, true), dataType: "json", contentType: "application/x-www-form-urlencoded; charset=UTF-8", success: function (productInfos) { let backupProductGrid = $("#productGridTemplate [name=productGrid]").clone(); if (productInfos.length === 1) { that.renderVariationalAsinFaceOutTemplate(productInfos[0], backupProductGrid, that.getDpLinkForProductInfo(productInfos[0], productCategory), ldMerchantToAsins, productCategory); that.renderVariationalToPlainAsin(productInfos[0], backupProductGrid, productCategory); $("#productInfoList").append(backupProductGrid); if (false && !isFilterOrSort) { // Append the product cell to the product carousel this.setCarouselElement(refinementToCarouselMap.get(productCategory), productGrid, productInfoPosInCarousel); } } else if (productInfos.length > 1) { that.renderVariationalAsinFaceOutTemplate(productInfos[0], backupProductGrid, that.getDpLinkForProductInfo(productInfos[0], productCategory), ldMerchantToAsins, productCategory); that.renderVariationalDropDown(productInfos[0], backupProductGrid, productInfos, ldMerchantToAsins, productCategory); $("#productInfoList").append(backupProductGrid); if (false && !isFilterOrSort) { // Append the product cell to the product carousel this.setCarouselElement(refinementToCarouselMap.get(productCategory), productGrid, productInfoPosInCarousel); } } }, error: function (e) { console.log(e.status); console.log(e.responseText); } }) queryParameter["sortId"] = currentSortId; queryParameter["recordedGroupingIds"] = that.cachedRecordedGroupingIds; queryParameter["defaultGroupingIdForColorAndSize"] = ""; } } // Lightning Deal claim percentage update this.continuousUpdateClaim(ldMerchantToAsins); // Hide the Show More button if product list is null or the ES data set has been exhausted if (commonModule.isEmpty(promotionShoppingPageResponse) || promotionShoppingPageResponse["reachBottom"] || queryParameter["sortId"] == null) { $("#showMoreBtnContainer").addClass("hidden"); } } }, setCarouselElement: function (name, productGrid, i) { P.when("a-carousel-framework", "ready").execute("get-the-carousel", function (framework) { // This carousel actually does have an id, so lets just use that since the lookup is faster carousel = framework.getCarousel(document.getElementById(name)); // Since carousel doesn't allow adding or removing any items after the initialization // we created 20 placeholers item, and use the getAttr("fetchedItems") API call to // fetch all the items into a list, then splice the list to replace an item with one // single ASIN faceout, then use setAttr to make the change onto the carousel. let fetchedItems = carousel.getAttr("fetchedItems"); fetchedItems.splice(i, 1, productGrid[0]); carousel.setAttr("fetchedItems", fetchedItems); if (true) { let addToCartBtnBox = productGrid.find("div[name=addToCartBtnBox]"); addToCartBtnBox.find("span[name= addToCartBtn]").find(".addToCartBtn").removeClass("addToCartBtn"); addToCartBtnBox.find("span[name= addVariationalASINToCartBtn]").find(".addToCartBtn").removeClass("addToCartBtn"); } }); }, mapProductCategoryToCarousel(carouselName, productInfoArray) { for (let i = 0; i < productInfoArray.length; i++) { refinementToCarouselMap.set(productInfoArray[i]["productCategory"], carouselName + "_" + i); //TODO: Need to implement internationalization for See all // See All link must be present only for product categories. product categories starts after Recommendations and Buy it again. if (!productInfoArray[i]["recommendationWidget"]) { let productCategory = productInfoArray[i]["productCategory"]; let totalResults = productInfoArray[i]["totalResults"]; let seeAllText = this.getSeeAllText(totalResults); let carouselHeading = $("#" + carouselName + "_" + i).children("#aCarouselHeading").children().eq(0); carouselHeading.children().html('<b>'+ productCategory + '</b>&nbsp;&nbsp;<a id="'+productCategory+'" data-name="carouselListItemText" data-value="'+productCategory+'" class="a-link-normal carouselLink" href="javascript:void(0)">'+seeAllText+'</a>'); carouselHeading.addClass("a-span16"); carouselHeading.removeClass("a-span8"); } else { $("#" + carouselName + "_" + i).children("#aCarouselHeading").children().eq(0).children() .html('<b>'+ productInfoArray[i]["productCategory"] + '</b>'); } } }, // returns a string like "See all (N+ items)", where N is either 1000, 500, 200, 100, 30 getSeeAllText: function (count) { let bucket = 0; let seeAll = "See All"; let items = "items"; // bucketing logic is similar to https://code.amazon.com/packages/PromotionsDiscoveryHorizonteService/blobs/0b1c7522bb02a187e3ceec69746085a51ad26534/--/src/com/amazon/pdhs/psp/service/impl/GetRefinementServiceImpl.java#L230-L244 // 10% buffer due to late check. if (count > 1100) { bucket = 900; } else if (count > 550) { bucket = 400; } else if (count > 220) { bucket = 100; } else if (count > 110) { bucket = 50; } else if (count > 33) { bucket = 20; } else { return seeAll; } return seeAll + " (" + bucket + "+ " + items + ")"; }, // public function ensureHowToClaimExpanderExpanded: function () { // Sometimes the AUI expander may not fully always expand, manually ensure it to be fully expanded $('#HowToClaimExpander').height(""); }, loadRenderRefinement: function () { let that = this; queryParameter["recordedGroupingIds"] = []; let refinementParam = { "promotionId": queryParameter["promotionId"], "avgCustomerReview": queryParameter["avgCustomerReview"], "priceTierMin" : queryParameter["priceTierMin"], "priceTierMax" : queryParameter["priceTierMax"], "bestSeller": queryParameter["bestSeller"], "sortId": JSON.stringify(queryParameter["sortId"]), "applicabilityIndex": queryParameter["applicabilityIndex"], "productCategory": queryParameter["productCategory"], "redirectAsin": queryParameter["redirectAsin"], "redirectMerchantId": queryParameter["redirectMerchantId"], "isSUSOnly": queryParameter["isSUSOnly"], "isCarouselPilot": queryParameter["isCarouselPilot"], "searchKeyword": queryParameter["searchKeyword"], "subProductCategory": queryParameter["subProductCategory"], "selectedBrands": JSON.stringify(queryParameter["selectedBrands"]) }; $.ajax({ type: "GET", url: "/promotion/psp/refinement" + reftag, data: refinementParam, contentType: "application/x-www-form-urlencoded; charset=UTF-8", success: function (promotionShoppingPageResponse) { if (commonModule.isNotEmpty(promotionShoppingPageResponse)) { if (false) { appendDebugJSON("refinement", promotionShoppingPageResponse["debugJson"]); } that.renderRefinement(promotionShoppingPageResponse["viewModels"]["REFINEMENT"]); } }, error: function (e) { console.log(e.status); console.log(e.responseText); } }); }, // private function renderRefinement: function (refinement) { // Department // Set product category of redirect asin if present if (commonModule.isNotEmpty(refinement["preSelectedProductCategory"])) { queryParameter[this.queryParameterKeys.productCategory] = refinement["preSelectedProductCategory"]; } // Check PDA response to know if it is BXGY promotion, for non BXGY promotions, this field would be "" if (queryParameter[this.queryParameterKeys.applicabilityIndex] === "0" || queryParameter[this.queryParameterKeys.applicabilityIndex] === "1") { $("#view").removeClass("hidden"); if (!false) { let viewPhoneDesktop = $("#viewList"); $("#department").addClass("paddingTop16"); viewPhoneDesktop.find("[type=radio]").prop("checked", false); viewPhoneDesktop.find("[type=radio]").eq([queryParameter[this.queryParameterKeys.applicabilityIndex]]).prop("checked", true); } } if (queryParameter[this.queryParameterKeys.applicabilityIndex] === "0") { $("#keywordSearchInputText").attr("placeholder", "Search qualifying items") } if (queryParameter[this.queryParameterKeys.applicabilityIndex] === "1") { $("#keywordSearchInputText").attr("placeholder", "Search benefit items") } let subCategoryDisplayDesktopNumber = 5; let availableProductCategories = refinement["availableProductCategories"]; let availableSubCategories = new Map(); if (commonModule.isNotEmpty(refinement["subProductCategories"])) { availableSubCategories = new Map(Object.entries(refinement["subProductCategories"])); } if (commonModule.isEmpty(availableProductCategories) || availableProductCategories.length == 0) { queryParameter[this.queryParameterKeys.productCategory] = ""; queryParameter[this.queryParameterKeys.subProductCategory] = ""; } $("#departmentList").empty(); $("#departmentListPhone").empty(); $("#anyDepartment").addClass("hidden"); for (let i in availableProductCategories) { if ($("#departmentList")) { let departmentListItemClone = $("#departmentListItemTemplate li").clone(); let currentCategoryItem = departmentListItemClone.find("[data-name=departmentListItemText]"); currentCategoryItem.text(availableProductCategories[i]); currentCategoryItem.attr("data-value", availableProductCategories[i]); if (this.getValue(this.queryParameterKeys.productCategory) == availableProductCategories[i] && commonModule.isNotEmpty(availableProductCategories[i])) { commonModule.focus($("[data-name=departmentListItemText]"), $(currentCategoryItem)); $("#anyDepartment").removeClass("hidden"); } $("#departmentList").append(departmentListItemClone); if (commonModule.isNotEmpty(availableSubCategories) && availableSubCategories.size > 0 && commonModule.isNotEmpty(availableSubCategories.get(availableProductCategories[i])) && availableSubCategories.get(availableProductCategories[i]).length > 0) { $("#departmentList li").last().append("<div name='subCategoryList' class='paddingLeft16'></div>"); $("#departmentList li").last().find("[name=subCategoryList]").append($("#departmentSubCategoryListTemplate").children().clone()); for (let subCategoryIndex in availableSubCategories.get(availableProductCategories[i])) { { let subCategoryItemClone = $("#departmentSubCategoryItemTemplate li").clone(); let currentSubCategoryItem = subCategoryItemClone.find("[data-name=departmentListSubCategoryItemText]"); currentSubCategoryItem.text(availableSubCategories.get(availableProductCategories[i])[subCategoryIndex]); currentSubCategoryItem.attr("data-value", availableSubCategories.get(availableProductCategories[i])[subCategoryIndex]); if (this.getValue(this.queryParameterKeys.productCategory) === availableProductCategories[i] && this.getValue(this.queryParameterKeys.subProductCategory) === availableSubCategories.get(availableProductCategories[i])[subCategoryIndex]) { commonModule.focus($("[data-name=departmentListSubCategoryItemText]"), $(currentSubCategoryItem)); departmentListItemClone.find("[name=subCategoryList]").children().prepend(subCategoryItemClone); if (subCategoryIndex == subCategoryDisplayDesktopNumber) { departmentListItemClone.find("[name=subCategoryList] li").last().addClass("hidden"); } } else { if (subCategoryIndex >= subCategoryDisplayDesktopNumber) { subCategoryItemClone.addClass("hidden"); } departmentListItemClone.find("[name=subCategoryList]").children().append(subCategoryItemClone); } } } // rendering see more if (availableSubCategories.get(availableProductCategories[i]).length > subCategoryDisplayDesktopNumber) { // No need to render selectedSubCategory anymore, directly adding see more let subCategoryItemClone = $("#departmentSubCategoryItemTemplate li").clone(); let currentSubCategoryItem = subCategoryItemClone.find("[data-name=departmentListSubCategoryItemText]"); let expander = $("#itemExpanderTemplate").children().clone(); let expanderName = availableProductCategories[i].replace(/\s/g, "_"); expander.attr("data-a-expander-name", expanderName); currentSubCategoryItem.attr("data-name", "subCategoryExpander"); currentSubCategoryItem.append(expander); P.when('A', 'ready').execute(function(A) { A.on('a:expander:' + expanderName + ':toggle:expand', function(data) { departmentListItemClone.find("[name=subCategoryList] li").removeClass("hidden"); }); A.on('a:expander:' + expanderName + ':toggle:collapse', function(data) { let subCategories = departmentListItemClone.find("[name=subCategoryList] li"); if (subCategories.length > subCategoryDisplayDesktopNumber) { subCategories.slice(subCategoryDisplayDesktopNumber, subCategories.length - 1).addClass("hidden"); } }); }); departmentListItemClone.find("[name=subCategoryList]").children().append(subCategoryItemClone); } } } // Phone if ($("#departmentListPhone")) { let departmentBoxPhoneClone = $("#departmentBoxTemplate > div").clone(); departmentBoxPhoneClone.text(availableProductCategories[i]); departmentBoxPhoneClone.attr("aria-label", availableProductCategories[i]); departmentBoxPhoneClone.attr("data-key", "productCategory"); departmentBoxPhoneClone.attr("data-value", availableProductCategories[i]); departmentBoxPhoneClone.attr("data-target", "departmentBox"); if (this.getValue(this.queryParameterKeys.productCategory) == availableProductCategories[i] && commonModule.isNotEmpty(availableProductCategories[i])) { departmentBoxPhoneClone.addClass("menuButtonFocus"); // weblab check for subCategory if (commonModule.isNotEmpty(availableSubCategories.get(availableProductCategories[i])) && availableSubCategories.get(availableProductCategories[i]).length > 0) { $("#subCategoryListPhone").removeClass("hidden"); // render selected product category // clear previous content $("#categoryTraversalTree").removeClass("hidden").children().not("#AnyProductCategory").empty(); $("#categoryTraversalTree").find(".horizontalMargin5").remove(); // render new content $("#categoryTraversalTree").append($("#categoryTraversalTreeNodeTemplate > span").clone()); let productCategoryTreeNode = $("#middleProductCategory").text(this.getValue(this.queryParameterKeys.productCategory)); productCategoryTreeNode.attr("data-value1", this.getValue(this.queryParameterKeys.productCategory)); productCategoryTreeNode.attr("data-value2", ""); productCategoryTreeNode.addClass("a-color-base"); $("#categoryTraversalTree").append(productCategoryTreeNode); // if have selected subProductCategory if (commonModule.isNotEmpty(this.getValue(this.queryParameterKeys.subProductCategory))) { // doesn't bind leaf node with click to reset category related refinements $("#categoryTraversalTree").append($("#categoryTraversalTreeNodeTemplate > span").clone()); let subProductCategoryTreeNode = $("#leafProductCategory").text(this.getValue(this.queryParameterKeys.subProductCategory)); subProductCategoryTreeNode.attr("data-value1", this.getValue(this.queryParameterKeys.productCategory)); subProductCategoryTreeNode.attr("data-value2", this.getValue(this.queryParameterKeys.subProductCategory)); $("#middleProductCategory").removeClass("a-color-base"); subProductCategoryTreeNode.addClass("a-color-base"); $("#categoryTraversalTree").append(subProductCategoryTreeNode); // render selected subCategory only let subCategoryBoxPhoneClone = $("#subCategoryBoxTemplate > div").clone(); subCategoryBoxPhoneClone.text(this.getValue(this.queryParameterKeys.subProductCategory)); subCategoryBoxPhoneClone.attr("aria-label", this.getValue(this.queryParameterKeys.subProductCategory)); subCategoryBoxPhoneClone.attr("data-key", "subProductCategory"); subCategoryBoxPhoneClone.attr("data-value", this.getValue(this.queryParameterKeys.subProductCategory)); subCategoryBoxPhoneClone.attr("data-id", this.getValue(this.queryParameterKeys.subProductCategory).replace("'", "&apos;")); subCategoryBoxPhoneClone.attr("data-target", "departmentBox"); subCategoryBoxPhoneClone.addClass("menuButtonFocus"); $("#subCategoryListPhone").find(".subCategoryBoxNode").remove(); $("#subCategoryListPhone").append(subCategoryBoxPhoneClone); } else { $("#subCategoryListPhone").find(".subCategoryBoxNode").remove(); // since no selected subCategory, displaying all the subCategories available for (let subCategoryIndex in availableSubCategories.get(availableProductCategories[i])) { let subCategoryBoxPhoneClone = $("#subCategoryBoxTemplate > div").clone(); subCategoryBoxPhoneClone.text(availableSubCategories.get(availableProductCategories[i])[subCategoryIndex]); subCategoryBoxPhoneClone.attr("aria-label", availableSubCategories.get(availableProductCategories[i])[subCategoryIndex]); subCategoryBoxPhoneClone.attr("data-id", availableSubCategories.get(availableProductCategories[i])[subCategoryIndex].replace("'", "&apos;")); subCategoryBoxPhoneClone.attr("data-key", "subProductCategory"); subCategoryBoxPhoneClone.attr("data-value", availableSubCategories.get(availableProductCategories[i])[subCategoryIndex]); subCategoryBoxPhoneClone.attr("data-target", "departmentBox"); $("#subCategoryListPhone").append(subCategoryBoxPhoneClone); } } $("#departmentListPhone").addClass("hidden"); } } else { $("#subCategoryListPhone").addClass("hidden"); $("#departmentListPhone").removeClass("hidden"); } $("#departmentListPhone").append(departmentBoxPhoneClone); // if on first page load with category and filterPanel does not contain a category menuButton yet, then add button if (this.getValue(this.queryParameterKeys.productCategory) == availableProductCategories[i] && commonModule.isNotEmpty(availableProductCategories[i])) { let filterPanelMenuButton = $("#departmentBox > .menuButton[data-key='productCategory'][data-value='" + queryParameter[this.queryParameterKeys.productCategory] + "']"); if(filterPanelMenuButton.length == 0) { $("#departmentBox").append(departmentBoxPhoneClone.clone()); } } } } // Brands $("#brandList").empty(); $("#brands").addClass("hidden"); $("#brandListPhone").find("[name=menuButton]").remove(); $("#brandListPhone").find("[name=subBrandList]").addClass("hidden"); let brandsDisplayDesktopNumber = 7; let brandsMobileBrandsNoAlphabeticalSoltsNumber = 6; let brandsMobileBrandsNoSoltsNumber = 10; let availableBrands = refinement["availableBrands"]; let alphabeticalCounter = 0; if (commonModule.isNotEmpty(availableBrands) && availableBrands.length > 0) { $("#brands").removeClass("hidden"); if ($("#brandListPhone") && availableBrands.length > brandsMobileBrandsNoSoltsNumber) { availableBrands.sort((a, b) => a.localeCompare(b)); } if ($("#brandListPhone") && this.getValue(this.queryParameterKeys.selectedBrands).length == 0) { $("#brandsBox").empty(); } for (let i in availableBrands) { // Desktop & Tablet if ($("#brandList")) { let brandListItemClone = $("#brandListItemTemplate li").clone(); let currentBrandCheckText = brandListItemClone.find("[data-name=brandListItemCheckText]"); let currentBrandCheckBox = brandListItemClone.find("[data-name=brandListItemCheckBox]"); currentBrandCheckText.text(availableBrands[i]); currentBrandCheckText.attr("data-value", availableBrands[i]); currentBrandCheckBox.attr("data-value", availableBrands[i]); if (this.getValue(this.queryParameterKeys.selectedBrands).includes(availableBrands[i]) && commonModule.isNotEmpty(availableBrands[i])) { $(currentBrandCheckText).addClass("a-text-bold"); brandListItemClone.find("[name=brandsCheckbox]").prop("checked", true); $("#brandList").prepend(brandListItemClone); if (i == brandsDisplayDesktopNumber) { $("#brandList").last().addClass("hidden"); } } else { if (i >= brandsDisplayDesktopNumber) { brandListItemClone.addClass("hidden"); } $("#brandList").append(brandListItemClone); } } // Mobile if ($("#brandListPhone")) { let brandBoxPhoneClone = $("#brandBoxTemplate > div").clone(); brandBoxPhoneClone.text(availableBrands[i]); brandBoxPhoneClone.attr("aria-label", availableBrands[i]); brandBoxPhoneClone.attr("data-key", "selectedBrands"); brandBoxPhoneClone.attr("data-value", availableBrands[i]); brandBoxPhoneClone.attr("data-id", availableBrands[i].replace("'", "&apos;")); brandBoxPhoneClone.attr("data-target", "brandsBox"); if (this.getValue(this.queryParameterKeys.selectedBrands).includes(availableBrands[i]) && commonModule.isNotEmpty(availableBrands[i])) { brandBoxPhoneClone.addClass("menuButtonFocus"); } if (availableBrands.length <= brandsMobileBrandsNoSoltsNumber) { $("#brandListPhone").append(brandBoxPhoneClone); } else { let code = availableBrands[i].charCodeAt(0); if (code == 35 || ((code > 47 && code < 58))) { // # or 0 - 9 $("#subBrandList0-#").removeClass("hidden").append(brandBoxPhoneClone); } else if ((code > 64 && code < 71) || (code > 96 && code < 103)) { // A-F or a-f $("#subBrandListA-F").removeClass("hidden").append(brandBoxPhoneClone); alphabeticalCounter += 1; } else if ((code > 70 && code < 78) || (code > 102 && code < 110)) { // G-M or g-m $("#subBrandListG-M").removeClass("hidden").append(brandBoxPhoneClone); alphabeticalCounter += 1; } else if ((code > 77 && code < 91) || (code > 109 && code < 123)) { // N-Z or n-z $("#subBrandListN-Z").removeClass("hidden").append(brandBoxPhoneClone); alphabeticalCounter += 1; } else { // other character $("#subBrandListOther").removeClass("hidden").append(brandBoxPhoneClone); $("#subBrandListOther").find("#otherSubBrandTitle").removeClass("hidden"); } } } } if (alphabeticalCounter == 0) { if ($("#subBrandList0-#").find(".menuButton").length == 0) { $("#subBrandListOther").find("#otherSubBrandTitle").addClass("hidden"); } } else if (alphabeticalCounter <= brandsMobileBrandsNoAlphabeticalSoltsNumber) { $("#subBrandListG-M").find(".displayBlock").addClass("hidden"); $("#subBrandListN-Z").find(".displayBlock").addClass("hidden"); $("#subBrandListA-F").removeClass("hidden").find(".displayBlock").removeClass("hidden").find("span").text("A-Z"); } else { $("#subBrandListG-M").find(".displayBlock").removeClass("hidden"); $("#subBrandListN-Z").find(".displayBlock").removeClass("hidden"); $("#subBrandListA-F").removeClass("hidden").find(".displayBlock").removeClass("hidden").find("span").text("A-F"); } // rendering see more if ($("#brandList")) { if (availableBrands.length > brandsDisplayDesktopNumber) { // No need to render selectedSubCategory anymore, directly adding see more let brandListItemClone = $("#brandListItemTemplate li").clone(); let currentBrandCheckText = brandListItemClone.find("[data-name=brandListItemCheckText]"); let currentBrandCheckBox = brandListItemClone.find("[data-name=brandListItemCheckBox]"); let expander = $("#itemExpanderTemplate").children().clone(); let expanderName = "brandListExpander"; currentBrandCheckBox.addClass("hidden"); expander.attr("data-a-expander-name", expanderName); currentBrandCheckText.attr("data-name", "brandsExpander"); currentBrandCheckText.append(expander); P.when('A', 'ready').execute(function (A) { A.on('a:expander:' + expanderName + ':toggle:expand', function (data) { $("#brandList").children().removeClass("hidden"); }); A.on('a:expander:' + expanderName + ':toggle:collapse', function (data) { let availableBrands = $("#brandList").children(); if (availableBrands.length > brandsDisplayDesktopNumber) { availableBrands.slice(brandsDisplayDesktopNumber, availableBrands.length - 1).addClass("hidden"); } }); }); $("#brandList").append(brandListItemClone); } } } // Price Tiers let that = this; if (true) { $("#priceTier").removeClass("hidden"); let priceTierRanges = refinement["priceTierRangeResult"]; $("#priceTierList").empty(); $("#priceTierListPhone").empty(); if ($("#priceTierListPhone")) { if (commonModule.isEmpty(this.getValue(this.queryParameterKeys.priceTierMin)) && commonModule.isEmpty(this.getValue(this.queryParameterKeys.priceTierMax))) { $("#priceTierBox").empty(); } } for (let i in priceTierRanges) { if ($("#priceTierList")) { let priceTierListItemClone = $("#priceTierListItemTemplate li").clone(); let currentPriceTier = priceTierListItemClone.find("[data-name=priceTierOptions]"); let currentPriceTierText = priceTierListItemClone.find("[data-name=priceTierOptionsText]"); let priceMin = priceTierRanges[i]["priceMin"]; let priceMax = priceTierRanges[i]["priceMax"]; currentPriceTier.attr("data-value", i); currentPriceTier.attr("min-price", priceMin); currentPriceTier.attr("max-price", priceMax); currentPriceTier.attr("id", "priceTier" + i); if (priceMin == "" || priceMin == 0) { currentPriceTierText.text("Under " + priceTierRanges[i]["priceMaxCurrency"]); } else if (priceMax == "") { currentPriceTierText.text(priceTierRanges[i]["priceMinCurrency"] + " & Above"); } else { currentPriceTierText.text(priceTierRanges[i]["priceMinCurrency"] + " to " + priceTierRanges[i]["priceMaxCurrency"]); } if (commonModule.isEmpty(this.getValue(this.queryParameterKeys.priceTierMin)) && commonModule.isEmpty(this.getValue(this.queryParameterKeys.priceTierMax))) { currentPriceTier.removeClass("hidden"); } if (priceTierRanges[i]["hasEmptyDocCount"] && commonModule.isEmpty(this.getValue(this.queryParameterKeys.priceTierMin)) && commonModule.isEmpty(this.getValue(this.queryParameterKeys.priceTierMax))) { currentPriceTier.contents().unwrap(); currentPriceTierText.removeClass("a-color-base"); currentPriceTierText.addClass("a-color-disabled"); currentPriceTierText.addClass("inputCursorDisabled"); } if (this.getValue(this.queryParameterKeys.priceTierMin) == priceTierRanges[i]["priceMin"] && this.getValue(this.queryParameterKeys.priceTierMax) == priceTierRanges[i]["priceMax"]) { currentPriceTier.removeClass("hidden"); commonModule.focus($("[data-name=priceTierOptions]"), $(currentPriceTier)); } currentPriceTier.click(function () { if ($(this).attr("data-value") != "") { that.filterOrSort2(that.queryParameterKeys.priceTierMin, $(this).attr("min-price"), that.queryParameterKeys.priceTierMax, $(this).attr("max-price")); $("#minPriceInput").val($(this).attr("min-price")); $("#maxPriceInput").val($(this).attr("max-price")); } commonModule.gotoAnchor("#toolbarGridContainer"); { $("#priceTierClear").removeClass("hidden"); $("#priceTierList [data-name=priceTierOptions]").addClass("hidden"); $("#priceTierList .inputCursorDisabled").addClass("hidden"); commonModule.focus($("#priceTierList"), $(this)); $(this).removeClass("hidden"); } }) $("#priceTierList").append(priceTierListItemClone); } // Phone $("#priceTierPhone").removeClass("hidden"); if ($("#priceTierListPhone")) { let priceTierBoxPhoneClone = $("#priceTierBoxTemplate > div").clone(); if (priceTierRanges[i]["priceMin"] == "" || priceTierRanges[i]["priceMin"] == 0) { priceTierBoxPhoneClone.text("Under " + priceTierRanges[i]["priceMaxCurrency"]); } else if (priceTierRanges[i]["priceMax"] == "") { priceTierBoxPhoneClone.text(priceTierRanges[i]["priceMinCurrency"] + " & Above"); } else { priceTierBoxPhoneClone.text(priceTierRanges[i]["priceMinCurrency"] + " to " + priceTierRanges[i]["priceMaxCurrency"]); } priceTierBoxPhoneClone.attr("data-value", i); priceTierBoxPhoneClone.attr("min-price", priceTierRanges[i]["priceMin"]); priceTierBoxPhoneClone.attr("max-price", priceTierRanges[i]["priceMax"]); priceTierBoxPhoneClone.attr("data-key1", this.queryParameterKeys.priceTierMin); priceTierBoxPhoneClone.attr("data-key2", this.queryParameterKeys.priceTierMax); if (this.getValue(this.queryParameterKeys.priceTierMin) == priceTierRanges[i]["priceMin"] && this.getValue(this.queryParameterKeys.priceTierMax) == priceTierRanges[i]["priceMax"]) { priceTierBoxPhoneClone.addClass("menuButtonFocus"); } if (priceTierRanges[i]["hasEmptyDocCount"]) { priceTierBoxPhoneClone.removeClass("menuButtonFocus"); priceTierBoxPhoneClone.addClass("menuButtonDisable"); priceTierBoxPhoneClone.children().prop('disabled', true); } priceTierBoxPhoneClone.click(function () { let target = "#" + $(this).attr("data-target"); if ($(this).hasClass("menuButtonFocus")) { $(this).removeClass("menuButtonFocus"); that.filterOrSort2($(this).attr("data-key1"), "", $(this).attr("data-key2"), ""); $(target).empty(); } else { $(this).parent().find("[name=menuButton]").removeClass("menuButtonFocus"); $(this).addClass("menuButtonFocus"); that.filterOrSort2($(this).attr("data-key1"), $(this).attr("min-price"), $(this).attr("data-key2"), $(this).attr("max-price")); $(target).empty(); $(target).append($(this).clone()); $(target).find("[name=menuButton]").click(function () { let InnerTarget = "#" + $(this).attr("data-target"); if ($(this).hasClass("menuButtonFocus")) { $(this).removeClass("menuButtonFocus"); that.filterOrSort2($(this).attr("data-key1"), "", $(this).attr("data-key2"), ""); $(InnerTarget).empty(); } }); } that.showClearButton(); }) $("#priceTierListPhone").append(priceTierBoxPhoneClone); } } } // Customer Review: since the count is calculated pre late check, which is not precise. We don't render the count for now let avgCustomerReviewResults = refinement["avgCustomerReviewResults"]; if (commonModule.isNotEmpty(avgCustomerReviewResults)) { // TODO render count for each rank; } let bestSellerResults = refinement["bestSellerResults"]; // Bestseller: since the count is calculated pre late check, which is not precise. We don't render the count for now if (commonModule.isNotEmpty(bestSellerResults) && commonModule.isNotEmpty(bestSellerResults["TOP_SELLER"]) && bestSellerResults["TOP_SELLER"] > 0) { $("#bestSeller").show(); // TODO render count for bestseller; } else { $("#bestSeller").hide(); } // Result found desktop if ($("#resultsFound")) { if (refinement["resultFound"].toString().length > 0) { $("#resultsFound").html(refinement["resultFound"] + " - " + '<span class="a-size-base a-color-secondary">Price may vary based on selection</span>'); } else { $("#resultsFound").html('<span class="a-size-base a-color-secondary">Price may vary based on selection</span>'); } } // Result found phone if ($("#showResults")) { $("#showResults").html(refinement["resultFoundPhone"]); $("#showResultsBox").attr("aria-label", refinement["resultFoundPhone"]) } this.showClearButton(); }, //private function redeemCoupon: function (asin, offerListingId) { // Set for coupon clipping let isAutoRedeem = this.shouldAutoRedeem(); if (commonModule.isNotEmpty(isAutoRedeem) && isAutoRedeem && !hasBeenAutoRedeem) { hasBeenAutoRedeem = true; let redeemPromotionParam = { "promotionId": "A2OD29RWOSXA27", "asin": asin, "offerListingId": offerListingId, 'anti-csrftoken-a2z': 'hO/7xNNEgaDxryXsXXaaoY1dhyLsSZwIAk/uLxM/Y71xAAAAAGdBro0AAAAB', 'source': "clp" }; $.ajax({ type: "POST", url: "/promotion/redeem/", data: redeemPromotionParam, contentType: 'application/x-www-form-urlencoded; charset=UTF-8;', success: function () { isClipped = true; $("#couponClippingConfirmationBox").removeClass("hidden"); $("#couponClippingConfirmationBox").addClass("inlineBlock"); }, error: function (e) { } }); } }, // private function startLdEndTimer: function (countDownSeconds, asin) { if (!asinToEndsInTimeMap.has(asin)) { // Update the count down every 1 second setInterval(function () { countDownSeconds--; asinToEndsInTimeMap.set(asin, countDownSeconds); if (countDownSeconds < 0) { clearInterval(); asinToEndsInTimeMap.set(asin, countDownSeconds); } }, 1000); } }, //private function displayLdEndTime: function (ldBarPercentSection, asin) { let that = this; let tagElement = ldBarPercentSection.find("[name=dealTimeLeft]"); // Update the count down every 1 second let intervalId = setInterval(function () { let countDownSeconds = asinToEndsInTimeMap.get(asin); let hours = "0" + Math.floor((countDownSeconds % (60 * 60 * 24)) / (60 * 60)); let minutes = "0" + Math.floor((countDownSeconds % (60 * 60)) / (60)); let seconds = "0" + Math.floor((countDownSeconds % (60))); tagElement.text(hours.slice(-2) + ":" + minutes.slice(-2) + ":" + seconds.slice(-2)); if (countDownSeconds < 0) { clearInterval(); if (asinToIntervalIdMap.has(asin)) { asinToIntervalIdMap.delete(asin); } tagElement.text("00:00:00"); that.setDealHasEnded(ldBarPercentSection.find("[data-name=endsInTime]")); } }, 1000); asinToIntervalIdMap.set(asin, intervalId); }, updateClaim: function (ldMerchantToAsins) { let that = this; $.ajax({ type: "GET", url: "/promotion/ld/claim", data: $.param(ldMerchantToAsins, true), traditional: true, dataType: "json", success: function (data) { let viewModels = data["viewModels"]; let ldClaim = viewModels["LD_CLAIM"]; for (let i = 0; i < ldClaim.length; i++) { let productGrid = $("#productInfoList").find("li[data-asin=" + ldClaim[i]["asin"] + "][data-merchant=" + ldClaim[i]["merchantId"] + "]"); if (productGrid !== undefined) { let ldBarPercentSection = productGrid.find("div[name=ldBarPercentSection]"); if (ldClaim[i]["dealAvailable"]) { ldBarPercentSection.find("[name=ldFilledBar]").width(ldClaim[i]["percentageClaimedBar"]); ldBarPercentSection.find("[data-name=percentClaimed]").text(ldClaim[i]["percentageClaimed"]); } else { that.setDealHasEnded(ldBarPercentSection.find("[data-name=endsInTime]")); } } } }, error: function (e) { } }); }, // private function getDpLink: function (productInfoList, i, productCategory) { // set reftagSuffix only for carousel view if (false && !isFilterOrSort) { let reftagSuffix = productCategoryToReftagSuffix.get(productCategory); return productInfoList[i]["detailPageLink"] + "&ref=" + "psp_pc_a_" + "A2OD29RWOSXA27" + "_" + reftagSuffix; } return productInfoList[i]["detailPageLink"] + "&ref=" + "psp_pc_a_" + "A2OD29RWOSXA27"; }, // private function getDpLinkForProductInfo: function (productInfo, productCategory) { // set reftagSuffix only for carousel view if (false && !isFilterOrSort) { let reftagSuffix = productCategoryToReftagSuffix.get(productCategory); return productInfo["detailPageLink"] + "&ref=" + "psp_pc_a_" + "A2OD29RWOSXA27" + "_" + reftagSuffix; } return productInfo["detailPageLink"] + "&ref=" + "psp_pc_a_" + "A2OD29RWOSXA27"; }, setDealHasEnded: function (endsInTime) { endsInTime.text("Deal has ended"); endsInTime.removeClass("a-color-success"); endsInTime.addClass("a-color-error"); }, continuousUpdateClaim: function (ldMerchantToAsins) { if (Object.keys(ldMerchantToAsins).length > 0) { let that = this; // updates ever 10 seconds (10 * 1000 milliseconds) continuously setInterval(function () { that.updateClaim(ldMerchantToAsins); }, 10000); } }, // private function getRefTag: function (key, value) { //Filter has been toggled off so no reftag is necessary if (value === "") { reftag = ""; return; } reftag = "?ref=" switch (key) { case "applicabilityIndex": reftag += "psp_pc_pd_"; break; case "bestSeller": reftag += "psp_pc_re_best"; break; case "sortBy": reftag += "psp_pc_so_" + value; break; case"productCategory": reftag += "psp_pc_re_" + value; break; case "avgCustomerReview": reftag += "psp_pc_re_cr_" + value; break; case "priceTierMin": reftag += "psp_pc_re_pmin_"; case "priceTierMax": reftag += "psp_pc_re_pmax_"; break; case "searchKeyword": reftag += "psp_pc_se_box"; break; case "seeAll": reftag += "psp_pc_see_all_" + value; break; case "sortId": reftag += "_see_more"; } }, // private function getProductInfoControllerURL() { if (false && !isFilterOrSort) { return "/promotion/psp/productInfoListForSUS"; } return "/promotion/psp/productInfoList"; }, // private function // We generate 10 placeholder carousels by default to accommodate maximum 10 product category (cannot create // extra after the initialization. // However, we don't necessary get all 10 carousels every time, so we hide the rest of the placeholder // carousel after runtime hideUnusedCarousels: function (carouselName, availableProductCategories) { for (let i = 6; i >= availableProductCategories.length; i--) { $("#" + carouselName + "_" + i).addClass("hidden"); } }, // private function showSpin: function () { // Show PSP page spinning $("#a-page").attr("disabled", true); $("#a-page").addClass("halfOpacity"); $("#pspSpinner").removeClass("hidden"); }, // private function hideSpin: function () { // Hide PSP page spinning $("#pspSpinner").addClass("hidden"); $("#a-page").removeClass("halfOpacity"); $("#a-page").attr("disabled", false); }, showClearButton: function() { let menuButtons = $("#refinementMenu [name=menuButton].menuButtonFocus").not("#Featured-1"); if (menuButtons.length > 0) { $("#clearFiltersBox").removeClass("hidden").addClass("inlineBlock"); } else { $("#clearFiltersBox").addClass("hidden").removeClass("inlineBlock"); } }, //private function isProductRestricted: function(productInfoList) { if (false) { let firstAsin = productInfoList[0]; return firstAsin !== undefined && firstAsin["restrictedErrorPage"]; } return false; }, //private function shouldAutoRedeem: function() { let autoRedeem = "false" === "true" && !(this.isProductRestricted(this.cachedPromotionShoppingPageResponse["viewModels"]["PRODUCT_INFO_LIST"])); if (false) { autoRedeem = "false" === "true" && !(this.isProductRestricted(this.cachedPromotionShoppingPageResponse["viewModels"]["PRODUCT_INFO_LIST_SUS"])); } return autoRedeem; } } }); window.P.when("queryParameterAjax_module", "ready").execute(function (queryParameterAjaxModule) { // We only want this to happen when we want to show the productList and refinements. if ("CUSTOMER_ELIGIBLE" == "CUSTOMER_ELIGIBLE" || false) { queryParameterAjaxModule.firstPageLoad(queryParameterAjaxModule.queryParameterKeys.promotionId, "A2OD29RWOSXA27", true, true); } queryParameterAjaxModule.resetSelection(); }); </script> <style> .freeze { height: 100%; overflow: hidden; } .invisible { visibility: hidden !important; } .a-carousel-card .invisible { visibility: hidden !important; display: none !important; } .a-carousel { display: inline-flex !important; } .a-carousel-card { display: inline-flex !important; } .hidden { display: none !important; } .inlineBlock { display: inline-block !important; } .textAlignCenter { text-align: center; } .textAlignStart { text-align: start; } .textAlignEnd { text-align: end; } .alignCenter { margin: 0 auto !important; } .verticalAlignCenter { position: relative; top: 50%; transform: translateY(-50%); } .verticalAlignMiddle { vertical-align: middle; } .fixCenter { position: fixed; top: 50%; left: 50%; z-index: 200; } .zIndex700 { z-index: 700 !important; } .asinFaceoutCartScrim { pointer-events: none; opacity: 0.6; cursor: not-allowed; } /* * For some spans we have to preserve the whitespace inorder to hide the element while preserve the space on the page. * Otherwise the element doesn't occupy any space on the page. */ .preserveWhiteSpace { white-space: pre; } .backGroundGreen { background: #94ed88 !important; } .backgroundWhite { background-color: #FFFFFF; } .backgroundSnow { background-color: #EAEDED; } .backgroundQualified{ background-color: #E4FDBF } .a_color_success { color: #058552 !important; } .claimedBar-module-bar { background: #D5DBDB; } .claimedBar-module-filledBar { background: #E55D16; height: 6px; } .a-color-disabled { color: #6F7373 !important; } [data-a-badge-color=psp_lightning_deal_red] { background-color: #B12704!important; color: #B12704!important; } [data-a-badge-color=psp_cloud] { color: #fff!important; } .clamp1 { -webkit-line-clamp: 1; } .clamp2 { -webkit-line-clamp: 2; } .clamp3 { -webkit-line-clamp: 3; } .clamp1, .clamp2, .clamp3 { overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; hyphens: auto; } .textCursorPointer { cursor: pointer; } .textCursorPointer:hover { color: #c45500 !important; } .flexDisplay, .inlineFlexDisplay { flex-flow: nowrap row; justify-content: flex-start; align-items: center; align-content: flex-start; height:100%; } .flexDisplay { display: flex; } .alignFlexStart { align-items: flex-start; } .paddingInlineSmall { padding-inline: 12px; } .flexShrink { flex: 0 1 0; } .flexEquallyGrow { flex: 1 1 0; } .inlineFlexDisplay { display: inline-flex; } .flexWrap { flex-wrap: wrap; } .fillContentFlex { flex: 1 0 0; } .flexGrow1 { flex-grow: 1; } .stickyCart { position: -webkit-sticky; position: sticky; /*overflow-x: hidden;*/ z-index: 100; } .stickyRefinement { position: -webkit-sticky; position: sticky; overflow-x: hidden; z-index: 10; } .relative { position: relative !important; } .inputCursorDisabled { cursor:not-allowed !important; } /* make sure buttons being rendered properly on Chrome */ button:focus, input[type="submit"] { outline: none; box-shadow: none; } button:focus:not(:focus-visible), input[type="submit"] { outline: 0 !important; box-shadow: none !important; } button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } .halfOpacity { opacity: 0.5; filter: alpha(opacity=50); filter: "alpha(opacity=50)"; -moz-opacity: 0.5; -khtml-opacity: 0.5; pointer-events: none; } /* This css is used to set on a div which covers all the region of the page. Used when cart is opened on all platforms and refinement menu on mobile*/ .maskArea { position: fixed; bottom: 0px; left: 0px; width: 100%; background-color: #000000; opacity: 0.15; } #maskAreaCart.maskArea { z-index: 25 !important; } #maskAreaFilter.maskArea { z-index: 1900 !important; } /* Review start icon */ .pspStar.a-icon { background-image: url(/promotion/static/css/pspIcon.png) !important; background-size: 512px 256px; } .pspStar.a-star-medium-4 { background-position: -2px -84px !important; } .pspStar.a-star-medium-3 { background-position: -293px -180px !important; } .pspStar.a-star-medium-2 { background-position: -99px -132px !important; } .pspStar.a-star-medium-1 { background-position: -390px -228px !important; } .a-icon.a-star-small-5 { background-position: -166px -36px !important; } .pspStar.a-star-small-4-5 { background-position: -84px -28px !important; } .pspStar.a-star-small-4 { background-position: -84px -8px !important; } .pspStar.a-star-small-3-5 { background-position: -181px -56px !important; } .pspStar.a-star-small-3 { background-position: -84px -48px !important; } .pspStar.a-star-small-2-5 { background-position: -99px -68px !important; } .pspStar.a-star-small-2 { background-position: -181px -76px !important; } .pspStar.a-star-small-1-5 { background-position: -390px -164px !important; } .pspStar.a-star-small-1 { background-position: -375px -144px !important; } .pspStar.a-star-small-0-5 { background-position: -278px -120px !important; } .pspStar.a-star-small-0 { background-position: -278px -100px !important; } .a-size-mini { font-size: 12px !important; line-height: 16px !important; } .claimedBar-module-timerAndPercent { display: flex; justify-content: space-between; } .imageSquare { position: absolute; margin: auto; top: 0; bottom: 0; left: 0; right: 0; max-width: 100%; max-height: 100%; } </style> <style> .marginLeftAuto { margin-left: auto; } .marginLeft4 { margin-left: 4px; } .marginLeft6 { margin-left: 6px; } .marginLeft8 { margin-left: 8px; } .marginLeft10 { margin-left: 10px; } .marginLeft16 { margin-left: 16px; } .marginLeft24 { margin-left: 24px; } .marginRight16 { margin-right: 16px; } .marginRight24 { margin-right: 24px; } .marginTop16 { margin-top: 16px !important; } .marginBottom16 { margin-bottom: 16px !important; } .paddingLeft4 { padding-left: 4px; } .paddingLeft6 { padding-left: 6px; } .paddingLeft8 { padding-left: 8px; } .paddingLeft10 { padding-left: 10px; } .paddingLeft12 { padding-left: 12px; } .paddingLeft16 { padding-left: 16px; } .paddingRight12 { padding-right: 12px; } .paddingRight4 { padding-right: 4px; } .paddingRight6 { padding-right: 6px; } .paddingRight8 { padding-right: 8px; } .marginTop0 { margin-top: 0px !important; } .paddingTop4 { padding-top: 4px !important; } .paddingTop6 { padding-top: 6px !important; } .paddingTop8 { padding-top: 8px !important; } .paddingTop12 { padding-top: 12px !important; } .paddingTop16 { padding-top: 16px !important; } .paddingTop20 { padding-top: 20px !important; } .paddingTop32 { padding-top: 32px !important; } .paddingTop40 { padding-top: 40px !important; } .marginBottom0 { margin-bottom: 0px !important; } .paddingBottom2 { padding-bottom: 2px !important; } .paddingBottom6 { padding-bottom: 6px !important; } .paddingBottom8 { padding-bottom: 8px !important; } .paddingBottom12 { padding-bottom: 12px !important; } .paddingBottom16 { padding-bottom: 16px !important; } .paddingBottom20 { padding-bottom: 20px !important; } .paddingBottom32 { padding-bottom: 32px !important; } .paddingBottom40 { padding-bottom: 40px !important; } .marginBottom48 { margin-bottom: 48px !important; } .marginTop4 { margin-top: 4px !important; } .marginTop2 { margin-top: 2px !important; } .marginTop1 { margin-top: 1px !important; } .height6 { height: 6px !important; } .marginTop8 { margin-top: 8px !important; } </style> <style> /* Grid layout: https://css-tricks.com/snippets/css/complete-guide-grid/ */ /* * When window size is greater than 1500px 4 columns are shows, * from which 1st and 4th ones are blank except for the banner and toolbar shadow to stretch to the both ends. * The 1st and 4th have the lowest priority to show and will be shrank first and then the 3rd column with minmax, and then last the refinement column */ .gridContainer { width: 100%; height: 100%; display: grid; place-content: center center; place-items: center center; grid-auto-flow: row; grid-template-columns: 1fr 250px minmax(750px, 1250px) 1fr; grid-template-areas: "topCart_gridItem topCart_gridItem topCart_gridItem topCart_gridItem " "topBanner_gridItem topBanner_gridItem topBanner_gridItem topBanner_gridItem " ". warning_gridItem warning_gridItem . " ". deals_gridItem deals_gridItem . " ". topClaim_gridItem topClaim_gridItem . " ". topCouponAndQualification_gridItem topCouponAndQualification_gridItem . " "toolbar_gridItem toolbar_gridItem toolbar_gridItem toolbar_gridItem " ". refinement_gridItem productInfoList_gridItem . " ". refinement_gridItem showMore_gridItem . " ". signIn_gridItem signIn_gridItem . " ". primeExclusive_gridItem primeExclusive_gridItem . "; } /* When window size is less than 1500px, 2 columns are shown, and 2nd column is shrank first */ @media screen and (max-width: 1500px) { .gridContainer { grid-template-columns: 250px minmax(750px, 1250px); grid-template-areas: "topCart_gridItem topCart_gridItem " "topBanner_gridItem topBanner_gridItem " "warning_gridItem warning_gridItem " "deals_gridItem deals_gridItem " "topClaim_gridItem topClaim_gridItem " "topCouponAndQualification_gridItem topCouponAndQualification_gridItem " "toolbar_gridItem toolbar_gridItem " "refinement_gridItem productInfoList_gridItem " "refinement_gridItem showMore_gridItem " "signIn_gridItem signIn_gridItem " "primeExclusive_gridItem primeExclusive_gridItem "; } } </style> <style> .promotionHowToClaimMessage { width: 33%; } .expanderHeight { height: 80px !important; } .paddingLeftExpander { padding-left: 33.8%; } .paddingBottom6{ padding-bottom: 0.6% !important; } .paddingBottom17 { padding-bottom:30px !important; } .paddingTopPer8{ padding-top:0.7%; } .paddingBottomPer8{ padding-bottom: 0.7%; } @media screen and (max-width: 1366px) { .promotionHowToClaimMessage { width: 50%; } } </style> <style> .topCouponAndQualificationContainer { width: 100%; height: auto; } </style> <style> .topQualificationInfoContainer { height: 5rem; color: green; margin-left: 0; margin-right: 0; } </style> <style> .couponClippingButtonWidth { min-width: 130px !important; } </style> <style> .divider { width: 40%; } /* Tablet experience */ @media screen and (max-width: 1366px) { .divider { width: 60%; } } </style> <style> .qualificationPosition { width: 100%; position: absolute; left: 50%; transform: translateX(-50%) translateY(-50%); z-index: -1; } .topCartGoToCartBtn { min-width: 130px; } </style> <style> .cartItemGrid { align-self: auto; width: 110px; margin: 0px 24px; list-style: none; } .cartItemImageBox { width: 105px; height: 105px; } .cartItemTitleBox { height: 48px; } .cartItemListFlex { /* Flex layout */ display: flex; flex-flow: row nowrap; align-items: center; align-content: center; overflow-x: auto; list-style: none; margin: 0 !important; width: 100%; } /* CSS "justify-content: center" has a major known flaw as it allows overflow outside the flex layout without allowing to scroll back to the left and causes data loss. The fix for this "justify-content: center safe" is only supported on Firefox. A workaround for this is setting the "margin: auto" to the first and last child. */ .cartItemGrid:first-child { margin-left: auto; padding-left: 3px; } .cartItemGrid:last-child { margin-right: auto; } .cartMessageMaxQuantityRestriction { position: relative; padding-right: 35px; padding-left: 0px; padding-top: 10px; padding-bottom: 0px; font-weight: bold; font-size: small; width: 150px; } .cartMessageMinQuantityRestriction { position: relative; padding-right: 35px; padding-left: 0px; padding-top: 10px; padding-bottom: 0px; font-weight: bold; font-size: small; width: 150px; } </style> <style> .keywordSearchInputText { width: 250px; padding-left: 24px !important; } </style> <style> .refinementFlexContainer { position: static; top: 100px; } .refinementDivider { border-right: 1px solid #ddd; } .s-ref-small-padding-left { padding-left:4px; } .s-ref-price-currency { position:absolute; margin-top: 7px; line-height:30px; font-size:100%; } .s-ref-price-range { width:67px; margin-top:6px !important; } .s-ref-price-range-extra { width:75px; margin-top:6px !important; } html[dir=rtl] .s-ref-price-padding-extra { padding-left: 0 !important; padding-right: 2px; } .s-ref-price-padding { padding-left:16px !important; } .s-ref-price-padding-extra { padding-left:32px !important; } .s-small-margin { margin-left:2px; margin-right:4px; } .s-back-arrow { width:6px; height:10px; background-repeat:no-repeat; background-image:url(https://m.media-amazon.com/images/S/sash/5wejH04P3ogfQ-4.svg) } .s-inline-block{ display:inline-block } .dispInlineBlock { display: inline-block; } </style> <style> .productGridForSUS { align-self: auto; height: auto; max-width: 100%; width: 100%; } .productGrid { align-self: auto; height: auto; max-width: 25%; width: 100%; padding-left : 12px; padding-right : 12px; } .productTitle { height: 48px; margin-top: 4px; } .brandName { margin-top: 4px; } .customerReview { margin-top: 2px; } html[dir=rtl] .customerReview i { transform: scaleX(-1); } html[dir=rtl] #customerReview i { transform: scaleX(-1); } .productPriceBox { margin-top: 8px;; } .bestSellerBadgeBox { margin-top: 16px; } .sizePromptMargin { margin-top: 11px !important; } .viewItemBtnBox, .selectItemBtnBox, .addToCartBtnBox { margin-bottom: 24px; } @media only screen and (max-width: 1090px) { .productGrid { align-self: auto; height: auto; flex: 0 0 33% !important; } } .productInnerGrid { width:100%; } .faceout_border { border-bottom: 2px solid #ddd; } .addToCartBtn { width: 80% } .backGroundTransparent{ background: transparent !important; } </style> <style> .showMoreBtn { width: 216px; } </style> <style> .signInButtonSize { width: 216px; } </style> <style> .primeExclusiveButtonSize { width: 150px; } </style> <style> .progressBarHeight { height:10px !important; } .progressBarFloat { float: left; width: 100%; } .cartProgressIndicatorBox { width: 724px; height: 95px; margin: auto; padding-top: 8px; position: relative; } .cartProgressBox { width: 100%; border-bottom: 1px solid; border-bottom-color: #D5D9D9; padding: 0 8px; } .progressBarTierDivider { height:8px !important; width: 3px !important; position: absolute; background: #000000; float: left; margin-top: 1px; } .cartProgressIndicatorBarIdClass { } .progressBarTierText { float: left; height: 0px; } .floatLeftOnly { float: left; } .cartBenefitUnlockedAlert { float: left; width: 0px; white-space: nowrap; } .cartProgressMessage { } .cartProgressLeftBottomBox { display: inline-block; left: 0; position: absolute; top: 55px; text-align: start; max-width: 21rem; } .cartProgressRightBottomBox { display: inline-block; right: 0; position: absolute; top: 55px; } .marginLeft5 { margin-left: 5px; } .cartIcon { top:3px; } .cartProgressIndicatorContainer { display: inline-flex; width: 100%; height: auto; padding: 8px 150px 3px 150px; flex-direction: column; justify-content: flex-start; align-items: center; gap: 8px; } .cartProgressIndicatorBoxAB { display: inline-flex; width: 725px; flex-direction: column; justify-content: flex-start; align-items: center; gap: 4px; } .cartProgressIndicatorBenefitBox { display: inline-flex; justify-content: center; align-items: flex-start; gap: 4px; } .cartProgressIndicatorBarContainer { display: inline-flex; width: 100%; height:100%; justify-content: center; align-items: center; gap: 4px; } .cartProgressIndicatorBar { height:16px !important; } .cartProgressIndicatorThreshold { flex: 0 0 auto; /* This ensures the item doesn't grow or shrink, so the x item(s): $Y.yy takes always one line exactly*/ text-align: end; position: relative; } .cartProgressIndicatorBottomBox { display: flex; width: 100%; margin-top: 4px; gap: 8px; } .cartProgressIndicatorLeftBottomBox { flex: 1 1 auto; /* Allow flexibility to grow, shrink, and fill the container */ text-align: start; } .cartProgressIndicatorRightBottomBox { flex: 0 0 auto; /* This ensures the item doesn't grow or shrink, so the x item(s): $Y.yy takes always one line exactly*/ text-align: end; } </style> <style> .centered-container { text-align: left; width: 40%; position: relative; left: 50%; /* position the left edge of the element at the middle of the parent */ transform: translate(-50%, 0); /* This is a shorthand of translateX(-50%) and translateY(0%) */ } [dir="rtl"] { .centered-container { right: 50%; /* position the right edge of the element in rtl at the middle of the parent */ transform: translate(50%, 0); /* This is a shorthand of translateX(50%) and translateY(0%) */ } } .popover-trigger { .a-icon.a-icon-popover { display: none; !important } } .popover-container { padding-inline: 24px; padding-top: 15px; padding-bottom: 26px; } .vertical-divider { width: 1px; height: 20px; color: #BBBFBF; margin-inline: 16px; } </style> <style> .promotionShoppingPageGlobalContainer { direction: ltr; } .topBanner_gridItem { grid-area: topBanner_gridItem; width: 100%; height: 100%; } .topClaim_gridItem { grid-area: topClaim_gridItem; width: 100%; height: 100%; } .topCouponAndQualification_gridItem { grid-area: topCouponAndQualification_gridItem; width: 100%; height: auto; padding-bottom: 24px !important; } .topCart_gridItem { grid-area: topCart_gridItem; width: 100%; height: 100%; } .topCart_phone_gridItem { grid-area: topCart_phone_gridItem; width: 100%; height: 100%; top: 0; } .refinement_gridItem { grid-area: refinement_gridItem; width: 100%; height: 100%; } .refinement_phone_gridItem { grid-area: refinement_phone_gridItem; width: 100%; height: 100%; } .refinement_phone_gridItem_top5 { top: 7.1rem; } .refinement_phone_gridItem_top8 { top: 8.8rem; } .refinement_phone_gridItem_top3x { top: 35.8rem; } .toolbar_gridItem { width: 100%; height: 100%; } .toolbar_gridItem { grid-area: toolbar_gridItem; } .toolbar_phone_gridItem { grid-area: toolbar_phone_gridItem; width: 100%; height: 100%; } .productInfoList_gridItem { grid-area: productInfoList_gridItem; width: 100%; height: 100%; z-index: 9; } .productInfoCarousel_gridItem { grid-area: productInfoCarousel_gridItem; width: 100%; height: 100%; } .showMore_gridItem { grid-area: showMore_gridItem; place-self: center center; width: 100%; height: 100%; } .warning_gridItem { grid-area: warning_gridItem; place-self: center center; width: 100%; height: 100%; } .deals_gridItem { grid-area: deals_gridItem; place-self: center center; width: 100%; height: 100%; } .signIn_gridItem { grid-area: signIn_gridItem; place-self: center center; width: 100%; height: 100%; } .primeExclusive_gridItem { grid-area: primeExclusive_gridItem; place-self: center center; width: 100%; height: 100%; } .promo-shopping-page-bottom-1 { grid-area: promo-shopping-page-bottom-1; place-self: center center; width: 100%; height: 100%; } .colorYellow { background-color: yellow; display: inline-block; } .a-popover-wrapper { direction: ltr; } .a-popover-inner { text-align: start; } .priceVaryStatement { margin-left:2.5vmin; } </style> <span id="pspSpinner" class="a-spinner a-spinner-medium fixCenter hidden"></span> <div id="promotionShoppingPageGlobalContainer" class="promotionShoppingPageGlobalContainer"> <input type="hidden" id="queryModel_promotionId" name="queryModel.promotionId" value="A2OD29RWOSXA27"/> <div class="gridContainer"> <div id="topCart_gridItem" class="topCart_gridItem textAlignCenter"> <!-- This jsp file is responsible for loading the PSP Cart Preview, SubTotal and GoToCart Button --> <script> window.P.when("cart_module", "ready").execute(function (cartModule) { cartModule.clickOnMask(); }); </script> <style> .topCartMessageBox { border-right: 2px; } .topStickyCart{ top: 60px; position: -webkit-sticky; position: sticky; height: 46px; width: 100%; z-index: 25; } .topCartItemListContainer { width: 100%; height: auto; align-items: center; border-bottom: 1px solid #ddd; position: relative; z-index: 1000; } .topCartAmountBox { padding-left: 5px; padding-right: 20px; } .topCartItemListButton { width: 100%; border-top: .2rem solid #ddd; border-bottom: .2rem solid #ddd; } .buttonWidth { width: 130px; } .topCartQualifyingMessage{ padding-right: 40px; } .topCartErrorMessage { padding-left: 15px; } .topCartGoToCartBtn { margin-left: 20px; } .inlineFlex { display: inline-flex; } .topCartArrow { position: relative; top: 5px; } .arrowUp { transform: rotate(180deg); -webkit-transform: rotate(180deg); } </style> <div id="cartProgressBox" class="cartProgressIndicatorContainer backgroundWhite hidden"> <div class="cartProgressIndicatorBoxAB"> <div id="cartProgressIndicatorBenefitBox" class="cartProgressIndicatorBenefitBox"> <span id="cartProgressIndicatorTitle" class="a-size-base a-text-bold"></span> <div id="cartProgressIndicatorTitleUnlocked" class="a-box a-alert-inline a-alert-inline-success hidden" aria-live="polite" aria-atomic="true"><div class="a-box-inner a-alert-container"><i class="a-icon a-icon-alert"></i><div class="a-alert-content"> <span id="cartProgressIndicatorTitleUnlockedText" class="a-size-base a-color-success a-text-bold"></span> </div></div></div> </div> <div id="cartProgressIndicatorBarContainer" class="cartProgressIndicatorBarContainer"> <div class="a-progress-bar a-js-progress-bar" data-progress-percentage="0"><div class="a-progress-indicator"></div><div class="a-meter progressBarFloat cartProgressIndicatorBar" role="progressbar" aria-valuenow="0%"><div class="a-meter-bar" style="width: 0%;"></div></div></div> <span id="cartProgressIndicatorThreshold" class="a-size-small cartProgressIndicatorThreshold"></span> </div> <div class="cartProgressIndicatorBottomBox"> <div class="cartProgressIndicatorLeftBottomBox"> <span id="cartProgressMessage" class="a-size-small cartProgressMessage a-text-bold"></span> </div> <div class="cartProgressIndicatorRightBottomBox"> <span id="inCartQuantity" class="a-size-small a-text-bold"></span> <i id="progressBarCartIconExpand" class="a-icon a-icon-section-expand a-icon-medium cartIcon hidden" role="presentation"></i> </div> </div> </div> </div> <div id="topCartContainer" class="paddingTop16 paddingBottom16 textAlignCenter backgroundSnow" role="group" aria-label="Promotion Shopping Cart"> <div id="qualificationInfoText" class="hidden topCartQualifyingMessage" name="messageGroup"> <div class="a-box a-alert-inline a-alert-inline-success" aria-live="polite" aria-atomic="true"><div class="a-box-inner a-alert-container"><i class="a-icon a-icon-alert"></i><div class="a-alert-content"> <span id="qualificationInfoTextDynamicSlot" class="a-size-base a-text-bold">Your order qualifies!</span> </div></div></div> </div> <div id="topCartMessageBox" class="inlineBlock textAlignCenter topCartMessageBox" name="messageGroup"> <span id="cartMessageEmpty" name="messageGroup" class="hidden textAlignCenter"> <span class="a-size-base a-text-bold">0 items from this promotion in your cart:</span> </span> <span id = "cartMessageNonEmpty" name = "messageGroup" class = "hidden textAlignCenter"> <span id="topCartMessage" class="a-size-base a-text-bold"></span> <span>:</span> </span> <div id="topCartAmountBox" class="inlineBlock textAlignCenter topCartAmountBox" name="messageGroup"> <span id="topCartSubTotalValue" name = "messageGroup" class="inlineBlock a-text-bold"> <span name="topCartSubTotal" class="a-offscreen"></span> <span name="topCartSubTotalAriaHidden" aria-hidden="true"></span> </span> </div> </div> <div id = "topCartAccess" class = "inlineBlock" role="group"> <i id="topCartExpand" aria-label="Open promotion cart" class="a-icon a-icon-section-expand a-icon-medium topCartArrow invisible" role="presentation"></i> <i id="topCartCollapse" aria-label="Close Promotion Shopping Cart" class="a-icon a-icon-section-collapse a-icon-medium topCartArrow invisible" role="presentation"></i> </div> <div id = "topCartErrorMessage" class = "inlineBlock"> <div id="cartError" class="hidden"> <span class="inlineFlex"> <div class="a-box a-alert-inline a-alert-inline-error inlineBlock" role="alert"><div class="a-box-inner a-alert-container"><i class="a-icon a-icon-alert"></i><div class="a-alert-content"> <span class="a-size-base inlineBlock a-text-bold">Something went wrong.</span> <a id="cartMessageErrorReload" class="a-size-base a-link-normal topCartMessageError inlineBlock a-text-bold a-text-normal" href="javascript:void(0)">Reload</a> </div></div></div> </span> </div> </div> </div> <div style="position: relative; z-index: 99999"> <div id="topCartItemListContainer" class="hidden paddingTop16 topCartItemListContainer backgroundWhite" style="position: absolute; top:0; z-index: 99999"> <div> <script> window.P.when("jQuery", "common_module", "a-meter", "a-alert").register("cart_module", function ($, commonModule, getMeterCollection, getAlertCollection) { let navCartCount = parseInt($(".nav-cart-count").first().html(), 10); let localCartCount = 0; let cartVariationalInfoMap = new Map(); let promotionThresholdsArray = [ { "thresholdType": "QUANTITY", "minQuantity": "1", "minAmount": "0" } ]; return { hideSpinnerAndScrim:function (){ // This to show Add to Card Button if ($("#clickedAddToCartButton")) { $("#clickedAddToCartButton").removeClass("hidden"); $("#clickedAddToCartButton").removeAttr("id"); } // Hiding the spinner if ($("#newSpinnerEffect")) { $("#newSpinnerEffect").addClass("hidden"); $("#newSpinnerEffect").removeAttr("id"); } if ($("#incrementQuantity")) { $("#incrementQuantity").removeClass("asinFaceoutCartScrim"); $("#incrementQuantity").removeAttr("id"); } if ($("#decrementQuantity")) { $("#decrementQuantity").removeClass("asinFaceoutCartScrim"); $("#decrementQuantity").removeAttr("id"); } }, populateMaxQuantityProductMessage:function(productGrid, i, params, cartResponse) { if(cartResponse["cartItems"][i]["quantity"] >= cartResponse["cartItems"][i]["maximumQuantity"]){ productGrid.find("[data-name=addToCartBtn]").addClass("inputCursorDisabled"); productGrid.find("[data-name=addToCartBtn]").attr('maxOrderQtyReached','Y'); productGrid.find("[data-name=addToCartBtn]").attr('title',''); P.when("A", "a-tooltip").execute(function (A, tooltip) { let $trigger = productGrid.find("#productCartButton"); let options = { inlineContent: cartResponse["cartItems"][i]["productGridMessageMaxQuantity"], position: "triggerTop", activate: "onmouseover", dataStrategy:"inline" }; let instance = tooltip.create($trigger, options); //we are checking if instance is not undefined we call show method. if(instance) { instance.show(); } }); }else{ productGrid.find("[data-name=addToCartBtn]").removeClass("inputCursorDisabled"); productGrid.find("[data-name=addToCartBtn]").attr('maxOrderQtyReached',''); productGrid.find("[data-name=addToCartBtn]").parent().parent().removeClass('backGroundTransparent'); productGrid.find("[data-name=addToCartBtn]").attr('title',"Add to Cart"); P.when("A", "a-tooltip", "ready").execute(function (A, tooltip) { let $trigger = productGrid.find("#productCartButton"); tooltip.remove($trigger); }); } }, populateMinQuantityProductMessage:function(productGrid, i, params, cartResponse) { if(cartResponse["cartItems"][i]["minimumQuantity"] > 1 && cartResponse["cartItems"][i]["quantity"] == cartResponse["cartItems"][i]["minimumQuantity"]){ productGrid.find("[data-name=addToCartBtn]").attr('title',"Add to Cart"); P.when("A", "a-tooltip").execute(function (A, tooltip) { let $trigger = productGrid.find("#productCartButton"); let options = { inlineContent: cartResponse["cartItems"][i]["productGridMessageMinQuantity"], width: "100px", position: "triggerTop", activate: "onmouseover", dataStrategy: "inline" }; let instance = tooltip.create($trigger, options); //we are checking if instance is not undefined we call show method. if (instance) { instance.show(); } }); }else{ if(cartResponse["cartItems"][i]["quantity"] < cartResponse["cartItems"][i]["maximumQuantity"]) { P.when("A", "a-tooltip", "ready").execute(function (A, tooltip) { let $trigger = productGrid.find("#productCartButton"); tooltip.remove($trigger); }); } productGrid.find("[data-name=addToCartBtn]").attr('title',"Add to Cart"); } // Update the data-json for product add to cart item let currentDataJsonString = productGrid.find("[data-name=addToCartBtn]").attr("data-json"); if(currentDataJsonString) { let jsonObject = JSON.parse(currentDataJsonString); jsonObject.quantity = cartResponse["cartItems"][i]["quantity"]; productGrid.find("[data-name=addToCartBtn]").attr("data-json", JSON.stringify(jsonObject)); } }, quantityUpdate:function(productGrid){ productGrid.find("[data-name=addToCartBtn]").removeAttr('addToCartBtnTitleMinQtyMessage'); // Update the data-json quantity to 0 in case cartItems is empty let currentDataJsonString = productGrid.find("[data-name=addToCartBtn]").attr("data-json"); if(currentDataJsonString) { let jsonObject = JSON.parse(currentDataJsonString); jsonObject.quantity = 0; productGrid.find("[data-name=addToCartBtn]").attr("data-json", JSON.stringify(jsonObject)); } // Remove the Min Order Quantity Product Grid Cart message P.when("A", "a-tooltip", "ready").execute(function (A, tooltip) { let $trigger = productGrid.find("#productCartButton"); tooltip.remove($trigger); }); productGrid.find("[data-name=addToCartBtn]").attr('title',"Add to Cart"); }, getProductGridCarousel:function (j,i, params, cartResponse) { return $("#productInfoCarousel_" + j).find("li[data-asin=" + params.asin + "][data-merchant=" + cartResponse["cartItems"][i]["merchantId"] + "]"); }, maskAreaOffSetForAreaCart:function (){ let maskAreaOffSet = (false) ? document.getElementById("topCartItemListContainerPhone").getBoundingClientRect().bottom : document.getElementById("topCartItemListContainer").getBoundingClientRect().bottom; $("#maskAreaCart").css("top", maskAreaOffSet); }, // Add click event listener to Quantity Stepper bindQuantityStepper: function () { let that = this; $("#cartItemList").delegate("[data-name=cartItemDecrement]", 'click', function () { let commonDivDec = $(this).parent().parent().parent().parent() commonDivDec.addClass("asinFaceoutCartScrim"); commonDivDec.attr("id","decrementQuantity"); that.deleteCartItem( $(this).data("json")["asin"], $(this).data("json")["itemId"], $(this).data("json")["quantity"], $(this).data("json")["minOrderQuantity"] ); $("#cartItemDisplayQuantity").text($(this).data("json")["quantity"]-1); }); $("#cartItemList").delegate("[data-name=cartItemIncrement]", 'click', function () { let commonDivInc = $(this).parent().parent().parent().parent() commonDivInc.addClass("asinFaceoutCartScrim"); commonDivInc.attr("id","incrementQuantity"); that.addCartItem( $(this).data("json")["asin"], $(this).data("json")["offerListingId"], $(this).data("json")["quantity"]+1, $(this).data("json")["price"], $(this).data("json")["canonicalAsin"], $(this).data("json")["merchantId"], $(this).data("json")["minOrderQuantity"] ); $("#cartItemDisplayQuantity").text($(this).data("json")["quantity"]+1); }); }, // Ajax call to Cart RestController and cart popover content with response cartAjax: function (url, method, params) { // scrim applied here if ((method != "GET") && $("#incrementQuantity")) { $("#incrementQuantity").addClass("asinFaceoutCartScrim"); } let that = this; $.ajax({ type: method, url: url, data: params, // In order to make sure the backend controller can receive CSRF token, the contentTpye has to be a form contentType: 'application/x-www-form-urlencoded; charset=UTF-8;', headers: {"anti-csrftoken-a2z": "hO/7xNNEgaDxryXsXXaaoY1dhyLsSZwIAk/uLxM/Y71xAAAAAGdBro0AAAAB", "Cache-Control": "no-cache, no-store" }, success: function (cartResponse) { that.renderCartItem(cartResponse); if (true) { if (!false) { let itemSum = 0; for (let i = 0; i < cartResponse["cartItems"].length; i++) { itemSum += cartResponse["cartItems"][i].quantity; } $(".nav-cart-count").html(itemSum); } else { const urlString = url.toString(); const words = urlString.split("/") let action = words[words.length - 1]; if (action == "get") { let itemSum = 0; for (let i = 0; i < cartResponse["cartItems"].length; i++) { itemSum += cartResponse["cartItems"][i].quantity; } localCartCount = itemSum; } else if (action == "add") { navCartCount += 1; localCartCount += 1; $(".nav-cart-count").html(navCartCount); } else if (action == "delete") { let itemSum = 0; for (let i = 0; i < cartResponse["cartItems"].length; i++) { itemSum += cartResponse["cartItems"][i].quantity; } const delta = localCartCount - itemSum; localCartCount -= delta; navCartCount -= delta; $(".nav-cart-count").html(navCartCount); } } P.when('EWC').execute(function (EWC) { EWC.refresh(); }); } else { // For mobile App let itemSum = 0; for (let i = 0; i < cartResponse["cartItems"].length; i++) { itemSum += cartResponse["cartItems"][i].quantity; } P.when("mash").execute(function (mash) { mash.cart.didUpdate({ newCartQuantity: itemSum }); }); } if(params.asin){ for (let i = 0; i < cartResponse["cartItems"].length; i++) { if(cartResponse["cartItems"][i]["asin"] == params.asin){ let productGrid = $("#productInfoList").find("li[data-asin=" + params.asin + "][data-merchant=" + cartResponse["cartItems"][i]["merchantId"] + "]"); if(false) { if (!false){ // Logic to Populate the Max Order Quantity Message that.populateMaxQuantityProductMessage(productGrid, i, params, cartResponse); }else { for(let j=0;j<7;j++) { let productGrid = that.getProductGridCarousel(j,i,params,cartResponse); // Logic to Populate the Max Order Quantity Message in carousel psp page that.populateMaxQuantityProductMessage(productGrid, i, params, cartResponse); } } } if(false) { if (!false){ // Logic to populate the Min Order Quantity Message that.populateMinQuantityProductMessage(productGrid, i, params, cartResponse); }else { for(let j=0;j<7;j++) { let productGrid = that.getProductGridCarousel(j,i,params,cartResponse); // Logic to populate the Min Order Quantity Message in carousel psp page that.populateMinQuantityProductMessage(productGrid, i, params, cartResponse); } } } } } } if (false) { // if cart items are empty remove the min quantity message from product grid if (cartResponse["cartItems"].length == 0) { if (!false){ let productGrid = $("#productInfoList").find("li[data-asin=" + params.asin + "]"); that.quantityUpdate(productGrid); }else { for(let j=0;j<7;j++) { let productGrid = $("#productInfoCarousel_" + j).find("li[data-asin=" + params.asin + "]"); that.quantityUpdate(productGrid); } } } } if (false || false) { let progressBarResponse = cartResponse["frontendDisplayReadyString"]; if ($("div[name=cartProgressIndicatorBox]").hasClass("hidden") || $("#cartProgressBox").hasClass("hidden")) { // progress bar not populated yet that.populateCartProgressBar(cartResponse["cartProgressIndicatorResponse"]["cpiViewModel"]); } that.updateCartProgressBar(cartResponse["cartProgressIndicatorResponse"]["cpiViewModel"]); } else if (false) { // if the topCart is has more than one line of text, adjust the filter's sticky position following let topCartPhone = document.querySelector('.topCart_phone_gridItem'); let topCartPhoneHeight = topCartPhone.offsetHeight; $("#refinement_phone_gridItem").css("top", topCartPhoneHeight); } if ((method != "GET") && $("#incrementQuantity")) { setTimeout(function () { that.hideSpinnerAndScrim(); }, 1400); } }, error: function () { // Desktop and Tablet if ($("#cartError")) { $("[name=messageGroup]").addClass("hidden"); $("#cartError").removeClass("hidden"); } // Phone if ($("#topCartContainerFlex")) { $("#topCartContainerFlex").addClass("hidden"); $("#emptyError").removeClass("hidden"); } } }); }, getCartItem: function () { // Whenever backend parameter schema changes, change this Json object accordingly let getCartItemsRequest = { "promotionId": "A2OD29RWOSXA27", "thresholdType": "QUANTITY", "minQuantity": "1", "minAmount": "", "benefitAmount": "", "benefitPercent": "5", "benefitAmountCap": "", "showCartProgressIndicator": false, "numberOfProductSelections" : "1", "promotionThresholds": JSON.stringify(promotionThresholdsArray) }; this.cartAjax("/promotion/psp/cart/get", "GET", getCartItemsRequest); }, loadCartVariationalInfos: function () { let that = this; let getCartItemsRequest = { "promotionId": "A2OD29RWOSXA27", "thresholdType": "QUANTITY", "minQuantity": "1", "minAmount": "", }; $.ajax({ type: "GET", url: "/promotion/psp/cart/get", data: getCartItemsRequest, // In order to make sure the backend controller can receive CSRF token, the contentTpye has to be a form contentType: 'application/x-www-form-urlencoded; charset=UTF-8;', headers: {"anti-csrftoken-a2z": "hO/7xNNEgaDxryXsXXaaoY1dhyLsSZwIAk/uLxM/Y71xAAAAAGdBro0AAAAB", "Cache-Control": "no-cache, no-store" }, success: function (cartResponse) { if (commonModule.isNotEmpty(cartResponse)) { for (let i in cartResponse["cartItems"]) { that.getVariationalDataForAsin(cartResponse["cartItems"][i]["asin"]); } if (cartVariationalInfoMap.size > 0) { that.renderCartItem(cartResponse); } } }, error: function (e) { console.log(e.status); console.log(e.responseText); } }) }, // Add to cart button click event listener definition locates in productInfoList.jsp addCartItem: function (asin, offerListingId, quantity, price, canonicalAsin, merchantId, minimumOrderQuantity) { // Whenever backend parameter schema changes, change this Json object accordingly let refTag = "psp_pc_atc"; setReftag(refTag); let addToCartRequest = { "asin": asin, "offerListingId": offerListingId, "promotionId": "A2OD29RWOSXA27", "thresholdType": "QUANTITY", "minQuantity": "1", "minAmount": "", "minimumOrderQuantity": minimumOrderQuantity, "anti-csrftoken-a2z": "hEXdF6L/REviOtElGGujeUh8ekWrY2V0I6XAemzPo6nQAAAAAGdBro0AAAAB", "ref": "psp_pc_atc", //Fields used to log AddToCart action in Clickstream "quantity": quantity, "price": price, "merchantId":merchantId, "canonicalAsin":canonicalAsin, "benefitAmount": "", "benefitPercent": "5", "benefitAmountCap": "", "showCartProgressIndicator": false, "numberOfProductSelections" : "1", "promotionThresholds": JSON.stringify(promotionThresholdsArray) }; this.cartAjax("/promotion/psp/cart/add", "POST", addToCartRequest); this.getVariationalDataForAsin(asin); }, deleteCartItem: function (asin, itemId, quantity, minOrderQuantity) { // Whenever backend parameter schema changes, change this Json object accordingly let refTag = "psp_pc_dfc"; setReftag(refTag); let deleteFromCartRequest = { "asin": asin, "itemId": itemId, "quantity": quantity, "promotionId": "A2OD29RWOSXA27", "thresholdType": "QUANTITY", "minQuantity": "1", "minOrderQuantity": minOrderQuantity, "minAmount": "", "benefitAmount": "", "benefitPercent": "5", "benefitAmountCap": "", "anti-csrftoken-a2z": "hIXOt9nZr+0KZzIcKebY80haN8JSK+lSxJ5ovH4gyFUgAAAAAGdBro0AAAAB", "ref": "psp_pc_dfc", "showCartProgressIndicator": false, "numberOfProductSelections" : "1", "promotionThresholds": JSON.stringify(promotionThresholdsArray) }; this.cartAjax("/promotion/psp/cart/delete", "POST", deleteFromCartRequest); }, clickOnCart: function () { let that = this; //For phone if (false) { if ($("#topCartContainerFlex")) { $("#topCartContainerFlex").unbind("click"); $("#topCartContainerFlex").click(function () { if ($("#topCartItemListContainerPhone").hasClass("hidden")) { // Expand that.expandCart(); //Determine the starting point for the maskArea when cart is opened that.maskAreaOffSetForAreaCart(); } else { // Collapse that.collapseCart(); } }); } if ($("#cartProgressBox")) { $("#cartProgressBox").unbind("click"); $("#cartProgressBox").click(function () { if ($("#topCartItemListContainerPhone").hasClass("hidden")) { // Expand that.expandCart(); //Determine the starting point for the maskArea when cart is opened that.maskAreaOffSetForAreaCart(); } else { // Collapse that.collapseCart(); } }); } } //For Desktop else { if ($("#topCartContainer")) { $("#topCartContainer").unbind("click"); $("#topCartContainer").click(function () { if ($("#topCartItemListContainer").hasClass("hidden")) { // Expand that.expandCart(); //Determine the starting point for the maskArea when cart is opened that.maskAreaOffSetForAreaCart(); } else { // Collapse that.collapseCart(); } }); } if ($("#cartProgressBox")) { $("#cartProgressBox").unbind("click"); $("#cartProgressBox").click(function () { if ($("#topCartItemListContainer").hasClass("hidden")) { // Expand that.expandCart(); //Determine the starting point for the maskArea when cart is opened that.maskAreaOffSetForAreaCart(); } else { // Collapse that.collapseCart(); } }); } } }, // Used on all platforms clickOnMask: function () { let that = this; if ($("#maskAreaCart")) { $("#maskAreaCart").click(function () { // Collapse that.collapseCart(); }); } }, expandCart: function () { $("#maskAreaCart").removeClass("hidden").addClass("inlineBlock").height($("#a-page").outerHeight()); let refTag = "psp_pc_cart_expand"; setReftag(refTag); if (false){ $("#topCartItemListContainerPhone").removeClass("hidden"); $("#topCartArrow").removeClass("arrowDown").addClass("arrowUp"); $("#topCartArrow").attr("aria-label", "Close Promotion Shopping Cart"); $("#progressBarCartIconExpand").addClass("arrowUpPhone"); $("#progressBarCartIconExpand").attr("aria-label", "Close Promotion Shopping Cart"); } else { $("#topCartItemListContainer").removeClass("hidden"); $("#topCartExpand").addClass("arrowUp"); $("#topCartExpand").attr("aria-label", "Close Promotion Shopping Cart"); $("#progressBarCartIconExpand").addClass("arrowUp"); $("#progressBarCartIconExpand").attr("aria-label", "Close Promotion Shopping Cart"); } $("body").addClass("freeze"); }, collapseCart: function () { $("#maskAreaCart").removeClass("inlineBlock").addClass("hidden"); let refTag = "psp_pc_cart_collapse"; setReftag(refTag); if (false) { $("#topCartItemListContainerPhone").addClass("hidden"); $("#topCartArrow").removeClass("arrowUp").addClass("arrowDown"); $("#topCartArrow").attr("aria-label", "Open promotion cart"); $("#progressBarCartIconExpand").removeClass("arrowUpPhone"); $("#progressBarCartIconExpand").attr("aria-label", "Open promotion cart"); } else { $("#topCartItemListContainer").addClass("hidden"); $("#topCartExpand").removeClass("arrowUp"); $("#topCartExpand").attr("aria-label", "Open promotion cart"); $("#progressBarCartIconExpand").removeClass("arrowUp"); $("#progressBarCartIconExpand").attr("aria-label", "Open promotion cart"); } $("body").removeClass("freeze"); }, // Phone method clickOnError: function () { let that = this; // Desktop if ($("#cartMessageErrorReload")) { $("#cartMessageErrorReload").click(function () { that.getCartItem(); }); } // Phone if ($("#emptyError")) { $("#emptyError").click(function () { that.getCartItem(); }); } }, getVariationalDataForAsin: function (asin) { if (!cartVariationalInfoMap.has(asin)) { let getCartItemsRequest = { "asin": asin }; $.ajax({ type: "GET", url: "/promotion/twister/variationalData", data: getCartItemsRequest, contentType: 'application/x-www-form-urlencoded; charset=UTF-8;', success: function (variationalData) { let variationalEntries = new Map(Object.entries(variationalData)); cartVariationalInfoMap.set(asin, variationalEntries); }, error: function (e) { console.log(e.status); console.log(e.responseText); } }) } }, getVariationalDataAndRenderForAsin: function (asin, cartItemGrid) { let getCartItemsRequest = { "asin": asin }; $.ajax({ type: "GET", url: "/promotion/twister/variationalData", data: getCartItemsRequest, contentType: 'application/x-www-form-urlencoded; charset=UTF-8;', success: function (variationalData) { let variationalEntries = new Map(Object.entries(variationalData)); if (variationalEntries.size > 0) { for (let [key, value] of variationalEntries) { cartItemGrid.find("[data-name=productVariationData]").append('<li class="sc-product-variation cartProductVariationalDataLabel listStyleNone a-size-micro" aria-label=""><span class="a-text-bold">' + key + ":" + '</span><span> ' + value + '</span></li>'); } cartItemGrid.find("div[name=productVariationData").removeClass("hidden"); } } }) }, populateCartProgressBar: function (cpiViewModel) { // hide the cart container and show the cart progress indicator setVisibility($('#cartProgressBox'), true); setVisibility($('#topCartContainer'), false); setVisibility($('#topCartContainerPhone'), false); // remove a-meter-unfilled if progressPercentage > 0, otherwise a scroll event is needed to trigger randering of the progress bar $('.cartProgressIndicatorBar div').removeClass("a-meter-unfilled"); $('.cartProgressIndicatorBar').parent().css('width', '100%'); // render threshold beside the cart progress indicator bar $("#cartProgressIndicatorTitle").text(cpiViewModel.title); $('#cartProgressIndicatorTitleUnlockedText').text(cpiViewModel.unlockedTitle); if (false) { $("#cartProgressIndicatorThreshold").text(cpiViewModel.thresholdMobile); } else { $("#cartProgressIndicatorThreshold").text(cpiViewModel.thresholdDesktop); } }, updateCartProgressBar: function (cpiViewModel) { // set the progress percentage on the progress bar let meterOfProgressBar = getMeterCollection('.cartProgressIndicatorBar'); meterOfProgressBar.percent(cpiViewModel.progressPercentage); // update CPI viewModel strings $('#cartProgressMessage').text(cpiViewModel.cpiMessage); $('#inCartQuantity').text(cpiViewModel.itemsInCart); // update CPI components visibility based on device and status let isPromotionThresholdMet = cpiViewModel.progressPercentage == 100; setVisibility($('#cartProgressIndicatorTitle'), !isPromotionThresholdMet); setVisibility($('#cartProgressIndicatorTitleUnlocked'), isPromotionThresholdMet); if (false) { $("#cartProgressIndicatorThreshold").text(cpiViewModel.thresholdMobile); setVisibility($('#cartProgressMessage'), !isPromotionThresholdMet) setVisibility($('.cartProgressIndicatorRightBottomBox'), cpiViewModel.progressPercentage != 0); $("#refinement_phone_gridItem").css("top", document.getElementById("topCart_phone_gridItem").offsetHeight); } }, renderNotQualifiedCartTop: function () { isQualified = false; $("#topQualificationInfoContainer").addClass("hidden"); if ($("#couponClippingContainer")) { $("#couponClippingContainer").removeClass("hidden"); } if ($("#topCartContainerPhone")) { $("#topCartContainerPhone").removeClass("backgroundWhite"); $("#topCartContainerPhone").addClass("backgroundDark"); } $("#topCartContainer").addClass("backgroundSnow").removeClass("backgroundQualified") $("#qualificationInfoText").addClass("hidden").removeClass("inlineBlock"); $("#goToCartButton").addClass("invisible"); }, renderCartItem: function (cartResponse) { let that = this; $("#cartError").addClass("hidden"); // Cart message if (commonModule.isNotEmpty(cartResponse["cartMessage"])) { that.clickOnCart(); // Desktop & Tablet & Phone $("#topCartMessage").text(cartResponse["cartMessage"]); $("#cartMessageNonEmpty").attr("aria-label", cartResponse["cartMessage"]); // Desktop & Tablet if ($("#cartMessageNonEmpty")) { $("#cartMessageNonEmpty").removeClass("hidden"); $("#cartMessageEmpty").addClass("hidden"); $("#topCartExpand").removeClass("invisible"); $("#progressBarCartIconExpand").removeClass("hidden"); } } else { $("#topCartContainerFlex").unbind("click"); $("#topCartContainer").unbind("click"); $("#cartProgressBox").unbind("click"); that.collapseCart(); // Desktop & Tablet if ($("#cartMessageEmpty")) { $("#cartMessageEmpty").removeClass("hidden"); $("#cartMessageNonEmpty").addClass("hidden"); $("#topCartExpand").addClass("invisible"); $("#topCartCollapse").addClass("invisible"); $("#progressBarCartIconExpand").addClass("hidden"); } } // Price, this sub total is using AUI price component base size if (cartResponse["formattedSubtotal"]) { $("#topCartSubtotal").attr("aria-label", "Subtotal:" + cartResponse["formattedSubtotal"]["displayString"]); $("#topCartSubTotalValue").find("[name=topCartSubTotal]").text(cartResponse["formattedSubtotal"]["displayString"]); $("#topCartSubTotalValue").find("[name=topCartSubTotalAriaHidden]").text(cartResponse["formattedSubtotal"]["displayString"]); } // Order qualification // This is when it is not BXGY Promotion and we could handle it normally if (commonModule.isEmpty(1) || parseInt(1) <= 1) { if (cartResponse["orderQualified"]) { $("#topQualificationInfoContainer").removeClass("hidden"); $("#topCartContainer").removeClass("backgroundSnow").addClass("backgroundQualified"); $("#qualificationInfoText").removeClass("hidden").addClass("inlineBlock"); $("#goToCartButton").removeClass("invisible"); if (true) { isQualified = true; if ( isClipped || false) { if ($("#couponClippingContainer")) { if (!false) { $("#couponClippingContainer").addClass("hidden"); } } $("#topQualificationInfoContainer").removeClass("hidden"); $("#goToCartButton").removeClass("invisible"); } } else { if ($("#couponClippingContainer")) { if (!false) { $("#couponClippingContainer").addClass("hidden"); } } } } else { this.renderNotQualifiedCartTop(); } } else { // When reached here it is a BXGY promotion if (!cartResponse["orderQualified"] && !cartResponse["orderReadyToCheckout"]) { // For this branch, it doesn't reach any threshold, so we displaying default top cart this.renderNotQualifiedCartTop(); } else if (cartResponse["orderReadyToCheckout"]) { // For this branch, it meets all the thresholds, and hereby we showing green cart color and 'Ready to checkout!' message $("#qualificationInfoTextDynamicSlot").text("Ready to checkout!"); $("#topQualificationInfoContainer").removeClass("hidden"); $("#topCartContainer").removeClass("backgroundSnow").addClass("backgroundQualified"); $("#qualificationInfoText").removeClass("hidden").addClass("inlineBlock"); $("#goToCartButton").removeClass("invisible"); if (true) { isQualified = true; if ( isClipped || false) { if ($("#couponClippingContainer")) { if (!false) { $("#couponClippingContainer").addClass("hidden"); } } $("#topQualificationInfoContainer").removeClass("hidden"); $("#goToCartButton").removeClass("invisible"); } } else { if ($("#couponClippingContainer")) { if (!false) { $("#couponClippingContainer").addClass("hidden"); } } } } else { // For this branch it only meets X threshold for BXGY promotion, and hereby showing default top cart color and "Your order qualifies!" Icon and text isQualified = true; $("#qualificationInfoTextDynamicSlot").text("Your order qualifies!"); $("#topQualificationInfoContainer").removeClass("hidden"); $("#qualificationInfoText").removeClass("hidden").addClass("inlineBlock"); $("#goToCartButton").addClass("invisible"); if ($("#couponClippingContainer")) { $("#couponClippingContainer").removeClass("hidden"); } if ($("#topCartContainerPhone")) { $("#topCartContainerPhone").removeClass("backgroundWhite"); $("#topCartContainerPhone").addClass("backgroundDark"); } $("#topCartContainer").addClass("backgroundSnow").removeClass("backgroundQualified") } } // For mobile if (false) { if ($("div[name=topCartMessagePhone]")) { $("#emptyError").addClass("hidden"); } // Order qualification and colors // This is when it is not BXGY Promotion and we could handle it normally if (commonModule.isEmpty(1) || parseInt(1) <= 1) { if (cartResponse["orderQualified"]) { $("#topCartContainerFlex").removeClass("backgroundSnow").addClass("backgroundQualified"); $("#qualificationInfoText").removeClass("hidden").addClass("inlineBlock"); $("#goToCartButton").removeClass("invisible"); } else { $("#topCartContainerFlex").addClass("backgroundSnow").removeClass("backgroundQualified"); $("#qualificationInfoText").removeClass("inlineBlock").addClass("hidden"); $("#goToCartButton").addClass("invisible"); } } else { // When reached here it is a BXGY promotion if (cartResponse["orderReadyToCheckout"]) { // For this branch, it meets all the thresholds, and hereby we showing green cart color and 'Ready to checkout!' message $("#topCartContainerFlex").removeClass("backgroundSnow").addClass("backgroundQualified"); $("#qualificationInfoTextDynamicSlot").text("Ready to checkout!"); $("#qualificationInfoText").removeClass("hidden").addClass("inlineBlock"); $("#goToCartButton").removeClass("invisible"); } else if (cartResponse["orderQualified"]) { // For this branch it only meets X threshold for BXGY promotion, and hereby showing default top cart color and "Your order qualifies!" Icon and text $("#topCartContainerFlex").addClass("backgroundSnow").removeClass("backgroundQualified"); $("#qualificationInfoTextDynamicSlot").text("Your order qualifies!"); $("#qualificationInfoText").removeClass("hidden").addClass("inlineBlock"); $("#goToCartButton").addClass("invisible"); } else { // For this branch, it doesn't reach any threshold, so we displaying default top cart $("#topCartContainerFlex").addClass("backgroundSnow").removeClass("backgroundQualified"); $("#qualificationInfoText").removeClass("inlineBlock").addClass("hidden"); $("#goToCartButton").addClass("invisible"); } } // Cart message if (commonModule.isNotEmpty(cartResponse["cartMessageShort"])) { $("#topCartMessageEmptyPhone").removeClass("inlineBlock").addClass("hidden"); $("#topCartMessagePhone").text(cartResponse["cartMessageShort"]); $("#topCartMessagePhone").removeClass("hidden").add("inlineBlock"); $("#topCartArrow").removeClass("invisible"); } else { $("#topCartMessagePhone").removeClass("inlineBlock").addClass("hidden"); $("#topCartMessageEmptyPhone").removeClass("hidden").addClass("inlineBlock"); $("#topCartArrow").addClass("invisible"); } // Phone if ($("#topCartContainerFlex")) { $("#topCartContainerFlex").removeClass("hidden"); $("#emptyError").addClass("hidden"); } // Subtotal if (cartResponse["formattedSubtotal"]) { $("[name=topCartSubTotalValue]").find("[name=topCartSubTotal]").text(cartResponse["formattedSubtotal"]["displayString"]); $("[name=topCartSubTotalValue]").find("[name=topCartSubTotalAriaHidden]").text(cartResponse["formattedSubtotal"]["displayString"]); } } // Populate cart item $("#cartItemList").empty(); for (let i in cartResponse["cartItems"]) { let cartItemGrid = $("#carItemTemplate [name=carItemGrid]").clone(); let cartItem = cartResponse["cartItems"][i]; // Image cartItemGrid.find("div[name=cartItemImageBox]").find("img[name='cartItemImage']").attr("src", cartItem["imgURL"]); cartItemGrid.find("div[name=cartItemImageBox]").find("img[name='cartItemImage']").attr("alt", cartItem["imgAlt"]); cartItemGrid.find("div[name=cartItemImageBox]").find("[data-name='cartItemImageLink']").attr("title", cartItem["title"]); cartItemGrid.find("div[name=cartItemImageBox]").find("[data-name='cartItemImageLink']").attr("href", "/dp/" + cartItem["asin"]); // Title cartItemGrid.find("div[name=cartItemTitleBox]").find("[data-name=cartItemTitle]").text(cartItem["title"]); // VariationalData if (cartVariationalInfoMap.has(cartItem["asin"])) { let variationalData = cartVariationalInfoMap.get(cartItem["asin"]); if (variationalData.size > 0) { for (let [key, value] of variationalData) { if(false) { cartItemGrid.find("[data-name=productVariationData]").append('<li class="sc-product-variation cartProductVariationalDataLabel listStyleNone a-size-micro clamp1" aria-label=""><span class="a-text-bold">' + key + ":" + '</span><span> ' + value + '</span></li>'); } else { cartItemGrid.find("[data-name=productVariationData]").append('<li class="sc-product-variation cartProductVariationalDataLabel listStyleNone a-size-micro" aria-label=""><span class="a-text-bold">' + key + ":" + '</span><span> ' + value + '</span></li>'); } } cartItemGrid.find("div[name=productVariationData").removeClass("hidden"); } } else { this.getVariationalDataAndRenderForAsin(cartItem["asin"], cartItemGrid); } // Price let price; if (cartItem["formattedLdPrice"]) { let cartItemPriceBox = cartItemGrid.find("div[name=cartItemPriceBox]"); cartItemPriceBox.find("span[name=cartItemPrice]").text(cartItem["formattedLdPrice"]["displayString"]); price = cartItem["formattedLdPrice"]["displayString"]; cartItemPriceBox.find("span[name=cartItemQuantity]").text(cartItem["quantity"]); cartItemPriceBox.find("span[name=cartItemQuantity]").attr("aria-label", "Quantity: " + cartItem["quantity"]); } else if (cartItem["formattedPrice"]) { let cartItemPriceBox = cartItemGrid.find("div[name=cartItemPriceBox]"); cartItemPriceBox.find("span[name=cartItemPrice]").text(cartItem["formattedPrice"]["displayString"]); price = (cartItem["formattedPrice"]["displayString"]); cartItemPriceBox.find("span[name=cartItemQuantity]").text(cartItem["quantity"]); cartItemPriceBox.find("span[name=cartItemQuantity]").attr("aria-label", "Quantity: " + cartItem["quantity"]); } //Maximum Quantity cartItemGrid.find("div[name=cartItemMaxQuantity]").find("[data-name=cartItemMaxQuantity]").text(cartItem["maximumQuantity"]); // Decrement button let data_json_decrement = { "asin": cartItem["asin"], "itemId": cartItem["itemId"], "quantity": cartItem["quantity"], "minOrderQuantity": cartItem["minimumQuantity"] }; // Increment button let data_json_increment = { "asin": cartItem["asin"], "offerListingId": cartItem["offerListingId"], "quantity": cartItem["quantity"], "price": price, "minOrderQuantity": cartItem["minimumQuantity"] } //Quantity Stepper cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemDisplayQuantity]").text(cartItem["quantity"]).attr("aria-label", "Quantity: " + cartItem["quantity"]); cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemDecrement]").attr("data-json", JSON.stringify(data_json_decrement)); cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemIncrement]").attr("data-json", JSON.stringify(data_json_increment)).attr("aria-label", "Add quantity"); if (cartItem["quantity"] == "1" || cartItem["quantity"] == cartItem["minimumQuantity"]) { cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemDecrement]").attr("aria-label", "Delete") cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemDecrement]").find("img[name=deleteIcon]").removeClass("hidden"); cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemDecrement]").find("div[name=topCartDelete]").addClass("hidden"); } else { cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemDecrement]").attr("aria-label", "Reduce quantity"); cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemDecrement]").find("img[name=deleteIcon]").addClass("hidden"); cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemDecrement]").find("div[name=topCartDelete]").removeClass("hidden"); } if(false) { // Logic for Max Order Quantity Restriction in cart if (cartItem["quantity"] >= cartItem["maximumQuantity"]) { cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemIncrement]").addClass("inputCursorDisabled"); cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemIncrement]").click(false); cartItemGrid.find("div[name=maxQuantityCartMessage]").removeClass("hidden"); cartItemGrid.find("div[name=maxQuantityCartMessage]").html(cartItem["cartMassageMaximumQuantity"]); that.maskAreaOffSetForAreaCart(); } else { cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemIncrement]").removeClass("inputCursorDisabled"); if(cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemIncrement]")){ cartItemGrid.find("div[name=cartItemQuantityStepper]").find("div[name=cartItemIncrement]").children().unbind('click'); } cartItemGrid.find("div[name=maxQuantityCartMessage]").addClass("hidden"); that.maskAreaOffSetForAreaCart(); } } if(false) { // Logic for Min Order Quantity in cart if (cartItem["minimumQuantity"] > 1 && cartItem["quantity"] >= cartItem["minimumQuantity"] && cartItem["quantity"] < cartItem["maximumQuantity"]) { cartItemGrid.find("div[name=minQuantityCartMessage]").removeClass("hidden"); cartItemGrid.find("div[name=minQuantityCartMessage]").html(cartItem["cartMassageMinQuantity"]); that.maskAreaOffSetForAreaCart(); } } $("#cartItemList").append(cartItemGrid); } }, } // Remove hidden class if a condition is met function setVisibility(selector, condition) { if (condition) { $(selector).removeClass('hidden'); } else { $(selector).addClass('hidden'); } } // Remove hidden class if a condition is met function setReftag(refTag) { if (false) refTag += "_cpi_t1" commonModule.setReftag(refTag); let time = new Date().getTime(); let metricsData = { "startTime" : time, "endTime" : time, "metricsName": refTag } commonModule.clientSideMetrics(metricsData); } }); window.P.when("A", "cart_module", 'ready').execute(function (A, cartModule) { cartModule.getCartItem(); cartModule.loadCartVariationalInfos(); cartModule.bindQuantityStepper(); cartModule.clickOnError(); document.addEventListener('visibilitychange', function () { if (document.visibilityState == 'hidden') { } else { cartModule.getCartItem(); } }); //Listen to the event from everywhere cart side bar A.on('ewc:cartUpdate:success', function() { cartModule.getCartItem(); }); }); </script> <style> .cartItemListContainer { width: 100%; height: auto; } .topQuantityStepper{ width: 110px; height: 35px; display: flex; justify-content: center; } .topCartQuantityChange{ width: 30%; border-color: #ADB1B8; border-style: solid; border-width: .08rem; cursor: pointer; font-weight: bold; border-color: #ADB1B8 #A2A6AC #8D9096; } .topCartIncrement{ border-top-right-radius: .3rem; border-bottom-right-radius: .3rem; } .topCartDecrement{ border-top-left-radius: .3rem; border-bottom-left-radius: .3rem; } .topCartQuantityDisplay{ width: 40%; border-color: #ADB1B8 #A2A6AC #8D9096; border-style: solid; border-width: .08rem; font-size: medium; } .textFormat{ justify-content: center; align-items: center; display:flex; font-size: large; padding:5%; } .listStyleNone{ list-style: none !important; } .cartProductVariationalData{ overflow-y: auto; max-height: 10vh; max-width: 100%; } .cartProductVariationalDataLabel{ overflow-x: hidden; white-space: nowrap; text-overflow: ellipsis; } .cartProductVariationData { overflow: hidden; text-overflow: ellipsis; } .listStyleNone{ list-style: none !important; } </style> <div id="cartItemListContainer" class="cartItemListContainer"> <ol id="cartItemList" class="cartItemListFlex textAlignCenter" role="group" aria-label=" Items in Promotion Shopping Cart"></ol> </div> <div id="carItemTemplate" class="hidden" > <li name="carItemGrid" class="textAlignCenter paddingTop8 paddingBottom8 cartItemGrid"> <div name="cartItemImageBox" class="textAlignCenter cartItemImageBox relative"> <a data-name="cartItemImageLink" class="a-link-normal" href="#"> <img name="cartItemImage" class="imageSquare"/> </a> </div> <div name="cartItemTitleBox" class="paddingTop8 cartItemTitleBox clamp2"> <span data-name="cartItemTitle" class="a-size-small"></span> </div> <div name="productVariationData" class="paddingTop8 hidden cartProductVariationalData" aria-label="variational information of the product"> <span data-name="productVariationData" class="a-size-micro cartProductVariationData"></span> </div> <div name="cartItemPriceBox" class="paddingTop8 paddingBottom8 a-size-base textAlignCenter"> <span class="a-price a-text-price inlineBlock" data-a-size="b" data-a-color="price"> <span name="cartItemPrice"></span> </span> <span class="inlineBlock" aria-hidden="true">x</span> <span name="cartItemQuantity" class="cartItemQuantity inlineBlock" role="text"></span> </div> <div name="cartItemMaxQuantity" class = "hidden"> <span data-name="cartItemMaxQuantity"></span> </div> <div name = "cartItemQuantityStepper" class = "topQuantityStepper"> <div name = "cartItemDecrement" class = "inlineBlock topCartQuantityChange topCartDecrement textFormat" role="button" data-name="cartItemDecrement"> <img name="deleteIcon" src="/promotion/static/css/trashIcon.png"> <div name="topCartDelete" class="hidden" textBold="true">-</div> </div> <div name ="cartItemDisplayQuantity" class ="inlineBlock topCartQuantityDisplay textFormat" data-name="cartItemDisplayQuantity" role = "text"> <span id="topCartQuantity" class="a-size-base a-text-bold"></span> </div> <div name ="cartItemIncrement" class ="inlineBlock topCartQuantityChange topCartIncrement textFormat" role="button" data-name="cartItemIncrement">+</div> </div> </li> </div> </div> <div id="topCartItemListButton" class="paddingTop12 paddingBottom12 topCartItemListButton textAlignCenter"> <a id="goToCartButton" aria-label="Go to Cart" class="a-link-normal invisible goToCartLink" href="/gp/aw/c?ref=psp_pc_gt_c" role="button"> <span class="a-button a-button-primary a-button-small inlineBlock buttonWidth"><span class="a-button-inner"><button class="a-button-text" type="button">Go to Cart</button></span></span> </a> </div> </div> </div> <div id="maskAreaCart" class="maskArea hidden"></div> </div> <div id="topCart_phone_gridItem" class="topCart_phone_gridItem textAlignCenter stickyCart"> <!-- This jsp file is responsible for loading the PSP Cart Preview, SubTotal and GoToCart Button --> </div> <div id="topBanner_gridItem" class="topBanner_gridItem textAlignCenter"> <!-- This jsp file is responsible for loading the Promotion Title and Promotion Schedule --> <style> .titleBox { width: 90%; color: #232F3E; } .stickyBanner{ height: 60px; width: 100%; top: 0; position: fixed; z-index: 25; } </style> <div id="topBannerContainer" class="textAlignCenter" role="group" style="background: #94ed88 !important" aria-label="Promotion Title"> <div class="alignCenter" style="width: 90%; color: #232F3E;"> <div id="promotionTitle" style="padding-top: 8px !important;"> <h1><span class="a-size-extra-large a-text-bold">Buy any 1, Save 5%</span></h1> </div> <div id="promotionSchedule" class="paddingTop12 paddingBottom16"> <span class="a-size-base inlineBlock">Limited-time offer</span> </div> </div> </div> </div> <div id="topClaim_gridItem" class="topClaim_gridItem textAlignCenter"> <!-- This jsp file is responsible for loading the PromotionDescription, HowToClaimMessage and Terms and conditions --> <script> window.P.when("common_module", 'jQuery').execute(function (commonModule, $) { commonModule.createPopover($("[data-name=promotionTermsAndConditions]"), "promotionTermsAndConditionsPreload"); }); </script> <div class="hidden"> <div id="promotionHowToClaimTerms" class="inlineBlock textAlignStart"> <a data-name="promotionTermsAndConditions" href="javascript:void(0)" role="button" class="a-popover-trigger a-declarative"> <span class="a-size-base">Terms</span> <i class="a-icon a-icon-popover"></i></a> </div> </div> <div> <div class="a-popover-preload" id="a-popover-promotionTermsAndConditionsPreload"> <script> window.P.when("jQuery", "ready").execute(function ($) { $.ajax({ type: "GET", url: "/promotion/details/popup/A2OD29RWOSXA27", success: function (data) { $("#tncContent").html(data); }, error: function (e) { } }); }); </script> <div id="tncContent"> </div> </div> </div> <script> window.P.when("jQuery", "ready").execute(function ($) { $("#promotionHowToClaimMessage").find("li:last-child").append(" ").append($("#promotionHowToClaimTerms")); if ("false" == "true") { $("#terms").append($("#promotionHowToClaimTerms")) } }); </script> <style> .topClaimContainer { width: 100%; height: 90%; } .couponPosition { width:100%; position: relative; top: calc(5rem / 2); left: 50%; transform: translateX(-50%) translateY(-50%); } </style> <div id="topClaimContainer" class="textAlignCenter topClaimContainer" role="group" aria-label="Promotion Details"> <script> window.P.when("A", "jQuery", "common_module", "ready").register('how-to-claim-listeners' , function(A, $, commonModule) { A.on('a:expander:how_to_claim_expander:toggle:expand', function(data) { A.$("#howToClaimContent").removeClass("hidden"); let refTag = "psp_pc_htc_expand"; commonModule.setReftag(refTag); let time = new Date().getTime(); let metricsData = { "startTime" : time, "endTime" : time, "metricsName": refTag } commonModule.clientSideMetrics(metricsData); }); A.on('a:expander:how_to_claim_expander:toggle:collapse', function(data) { A.$("#howToClaimContent").addClass("hidden"); let refTag = "psp_pc_htc_collapse"; commonModule.setReftag(refTag); let time = new Date().getTime(); let metricsData = { "startTime" : time, "endTime" : time, "metricsName": refTag } commonModule.clientSideMetrics(metricsData); }); A.on("a:popover:afterShow:termsPopover", function(data){ let refTag = "psp_pc_terms_click"; commonModule.setReftag(refTag); let time = new Date().getTime(); let metricsData = { "startTime" : time, "endTime" : time, "metricsName": refTag } commonModule.clientSideMetrics(metricsData); }); A.on("a:popover:afterHide:termsPopover", function(data){ let refTag = "psp_pc_terms_dismiss"; commonModule.setReftag(refTag); let time = new Date().getTime(); let metricsData = { "startTime" : time, "endTime" : time, "metricsName": refTag } commonModule.clientSideMetrics(metricsData); }); A.on('a:sheet:afterShow:termsBottomSheet', function(event) { let refTag = "psp_pc_terms_click"; commonModule.setReftag(refTag); let time = new Date().getTime(); let metricsData = { "startTime" : time, "endTime" : time, "metricsName": refTag } commonModule.clientSideMetrics(metricsData); }); A.on('a:sheet:afterHide:termsBottomSheet', function(event) { let refTag = "psp_pc_terms_dismiss"; commonModule.setReftag(refTag); let time = new Date().getTime(); let metricsData = { "startTime" : time, "endTime" : time, "metricsName": refTag } commonModule.clientSideMetrics(metricsData); }); $.ajax({ type: "GET", url: "/promotion/tnc/A2OD29RWOSXA27", success: function (data) { $("#tnc-modal-preload-content").html(data.tncSectionContentMap.TNC_CONTENT); $("#tnc-sheet-preload-content").html(data.tncSectionContentMap.TNC_CONTENT); }, error: function (e) { } }); }); </script> <div style="padding: 8px;"> <span class="flexDisplay alignFlexStart"> <div class="inlineBlock textAlignEnd flexEquallyGrow" > <div id="how_to_claim_expander" data-a-expander-name="how_to_claim_expander" class="a-row a-expander-container a-expander-inline-container"> <a data-csa-c-func-deps="aui-da-a-expander-toggle" data-csa-c-type="widget" data-csa-interaction-events="click" aria-expanded="false" role="button" href="javascript:void(0)" data-action="a-expander-toggle" class="a-expander-header a-declarative a-expander-inline-header a-link-expander" data-a-expander-toggle="{&quot;allowLinkDefault&quot;:true, &quot;expand_prompt&quot;:&quot;&quot;, &quot;collapse_prompt&quot;:&quot;&quot;}"><i class="a-icon a-icon-expand"></i><span class="a-expander-prompt"> <span class="a-size-base"> How to claim </span> </span></a> <div aria-expanded="false" class="a-expander-content a-expander-inline-content a-expander-inner" style="display:none"></div> </div> </div> <div class="inlineBlock flexShrink"> <div class="a-box vertical-divider"><div class="a-box-inner"></div></div> </div> <div class="inlineBlock textAlignStart flexEquallyGrow" > <span class="a-declarative" data-action="a-modal" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-a-modal" data-a-modal="{&quot;name&quot;:&quot;termsPopover&quot;,&quot;width&quot;:&quot;500&quot;,&quot;padding&quot;:&quot;none&quot;,&quot;header&quot;:&quot;Promotion Terms&quot;}"> <a href="javascript:void(0)" role="button" class="a-popover-trigger a-declarative popover-trigger"> <span class="a-size-base"> See terms </span> <i class="a-icon a-icon-popover"></i></a> </span> </div> </span> <div id="howToClaimContent" class="a-section a-padding-base a-text-left hidden centered-container"> <ol> <li>Select the Apply Promotion button.</li> <li>Add 1 item from the products below to your Cart using the Add to Cart button or select See Options for specific product variations.</li> <li>When you're done shopping, select Go to Cart.</li> <li>The offer will automatically be applied at checkout, if eligible.</li> </ol> </div> </div> <div class="a-popover-preload" id="a-popover-termsPopover"> <div id="tnc-modal-preload-content" class="popover-container"> </div> </div> <div> <style> .margin0 { margin-top: 0; margin-bottom: 0; } </style> <div> <hr aria-hidden="true" class="a-divider-normal margin0 divider"/> </div> </div> <div class="relative textAlignCenter"> <div class="couponPosition"> <script> window.P.when("A", "common_module", "ready").execute(function (A, commonModule) { let $ = A.$; if (true) { $("#clipCouponBtnBox").removeClass("hidden").addClass("inlineBlock"); } else if (false) { $("#couponClippingConfirmationBox").removeClass("hidden").addClass("inlineBlock"); } $("#clipCouponBtn").click(function () { commonModule.setReftag("psp_pc_c_c") }); }); </script> <style> .couponClippingConfirmationBox { width: 100%; height: 100%; } .clipCouponBtnBox { width: 100%; } .clipCouponBtn { display: inline-block; vertical-align: middle; border: 1px solid transparent; border-radius: .25rem; transition: color .05s ease-in-out, background-color .05s ease-in-out, border-color .05s ease-in-out, box-shadow .05s ease-in-out; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .clipCouponBtn:hover { text-decoration: none; background: #1aad19 !important; } .clipCouponBtn:not(:disabled):not(.disabled):active { text-transform: none; background-color: #218838 !important; border-color: #1e7e34 !important; } .clipCouponBtn:not(:disabled):not(.disabled) { cursor: pointer; } </style> <div id="couponClippingContainer" class="textAlignCenter couponClippingContainer"> <div id="clipCouponBtnBox" class="hidden textAlignCenter clipCouponBtnBox"> <a id="clipCouponSignIn" href="javascript:void(0)" role="button" title="Apply promotion"> <button id="clipCouponBtn" class="backGroundGreen clipCouponBtn couponClippingButtonWidth a-button-base"> <span class="a-button-text">Apply promotion</span> </button> </a> </div> <div id="couponClippingConfirmationBox" class="hidden textAlignCenter couponClippingConfirmationBox" aria-label="Promotion will be included at checkout"> <div class="a-box a-alert-inline a-alert-inline-success" aria-live="polite" aria-atomic="true"><div class="a-box-inner a-alert-container"><i class="a-icon a-icon-alert"></i><div class="a-alert-content"> <span class="a-size-base a-text-bold">Promotion will be included at checkout </span> </div></div></div> </div> </div> </div> </div> </div> </div> <div id="topQualification_gridItem" class="topCouponAndQualification_gridItem textAlignCenter"> <!-- This jsp file is responsible for loading the OrderQualificationMessage --> <div class="inlineBlock textAlignCenter topCouponAndQualificationContainer"></div> </div> <div id="toolbar_gridItem" class="toolbar_gridItem"> <!-- This jsp file is responsible for loading the toolbar showing the ResultsFoundMessage, SearchBar and SortBy Feature --> <style> .toolbarGridContainer { width: 100%; height: 100%; display: grid; grid-auto-flow: row; grid-template-columns: 1fr minmax(1000px, 1500px) 1fr; grid-template-areas: "leftBlank toolbarContainer rightBlank"; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; border-radius: 0px; box-shadow: 0px 0px 10px 0px #ddd; background-color: #fff; position: relative; } .leftBlank { grid-area: leftBlank; } .rightBlank { grid-area: rightBlank; } .toolbarContainer { grid-area: toolbarContainer; display: flex; flex-flow: row wrap; justify-content: flex-start; align-items: center; } </style> <div id="toolbarGridContainer" class="toolbarGridContainer paddingTop6 paddingBottom6" role="group" aria-label="Tool bar"> <div id="leftBlank" class="leftBlank"></div> <div id="toolbarContainer" class="textAlignCenter paddingLeft6 paddingRight6 toolbarContainer"> <div> <span id="resultsFound" class="a-size-base marginLeft24"></span> </div> <div id="keywordSearch" class="marginLeftAuto inlineBlock"> <script> window.P.when("jQuery").execute(function ($) { if (false) { $("#keywordSearchInputText").css("padding-right", 12.0 + $("#keywordSearchBoxClear").outerWidth() + 5); $("#keywordSearchBoxClear").css("right", 7); $("#keywordSearchInputText").attr("enterkeyhint", "done"); } else { $("#keywordSearchBoxClear").css("right", 7); $("#keywordSearchInputText").css("padding-right", 12.0 + $("#keywordSearchBoxClear").outerWidth() + 5); $("#keywordSearchBtn").removeClass("hidden"); } }); window.P.when("queryParameterAjax_module", "common_module", "jQuery").register("keywordSearch_module", function (queryParameterAjaxModule, commonModule, $) { let keys = queryParameterAjaxModule.queryParameterKeys; return { init: function () { $("#keywordSearchInputText").val(queryParameterAjaxModule.getValue(keys.searchKeyword)); $("#keywordSearchInputText").click(function () { commonModule.setReftag("psp_pc_se_box"); }); }, keywordSearch: function () { $("#keywordSearchInputText").keyup(function (action) { if (action.which === 13) { $("#keywordSearchBtn").trigger('click'); } }); $("#keywordSearchBtn").click(function () { // queryParameterAjaxModule.update(keys.searchKeyword, $("#keywordSearchInputText").val()); queryParameterAjaxModule.filterOrSort(keys.searchKeyword, $("#keywordSearchInputText").val()); }); }, keywordSearchBoxClear: function () { $("#keywordSearchBoxClear").click(function () { $("#keywordSearchInputText").val(""); $("#keywordSearchBoxClear").addClass("invisible"); // queryParameterAjaxModule.update(keys.searchKeyword, $("#keywordSearchInputText").val()); queryParameterAjaxModule.filterOrSort(keys.searchKeyword, $("#keywordSearchInputText").val()); }); $("#keywordSearchInputText").bind("input propertychange", function () { if ($("#keywordSearchInputText").val().length > 0) { $("#keywordSearchBoxClear").removeClass("invisible"); } else { $("#keywordSearchBoxClear").addClass("invisible"); } }); } } }); window.P.when("A", "keywordSearch_module").execute(function (A, keywordSearchModule) { keywordSearchModule.init(); keywordSearchModule.keywordSearch(); keywordSearchModule.keywordSearchBoxClear(); }); </script> <style> .keywordSearchBoxFlex { display: inline-flex; justify-content: center; width: 100% !important; position: relative; } .keywordSearchBoxMagnifier { margin-top: 0px !important; position: absolute !important; top: 50% !important; transform: translateY(-50%) !important; left: 0.5em !important; z-index: 9 !important; } .keywordSearchBoxClear { position: absolute; top: 50%; transform: translateY(-50%); cursor: pointer; z-index: 15; } </style> <div id="keywordSearchBox" class="keywordSearchBoxFlex"> <div class="relative keywordSearchBox"> <i class="a-icon a-icon-search a-icon-medium keywordSearchBoxMagnifier" role="presentation"></i> <input type="text" id="keywordSearchInputText" placeholder="Search qualifying items" spellcheck="true" class="a-input-text inlineBlock keywordSearchInputText"/> <i id="keywordSearchBoxClear" class="a-icon a-icon-close a-icon-medium keywordSearchBoxClear invisible" role="presentation"></i> </div> <div class="inlineBlock marginLeft8"> <span id="keywordSearchBtn" class="a-button a-button-search hidden keywordSearchBtn"><span class="a-button-inner"><input title="Search promotion" class="a-button-input" type="submit" aria-labelledby="keywordSearchBtn-announce"/><span id="keywordSearchBtn-announce" class="a-button-text" aria-hidden="true">Search</span></span></span> </div> </div> </div> <div id="sorting"> <div id="sortByDropDown" class="marginLeft24 marginRight24"> <span class="a-dropdown-container"><label for="sortBy_dropdownSelect" class="a-native-dropdown">Sort by:</label><select name="" autocomplete="off" id="sortBy_dropdownSelect" tabindex="0" data-action="a-dropdown-select" class="a-native-dropdown a-declarative"> <option name="sortByOptions" autocomplete="off" value=1>Featured</option> <option name="sortByOptions" autocomplete="off" value=4>Avg. Customer Review</option> </select><span tabindex="-1" aria-hidden="true" class="a-button a-button-dropdown" aria-hidden="true"><span class="a-button-inner"><span class="a-button-text a-declarative" data-csa-c-func-deps="aui-da-a-dropdown-button" data-csa-c-type="widget" data-csa-interaction-events="click" data-action="a-dropdown-button" aria-hidden="true"><span class="a-dropdown-label">Sort by:</span><span class="a-dropdown-prompt"></span></span><i class="a-icon a-icon-dropdown"></i></span></span></span> </div> </div> </div> <div id="rightBlank" class="rightBlank"></div> </div> </div> <div id="toolbar_phone_gridItem" class="toolbar_phone_gridItem textAlignCenter"> <!-- This jsp file is responsible for loading the toolbar showing the ResultsFoundMessage, SearchBar and SortBy Feature --> </div> <div id="refinement_gridItem" class="refinement_gridItem textAlignStart"> <!-- This jsp file is responsible for loading the PSP Cart Preview, SubTotal and GoToCart Button --> <script> window.P.when("queryParameterAjax_module", "common_module", "jQuery").register("filter_module", function (queryParameterAjaxModule, commonModule, $) { let keys = queryParameterAjaxModule.queryParameterKeys; return { // When first load the page, initialize the refinement value and selected status init: function () { // Ignore: Category is rendered by ajax callback function let reviewStartOptions = $("#customerReview [data-name=reviewStartOptions]"); // Customer review needs to check queryParameter model for (let i in reviewStartOptions.length) { if (queryParameterAjaxModule.getValue(keys.avgCustomerReview) == $(reviewStartOptions[i]).attr("data-value")) { commonModule.focus($(reviewStartOptions), $(reviewStartOptions[i])); break; } } // Price Tiers need to check queryParameter model let priceTierOptions = $("#priceTier [data-name=priceTierOptions]"); for (let i in priceTierOptions.length) { if (i == $(priceTierOptions[i]).attr("data-value")) { commonModule.focus($(priceTierOptions), $(priceTierOptions[i])); break; } } // Best seller needs to check queryParameter model if (queryParameterAjaxModule.getValue(keys.bestSeller) == 1) { $("#bestSellerCheckbox").prop("checked", true); } // Sort by aria $("#sortByDropDown").find("[for=sortBy_dropdownSelect]").attr("aria-hidden", "true"); // $("#sortByDropDown").find("[for=sortBy_dropdownSelect]").attr("aria-label", "Sort by:" + $("#sortBy_dropdownSelect option:selected").text()); }, // bind select/click function onto refinement elements. onSelect: function () { // applicabilityIndex $("#viewList").delegate("[data-name=productSelectionViewRadioText]", 'click', function () { queryParameterAjaxModule.filterOrSort(keys.applicabilityIndex, $(this).attr("data-value")); commonModule.setReftag("psp_pc_pd_" + $(this).attr("data-value")); commonModule.gotoAnchor("#toolbarGridContainer"); }); $("#viewList").delegate("[data-name=productSelectionViewRadioBox]", 'click', function (event) { event.preventDefault(); queryParameterAjaxModule.filterOrSort(keys.applicabilityIndex, $(this).attr("data-value")); commonModule.setReftag("psp_pc_pd_"); commonModule.gotoAnchor("#toolbarGridContainer"); }); // Category: Binding clicking event on dynamic generated elements $("#department").delegate("[data-name=departmentListItemText]", 'click', function () { queryParameterAjaxModule.filterOrSort(keys.productCategory, $(this).attr("data-value")); commonModule.setReftag("psp_pc_re_" + $(this).attr("data-value")); commonModule.setProductCategory($(this).attr("data-value")); commonModule.gotoAnchor("#toolbarGridContainer"); }); // SubCategory $("#department").delegate("[data-name=departmentListSubCategoryItemText]", 'click', function () { queryParameterAjaxModule.filterOrSort(keys.subProductCategory, $(this).attr("data-value")); commonModule.setReftag("psp_pc_re_sc_"); commonModule.gotoAnchor("#toolbarGridContainer"); }); $("#productInfoListCarouselContainer").delegate("[data-name=carouselListItemText]", 'click', function () { queryParameterAjaxModule.filterOrSort(keys.productCategory, $(this).attr("data-value")); commonModule.setReftag("psp_pc_see_all_" + $(this).attr("data-value")); commonModule.resetProductCategory(); commonModule.gotoAnchor("#toolbarGridContainer"); }); // Customer review let reviewStartOptions = $("#customerReview [data-name=reviewStartOptions]"); $(reviewStartOptions).click(function () { queryParameterAjaxModule.filterOrSort(keys.avgCustomerReview, $(this).attr("data-value")); commonModule.focus($(reviewStartOptions), $(this)); commonModule.gotoAnchor("#toolbarGridContainer"); commonModule.setReftag("psp_pc_re_cr_" + $(this).attr("data-value")); if ($(this).attr("id") === "reviewStarOptionsClear") { $("#reviewStarOptionsClear").addClass("hidden"); } else { $("#reviewStarOptionsClear").removeClass("hidden"); } }); // Select Brands $("#brandList").delegate("[data-name=brandListItemCheckText]", 'click', function () { queryParameterAjaxModule.filterOrSort(keys.selectedBrands, $(this).attr("data-value")); commonModule.setReftag("psp_pc_re_sb_"); commonModule.gotoAnchor("#toolbarGridContainer"); }); $("#brandList").delegate("[data-name=brandListItemCheckBox]", 'click', function (event) { event.preventDefault(); queryParameterAjaxModule.filterOrSort(keys.selectedBrands, $(this).attr("data-value")); commonModule.setReftag("psp_pc_re_sb_"); commonModule.gotoAnchor("#toolbarGridContainer"); }); // Price Tier Given Ranges let priceTierClear = $("#priceTierClear"); priceTierClear.click(function () { { priceTierClear.addClass("hidden"); $("#priceTierList [data-name=priceTierOptions]").removeClass("hidden").removeClass("a-text-bold"); $("#priceTierList .inputCursorDisabled").removeClass("hidden"); queryParameterAjaxModule.filterOrSort2(keys.priceTierMin, "", keys.priceTierMax, ""); $("#minPriceInput").val(""); $("#maxPriceInput").val(""); } }); //Price Custom Range /* Check various validation cases and determine if we clear tiers or if we clear user input * 1. Check if min and max (separately) are valid, clear if not * 2. If both inputs are blank, we do not search/query or collapse tiers * 3. If both are numbers, but min > max or is min == max, we choose min to be the correct query and clear max * 4. Filter or sort with remaining input strings */ $("#priceRangeBtn").click(function() { let min = Number($("#minPriceInput").val()); let max = Number($("#maxPriceInput").val()); if (!(Number.isFinite(min) && min >= 0)) { $("#minPriceInput").val(""); } if (!(Number.isFinite(max) && max >= 0)) { $("#maxPriceInput").val(""); } if ((Number.isFinite(min) && min >= 0) && ((Number.isFinite(max) && max >= 0 && (min >= max)))) { $("#maxPriceInput").val(""); } queryParameterAjaxModule.filterOrSort2(keys.priceTierMin, $("#minPriceInput").val(), keys.priceTierMax, $("#maxPriceInput").val()); if (!($("#minPriceInput").val() == "" && $("#maxPriceInput").val() == "")) { commonModule.gotoAnchor("#toolbarGridContainer"); $("#priceTierList [data-name=priceTierOptions]").addClass("hidden").removeClass("a-text-bold"); $("#priceTierList .inputCursorDisabled").addClass("hidden"); priceTierClear.removeClass("hidden"); } else { priceTierClear.addClass("hidden"); } }); // Bestseller checkbox $("#bestSellerCheckbox").change(function () { if ($("#bestSellerCheckbox").prop("checked")) { queryParameterAjaxModule.filterOrSort(keys.bestSeller, 1); commonModule.setReftag("psp_pc_re_best"); } else { queryParameterAjaxModule.filterOrSort(keys.bestSeller, 0); } commonModule.gotoAnchor("#toolbarGridContainer"); }); // SortBy $("#sortBy_dropdownSelect").change(function () { queryParameterAjaxModule.filterOrSort(keys.sortBy, $("#sortBy_dropdownSelect").val()); commonModule.setReftag("psp_pc_so_" + $("#sortBy_dropdownSelect").val()); // $("#sortByDropDown").find("[for=sortBy_dropdownSelect]").attr("aria-label", "Sort by:" + $("#sortBy_dropdownSelect option:selected").text()); }); }, }; }); window.P.when("filter_module", "queryParameterAjax_module", "ready").execute(function (filterModule) { filterModule.init(); filterModule.onSelect(); }); </script> <div id="refinementFlexContainer" class="paddingRight4 marginLeft4 paddingLeft8 paddingTop16 paddingBottom16 refinementFlexContainer" role="group" aria-label="Filters"> <div class="refinementDivider"> <div id="view" class="hidden"> <div name="viewTitle" class="paddingBottom6"> <span id="viewTitle" class="a-size-base a-text-bold">View</span> </div> <div name="viewList"> <ul class="a-unordered-list a-nostyle a-vertical"> <div id="viewList" class="paddingLeft10"> <li><span class="a-list-item"> <a class="a-size-base a-color-base a-link-normal textCursorPointer displayFlex a-text-normal" href="javascript:void(0)"> <div data-a-input-name="qualifyingItemsRadio" data-name="productSelectionViewRadioBox" data-value="0" class="a-radio a-radio-fancy floatLeftOnly"><label><input type="radio" name="qualifyingItemsRadio" value=""/><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"></span></label></div> <span data-name="productSelectionViewRadioText" data-value="0" class="a-size-base a-color-base">Qualifying Items</span> </a> </span></li> <li><span class="a-list-item"> <a class="a-size-base a-color-base a-link-normal textCursorPointer displayFlex a-text-normal" href="javascript:void(0)"> <div data-a-input-name="benefitItemsRadio" data-name="productSelectionViewRadioBox" data-value="1" class="a-radio a-radio-fancy floatLeftOnly"><label><input type="radio" name="benefitItemsRadio" value=""/><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label"></span></label></div> <span data-name="productSelectionViewRadioText" data-value="1" class="a-size-base a-color-base">Benefit Items</span> </a> </span></li> </div> </ul> </div> </div> <div id="department"> <div name="departmentTitle" class="paddingBottom6"> <span id="departmentTitle" class="a-size-base a-text-bold">Department</span> </div> <div name="departmentList"> <ul class="a-unordered-list a-nostyle a-vertical"> <li><span class="a-list-item"> <a id="anyDepartment" data-name="departmentListItemText" data-value="" class="a-size-base a-color-base a-link-normal textCursorPointer hidden a-text-normal" href="javascript:void(0)"> <span class="s-back-arrow s-inline-block"></span> Any Department </a> </span></li> <div id="departmentList" class="paddingLeft10"></div> <span id="departmentListItemTemplate" hidden> <li><span class="a-list-item"> <a data-name="departmentListItemText" data-value="" class="a-size-base a-color-base a-link-normal textCursorPointer a-text-normal" href="javascript:void(0)"></a> </span></li> </span> <span id="departmentSubCategoryListTemplate" hidden> <ul class="a-unordered-list a-nostyle a-vertical"> </ul> </span> <span id="departmentSubCategoryItemTemplate" hidden> <li><span class="a-list-item"> <a data-name="departmentListSubCategoryItemText" data-value="" class="a-size-base a-color-base a-link-normal textCursorPointer a-text-normal" href="javascript:void(0)"></a> </span></li> </span> <span id="itemExpanderTemplate" hidden> <div data-a-expander-name="seeMoreItemExpander" class="a-row a-expander-container a-expander-extend-container"> <div aria-expanded="false" class="a-expander-content a-expander-extend-content" style="display:none"> </div> <div class="a-row"> <a data-csa-c-func-deps="aui-da-a-expander-toggle" data-csa-c-type="widget" data-csa-interaction-events="click" aria-expanded="false" role="button" href="javascript:void(0)" data-action="a-expander-toggle" class="a-expander-header a-declarative a-expander-extend-header" data-a-expander-toggle="{&quot;allowLinkDefault&quot;:true, &quot;expand_prompt&quot;:&quot;See more&quot;, &quot;collapse_prompt&quot;:&quot;See less&quot;}"><i class="a-icon a-icon-extender-expand"></i><span class="a-expander-prompt">See more</span></a> </div> </div> </span> </ul> </div> </div> <div id="customerReview" class="paddingTop16"> <div class="paddingBottom6"> <span id="avgCustomerReviewTitle" aria-label="Average Customer Review" class="a-size-base a-text-bold"> Avg. Customer Review </span> </div> <div class="paddingLeft6"> <div class="textCursorPointer"> <a id="reviewStarOptionsClear" data-name="reviewStartOptions" data-value="0" aria-label="Clear" class="a-size-base a-color-base a-link-normal hidden textCursorPointer a-text-normal" href="javascript:void(0)" role="button"> <span class="s-back-arrow s-inline-block"></span> Clear </a> </div> <ul class="a-unordered-list a-nostyle a-vertical"> <li><span class="a-list-item"> <a id="reviewStartOptions4Starts" data-name="reviewStartOptions" data-value="4" aria-label="4 Stars &amp; Up" class="a-size-base a-color-base a-link-normal textCursorPointer a-text-normal" href="javascript:void(0)"> <i class="a-icon a-icon-star-medium a-star-medium-4 pspStar"></i> & Up </a> </span></li> <li><span class="a-list-item"> <a id="reviewStartOptions3Starts" data-name="reviewStartOptions" data-value="3" aria-label="3 Stars &amp; Up" class="a-size-base a-color-base a-link-normal textCursorPointer a-text-normal" href="javascript:void(0)"> <i aria-label="3 Stars &amp; Up" class="a-icon a-icon-star-medium a-star-medium-3 pspStar"></i> & Up </a> </span></li> <li><span class="a-list-item"> <a id="reviewStartOptions2Starts" data-name="reviewStartOptions" data-value="2" aria-label="2 Stars &amp; Up" class="a-size-base a-color-base a-link-normal textCursorPointer a-text-normal" href="javascript:void(0)"> <i aria-label="2 Stars &amp; Up" class="a-icon a-icon-star-medium a-star-medium-2 pspStar"></i> & Up </a> </span></li> <li><span class="a-list-item"> <a id="reviewStartOptions1Starts" data-name="reviewStartOptions" data-value="1" aria-label="1 Stars &amp; Up" class="a-size-base a-color-base a-link-normal textCursorPointer a-text-normal" href="javascript:void(0)"> <i aria-label="1 Stars &amp; Up" class="a-icon a-icon-star-medium a-star-medium-1 pspStar"></i> & Up </a> </span></li> </ul> </div> </div> <div id="brands" class="paddingTop16 hidden"> <div name="brandTitle" class="paddingBottom6"> <span id="brandsTitle" class="a-size-base a-text-bold">Brands</span> </div> <div name="brandList"> <ul class="a-unordered-list a-nostyle a-vertical"> <div id="brandList" class="paddingLeft16"></div> <span id="brandListItemTemplate" hidden> <li><span class="a-list-item"> <a class="a-size-base a-color-base a-link-normal textCursorPointer a-text-normal" href="javascript:void(0)"> <div data-a-input-name="brandsCheckbox" data-name="brandListItemCheckBox" data-value="" class="a-checkbox a-checkbox-fancy dispInlineBlock"><label><input type="checkbox" name="brandsCheckbox" value=""/><i class="a-icon a-icon-checkbox"></i><span class="a-label a-checkbox-label"></span></label></div> <span data-name="brandListItemCheckText" data-value="" class="a-size-base a-color-base"></span> </a> </span></li> </span> </ul> </div> </div> <div id="priceTier" class="paddingTop16 hidden"> <div name="priceTierTitle" class="paddingBottom6"> <span id="priceTierTitle" aria-label="Price" class="a-size-base a-text-bold">Price</span> </div> <div class="paddingLeft6"> <ul class="a-unordered-list a-nostyle a-vertical"> <li><span class="a-list-item"> <a id="priceTierClear" data-name="priceTierOptions" data-value="" aria-label="Any Price" class="a-size-base a-color-base a-link-normal textCursorPointer hidden a-text-normal" href="javascript:void(0)" role="button"> <span class="s-back-arrow s-inline-block"></span> Any Price </a> </span></li> <div id="priceTierList"></div> <span id="priceTierListItemTemplate" hidden> <li><span class="a-list-item"> <a data-name="priceTierOptions" class="a-link-normal textCursorPointer hidden" href="javascript:void(0)"> <span data-name="priceTierOptionsText" class="a-size-base a-color-base"> </span> </a> </span></li> </span> <li id="priceRange" class="a-spacing-micro"><span class="a-list-item"> <span class="a-color-base s-ref-small-padding-left s-ref-price-currency">$</span> <input type="text" maxlength="9" id="minPriceInput" placeholder="Min" class="a-input-text a-width-small a-spacing-top-mini s-ref-price-range s-ref-price-padding"/> <span class="a-color-base s-ref-small-padding-left s-ref-price-currency">$</span> <input type="text" maxlength="9" id="maxPriceInput" placeholder="Max" class="a-input-text a-width-small a-spacing-top-mini s-ref-price-range s-ref-price-padding"/> <span id="priceRangeBtn" class="a-button a-spacing-top-mini a-button-base s-small-margin"><span class="a-button-inner"><input class="a-button-input" type="submit" aria-labelledby="priceRangeBtn-announce"/><span id="priceRangeBtn-announce" class="a-button-text" aria-hidden="true">Go</span></span></span> </span></li> </ul> </div> </div> <div id="bestseller" hidden class="paddingTop16 a-spacing-small"> <div class="paddingBottom6"><span id="bestSellerTitle" class="a-size-base a-text-bold">Best Seller</span></div> <div class="a-checkbox a-checkbox-fancy"><label for="bestSellerCheckbox"><input id="bestSellerCheckbox" type="checkbox" name="" value=""/><i class="a-icon a-icon-checkbox"></i><span class="a-label a-checkbox-label"> <span class="a-size-base textCursorPointer">Best Sellers</span> </span></label></div> </div> </div> </div> </div> <div id="refinement_phone_gridItem" class="refinement_phone_gridItem refinement_phone_gridItem_top5 stickyRefinement"> <!-- This jsp file is responsible for loading the PSP refinement Department, Sort By --> </div> <div id="productInfoList_gridItem" class="productInfoList_gridItem"> <!-- This jsp file is responsible for loading the ProductInfoList --> <script> window.P.when('cart_module', 'common_module', 'jQuery').register("productInfoList_module", function (cartModule, commonModule, $) { return { bindAddToCartBtn: function () { $("#productInfoList").delegate("[data-name=addToCartBtn]", 'click', function () { // $(this).data will retrieve data in cache, not current data. $(this).attr retrieve current data. let addToCartRequest = JSON.parse($(this).attr("data-json")); // Showing the spinner let commonDiv = $(this).parent().parent().parent(); commonDiv.addClass("hidden"); commonDiv.prev().removeClass("hidden"); commonDiv.prev().attr("id","newSpinnerEffect"); commonDiv.attr("id","clickedAddToCartButton"); if(false) { if($(this).attr("maxOrderQtyReached") !== 'Y'){ cartModule.addCartItem(addToCartRequest["asin"], addToCartRequest["offerListingId"], addToCartRequest["quantity"],addToCartRequest["price"],addToCartRequest["canonicalAsin"], addToCartRequest["merchantId"],addToCartRequest["minimumOrderQuantity"]); commonDiv.prev().addClass("hidden"); commonDiv.removeClass("hidden"); commonModule.setReftag("psp_pc_atc"); }else{ $(this).parent().parent().addClass('backGroundTransparent'); $(this).removeClass('inputCursorDisabled'); } }else { cartModule.addCartItem(addToCartRequest["asin"], addToCartRequest["offerListingId"], addToCartRequest["quantity"],addToCartRequest["price"],addToCartRequest["canonicalAsin"], addToCartRequest["merchantId"],addToCartRequest["minimumOrderQuantity"]); commonModule.setReftag("psp_pc_atc"); } }); }, } }); // bind the click effect window.P.when('jQuery').register("atcVariation_module", function ($) { return { bindVariationalAddToCartBtn: function () { $("#productInfoList").delegate("[name=addVariationalASINToCartBtn]", 'click', function () { $(this).addClass("a-button-focus"); }) } } }); window.P.when("productInfoList_module", "atcVariation_module", 'ready').execute(function (productInfoListModule, atcVariationModule) { productInfoListModule.bindAddToCartBtn(); atcVariationModule.bindVariationalAddToCartBtn(); }); </script> <style> .productInfoListContainer { width: 100%; height: 100% } .productInfoListFlex { display: flex; flex-flow: row wrap; justify-content: flex-start; align-items: flex-start; align-content: flex-start; list-style: none !important; margin: 0 !important; } .alignItemsStretch { align-items: stretch; } [data-a-badge-color="bestSeller"] { background-color: #E67A00 !important; /* Color RGB copied from Search Page */ color: #E67A00 !important; } [data-a-badge-type="status"] .a-badge-label { max-width: 160px !important; } .productVariationData { overflow: hidden; text-overflow: ellipsis; display: inline-block; } .productImageBox { width: 100%; height: 100%; padding-top: 100%; position: relative; } .flexGrow0 { flex: 0; } .productTitleBox { width: 100%; } .addToCartBtnBox { margin-top: 6px; text-align: center; } .smallLine { color:rgb(136,136,136); font-family: arial, helvetica, sans-serif; font-size: 11px; } .smallLineDiscount { color:rgb(0,136,0); font-family: arial, helvetica, sans-serif; font-size: 11px; } .desktopDropdown { height: 85%; margin-left: 0.5vw; max-width: 15vw; } .mobileDropdown { height: 9vmin; margin-left: 1vw; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 30vmin; } .outlineNone { outline: none !important; } .tabletDropdown { height: 85%; margin-left: 0.5vw; max-width: 15vmin; } span.lineHeight1 > span > span.a-button-text{ line-height: 0.5; } .displayFlex { display: flex; } .flexDirectionCol { flex-direction: column; } .productInnerGrid .freeSpace { flex: 1 0 auto; } .marginInherit { margin: inherit; } .viewItemBtnBox, .selectItemBtnBox { margin-top: 6px; text-align: center; } .displayNone { display: none; } .flexShrink0 { flex-shrink: 0; } .heightAuto { height: auto !important; } .attributesMargin { margin-top: 10px; } .selectorMargin { margin-top: 10px; } .limitedTimeDealSpacing { margin-top: 10px !important; } .lightningDealPercentMargin { margin-top: 3px; } .productAvailabilityBox { margin-top: 10px; } .productDeliveryBox { margin-top: 5px; } .variationItem { margin-top: 3px !important; } .productVariationDataColorSelectorDotDiv { border-radius: 11.5px; height: 23px; width: 23px; background-color: #FFFFFF; border: 1px solid #FFFFFF; float: left; margin-right: 4px; position: relative; } .ColorSelectorColorDotInnerFill { border-radius: 8.5px; height: 17px; width: 17px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; float: left; flex-direction: column-reverse; flex-wrap: wrap; display: flex; } .ColorSelectorColorDotInnerCircleBoarder { border-radius: 8.5px; height: 17px; width: 17px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; float: left; border: 1px solid rgba(0, 0, 0, 0.2); } .listNonDecrot { margin: 0px; list-style-type: none; float:left; padding-top:5px; padding-bottom: 5px; } .listNonDecrotNonDesktop { margin: 0px; list-style-type: none; float:left; padding-top:5px; padding-bottom: 5px; } .listNonDecrot div { cursor: pointer; padding-left:14px; padding-right:14px; } .listNonDecrotNonDesktop li { border-bottom: 0.1rem solid #D5D9D9; border-left-width: 0.4rem; padding: 1.6rem; min-height: 5rem; min-width: 20rem; } .colorDotInPopover { margin-right: 10px; margin-top:1px; } .colorDotInPopoverNonDesktop { margin-right: 0.5rem; margin-top:1px; } .colorDotSelected { border-color: #111 !important; } .colorDotMouseover { border-color: #767676; } .seeMoreColors { padding-top: 2px; max-width: 100px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .seeMoreColorsMobile { padding-top: 2px; display:inline-block; } .seeMoreColorsControl { overflow-x: hidden; white-space: nowrap; text-overflow: ellipsis; display:inline-block; } .popoverDropdownLi { border: 1px solid rgba(255,255,255,.5);; } .popoverDropdownActiveLi { border-color: #007185 !important; background-color: #EDFDFF; } .popoverDropdownLiMouseover { background-color: rgba(118, 118, 118, 0.2); } .floatLeft { float: left; } .marginForSizeLabel { margin-left: 5px; } .paddingLeftMini { padding-left: 4px; } </style> <div class="paddingTop16 productInfoListContainer" aria-label="Items in this promotion"> <ul id="productInfoList" class="a-unordered-list a-nostyle a-vertical productInfoListFlex alignItemsStretch a-size-base"></ul> <div id="errorMessage" class="marginBottom16"> <div id="errorMessageWithoutSelection" class="hidden"> <div class="textAlignCenter marginTop16"><span class="a-size-medium-plus">Something went wrong and this promotion isn’t currently shoppable.</span></div> <div class="textAlignCenter marginTop16"><span class="a-size-medium-plus">Start saving now with <a id="todaysDeal">Today’s Deals</a> and <a id="amazonCoupon">Amazon Coupons</a></span></div> </div> <div id="errorMessageWithSelection" class="hidden"> <div class="textAlignCenter marginTop16"><span class="a-size-medium-plus">Something went wrong and this selection isn’t currently shoppable.</span></div> <div class="textAlignCenter marginTop16"><span class="a-size-medium-plus"><a id="resetSelection">Shop items</a> in other departments.</span></div> </div> <div id="errorMessageWithSuppressedProducts" class="hidden"> <div class="textAlignCenter marginTop16"><span class="a-size-medium-plus">We're sorry this promotion page is unavailable</span></div> <div class="textAlignCenter marginTop16"><span class="a-size-medium-plus">Start saving now with <a id="todaysDeal">Today’s Deals</a> and <a id="amazonCoupon">Amazon Coupons</a></span></div> </div> </div> </div> <div id="productGridTemplate" class="hidden"> <li name="productGrid" class="productGrid displayFlex" role="group" data-asin="" data-merchant=""> <div name="productInnerGrid" class="productInnerGrid faceout_border alignCenter textAlignStart displayFlex flexDirectionCol"> <div name="hiddenProperty"> <span name="sortId" type="hidden"/> </div> <div name="bestSellerBadgeBox" class="invisible bestSellerBadgeBox" title="Best Sellers" aria-label="Best Sellers" role="text"> <span class="a-badge" data-a-badge-type="status"><span class="a-badge-label" data-a-badge-color="bestSeller"><span class="a-badge-label-inner a-text-ellipsis"> <span class="a-badge-text" data-a-badge-color="white">Best Sellers</span> </span></span></span> </div> <div name="productImageBox" class="textAlignCenter productImageBox flexGrow0"> <a data-name="productImageUrl" class="a-link-normal" target="_blank" rel="noopener" href="#"> <img name="productImage" class="imageSquare" onerror="this.src='https://images-na.ssl-images-amazon.com/images/G/01/error/1._TTD_.jpg';this.onerror=null"/> </a> </div> <div name="productTitleBox" class="productTitleBox"> <div lang="en" class="productTitle"><a data-name="productTitle" class="a-size-base-plus a-color-base a-link-normal clamp2 a-text-normal" target="_blank" rel="noopener" href="#"></a></div> <div class="brandName"><span data-name="productByLineInfoV2" class="a-size-base a-color-secondary clamp1"></span></div> </div> <div name="productCustomerReviewBox" class="customerReview"> <span> <i name="productReviewStars" class='a-icon a-icon-star-small a-spacing-none preserveWhiteSpace pspStar'> <span class="a-icon-alt"> <span name="productReviewRating"></span> </span> </i> </span> <span><span name="productReviewCount">0</span></span> </div> <div name="productPriceBox" class="productPriceBox invisible"> <span name="productPriceToPay" aria-label="" role="text"> <span class="a-price" data-a-size="l" data-a-color="base"> <span> <span name="symbolFirst" class="hidden"><span class="a-price-symbol preserveWhiteSpace"> </span><span class="a-price-whole"><span class="a-price-decimal"></span></span><span class="a-price-fraction"></span></span> <span name="symbolLast" class="hidden"><span class="a-price-whole"><span class="a-price-decimal"></span></span><span class="a-price-fraction"></span><span class="a-price-symbol preserveWhiteSpace"> </span></span> </span> </span> </span> <span name="pricePerUnit" class="a-price a-text-price" aria-label="" data-a-size="mini" role="text"></span> <span name="basicPrice" class="a-price a-text-price a-text-strike" aria-label="" data-a-size="mini" role="text"></span> <span name="bottlingDepositFee" class="a-price a-text-price a-color-secondary inlineBlock paddingLeftMini" aria-label="" data-a-size="mini" role="text"></span> <br/> </div> <div class="height6 flexShrink0 displayNone" name="variableSpacing"></div> <span name="omnibusContainer" class="hidden"> <span name="omnibusPrice" class="a-price a-text-price a-color-secondary" aria-label="" data-a-size="mini" role="text"></span> <span class="a-declarative" data-action="a-popover" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-a-popover" data-a-popover="{}" id="omnibusPopoverAction"> <a id="omnibusPopover" class="a-link-normal hidden" href="#"> <svg aria-hidden="true" style="width: 11px; fill: #969696;" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <path d="M256,9C119,9,8,120.08,8,257S119,505,256,505,504,394,504,257,393,9,256,9Zm0,76.31A47.69,47.69,0,1,1,208.31,133,47.69,47.69,0,0,1,256,85.31Zm38.15,332.38a12.18,12.18,0,0,1-12.21,12H229.67a11.85,11.85,0,0,1-11.82-12V249.92a11.86,11.86,0,0,1,11.82-12h52.27a12.18,12.18,0,0,1,12.21,12Z"></path> </svg> </a> </span> </span> <div name="productSNSPromotionMessageBox" class="paddingTop4 hidden smallLine"> <span data-name="snsPromotionMessage"></span> </div> <div name="productVariationDataForPlainAsin" class="productAttributesList hidden" aria-label="variational information of the product"> <span data-name="productVariationDataForPlainAsin" class="a-size-base productVariationData"></span> </div> <div name="productVariationData" class="hidden heightAuto paddingTop4"> <div name="productVariationDataColorSelector" class="hidden heightAuto flexDisplay"> <div id="productVariationDataColorSelectorDotList"> <span id="ColorSelectorColorDotDivTemplate" class="hidden"> <div class="productVariationDataColorSelectorDotDiv" data-color-index="0"> <span name="ColorSelectorColorDotInnerFill" class="ColorSelectorColorDotInnerFill"> <span class="a-declarative" data-action="a-tooltip" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-a-tooltip" data-a-tooltip="{}"> <a href="javascript:void(0)" role="button" class="a-popover-trigger a-declarative outlineNone"> <span class="ColorSelectorColorDotInnerCircleBoarder"></span> <i class="a-icon a-icon-popover"></i></a> </span> </span> </div> </span> </div> <div name="seeMoreColors" class="hidden seeMoreColors marginLeft4"> <span class="a-declarative" data-action="a-popover" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-a-popover" data-a-popover="{}"> <a href="javascript:void(0)" role="button" class="a-popover-trigger a-declarative"> placeHolder <i class="a-icon a-icon-popover"></i></a> </span> </div> </div> <div name="productVariationDataSizeSelector" class="hidden flexDisplay heightAuto paddingTop12"> <span class="a-size-base a-text-bold">Size:</span> <span class="a-dropdown-container"><select name="productVariationDataDropDown" autocomplete="off" tabindex="0" data-action="a-dropdown-select" class="a-native-dropdown a-declarative"><option class="a-prompt" value="">Choose</option></select><span tabindex="-1" aria-label="dropdown of variation selector" data-a-class="desktopDropdown" class="a-button a-button-dropdown desktopDropdown" aria-hidden="true"><span class="a-button-inner"><span class="a-button-text a-declarative" data-csa-c-func-deps="aui-da-a-dropdown-button" data-csa-c-type="widget" data-csa-interaction-events="click" data-action="a-dropdown-button" aria-hidden="true"><span class="a-dropdown-prompt">Choose</span></span><i class="a-icon a-icon-dropdown"></i></span></span></span> <span class="a-size-base hidden flexDisplay marginForSizeLabel"></span> </div> </div> <div class="hidden paddingTop4" name="limitedTimeDeal"> <span class="a-badge" data-a-badge-type="deal"><span class="a-badge-label" data-a-badge-color="psp_lightning_deal_red"><span class="a-badge-label-inner a-text-ellipsis"> <span class="a-badge-text" data-a-badge-color="psp_cloud">Limited time deal</span> </span></span></span> </div> <div class="lightningDealPercentMargin hidden" name="ldBarPercentSection"> <div class="claimedBar-module-bar"> <div class="claimedBar-module-filledBar" name="ldFilledBar"></div> </div> <div class="marginTop4 claimedBar-module-timerAndPercent"> <span data-name="percentClaimed" class="a-size-mini"></span> <span data-name="endsInTime" class="a-size-mini a-color-success">Ends in <span name="dealTimeLeft"></span></span> </div> </div> <div class="freeSpace"></div> <div name="productAvailabilityBox" class="invisible productAvailabilityBox"> <span data-name="availabilityMessage" class="a-size-small a-color-price"></span> </div> <div name="productDeliveryBox" class="invisible productDeliveryBox"> <span name="deliveryBadge" class="invisible"></span> <span data-name="deliveryMessage" class="a-size-small invisible"></span> </div> <div name="chooseSizePromptBox" class="textAlignCenter alignCenter invisible sizePromptMargin"> <span class="a-size-small">To buy, choose a <strong class><b>Size</b></strong></span> </div> <div class="paddingTop8 hidden" name="dealClaimedMessageSection"> <span class="a-color-success">The deal is in your cart.</span> </div> <div name="viewItemBtnBox" class="hidden viewItemBtnBox"> <a href="" name="viewItemBtn" role="button" title="View Item" target="_blank"><span class="a-button a-button-base addToCartBtn inlineBlock"><span class="a-button-inner"><input class="a-button-input" type="submit"/><span class="a-button-text" aria-hidden="true">View Item</span></span></span></a> </div> <div name="selectBtnBox" class="hidden selectItemBtnBox"> <a href="" name="selectBtn" role="button" title="Select" target="_blank"><span class="a-button a-button-primary addToCartBtn inlineBlock"><span class="a-button-inner"><input class="a-button-input" type="submit"/><span class="a-button-text" aria-hidden="true">Select</span></span></span></a> </div> <div name="addToCartBtnBox" class="addToCartBtnBox textAlignCenter"> <div id="addToCartSpinner" class="a-spinner-wrapper hidden"><span class="a-spinner a-spinner-medium"></span></div> <span name="addToCartBtn" class="hidden" role="button" title="Add to Cart"><span class="a-button a-button-primary addToCartBtn inlineBlock"><span class="a-button-inner"><input data-json="" data-name="addToCartBtn" class="a-button-input" type="submit"/><span class="a-button-text" aria-hidden="true">Add to Cart</span></span></span></span> <span class="a-declarative" data-action="a-popover" data-csa-c-type="widget" data-csa-c-func-deps="aui-da-a-popover" data-a-popover="{&quot;name&quot;:&quot;atcPopOver&quot;,&quot;closeButton&quot;:false,&quot;position&quot;:&quot;triggerHorizontal&quot;}"> <span name="addVariationalASINToCartBtn" class="hidden" role="button" title="Add to Cart" aria-label="To buy, choose a Size in the dropdown"><span class="a-button a-button-primary addToCartBtn inlineBlock"><span class="a-button-inner"><input data-json="" data-name="addVariationalASINToCartBtn" class="a-button-input" type="submit"/><span class="a-button-text" aria-hidden="true">Add to Cart</span></span></span></span> </span> <div class="a-popover-preload" id="a-popover-atcPopOver"> <span>Choose a <strong class><b>Size</b></strong> from above <br> to add to Shopping Cart</span> </div> <a href="" name="seeOptionsBtn" class="hidden" role="button" title="See Options"><span class="a-button a-button-base addToCartBtn inlineBlock"><span class="a-button-inner"><input class="a-button-input" type="submit"/><span class="a-button-text" aria-hidden="true">See Options</span></span></span></a> </div> </div> </li> </div> </div> <div id="showMore_gridItem" class="showMore_gridItem textAlignCenter"> <!-- This jsp file is responsible for loading the showMore button --> <script> window.P.when("queryParameterAjax_module", "common_module", 'jQuery').register("showMore_module", function (queryParameterAjaxModule, commonModule, $) { let keys = queryParameterAjaxModule.queryParameterKeys; return { showMore: function () { $("#showMore").click(function () { let tempProductInfoList = queryParameterAjaxModule.cachedPromotionShoppingPageResponse["viewModels"]["PRODUCT_INFO_LIST"]; if (commonModule.isNotEmpty(tempProductInfoList) && tempProductInfoList.length > 0) { queryParameterAjaxModule.showMore(keys.sortId, tempProductInfoList[tempProductInfoList.length - 1]["sortId"]); commonModule.setReftag("_see_more") } else { $("#showMoreBtnContainer").addClass("hidden"); } }); }, } }); window.P.when("showMore_module", 'ready').execute(function (showMore_module) { showMore_module.showMore(); }); </script> <div id="showMoreBtnContainer" class="hidden paddingTop32 paddingBottom32 textAlignCenter"> <span id="showMore" class="a-button a-button-base showMoreBtn inlineBlock"><span class="a-button-inner"><input title="Show More" aria-label="Show More" class="a-button-input" type="submit"/><span id="showMore-announce" class="a-button-text" aria-hidden="true">Show More</span></span></span> </div> </div> <div id="promo-shopping-page-bottom-1" class="promo-shopping-page-bottom-1"> </div> <div id="warning_gridItem" class="warning_gridItem textAlignCenter"> <!-- This jsp file is responsible for showing the warning messages --> </div> <div id="deals_gridItem" class="deals_gridItem textAlignCenter"> <!-- This jsp file is responsible for showing the deals link --> </div> <div id="signIn_gridItem" class="signIn_gridItem textAlignCenter"> <!-- This jsp file is responsible for loading the SignIn link --> </div> <div id="primeExclusive_gridItem" class="primeExclusive_gridItem textAlignCenter"> <!-- This jsp file is responsible for showing prime sign in/sign up when the promotion is prime exclusive --> </div> </div> </div> </div></body> </html> <!--&&&Portal&Delimiter&&&--><!-- sp:end-feature:host-atf --> <!-- sp:feature:nav-btf --> <!-- NAVYAAN BTF START --> <script type="text/javascript"> window.$Nav && $Nav.when("data").run(function (data) { data({ "accountListContent": { "html": "<div id='nav-al-container'><div id='nav-al-signin'><div id='nav-flyout-ya-signin' class='nav-flyout-content nav-flyout-accessibility'><a href='https://www.amazon.com/ap/signin?openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fpromotion%2Fpsp%2FA2OD29RWOSXA27%2F%3F_encoding%3DUTF8%26redirectAsin%3DB0BBG2SH1B%26redirectMerchantId%3DA1UPHU2B8LTG19%26ref%3Dpsp_external%26source%3Ddp_cxcw%26ref_%3Dnav_signin&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.assoc_handle=usflex&openid.mode=checkid_setup&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0' rel='nofollow' class='nav-action-signin-button' data-nav-role='signin' data-nav-ref='nav_signin'><span class='nav-action-inner'>Sign in</span></a><div id='nav-flyout-ya-newCust' class='nav_pop_new_cust nav-flyout-content nav-flyout-accessibility'>New customer? <a href='https://www.amazon.com/ap/register?openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fpromotion%2Fpsp%2FA2OD29RWOSXA27%2F%3F_encoding%3DUTF8%26redirectAsin%3DB0BBG2SH1B%26redirectMerchantId%3DA1UPHU2B8LTG19%26ref%3Dpsp_external%26source%3Ddp_cxcw%26ref_%3Dnav_newcust&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.assoc_handle=usflex&openid.mode=checkid_setup&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0' rel='nofollow' class='nav-a' aria-label='New to Amazon? Start here to create an account'>Start here.</a></div></div></div><div id='nav-al-wishlist' class='nav-al-column nav-tpl-itemList nav-flyout-content nav-flyout-accessibility'><div class='nav-title' id='nav-al-title' role='heading' aria-level='6'>Your Lists</div><a href='/hz/wishlist/ls?triggerElementID=createList&ref_=nav_ListFlyout_navFlyout_createList_lv_redirect' class='nav-link nav-item'><span class='nav-text'>Create a List</span></a> <a href='/registries?ref_=nav_ListFlyout_find' class='nav-link nav-item'><span class='nav-text'>Find a List or Registry</span></a></div><div id='nav-al-your-account' class='nav-al-column nav-template nav-flyout-content nav-tpl-itemList nav-flyout-accessibility'><div class='nav-title' role='heading' aria-level='6'>Your Account</div><a href='/gp/css/homepage.html?ref_=nav_AccountFlyout_ya' class='nav-link nav-item'><span class='nav-text'>Account</span></a> <a id='nav_prefetch_yourorders' href='/gp/css/order-history?ref_=nav_AccountFlyout_orders' class='nav-link nav-item'><span class='nav-text'>Orders</span></a> <a href='/gp/yourstore?ref_=nav_AccountFlyout_recs' class='nav-link nav-item'><span class='nav-text'>Recommendations</span></a> <a href='/gp/history?ref_=nav_AccountFlyout_browsinghistory' class='nav-link nav-item'><span class='nav-text'>Browsing History</span></a> <a href='/gp/video/watchlist?ref_=nav_AccountFlyout_ywl' class='nav-link nav-item'><span class='nav-text'>Watchlist</span></a> <a href='/gp/video/library?ref_=nav_AccountFlyout_yvl' class='nav-link nav-item'><span class='nav-text'>Video Purchases & Rentals</span></a> <a href='/gp/kindle/ku/ku_central?ref_=nav_AccountFlyout_ku' class='nav-link nav-item'><span class='nav-text'>Kindle Unlimited</span></a> <a href='/hz/mycd/myx?pageType=content&ref_=nav_AccountFlyout_myk' class='nav-link nav-item'><span class='nav-text'>Content & Devices</span></a> <a href='/gp/subscribe-and-save/manager/viewsubscriptions?ref_=nav_AccountFlyout_sns' class='nav-link nav-item'><span class='nav-text'>Subscribe & Save Items</span></a> <a href='/hz5/yourmembershipsandsubscriptions?ref_=nav_AccountFlyout_digital_subscriptions' class='nav-link nav-item'><span class='nav-text'>Memberships & Subscriptions</span></a> <a href='https://music.amazon.com?ref=nav_youraccount_cldplyr' class='nav-link nav-item'><span class='nav-text'>Music Library</span></a></div></div>" }, "tooltipContent": { "html": "" }, "signinContent": { "html": "<div id='nav-signin-tooltip'><a href='https://www.amazon.com/ap/signin?openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fpromotion%2Fpsp%2FA2OD29RWOSXA27%2F%3F_encoding%3DUTF8%26redirectAsin%3DB0BBG2SH1B%26redirectMerchantId%3DA1UPHU2B8LTG19%26ref%3Dpsp_external%26source%3Ddp_cxcw%26ref_%3Dnav_custrec_signin&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.assoc_handle=usflex&openid.mode=checkid_setup&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0' class='nav-action-signin-button' data-nav-role='signin' data-nav-ref='nav_custrec_signin'><span class='nav-action-inner'>Sign in</span></a><div class='nav-signin-tooltip-footer'>New customer? <a href='https://www.amazon.com/ap/register?openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fpromotion%2Fpsp%2FA2OD29RWOSXA27%2F%3F_encoding%3DUTF8%26redirectAsin%3DB0BBG2SH1B%26redirectMerchantId%3DA1UPHU2B8LTG19%26ref%3Dpsp_external%26source%3Ddp_cxcw%26ref_%3Dnav_custrec_newcust&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.assoc_handle=usflex&openid.mode=checkid_setup&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0' class='nav-a' aria-label='New to Amazon? Start here to create an account'>Start here.</a></div></div>" }, "templates": {"itemList":"<# var hasColumns = (function () { var checkColumns = function (_items) { if (!_items) { return false; } for (var i=0; i<_items.length; i++) { if (_items[i].columnBreak || (_items[i].items && checkColumns(_items[i].items))) { return true; } } return false; }; return checkColumns(items);}()); #><# if(hasColumns) { #> <# if(items[0].image && items[0].image.src) { #> <div class='nav-column nav-column-first nav-column-image'> <# } else if (items[0].greeting) { #> <div class='nav-column nav-column-first nav-column-greeting'> <# } else { #> <div class='nav-column nav-column-first'> <# } #><# } #><# var renderItems = function(items) { #> <# jQuery.each(items, function (i, item) { #> <# if(hasColumns && item.columnBreak) { #> <# if(item.image && item.image.src) { #> </div><div class='nav-column nav-column-notfirst nav-column-break nav-column-image'> <# } else if (item.greeting) { #> </div><div class='nav-column nav-column-notfirst nav-column-break nav-column-greeting'> <# } else { #> </div><div class='nav-column nav-column-notfirst nav-column-break'> <# } #> <# } #> <# if(item.dividerBefore) { #> <div class='nav-divider'></div> <# } #> <# if(item.text || item.content) { #> <# if(item.url) { #> <a href='<#=item.url #>' class='nav-link <# } else {#> <span class=' <# } #> <# if(item.panelKey) { #> nav-hasPanel <# } #> <# if(item.items) { #> nav-title <# } #> <# if(item.decorate == 'carat') { #> nav-carat <# } #> <# if(item.decorate == 'nav-action-button') { #> nav-action-button <# } #> nav-item' <# if(item.extra) { #> <#=item.extra #> <# } #> <# if(item.id) { #> id='<#=item.id #>' <# } #> <# if(item.dataNavRole) { #> data-nav-role='<#=item.dataNavRole #>' <# } #> <# if(item.dataNavRef) { #> data-nav-ref='<#=item.dataNavRef #>' <# } #> <# if(item.panelKey) { #> data-nav-panelkey='<#=item.panelKey #>' role='navigation' aria-label='<#=item.text#>' <# } #> <# if(item.subtextKey) { #> data-nav-subtextkey='<#=item.subtextKey #>' <# } #> <# if(item.image && item.image.height > 16) { #> style='line-height:<#=item.image.height #>px;' <# } #> > <# if(item.decorate == 'carat') { #> <i class='nav-icon'></i> <# } #> <# if(item.image && item.image.src) { #> <img class='nav-image' src='<#=item.image.src #>' style='height:<#=item.image.height #>px; width:<#=item.image.width #>px;' /> <# } #> <# if(item.text) { #> <span class='nav-text<# if(item.classname) { #> <#=item.classname #><# } #>'><#=item.text#><# if(item.badgeText) { #> <span class='nav-badge'><#=item.badgeText#></span> <# } #></span> <# } else if (item.content) { #> <span class='nav-content'><# jQuery.each(item.content, function (j, cItem) { #><# if(cItem.url && cItem.text) { #><a href='<#=cItem.url #>' class='nav-a'><#=cItem.text #></a><# } else if (cItem.text) { #><#=cItem.text#><# } #><# }); #></span> <# } #> <# if(item.subtext) { #> <span class='nav-subtext'><#=item.subtext #></span> <# } #> <# if(item.url) { #> </a> <# } else {#> </span> <# } #> <# } #> <# if(item.image && item.image.src) { #> <# if(item.url) { #> <a href='<#=item.url #>'> <# } #> <img class='nav-image' <# if(item.id) { #> id='<#=item.id #>' <# } #> src='<#=item.image.src #>' <# if (item.alt) { #> alt='<#= item.alt #>'<# } #>/> <# if(item.url) { #> </a> <# } #> <# } #> <# if(item.items) { #> <div class='nav-panel'> <# renderItems(item.items); #> </div> <# } #> <# }); #><# }; #><# renderItems(items); #><# if(hasColumns) { #> </div><# } #>","subnav":"<# if (obj && obj.type === 'vertical') { #> <# jQuery.each(obj.rows, function (i, row) { #> <# if (row.flyoutElement === 'button') { #> <div class='nav_sv_fo_v_button' <# if (row.elementStyle) { #> style='<#= row.elementStyle #>' <# } #> > <a href='<#=row.url #>' class='nav-action-button nav-sprite'> <#=row.text #> </a> </div> <# } else if (row.flyoutElement === 'list' && row.list) { #> <# jQuery.each(row.list, function (j, list) { #> <div class='nav_sv_fo_v_column <#=(j === 0) ? 'nav_sv_fo_v_first' : '' #>'> <ul class='<#=list.elementClass #>'> <# jQuery.each(list.linkList, function (k, link) { #> <# if (k === 0) { link.elementClass += ' nav_sv_fo_v_first'; } #> <li class='<#=link.elementClass #>'> <# if (link.url) { #> <a href='<#=link.url #>' class='nav_a'><#=link.text #></a> <# } else { #> <span class='nav_sv_fo_v_span'><#=link.text #></span> <# } #> </li> <# }); #> </ul> </div> <# }); #> <# } else if (row.flyoutElement === 'link') { #> <# if (row.topSpacer) { #> <div class='nav_sv_fo_v_clear'></div> <# } #> <div class='<#=row.elementClass #>'> <a href='<#=row.url #>' class='nav_sv_fo_v_lmargin nav_a'> <#=row.text #> </a> </div> <# } #> <# }); #><# } else if (obj) { #> <div class='nav_sv_fo_scheduled'> <#= obj #> </div><# } #>","htmlList":"<# jQuery.each(items, function (i, item) { #> <div class='nav-item'> <#=item #> </div><# }); #>"} }) }) </script> <script type="text/javascript"> window.$Nav && $Nav.declare('config.flyoutURL', null); window.$Nav && $Nav.declare('btf.lite'); window.$Nav && $Nav.declare('btf.full'); window.$Nav && $Nav.declare('btf.exists'); (window.AmazonUIPageJS ? AmazonUIPageJS : P).register('navCF'); </script> <script type="text/javascript"> window.$Nav && $Nav.when('$').run('CBIMarketplaceRedirectOverlayNavyaan', function($) { $.ajax({ type: 'POST', url: '/cross_border_interstitial_sp/render', data: JSON.stringify({ marketplaceId: 'ATVPDKIKX0DER', localCountryCode: 'US', customerId: null, sessionId: '146\x2D2461427\x2D5656742', deviceType: 'DESKTOP', referrer: '', url: '\x2Fpromotion\x2Fpsp\x2FA2OD29RWOSXA27', pageType: 'PromotionsDiscoveryHz', languageOfPreference: 'en_US', queryParams: {}, interstitialRequestType: 'CBI', weblabTreatmentMap: {"CROSS_BORDER_INTERSTITIAL_IE_966371":"C","CBI_355055":"C","NARX_INTERSTITIAL_NEW_CX_372291":"C","MWEB_CROSS_BORDER_INTERSTITIAL_IE_966379":"C","NARX_INTERSTITIAL_AUI_MIGRATION_446901":"C","TEST_ACS_CONFIGURATION_486322":"C","CROSS_BORDER_INTERSTITIAL_ACS_SHADOW_TESTING_486317":"C","INTERSTITIAL_PROTOTYPE_IP_ADDRESS_BR_598850":"C","NARX_INTERSTITIAL_LAMBDA_CLOUD_AUTH_880645":"T1","CBI_ROBOT_MITIGATION_943387":"C","MARKETPLACE_REDIRECT_INTERSTITIAL_949990":"C","CBI_REDISPLAY_INTERSTITIAL_1008859":"C"} }), contentType: "application/json", dataType: "html", success: function(data) { if (data) { $('body').append(data); } } }); }); </script> <!-- NAVYAAN BTF END --> <!-- sp:end-feature:nav-btf --> <!-- sp:feature:host-btf --> <!-- BTF content --><!-- sp:end-feature:host-btf --> <!-- sp:feature:aui-preload --> <!-- sp:end-feature:aui-preload --> <!-- sp:feature:nav-footer --> <!-- NAVYAAN FOOTER START --> <!-- WITH MOZART --> <div id='rhf' class='copilot-secure-display' style='clear: both;' role='complementary' aria-label='Your recently viewed items and featured recommendations'> <div class='rhf-frame' style='display: none;'> <br> <div id='rhf-container'> <div class='rhf-loading-outer'> <table class='rhf-loading-middle'> <tr> <td class='rhf-loading-inner'> <img src='https://m.media-amazon.com/images/G/01/personalization/ybh/loading-4x-gray._CB485916920_.gif'> </td> </tr> </table> </div> <div id='rhf-context'> <script type='application/json'> { "rhfHandlerParams":{"currentPageType":"PromotionsDiscoveryHz","currentSubPageType":"","excludeAsin":"","fieldKeywords":"","k":"","keywords":"","search":"","auditEnabled":"","previewCampaigns":"","forceWidgets":"","searchAlias":""} } </script> </div> </div> <noscript> <div class='rhf-border'> <div class='rhf-header'> Your recently viewed items and featured recommendations </div> <div class='rhf-footer'> <div class='rvi-container'> <div class='ybh-edit'> <div class='ybh-edit-arrow'> &#8250; </div> <div class='ybh-edit-link'> <a href='/gp/history'> View or edit your browsing history </a> </div> </div> <span class='no-rvi-message'> After viewing product detail pages, look here to find an easy way to navigate back to pages you are interested in. </span> </div> </div> </div> </noscript> <div id='rhf-error' style='display: none;'> <div class='rhf-border'> <div class='rhf-header'> Your recently viewed items and featured recommendations </div> <div class='rhf-footer'> <div class='rvi-container'> <div class='ybh-edit'> <div class='ybh-edit-arrow'> &#8250; </div> <div class='ybh-edit-link'> <a href='/gp/history'> View or edit your browsing history </a> </div> </div> <span class='no-rvi-message'> After viewing product detail pages, look here to find an easy way to navigate back to pages you are interested in. </span> </div> </div> </div> </div> <br> </div> </div> <div class="navLeftFooter nav-sprite-v1" id="navFooter"> <a href="javascript:void(0)" id="navBackToTop" aria-label="Back to top" > <div class="navFooterBackToTop"> <span class="navFooterBackToTopText"> Back to top </span> </div> </a> <div class="navFooterVerticalColumn navAccessibility" role="presentation"> <div class="navFooterVerticalRow navAccessibility" style="display: table-row;"> <div class="navFooterLinkCol navAccessibility"> <div class="navFooterColHead" role="heading" aria-level="6">Get to Know Us</div> <ul> <li class="nav_first"> <a href="https://www.amazon.jobs" class="nav_a">Careers</a> </li> <li > <a href="https://blog.aboutamazon.com/?utm_source=gateway&utm_medium=footer" class="nav_a">Blog</a> </li> <li > <a href="https://www.aboutamazon.com/?utm_source=gateway&utm_medium=footer" class="nav_a">About Amazon</a> </li> <li > <a href="https://www.amazon.com/ir" class="nav_a">Investor Relations</a> </li> <li > <a href="/gp/browse.html?node=2102313011&ref_=footer_devices" class="nav_a">Amazon Devices</a> </li> <li class="nav_last "> <a href="https://www.amazon.science" class="nav_a">Amazon Science</a> </li> </ul> </div> <div class="navFooterColSpacerInner navAccessibility"></div> <div class="navFooterLinkCol navAccessibility"> <div class="navFooterColHead" role="heading" aria-level="6">Make Money with Us</div> <ul> <li class="nav_first"> <a href="https://services.amazon.com/sell.html?ld=AZFSSOA&ref_=footer_soa" class="nav_a">Sell products on Amazon</a> </li> <li > <a href="https://services.amazon.com/amazon-business.html?ld=usb2bunifooter&ref_=footer_b2b" class="nav_a">Sell on Amazon Business</a> </li> <li > <a href="https://developer.amazon.com" class="nav_a">Sell apps on Amazon</a> </li> <li > <a href="https://affiliate-program.amazon.com/" class="nav_a">Become an Affiliate</a> </li> <li > <a href="https://advertising.amazon.com/?ref=ext_amzn_ftr" class="nav_a">Advertise Your Products</a> </li> <li > <a href="/gp/seller-account/mm-summary-page.html?ld=AZFooterSelfPublish&topic=200260520&ref_=footer_publishing" class="nav_a">Self-Publish with Us</a> </li> <li > <a href="https://go.thehub-amazon.com/amazon-hub-locker" class="nav_a">Host an Amazon Hub</a> </li> <li class="nav_last nav_a_carat"> <span class="nav_a_carat" aria-hidden="true">›</span><a href="/b/?node=18190131011&ld=AZUSSOA-seemore&ref_=footer_seemore" class="nav_a">See More Make Money with Us</a> </li> </ul> </div> <div class="navFooterColSpacerInner navAccessibility"></div> <div class="navFooterLinkCol navAccessibility"> <div class="navFooterColHead" role="heading" aria-level="6">Amazon Payment Products</div> <ul> <li class="nav_first"> <a href="/dp/B07984JN3L?plattr=ACOMFO&ie=UTF-8" class="nav_a">Amazon Business Card</a> </li> <li > <a href="/gp/browse.html?node=16218619011&ref_=footer_swp" class="nav_a">Shop with Points</a> </li> <li > <a href="/gp/browse.html?node=10232440011&ref_=footer_reload_us" class="nav_a">Reload Your Balance</a> </li> <li class="nav_last "> <a href="/gp/browse.html?node=388305011&ref_=footer_tfx" class="nav_a">Amazon Currency Converter</a> </li> </ul> </div> <div class="navFooterColSpacerInner navAccessibility"></div> <div class="navFooterLinkCol navAccessibility"> <div class="navFooterColHead" role="heading" aria-level="6">Let Us Help You</div> <ul> <li class="nav_first"> <a href="/gp/help/customer/display.html?nodeId=GDFU3JS5AL6SYHRD&ref_=footer_covid" class="nav_a">Amazon and COVID-19</a> </li> <li > <a href="https://www.amazon.com/gp/css/homepage.html?ref_=footer_ya" class="nav_a">Your Account</a> </li> <li > <a href="https://www.amazon.com/gp/css/order-history?ref_=footer_yo" class="nav_a">Your Orders</a> </li> <li > <a href="/gp/help/customer/display.html?nodeId=468520&ref_=footer_shiprates" class="nav_a">Shipping Rates & Policies</a> </li> <li > <a href="/gp/css/returns/homepage.html?ref_=footer_hy_f_4" class="nav_a">Returns & Replacements</a> </li> <li > <a href="/gp/digital/fiona/manage?ref_=footer_myk" class="nav_a">Manage Your Content and Devices</a> </li> <li class="nav_last "> <a href="/gp/help/customer/display.html?nodeId=508510&ref_=footer_gw_m_b_he" class="nav_a">Help</a> </li> </ul> </div> </div> </div> <div class="nav-footer-line"></div> <div class="navFooterLine navFooterLinkLine navFooterPadItemLine"> <span> <div class="navFooterLine navFooterLogoLine"> <a aria-label="Amazon US Home" href="/?ref_=footer_logo"> <div class="nav-logo-base nav-sprite"></div> </a> </div> </span> <span class="icp-container-desktop"><div class="navFooterLine"> <style type="text/css"> #icp-touch-link-language { display: none; } </style> <a href="/customer-preferences/edit?ie=UTF8&preferencesReturnUrl=%2F&ref_=footer_lang" aria-label="Choose a language for shopping." aria-owns="nav-flyout-icp-footer-flyout" class="icp-button" id="icp-touch-link-language"> <div class="icp-nav-globe-img-2 icp-button-globe-2"></div><span class="icp-color-base">English</span><span class="nav-arrow icp-up-down-arrow"></span> </a> <style type="text/css"> #icp-touch-link-cop { display: none; } </style> <a href="/customer-preferences/edit?ie=UTF8&ref_=footer_cop&preferencesReturnUrl=%2Fpromotion%2Fpsp%2FA2OD29RWOSXA27" class="icp-button" id="icp-touch-link-cop"> <span class="icp-currency-symbol">$</span><span class="icp-color-base">USD - U.S. Dollar</span> </a> <style type="text/css"> #icp-touch-link-country { display: none; } </style> <a href="/customer-preferences/country?ie=UTF8&preferencesReturnUrl=%2F&ref_=footer_icp_cp" aria-label="Choose a country/region for shopping." class="icp-button" id="icp-touch-link-country"> <span class="icp-flag-3 icp-flag-3-us"></span><span class="icp-color-base">United States</span> </a> </div></span> </div> <div class="navFooterLine navFooterLinkLine navFooterDescLine" role="navigation" aria-label="More on Amazon"> <table class="navFooterMoreOnAmazon" cellspacing="0" role="presentation" summary="More on Amazon"> <tr> <td class="navFooterDescItem"><a href=https://music.amazon.com?ref=dm_aff_amz_com class="nav_a">Amazon Music<br><span class="navFooterDescText">Stream millions<br>of songs</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://advertising.amazon.com/?ref=footer_advtsing_amzn_com class="nav_a">Amazon Ads<br><span class="navFooterDescText">Reach customers<br>wherever they<br>spend their time</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.6pm.com class="nav_a">6pm<br><span class="navFooterDescText">Score deals<br>on fashion brands</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.abebooks.com class="nav_a">AbeBooks<br><span class="navFooterDescText">Books, art<br>& collectibles</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.acx.com/ class="nav_a">ACX <br><span class="navFooterDescText">Audiobook Publishing<br>Made Easy</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://sell.amazon.com/?ld=AZUSSOA-footer-aff&ref_=footer_sell class="nav_a">Sell on Amazon<br><span class="navFooterDescText">Start a Selling Account</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.veeqo.com/?utm_source=amazon&utm_medium=website&utm_campaign=footer class="nav_a">Veeqo<br><span class="navFooterDescText">Shipping Software<br>Inventory Management</span></a></td></tr> <tr><td>&nbsp;</td></tr> <tr> <td class="navFooterDescItem"><a href=/business?ref_=footer_retail_b2b class="nav_a">Amazon Business<br><span class="navFooterDescText">Everything For<br>Your Business</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=/gp/browse.html?node=230659011&ref_=footer_amazonglobal class="nav_a">AmazonGlobal<br><span class="navFooterDescText">Ship Orders<br>Internationally</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=/services?ref_=footer_services class="nav_a">Home Services<br><span class="navFooterDescText">Experienced Pros<br>Happiness Guarantee</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://aws.amazon.com/what-is-cloud-computing/?sc_channel=EL&sc_campaign=amazonfooter class="nav_a">Amazon Web Services<br><span class="navFooterDescText">Scalable Cloud<br>Computing Services</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.audible.com class="nav_a">Audible<br><span class="navFooterDescText">Listen to Books & Original<br>Audio Performances</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.boxofficemojo.com/?ref_=amzn_nav_ftr class="nav_a">Box Office Mojo<br><span class="navFooterDescText">Find Movie<br>Box Office Data</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.goodreads.com class="nav_a">Goodreads<br><span class="navFooterDescText">Book reviews<br>& recommendations</span></a></td></tr> <tr><td>&nbsp;</td></tr> <tr> <td class="navFooterDescItem"><a href=https://www.imdb.com class="nav_a">IMDb<br><span class="navFooterDescText">Movies, TV<br>& Celebrities</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://pro.imdb.com?ref_=amzn_nav_ftr class="nav_a">IMDbPro<br><span class="navFooterDescText">Get Info Entertainment<br>Professionals Need</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://kdp.amazon.com class="nav_a">Kindle Direct Publishing<br><span class="navFooterDescText">Indie Digital & Print Publishing<br>Made Easy </span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://videodirect.amazon.com/home/landing class="nav_a">Prime Video Direct<br><span class="navFooterDescText">Video Distribution<br>Made Easy</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.shopbop.com class="nav_a">Shopbop<br><span class="navFooterDescText">Designer<br>Fashion Brands</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.woot.com/ class="nav_a">Woot!<br><span class="navFooterDescText">Deals and <br>Shenanigans</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.zappos.com class="nav_a">Zappos<br><span class="navFooterDescText">Shoes &<br>Clothing</span></a></td></tr> <tr><td>&nbsp;</td></tr> <tr> <td class="navFooterDescItem"><a href=https://ring.com class="nav_a">Ring<br><span class="navFooterDescText">Smart Home<br>Security Systems </span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://eero.com/ class="nav_a">eero WiFi<br><span class="navFooterDescText">Stream 4K Video<br>in Every Room</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://blinkforhome.com/?ref=nav_footer class="nav_a">Blink<br><span class="navFooterDescText">Smart Security<br>for Every Home </span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://shop.ring.com/pages/neighbors-app class="nav_a">Neighbors App <br><span class="navFooterDescText"> Real-Time Crime<br>& Safety Alerts </span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=/gp/browse.html?node=14498690011&ref_=amzn_nav_ftr_swa class="nav_a">Amazon Subscription Boxes<br><span class="navFooterDescText">Top subscription boxes – right to your door</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem"><a href=https://www.pillpack.com class="nav_a">PillPack<br><span class="navFooterDescText">Pharmacy Simplified</span></a></td><td class="navFooterDescSpacer" style="width: 3%"></td> <td class="navFooterDescItem">&nbsp;</td> </tr> </table> </div> <div class="navFooterLine navFooterLinkLine navFooterPadItemLine navFooterCopyright"> <ul><li class="nav_first"><a href="/gp/help/customer/display.html?nodeId=508088&ref_=footer_cou" id="" class="nav_a">Conditions of Use</a> </li><li ><a href="/gp/help/customer/display.html?nodeId=468496&ref_=footer_privacy" id="" class="nav_a">Privacy Notice</a> </li><li ><a href="/gp/help/customer/display.html?ie=UTF8&nodeId=TnACMrGVghHocjL8KB&ref_=footer_consumer_health_data_privacy" id="" class="nav_a">Consumer Health Data Privacy Disclosure</a> </li><li ><a href="/privacyprefs?ref_=footer_iba" id="" class="nav_a">Your Ads Privacy Choices</a> </li><li class="nav_last"><span id="nav-icon-ccba" class="nav-sprite"></span> </li></ul><span>© 1996-2024, Amazon.com, Inc. or its affiliates</span> </div> </div> <div id="sis_pixel_r2" aria-hidden="true" style="height:1px; position: absolute; left: -1000000px; top: -1000000px;"></div><script>(function(a,b){a.attachEvent?a.attachEvent("onload",b):a.addEventListener&&a.addEventListener("load",b,!1)})(window,function(){setTimeout(function(){var el=document.getElementById("sis_pixel_r2");el&&(el.innerHTML='<iframe id="DAsis" src="//s.amazon-adsystem.com/iu3?d=amazon.com&slot=navFooter&a2=0101c86c8768bc1277505d37128b225cfea94a7f5260c59ceb57c95b6d62c60e477c&old_oo=0&ts=1732357773698&s=AXWPlcNiK0XkvCHpzWffqJl9-PRzcojknmMl7-Ad5Ag1&gdpr_consent=&gdpr_consent_avl=&cb=1732357773698" width="1" height="1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" tabindex="-1" sandbox></iframe>');var event=new Event("SISPixelCardLoaded");document.dispatchEvent(event);},300)});</script> <!-- NAVYAAN FOOTER END --> <!-- sp:end-feature:nav-footer --> <!-- sp:feature:configured-sitewide-assets --> <script> (window.AmazonUIPageJS ? AmazonUIPageJS : P).when('afterLoad').execute(function() { (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https://m.media-amazon.com/images/I/41enQvbo0+L.js?AUIClients/AmazonLightsaberPageAssets#1061544-T1'); }); </script> <script> (window.AmazonUIPageJS ? AmazonUIPageJS : P).when('afterLoad').execute(function() { (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https://m.media-amazon.com/images/I/11+zeBoqC-L.js?AUIClients/WebFlowIngressJs'); }); </script> <!-- sp:end-feature:configured-sitewide-assets --> <!-- sp:feature:customer-behavior-js --> <script type="text/javascript">if (window.ue && ue.tag) { ue.tag('FWCIMEnabled'); }</script> <script> (window.AmazonUIPageJS ? AmazonUIPageJS : P).when('afterLoad').execute(function() { (window.AmazonUIPageJS ? AmazonUIPageJS : P).load.js('https://m.media-amazon.com/images/I/81PJmiazlIL.js?AUIClients/FWCIMAssets'); }); </script> <!-- sp:end-feature:customer-behavior-js --> <!-- sp:feature:csm:body-close --> <div id='be' style="display:none;visibility:hidden;"><form name='ue_backdetect' action="get"><input type="hidden" name='ue_back' value='1' /></form> <script type="text/javascript"> window.ue_ibe = (window.ue_ibe || 0) + 1; if (window.ue_ibe === 1) { (function(e,c){function h(b,a){f.push([b,a])}function g(b,a){if(b){var c=e.head||e.getElementsByTagName("head")[0]||e.documentElement,d=e.createElement("script");d.async="async";d.src=b;d.setAttribute("crossorigin","anonymous");a&&a.onerror&&(d.onerror=a.onerror);a&&a.onload&&(d.onload=a.onload);c.insertBefore(d,c.firstChild)}}function k(){ue.uels=g;for(var b=0;b<f.length;b++){var a=f[b];g(a[0],a[1])}ue.deffered=1}var f=[];c.ue&&(ue.uels=h,c.ue.attach&&c.ue.attach("load",k))})(document,window); if (window.ue && window.ue.uels) { var cel_widgets = [ { "c":"celwidget" },{ "s":"#nav-swmslot > div", "id_gen":function(elem, index){ return 'nav_sitewide_msg'; } } ]; ue.uels("https://images-na.ssl-images-amazon.com/images/I/31bJewCvY-L.js"); } var ue_mbl=ue_csm.ue.exec(function(h,a){function s(c){b=c||{};a.AMZNPerformance=b;b.transition=b.transition||{};b.timing=b.timing||{};if(a.csa){var d;b.timing.transitionStart&&(d=b.timing.transitionStart);b.timing.processStart&&(d=b.timing.processStart);d&&(csa("PageTiming")("mark","nativeTransitionStart",d),csa("PageTiming")("mark","transitionStart",d))}h.ue.exec(t,"csm-android-check")()&&b.tags instanceof Array&&(c=-1!=b.tags.indexOf("usesAppStartTime")||b.transition.type?!b.transition.type&&-1< b.tags.indexOf("usesAppStartTime")?"warm-start":void 0:"view-transition",c&&(b.transition.type=c));n=null;"reload"===e._nt&&h.ue_orct||"intrapage-transition"===e._nt?u(b):"undefined"===typeof e._nt&&f&&f.timing&&f.timing.navigationStart&&a.history&&"function"===typeof a.History&&"object"===typeof a.history&&a.history.length&&1!=a.history.length&&(b.timing.transitionStart=f.timing.navigationStart);p&&e.ssw(q,""+(b.timing.transitionStart||n||""));c=b.transition;d=e._nt?e._nt:void 0;c.subType=d;a.ue&& a.ue.tag&&a.ue.tag("has-AMZNPerformance");e.isl&&a.uex&&a.uex("at","csm-timing");v()}function w(c){a.ue&&a.ue.count&&a.ue.count("csm-cordova-plugin-failed",1)}function t(){return a.cordova&&a.cordova.platformId&&"android"==a.cordova.platformId}function u(){if(p){var c=e.ssw(q),a=function(){},x=e.count||a,a=e.tag||a,k=b.timing.transitionStart,g=c&&!c.e&&c.val;n=c=g?+c.val:null;k&&g&&k>c?(x("csm.jumpStart.mtsDiff",k-c||0),a("csm-rld-mts-gt")):k&&g?a("csm-rld-mts-leq"):g?k||a("csm-rld-mts-no-new"):a("csm-rld-mts-no-old")}f&& f.timing&&f.timing.navigationStart?b.timing.transitionStart=f.timing.navigationStart:delete b.timing.transitionStart}function v(){try{a.P.register("AMZNPerformance",function(){return b})}catch(c){}}function r(){if(!b)return"";ue_mbl.cnt=null;var c=b.timing,d=b.transition,d=["mts",l(c.transitionStart),"mps",l(c.processStart),"mtt",d.type,"mtst",d.subType,"mtlt",d.launchType];a.ue&&a.ue.tag&&(c.fr_ovr&&a.ue.tag("fr_ovr"),c.fcp_ovr&&a.ue.tag("fcp_ovr"),d.push("fr_ovr",l(c.fr_ovr),"fcp_ovr",l(c.fcp_ovr))); for(var c="",e=0;e<d.length;e+=2){var f=d[e],g=d[e+1];"undefined"!==typeof g&&(c+="&"+f+"="+g)}return c}function l(a){if("undefined"!==typeof a&&"undefined"!==typeof m)return a-m}function y(a,d){b&&(m=d,b.timing.transitionStart=a,b.transition.type="view-transition",b.transition.subType="ajax-transition",b.transition.launchType="normal",ue_mbl.cnt=r)}var e=h.ue||{},m=h.ue_t0,q="csm-last-mts",p=1===h.ue_sswmts,n,f=a.performance,b;if(a.P&&a.P.when&&a.P.register)return 1===a.ue_fnt&&(m=a.aPageStart|| h.ue_t0),a.P.when("CSMPlugin").execute(function(a){a.buildAMZNPerformance&&a.buildAMZNPerformance({successCallback:s,failCallback:w})}),{cnt:r,ajax:y}},"mobile-timing")(ue_csm,ue_csm.window); (function(d){d._uess=function(){var a="";screen&&screen.width&&screen.height&&(a+="&sw="+screen.width+"&sh="+screen.height);var b=function(a){var b=document.documentElement["client"+a];return"CSS1Compat"===document.compatMode&&b||document.body["client"+a]||b},c=b("Width"),b=b("Height");c&&b&&(a+="&vw="+c+"&vh="+b);return a}})(ue_csm); (function(a){function d(a){c&&c("log",a)}var b=document.ue_backdetect,c=a.csa&&a.csa("Errors",{producerId:"csa",logOptions:{ent:"all"}});a.ue_err.buffer&&c&&(a.ue_err.buffer.forEach(d),a.ue_err.buffer.push=d);b&&b.ue_back&&a.ue&&(a.ue.bfini=b.ue_back.value);a.uet&&a.uet("be");a.onLdEnd&&(window.addEventListener?window.addEventListener("load",a.onLdEnd,!1):window.attachEvent&&window.attachEvent("onload",a.onLdEnd));a.ueh&&a.ueh(0,window,"load",a.onLd,1);a.ue&&a.ue.tag&&(a.ue_furl?(b=a.ue_furl.replace(/\./g, "-"),a.ue.tag(b)):a.ue.tag("nofls"))})(ue_csm); (function(g,h){function d(a,d){var b={};if(!e||!f)try{var c=h.sessionStorage;c?a&&("undefined"!==typeof d?c.setItem(a,d):b.val=c.getItem(a)):f=1}catch(g){e=1}e&&(b.e=1);return b}var b=g.ue||{},a="",f,e,c,a=d("csmtid");f?a="NA":a.e?a="ET":(a=a.val,a||(a=b.oid||"NI",d("csmtid",a)),c=d(b.oid),c.e||(c.val=c.val||0,d(b.oid,c.val+1)),b.ssw=d);b.tabid=a})(ue_csm,ue_csm.window); (function(a){var e={rc:1,hob:1,hoe:1,ntd:1,rd_:1,_rd:1};"function"===typeof window.addEventListener&&window.addEventListener("pageshow",function(b){if(b&&b.persisted&&(b=+new Date,b={clickTime:b-1,pageVisible:b},"object"===typeof b&&"object"===typeof a.ue.markers&&"object"===typeof a.ue&&"function"===typeof a.uex)){if("function"===typeof a.uet){for(var c in a.ue.markers)!a.ue.markers.hasOwnProperty(c)||c in e||a.uet(c,void 0,void 0,b.pageVisible);a.uet("tc",void 0,void 0,b.clickTime);a.uet("ty",void 0, void 0,b.clickTime+2)}(c=document.ue_backdetect)&&c.ue_back&&(a.ue.bfini=+c.ue_back.value+1);a.ue.isBFonMshop=!0;a.ue.isBFCache=!0;a.ue.t0=b.clickTime;a.ue.viz=["visible:0"];"function"===typeof a.ue.tag&&(a.ue.tag("cacheSourceMemory"),a.ue.tag("history-navigation-page-cache"));c=ue_csm.csa&&ue_csm.csa("SPA");var d=ue_csm.csa&&ue_csm.csa("PageTiming");c&&d&&(c("newPage",{transitionType:"history-navigation-page-cache"},{keepPageAttributes:!0}),d("mark","transitionStart",b.clickTime));"function"===typeof a.uex&& a.uex("ld",void 0,void 0,a.ue.t.ld);delete a.ue.isBFonMshop;delete a.ue.isBFCache}})})(ue_csm); ue_csm.ue.exec(function(e,f){var a=e.ue||{},b=a._wlo,d;if(a.ssw){d=a.ssw("CSM_previousURL").val;var c=f.location,b=b?b:c&&c.href?c.href.split("#")[0]:void 0;c=(b||"")===a.ssw("CSM_previousURL").val;!c&&b&&a.ssw("CSM_previousURL",b);d=c?"reload":d?"intrapage-transition":"first-view"}else d="unknown";a._nt=d},"NavTypeModule")(ue_csm,window); ue_csm.ue.exec(function(c,a){function g(a){a.run(function(e){d.tag("csm-feature-"+a.name+":"+e);d.isl&&c.uex("at")})}if(a.addEventListener)for(var d=c.ue||{},f=[{name:"touch-enabled",run:function(b){var e=function(){a.removeEventListener("touchstart",c,!0);a.removeEventListener("mousemove",d,!0)},c=function(){b("true");e()},d=function(){b("false");e()};a.addEventListener("touchstart",c,!0);a.addEventListener("mousemove",d,!0)}}],b=0;b<f.length;b++)g(f[b])},"csm-features")(ue_csm,window); (function(a,e){function d(a){b&&b("recordCounter",a.c,a.v)}var c=e.images,b=a.csa&&a.csa("Metrics",{producerId:"csa"});c&&c.length&&a.ue.count("totalImages",c.length);a.ue.cv.buffer&&b&&(a.ue.cv.buffer.forEach(d),a.ue.cv.buffer.push=d)})(ue_csm,document); (function(b){function c(){var d=[];a.log&&a.log.isStub&&a.log.replay(function(a){e(d,a)});a.clog&&a.clog.isStub&&a.clog.replay(function(a){e(d,a)});d.length&&(a._flhs+=1,n(d),p(d))}function g(){a.log&&a.log.isStub&&(a.onflush&&a.onflush.replay&&a.onflush.replay(function(a){a[0]()}),a.onunload&&a.onunload.replay&&a.onunload.replay(function(a){a[0]()}),c())}function e(d,b){var c=b[1],f=b[0],e={};a._lpn[c]=(a._lpn[c]||0)+1;e[c]=f;d.push(e)}function n(b){q&&(a._lpn.csm=(a._lpn.csm||0)+1,b.push({csm:{k:"chk", f:a._flhs,l:a._lpn,s:"inln"}}))}function p(a){if(h)a=k(a),b.navigator.sendBeacon(l,a);else{a=k(a);var c=new b[f];c.open("POST",l,!0);c.setRequestHeader&&c.setRequestHeader("Content-type","text/plain");c.send(a)}}function k(a){return JSON.stringify({rid:b.ue_id,sid:b.ue_sid,mid:b.ue_mid,mkt:b.ue_mkt,sn:b.ue_sn,reqs:a})}var f="XMLHttpRequest",q=1===b.ue_ddq,a=b.ue,r=b[f]&&"withCredentials"in new b[f],h=b.navigator&&b.navigator.sendBeacon,l="//"+b.ue_furl+"/1/batch/1/OE/",m=b.ue_fci_ft||5E3;a&&(r||h)&& (a._flhs=a._flhs||0,a._lpn=a._lpn||{},a.attach&&(a.attach("beforeunload",a.exec(g,"fcli-bfu")),a.attach("pagehide",a.exec(g,"fcli-ph"))),m&&b.setTimeout(a.exec(c,"fcli-t"),m),a._ffci=a.exec(c))})(window); (function(k,c){function l(a,b){return a.filter(function(a){return a.initiatorType==b})}function f(a,c){if(b.t[a]){var g=b.t[a]-b._t0,e=c.filter(function(a){return 0!==a.responseEnd&&m(a)<g}),f=l(e,"script"),h=l(e,"link"),k=l(e,"img"),n=e.map(function(a){return a.name.split("/")[2]}).filter(function(a,b,c){return a&&c.lastIndexOf(a)==b}),q=e.filter(function(a){return a.duration<p}),s=g-Math.max.apply(null,e.map(m))<r|0;"af"==a&&(b._afjs=f.length);return a+":"+[e[d],f[d],h[d],k[d],n[d],q[d],s].join("-")}} function m(a){return a.responseEnd-(b._t0-c.timing.navigationStart)}function n(){var a=c[h]("resource"),d=f("cf",a),g=f("af",a),a=f("ld",a);delete b._rt;b._ld=b.t.ld-b._t0;b._art&&b._art();return[d,g,a].join("_")}var p=20,r=50,d="length",b=k.ue,h="getEntriesByType";b._rre=m;b._rt=c&&c.timing&&c[h]&&n})(ue_csm,window.performance); (function(c,d){var b=c.ue,a=d.navigator;b&&b.tag&&a&&(a=a.connection||a.mozConnection||a.webkitConnection)&&a.type&&b.tag("netInfo:"+a.type)})(ue_csm,window); (function(c,d){function h(a,b){for(var c=[],d=0;d<a.length;d++){var e=a[d],f=b.encode(e);if(e[k]){var g=b.metaSep,e=e[k],l=b.metaPairSep,h=[],m=void 0;for(m in e)e.hasOwnProperty(m)&&h.push(m+"="+e[m]);e=h.join(l);f+=g+e}c.push(f)}return c.join(b.resourceSep)}function s(a){var b=a[k]=a[k]||{};b[t]||(b[t]=c.ue_mid);b[u]||(b[u]=c.ue_sid);b[f]||(b[f]=c.ue_id);b.csm=1;a="//"+c.ue_furl+"/1/"+a[v]+"/1/OP/"+a[w]+"/"+a[x]+"/"+h([a],y);if(n)try{n.call(d[p],a)}catch(g){c.ue.sbf=1,(new Image).src=a}else(new Image).src= a}function q(){g&&g.isStub&&g.replay(function(a,b,c){a=a[0];b=a[k]=a[k]||{};b[f]=b[f]||c;s(a)});l.impression=s;g=null}if(!(1<c.ueinit)){var k="metadata",x="impressionType",v="foresterChannel",w="programGroup",t="marketplaceId",u="session",f="requestId",p="navigator",l=c.ue||{},n=d[p]&&d[p].sendBeacon,r=function(a,b,c,d){return{encode:d,resourceSep:a,metaSep:b,metaPairSep:c}},y=r("","?","&",function(a){return h(a.impressionData,z)}),z=r("/",":",",",function(a){return a.featureName+":"+h(a.resources, A)}),A=r(",","@","|",function(a){return a.id}),g=l.impression;n?q():(l.attach("load",q),l.attach("beforeunload",q));try{d.P&&d.P.register&&d.P.register("impression-client",function(){})}catch(B){c.ueLogError(B,{logLevel:"WARN"})}}})(ue_csm,window); var ue_pty = "PromotionsDiscoveryHz"; var ue_adb = 4; var ue_adb_rtla = 1; ue_csm.ue.exec(function(y,a){function t(){if(d&&f){var a;a:{try{a=d.getItem(g);break a}catch(c){}a=void 0}if(a)return b=a,!0}return!1}function u(){if(a.fetch)fetch(m).then(function(a){if(!a.ok)throw Error(a.statusText);return a.text?a.text():null}).then(function(b){b?(-1<b.indexOf("window.ue_adb_chk = 1")&&(a.ue_adb_chk=1),n()):h()})["catch"](h);else e.uels(m,{onerror:h,onload:n})}function h(){b=k;l();if(f)try{d.setItem(g,b)}catch(a){}}function n(){b=1===a.ue_adb_chk?p:k;l();if(f)try{d.setItem(g, b)}catch(c){}}function q(){a.ue_adb_rtla&&c&&0<c.ec&&!1===r&&(c.elh=null,ueLogError({m:"Hit Info",fromOnError:1},{logLevel:"INFO",adb:b}),r=!0)}function l(){e.tag(b);e.isl&&a.uex&&uex("at",b);s&&s.updateCsmHit("adb",b);c&&0<c.ec?q():a.ue_adb_rtla&&c&&(c.elh=q)}function v(){return b}if(a.ue_adb){a.ue_fadb=a.ue_fadb||10;var e=a.ue,k="adblk_yes",p="adblk_no",m="https://m.media-amazon.com/images/G/01/csm/showads.v2.js?category=ad&adstype=-ad-column-&ad_size=-housead-",b="adblk_unk",d;a:{try{d=a.localStorage; break a}catch(z){}d=void 0}var g="csm:adb",c=a.ue_err,s=e.cookie,f=void 0!==a.localStorage,w=Math.random()>1-1/a.ue_fadb,r=!1,x=t();w||!x?u():l();a.ue_isAdb=v;a.ue_isAdb.unk="adblk_unk";a.ue_isAdb.no=p;a.ue_isAdb.yes=k}},"adb")(document,window); (function(c,l,m){function h(a){if(a)try{if(a.id)return"//*[@id='"+a.id+"']";var b,d=1,e;for(e=a.previousSibling;e;e=e.previousSibling)e.nodeName===a.nodeName&&(d+=1);b=d;var c=a.nodeName;1!==b&&(c+="["+b+"]");a.parentNode&&(c=h(a.parentNode)+"/"+c);return c}catch(f){return"DETACHED"}}function f(a){if(a&&a.getAttribute)return a.getAttribute(k)?a.getAttribute(k):f(a.parentElement)}var k="data-cel-widget",g=!1,d=[];(c.ue||{}).isBF=function(){try{var a=JSON.parse(localStorage["csm-bf"]||"[]"),b=0<=a.indexOf(c.ue_id); a.unshift(c.ue_id);a=a.slice(0,20);localStorage["csm-bf"]=JSON.stringify(a);return b}catch(d){return!1}}();c.ue_utils={getXPath:h,getFirstAscendingWidget:function(a,b){c.ue_cel&&c.ue_fem?!0===g?b(f(a)):d.push({element:a,callback:b}):b()},notifyWidgetsLabeled:function(){if(!1===g){g=!0;for(var a=f,b=0;b<d.length;b++)if(d[b].hasOwnProperty("callback")&&d[b].hasOwnProperty("element")){var c=d[b].callback,e=d[b].element;"function"===typeof c&&"function"===typeof a&&c(a(e))}d=null}},extractStringValue:function(a){if("string"=== typeof a)return a}}})(ue_csm,window,document); (function(a){a.ue_cel||(a.ue_cel=function(){function m(a,r){r?r.r=u:r={r:u,c:1};D||(!ue_csm.ue_sclog&&r.clog&&b.clog?b.clog(a,r.ns||s,r):r.glog&&b.glog?b.glog(a,r.ns||s,r):b.log(a,r.ns||s,r))}function n(a,b){"function"===typeof p&&p("log",{schemaId:t+".RdCSI.1",eventType:a,clientData:b},{ent:{page:["requestId"]}})}function c(){var a=q.length;if(0<a){for(var r=[],c=0;c<a;c++){var d=q[c].api;d.ready()?(d.on({ts:b.d,ns:s}),g.push(q[c]),m({k:"mso",n:q[c].name,t:b.d()})):r.push(q[c])}q=r}}function f(){if(!f.executed){for(var a= 0;a<g.length;a++)g[a].api.off&&g[a].api.off({ts:b.d,ns:s});B();m({k:"eod",t0:b.t0,t:b.d()},{c:1,il:1});f.executed=1;for(a=0;a<g.length;a++)q.push(g[a]);g=[];d(v);d(A)}}function B(a){m({k:"hrt",t:b.d()},{c:1,il:1,n:a});y=Math.min(w,e*y);z()}function z(){d(A);A=k(function(){B(!0)},y)}function x(){f.executed||B()}var l=a.window,k=l.setTimeout,d=l.clearTimeout,e=1.5,w=l.ue_cel_max_hrt||3E4,t="robotdetection",q=[],g=[],s=a.ue_cel_ns||"cel",v,A,b=a.ue,F=a.uet,C=a.uex,u=b.rid,D=a.ue_dsbl_cel,h=l.csa,p,y= l.ue_cel_hrt_int||3E3,E=l.requestAnimationFrame||function(a){a()};h&&(p=h("Events",{producerId:t}));if(b.isBF)m({k:"bft",t:b.d()});else{"function"==typeof F&&F("bb","csmCELLSframework",{wb:1});k(c,0);b.onunload(f);if(b.onflush)b.onflush(x);v=k(f,6E5);z();"function"==typeof C&&C("ld","csmCELLSframework",{wb:1});return{registerModule:function(a,r){q.push({name:a,api:r});m({k:"mrg",n:a,t:b.d()});c()},reset:function(a){m({k:"rst",t0:b.t0,t:b.d()});q=q.concat(g);g=[];for(var r=q.length,e=0;e<r;e++)q[e].api.off(), q[e].api.reset();u=a||b.rid;c();d(v);v=k(f,6E5);f.executed=0},timeout:function(a,b){return k(function(){E(function(){f.executed||a()})},b)},log:m,csaEventLog:n,off:f}}}())})(ue_csm); (function(a){a.ue_pdm||!a.ue_cel||a.ue.isBF||(a.ue_pdm=function(){function m(){try{var b=d.screen;if(b){var c={w:b.width,aw:b.availWidth,h:b.height,ah:b.availHeight,cd:b.colorDepth,pd:b.pixelDepth};g&&g.w===c.w&&g.h===c.h&&g.aw===c.aw&&g.ah===c.ah&&g.pd===c.pd&&g.cd===c.cd||(g=c,g.t=t(),g.k="sci",F(g),D&&h("sci",{h:(g.h||"0")+""}))}var k=e.body||{},f=e.documentElement||{},n={w:Math.max(k.scrollWidth||0,k.offsetWidth||0,f.clientWidth||0,f.scrollWidth||0,f.offsetWidth||0),h:Math.max(k.scrollHeight|| 0,k.offsetHeight||0,f.clientHeight||0,f.scrollHeight||0,f.offsetHeight||0)};s&&s.w===n.w&&s.h===n.h||(s=n,s.t=t(),s.k="doi",F(s));w=a.ue_cel.timeout(m,q);A+=1}catch(p){d.ueLogError&&ueLogError(p,{attribution:"csm-cel-page-module",logLevel:"WARN"})}}function n(){x("ebl","default",!1)}function c(){x("efo","default",!0)}function f(){x("ebl","app",!1)}function B(){x("efo","app",!0)}function z(){d.setTimeout(function(){e[E]?x("ebl","pageviz",!1):x("efo","pageviz",!0)},0)}function x(a,b,c){v!==c&&(F({k:a, t:t(),s:b},{ff:!0===c?0:1}),D&&h(a,{t:(t()||"0")+"",s:b}));v=c}function l(){b.attach&&(p&&b.attach(y,z,e),G&&P.when("mash").execute(function(a){a&&a.addEventListener&&(a.addEventListener("appPause",f),a.addEventListener("appResume",B))}),b.attach("blur",n,d),b.attach("focus",c,d))}function k(){b.detach&&(p&&b.detach(y,z,e),G&&P.when("mash").execute(function(a){a&&a.removeEventListener&&(a.removeEventListener("appPause",f),a.removeEventListener("appResume",B))}),b.detach("blur",n,d),b.detach("focus", c,d))}var d=a.window,e=a.document,w,t,q,g,s,v=null,A=0,b=a.ue,F=a.ue_cel.log,C=a.uet,u=a.uex,D=d.csa,h=a.ue_cel.csaEventLog,p=!!b.pageViz,y=p&&b.pageViz.event,E=p&&b.pageViz.propHid,G=d.P&&d.P.when;"function"==typeof C&&C("bb","csmCELLSpdm",{wb:1});return{on:function(a){q=a.timespan||500;t=a.ts;l();a=d.location;F({k:"pmd",o:a.origin,p:a.pathname,t:t()});m();"function"==typeof u&&u("ld","csmCELLSpdm",{wb:1})},off:function(a){clearTimeout(w);k();b.count&&b.count("cel.PDM.TotalExecutions",A)},ready:function(){return e.body&& a.ue_cel&&a.ue_cel.log},reset:function(){g=s=null}}}(),a.ue_cel&&a.ue_cel.registerModule("page module",a.ue_pdm))})(ue_csm); (function(a){a.ue_vpm||!a.ue_cel||a.ue.isBF||(a.ue_vpm=function(){function m(){var a=z(),b={w:k.innerWidth,h:k.innerHeight,x:k.pageXOffset,y:k.pageYOffset};c&&c.w==b.w&&c.h==b.h&&c.x==b.x&&c.y==b.y||(b.t=a,b.k="vpi",c=b,e(c,{clog:1}),s&&v("vpi",{t:(c.t||"0")+"",h:(c.h||"0")+"",y:(c.y||"0")+"",w:(c.w||"0")+"",x:(c.x||"0")+""}));f=0;x=z()-a;l+=1}function n(){f||(f=a.ue_cel.timeout(m,B))}var c,f,B,z,x=0,l=0,k=a.window,d=a.ue,e=a.ue_cel.log,w=a.uet,t=a.uex,q=d.attach,g=d.detach,s=k.csa,v=a.ue_cel.csaEventLog; "function"==typeof w&&w("bb","csmCELLSvpm",{wb:1});return{on:function(a){z=a.ts;B=a.timespan||100;m();q&&(q("scroll",n),q("resize",n));"function"==typeof t&&t("ld","csmCELLSvpm",{wb:1})},off:function(a){clearTimeout(f);g&&(g("scroll",n),g("resize",n));d.count&&(d.count("cel.VPI.TotalExecutions",l),d.count("cel.VPI.TotalExecutionTime",x),d.count("cel.VPI.AverageExecutionTime",x/l))},ready:function(){return a.ue_cel&&a.ue_cel.log},reset:function(){c=void 0},getVpi:function(){return c}}}(),a.ue_cel&& a.ue_cel.registerModule("viewport module",a.ue_vpm))})(ue_csm); (function(a){if(!a.ue_fem&&a.ue_cel&&a.ue_utils){var m=a.ue||{},n=a.window,c=n.document;!m.isBF&&!a.ue_fem&&c.querySelector&&n.getComputedStyle&&[].forEach&&(a.ue_fem=function(){function f(a,b){return a>b?3>a-b:3>b-a}function B(a,b){var c=n.pageXOffset,d=n.pageYOffset,k;a:{try{if(a){var e=a.getBoundingClientRect(),g,m=0===a.offsetWidth&&0===a.offsetHeight;c:{for(var h=a.parentNode,p=e.left||0,w=e.top||0,q=e.width||0,s=e.height||0;h&&h!==document.body;){var l;d:{try{var r=void 0;if(h)var t=h.getBoundingClientRect(), r={x:t.left||0,y:t.top||0,w:t.width||0,h:t.height||0};else r=void 0;l=r;break d}catch(I){}l=void 0}var u=window.getComputedStyle(h),v="hidden"===u.overflow,x=v||"hidden"===u.overflowX,y=v||"hidden"===u.overflowY,z=w+s-1<l.y+1||w+1>l.y+l.h-1;if((p+q-1<l.x+1||p+1>l.x+l.w-1)&&x||z&&y){g=!0;break c}h=h.parentNode}g=!1}k={x:e.left+c||0,y:e.top+d||0,w:e.width||0,h:e.height||0,d:(m||g)|0}}else k=void 0;break a}catch(J){}k=void 0}if(k&&!a.cel_b)a.cel_b=k,D({n:a.getAttribute(A),w:a.cel_b.w,h:a.cel_b.h,d:a.cel_b.d, x:a.cel_b.x,y:a.cel_b.y,t:b,k:"ewi",cl:a.className},{clog:1});else{if(c=k)c=a.cel_b,d=k,c=d.d===c.d&&1===d.d?!1:!(f(c.x,d.x)&&f(c.y,d.y)&&f(c.w,d.w)&&f(c.h,d.h)&&c.d===d.d);c&&(a.cel_b=k,D({n:a.getAttribute(A),w:a.cel_b.w,h:a.cel_b.h,d:a.cel_b.d,x:a.cel_b.x,y:a.cel_b.y,t:b,k:"ewi"},{clog:1}))}}function z(d,e){var f;f=d.c?c.getElementsByClassName(d.c):d.id?[c.getElementById(d.id)]:c.querySelectorAll(d.s);d.w=[];for(var g=0;g<f.length;g++){var h=f[g];if(h){if(!h.getAttribute(A)){var l=h.getAttribute("cel_widget_id")|| (d.id_gen||u)(h,g)||h.id;h.setAttribute(A,l)}d.w.push(h);k(Q,h,e)}}!1===C&&(F++,F===b.length&&(C=!0,a.ue_utils.notifyWidgetsLabeled()))}function x(a,b){h.contains(a)||D({n:a.getAttribute(A),t:b,k:"ewd"},{clog:1})}function l(a){K.length&&ue_cel.timeout(function(){if(s){for(var b=R(),c=!1;R()-b<g&&!c;){for(c=S;0<c--&&0<K.length;){var d=K.shift();T[d.type](d.elem,d.time)}c=0===K.length}U++;l(a)}},0)}function k(a,b,c){K.push({type:a,elem:b,time:c})}function d(a,c){for(var d=0;d<b.length;d++)for(var e= b[d].w||[],h=0;h<e.length;h++)k(a,e[h],c)}function e(){M||(M=a.ue_cel.timeout(function(){M=null;var c=v();d(W,c);for(var e=0;e<b.length;e++)k(X,b[e],c);0===b.length&&!1===C&&(C=!0,a.ue_utils.notifyWidgetsLabeled());l(c)},q))}function w(){M||N||(N=a.ue_cel.timeout(function(){N=null;var a=v();d(Q,a);l(a)},q))}function t(){return y&&E&&h&&h.contains&&h.getBoundingClientRect&&v}var q=50,g=4.5,s=!1,v,A="data-cel-widget",b=[],F=0,C=!1,u=function(){},D=a.ue_cel.log,h,p,y,E,G=n.MutationObserver||n.WebKitMutationObserver|| n.MozMutationObserver,r=!!G,H,I,O="DOMAttrModified",L="DOMNodeInserted",J="DOMNodeRemoved",N,M,K=[],U=0,S=null,W="removedWidget",X="updateWidgets",Q="processWidget",T,V=n.performance||{},R=V.now&&function(){return V.now()}||function(){return Date.now()};"function"==typeof uet&&uet("bb","csmCELLSfem",{wb:1});return{on:function(d){function k(){if(t()){T={removedWidget:x,updateWidgets:z,processWidget:B};if(r){var a={attributes:!0,subtree:!0};H=new G(w);I=new G(e);H.observe(h,a);I.observe(h,{childList:!0, subtree:!0});I.observe(p,a)}else y.call(h,O,w),y.call(h,L,e),y.call(h,J,e),y.call(p,L,w),y.call(p,J,w);e()}}h=c.body;p=c.head;y=h.addEventListener;E=h.removeEventListener;v=d.ts;b=a.cel_widgets||[];S=d.bs||5;m.deffered?k():m.attach&&m.attach("load",k);"function"==typeof uex&&uex("ld","csmCELLSfem",{wb:1});s=!0},off:function(){t()&&(I&&(I.disconnect(),I=null),H&&(H.disconnect(),H=null),E.call(h,O,w),E.call(h,L,e),E.call(h,J,e),E.call(p,L,w),E.call(p,J,w));m.count&&m.count("cel.widgets.batchesProcessed", U);s=!1},ready:function(){return a.ue_cel&&a.ue_cel.log},reset:function(){b=a.cel_widgets||[]}}}(),a.ue_cel&&a.ue_fem&&a.ue_cel.registerModule("features module",a.ue_fem))}})(ue_csm); (function(a){!a.ue_mcm&&a.ue_cel&&a.ue_utils&&!a.ue.isBF&&(a.ue_mcm=function(){function m(a,d){var e=a.srcElement||a.target||{},f={k:n,w:(d||{}).ow||(B.body||{}).scrollWidth,h:(d||{}).oh||(B.body||{}).scrollHeight,t:(d||{}).ots||c(),x:a.pageX,y:a.pageY,p:l.getXPath(e),n:e.nodeName};z&&"function"===typeof z.now&&a.timeStamp&&(f.dt=(d||{}).odt||z.now()-a.timeStamp,f.dt=parseFloat(f.dt.toFixed(2)));a.button&&(f.b=a.button);e.href&&(f.r=l.extractStringValue(e.href));e.id&&(f.i=e.id);e.className&&e.className.split&& (f.c=e.className.split(/\s+/));x(f,{c:1})}var n="mcm",c,f=a.window,B=f.document,z=f.performance,x=a.ue_cel.log,l=a.ue_utils;return{on:function(k){c=k.ts;a.ue_cel_stub&&a.ue_cel_stub.replayModule(n,m);f.addEventListener&&f.addEventListener("mousedown",m,!0)},off:function(a){f.addEventListener&&f.removeEventListener("mousedown",m,!0)},ready:function(){return a.ue_cel&&a.ue_cel.log},reset:function(){}}}(),a.ue_cel&&a.ue_cel.registerModule("mouse click module",a.ue_mcm))})(ue_csm); (function(a){a.ue_mmm||!a.ue_cel||a.ue.isBF||(a.ue_mmm=function(m){function n(a,b){var c={x:a.pageX||a.x||0,y:a.pageY||a.y||0,t:l()};!b&&p&&(c.t-p.t<B||c.x==p.x&&c.y==p.y)||(p=c,u.push(c))}function c(){if(u.length){F=H.now();for(var a=0;a<u.length;a++){var c=u[a],d=a;y=u[h];E=c;var e=void 0;if(!(e=2>d)){e=void 0;a:if(u[d].t-u[d-1].t>f)e=0;else{for(e=h+1;e<d;e++){var g=y,k=E,l=u[e];G=(k.x-g.x)*(g.y-l.y)-(g.x-l.x)*(k.y-g.y);if(G*G/((k.x-g.x)*(k.x-g.x)+(k.y-g.y)*(k.y-g.y))>z){e=0;break a}}e=1}e=!e}(r= e)?h=d-1:D.pop();D.push(c)}C=H.now()-F;s=Math.min(s,C);v=Math.max(v,C);A=(A*b+C)/(b+1);b+=1;q({k:x,e:D,min:Math.floor(1E3*s),max:Math.floor(1E3*v),avg:Math.floor(1E3*A)},{c:1});u=[];D=[];h=0}}var f=100,B=20,z=25,x="mmm1",l,k,d=a.window,e=d.document,w=d.setInterval,t=a.ue,q=a.ue_cel.log,g,s=1E3,v=0,A=0,b=0,F,C,u=[],D=[],h=0,p,y,E,G,r,H=m&&m.now&&m||Date.now&&Date||{now:function(){return(new Date).getTime()}};return{on:function(a){l=a.ts;k=a.ns;t.attach&&t.attach("mousemove",n,e);g=w(c,3E3)},off:function(a){k&& (p&&n(p,!0),c());clearInterval(g);t.detach&&t.detach("mousemove",n,e)},ready:function(){return a.ue_cel&&a.ue_cel.log},reset:function(){u=[];D=[];h=0;p=null}}}(window.performance),a.ue_cel&&a.ue_cel.registerModule("mouse move module",a.ue_mmm))})(ue_csm); ue_csm.ue.exec(function(b,c){var e=function(){},f=function(){return{send:function(b,d){if(d&&b){var a;if(c.XDomainRequest)a=new XDomainRequest,a.onerror=e,a.ontimeout=e,a.onprogress=e,a.onload=e,a.timeout=0;else if(c.XMLHttpRequest){if(a=new XMLHttpRequest,!("withCredentials"in a))throw"";}else a=void 0;if(!a)throw"";a.open("POST",b,!0);a.setRequestHeader&&a.setRequestHeader("Content-type","text/plain");a.send(d)}},isSupported:!0}}(),g=function(){return{send:function(c,d){if(c&&d)if(navigator.sendBeacon(c, d))b.ue_sbuimp&&b.ue&&b.ue.ssw&&b.ue.ssw("eelsts","scs");else throw"";},isSupported:!!navigator.sendBeacon&&!(c.cordova&&c.cordova.platformId&&"ios"==c.cordova.platformId)}}();b.ue._ajx=f;b.ue._sBcn=g},"Transportation-clients")(ue_csm,window); ue_csm.ue.exec(function(b,k){function B(){for(var a=0;a<arguments.length;a++){var c=arguments[a];try{var g;if(c.isSupported){var f=u.buildPayload(l,e);g=c.send(K,f)}else throw dummyException;return g}catch(d){}}a={m:"All supported clients failed",attribution:"CSMSushiClient_TRANSPORTATION_FAIL",f:"sushi-client.js",logLevel:"ERROR"};C(a,k.ue_err_chan||"jserr");b.ue_err.buffer&&b.ue_err.buffer.push(a)}function m(){if(e.length){for(var a=0;a<n.length;a++)n[a]();B(d._sBcn||{},d._ajx||{});e=[];h={};l= {};v=w=r=x=0}}function L(){var a=new Date,c=function(a){return 10>a?"0"+a:a};return Date.prototype.toISOString?a.toISOString():a.getUTCFullYear()+"-"+c(a.getUTCMonth()+1)+"-"+c(a.getUTCDate())+"T"+c(a.getUTCHours())+":"+c(a.getUTCMinutes())+":"+c(a.getUTCSeconds())+"."+String((a.getUTCMilliseconds()/1E3).toFixed(3)).slice(2,5)+"Z"}function y(a){try{return JSON.stringify(a)}catch(c){}return null}function D(a,c,g,f){var q=!1;f=f||{};s++;if(s==E){var p={m:"Max number of Sushi Logs exceeded",f:"sushi-client.js", logLevel:"ERROR",attribution:"CSMSushiClient_MAX_CALLS"};C(p,k.ue_err_chan||"jserr");b.ue_err.buffer&&b.ue_err.buffer.push(p)}if(p=!(s>=E))(p=a&&-1<a.constructor.toString().indexOf("Object")&&c&&-1<c.constructor.toString().indexOf("String")&&g&&-1<g.constructor.toString().indexOf("String"))||M++;p&&(d.count&&d.count("Event:"+g,1),a.producerId=a.producerId||c,a.schemaId=a.schemaId||g,a.timestamp=L(),c=Date.now?Date.now():+new Date,g=Math.random().toString().substring(2,12),a.messageId=b.ue_id+"-"+ c+"-"+g,f&&!f.ssd&&(a.sessionId=a.sessionId||b.ue_sid,a.requestId=a.requestId||b.ue_id,a.obfuscatedMarketplaceId=a.obfuscatedMarketplaceId||b.ue_mid),(c=y(a))?(c=c.length,(e.length==N||r+c>O)&&m(),r+=c,a={data:u.compressEvent(a)},e.push(a),(f||{}).n?0===F?m():v||(v=k.setTimeout(m,F)):w||(w=k.setTimeout(m,P)),q=!0):q=!1);!q&&b.ue_int&&console.error("Invalid JS Nexus API call");return q}function G(){if(!H){for(var a=0;a<z.length;a++)z[a]();for(a=0;a<n.length;a++)n[a]();e.length&&(b.ue_sbuimp&&b.ue&& b.ue.ssw&&(a=y({dct:l,evt:e}),b.ue.ssw("eeldata",a),b.ue.ssw("eelsts","unk")),B(d._sBcn||{}));H=!0}}function I(a){z.push(a)}function J(a){n.push(a)}var E=1E3,N=499,O=524288,t=function(){},d=b.ue||{},C=d.log||t,Q=b.uex||t;(b.uet||t)("bb","ue_sushi_v1",{wb:1});var K=b.ue_surl||"https://unagi-na.amazon.com/1/events/com.amazon.csm.nexusclient.gamma",R=["messageId","timestamp"],A="#",e=[],h={},l={},r=0,x=0,M=0,s=0,z=[],n=[],H=!1,v,w,F=void 0===b.ue_hpsi?1E3:b.ue_hpsi,P=void 0===b.ue_lpsi?1E4:b.ue_lpsi, u=function(){function a(a){h[a]=A+x++;l[h[a]]=a;return h[a]}function c(b){if(!(b instanceof Function)){if(b instanceof Array){for(var f=[],d=b.length,e=0;e<d;e++)f[e]=c(b[e]);return f}if(b instanceof Object){f={};for(d in b)b.hasOwnProperty(d)&&(f[h[d]?h[d]:a(d)]=-1===R.indexOf(d)?c(b[d]):b[d]);return f}return"string"===typeof b&&(b.length>(A+x).length||b.charAt(0)===A)?h[b]?h[b]:a(b):b}}return{compressEvent:c,buildPayload:function(){return y({cs:{dct:l},events:e})}}}();(function(){if(d.event&&d.event.isStub){if(b.ue_sbuimp&& b.ue&&b.ue.ssw){var a=b.ue.ssw("eelsts").val;if(a&&"unk"===a&&(a=b.ue.ssw("eeldata").val)){var c;a:{try{c=JSON.parse(a);break a}catch(g){}c=null}c&&c.evt instanceof Array&&c.dct instanceof Object&&(e=c.evt,l=c.dct,e&&l&&(m(),b.ue.ssw("eeldata","{}"),b.ue.ssw("eelsts","scs")))}}d.event.replay(function(a){a[3]=a[3]||{};a[3].n=1;D.apply(this,a)});d.onSushiUnload.replay(function(a){I(a[0])});d.onSushiFlush.replay(function(a){J(a[0])})}})();d.attach("beforeunload",G);d.attach("pagehide",G);d._cmps=u;d.event= D;d.event.reset=function(){s=0};d.onSushiUnload=I;d.onSushiFlush=J;try{k.P&&k.P.register&&k.P.register("sushi-client",t)}catch(S){b.ueLogError(S,{logLevel:"WARN"})}Q("ld","ue_sushi_v1",{wb:1})},"Nxs-JS-Client")(ue_csm,window); ue_csm.ue_unrt = 1500; (function(d,b,t){function u(a,g){var c=a.srcElement||a.target||{},b={k:v,t:g.t,dt:g.dt,x:a.pageX,y:a.pageY,p:e.getXPath(c),n:c.nodeName};a.button&&(b.b=a.button);c.type&&(b.ty=c.type);c.href&&(b.r=e.extractStringValue(c.href));c.id&&(b.i=c.id);c.className&&c.className.split&&(b.c=c.className.split(/\s+/));h+=1;e.getFirstAscendingWidget(c,function(a){b.wd=a;d.ue.log(b,r)})}function w(a){if(!x(a.srcElement||a.target)){m+=1;n=!0;var g=f=d.ue.d(),c;p&&"function"===typeof p.now&&a.timeStamp&&(c=p.now()- a.timeStamp,c=parseFloat(c.toFixed(2)));s=b.setTimeout(function(){u(a,{t:g,dt:c})},y)}}function z(a){if(a){var b=a.filter(A);a.length!==b.length&&(q=!0,k=d.ue.d(),n&&q&&(k&&f&&d.ue.log({k:B,t:f,m:Math.abs(k-f)},r),l(),q=!1,k=0))}}function A(a){if(!a)return!1;var b="characterData"===a.type?a.target.parentElement:a.target;if(!b||!b.hasAttributes||!b.attributes)return!1;var c={"class":"gw-clock gw-clock-aria s-item-container-height-auto feed-carousel using-mouse kfs-inner-container".split(" "),id:["dealClock", "deal_expiry_timer","timer"],role:["timer"]},d=!1;Object.keys(c).forEach(function(a){var e=b.attributes[a]?b.attributes[a].value:"";(c[a]||"").forEach(function(a){-1!==e.indexOf(a)&&(d=!0)})});return d}function x(a){if(!a)return!1;var b=(e.extractStringValue(a.nodeName)||"").toLowerCase(),c=(e.extractStringValue(a.type)||"").toLowerCase(),d=(e.extractStringValue(a.href)||"").toLowerCase();a=(e.extractStringValue(a.id)||"").toLowerCase();var f="checkbox color date datetime-local email file month number password radio range reset search tel text time url week".split(" "); if(-1!==["select","textarea","html"].indexOf(b)||"input"===b&&-1!==f.indexOf(c)||"a"===b&&-1!==d.indexOf("http")||-1!==["sitbreaderrightpageturner","sitbreaderleftpageturner","sitbreaderpagecontainer"].indexOf(a))return!0}function l(){n=!1;f=0;b.clearTimeout(s)}function C(){b.ue.onunload(function(){ue.count("armored-cxguardrails.unresponsive-clicks.violations",h);ue.count("armored-cxguardrails.unresponsive-clicks.violationRate",h/m*100||0)})}if(b.MutationObserver&&b.addEventListener&&Object.keys&& d&&d.ue&&d.ue.log&&d.ue_unrt&&d.ue_utils){var y=d.ue_unrt,r="cel",v="unr_mcm",B="res_mcm",p=b.performance,e=d.ue_utils,n=!1,f=0,s=0,q=!1,k=0,h=0,m=0;b.addEventListener&&(b.addEventListener("mousedown",w,!0),b.addEventListener("beforeunload",l,!0),b.addEventListener("visibilitychange",l,!0),b.addEventListener("pagehide",l,!0));b.ue&&b.ue.event&&b.ue.onSushiUnload&&b.ue.onunload&&C();(new MutationObserver(z)).observe(t,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}})(ue_csm,window,document); ue_csm.ue.exec(function(g,e){if(e.ue_err){var f="";e.ue_err.errorHandlers||(e.ue_err.errorHandlers=[]);e.ue_err.errorHandlers.push({name:"fctx",handler:function(a){if(!a.logLevel||"FATAL"===a.logLevel)if(f=g.getElementsByTagName("html")[0].innerHTML){var b=f.indexOf("var ue_t0=ue_t0||+new Date();");if(-1!==b){var b=f.substr(0,b).split(String.fromCharCode(10)),d=Math.max(b.length-10-1,0),b=b.slice(d,b.length-1);a.fcsmln=d+b.length+1;a.cinfo=a.cinfo||{};for(var c=0;c<b.length;c++)a.cinfo[d+c+1+""]= b[c]}b=f.split(String.fromCharCode(10));a.cinfo=a.cinfo||{};if(!(a.f||void 0===a.l||a.l in a.cinfo))for(c=+a.l-1,d=Math.max(c-5,0),c=Math.min(c+5,b.length-1);d<=c;d++)a.cinfo[d+1+""]=b[d]}}})}},"fatals-context")(document,window); (function(m,b){function c(k){function f(a){a&&"string"===typeof a&&(a=(a=a.match(/^(?:https?:)?\/\/(.*?)(\/|$)/i))&&1<a.length?a[1]:null,a&&a&&("number"===typeof e[a]?e[a]++:e[a]=1))}function d(a){var e=10,d=+new Date;a&&a.timeRemaining?e=a.timeRemaining():a={timeRemaining:function(){return Math.max(0,e-(+new Date-d))}};for(var c=b.performance.getEntries(),k=e;g<c.length&&k>n;)c[g].name&&f(c[g].name),g++,k=a.timeRemaining();g>=c.length?h(!0):l()}function h(a){if(!a){a=m.scripts;var c;if(a)for(var d= 0;d<a.length;d++)(c=a[d].getAttribute("src"))&&"undefined"!==c&&f(c)}0<Object.keys(e).length&&(p&&ue_csm.ue&&ue_csm.ue.event&&(a={domains:e,pageType:b.ue_pty||null,subPageType:b.ue_spty||null,pageTypeId:b.ue_pti||null},ue_csm.ue_sjslob&&(a.lob=ue_csm.ue_lob||"0"),ue_csm.ue.event(a,"csm","csm.CrossOriginDomains.2")),b.ue_ext=e)}function l(){!0===k?d():b.requestIdleCallback?b.requestIdleCallback(d):b.requestAnimationFrame?b.requestAnimationFrame(d):b.setTimeout(d,100)}function c(){if(b.performance&& b.performance.getEntries){var a=b.performance.getEntries();!a||0>=a.length?h(!1):l()}else h(!1)}var e=b.ue_ext||{};b.ue_ext||c();return e}function q(){setTimeout(c,r)}var s=b.ue_dserr||!1,p=!0,n=1,r=2E3,g=0;b.ue_err&&s&&(b.ue_err.errorHandlers||(b.ue_err.errorHandlers=[]),b.ue_err.errorHandlers.push({name:"ext",handler:function(b){if(!b.logLevel||"FATAL"===b.logLevel){var f=c(!0),d=[],h;for(h in f){var f=h,g=f.match(/amazon(\.com?)?\.\w{2,3}$/i);g&&1<g.length||-1!==f.indexOf("amazon-adsystem.com")|| -1!==f.indexOf("amazonpay.com")||-1!==f.indexOf("cloudfront-labs.amazonaws.com")||d.push(h)}b.ext=d}}}));b.ue&&b.ue.isl?c():b.ue&&ue.attach&&ue.attach("load",q)})(document,window); var ue_wtc_c = 3; ue_csm.ue.exec(function(b,e){function l(){for(var a=0;a<f.length;a++)a:for(var d=s.replace(A,f[a])+g[f[a]]+t,c=arguments,b=0;b<c.length;b++)try{c[b].send(d);break a}catch(e){}g={};f=[];n=0;k=p}function u(){B?l(q):l(C,q)}function v(a,m,c){r++;if(r>w)d.count&&1==r-w&&(d.count("WeblabTriggerThresholdReached",1),b.ue_int&&console.error("Number of max call reached. Data will no longer be send"));else{var h=c||{};h&&-1<h.constructor.toString().indexOf(D)&&a&&-1<a.constructor.toString().indexOf(x)&&m&&-1< m.constructor.toString().indexOf(x)?(h=b.ue_id,c&&c.rid&&(h=c.rid),c=h,a=encodeURIComponent(",wl="+a+"/"+m),2E3>a.length+p?(2E3<k+a.length&&u(),void 0===g[c]&&(g[c]="",f.push(c)),g[c]+=a,k+=a.length,n||(n=e.setTimeout(u,E))):b.ue_int&&console.error("Invalid API call. The input provided is over 2000 chars.")):d.count&&(d.count("WeblabTriggerImproperAPICall",1),b.ue_int&&console.error("Invalid API call. The input provided does not match the API protocol i.e ue.trigger(String, String, Object)."))}}function F(){d.trigger&& d.trigger.isStub&&d.trigger.replay(function(a){v.apply(this,a)})}function y(){z||(f.length&&l(q),z=!0)}var t=":1234",s="//"+b.ue_furl+"/1/remote-weblab-triggers/1/OE/"+b.ue_mid+":"+b.ue_sid+":PLCHLDR_RID$s:wl-client-id%3DCSMTriger",A="PLCHLDR_RID",E=b.wtt||1E4,p=s.length+t.length,w=b.mwtc||2E3,G=1===e.ue_wtc_c,B=3===e.ue_wtc_c,H=e.XMLHttpRequest&&"withCredentials"in new e.XMLHttpRequest,x="String",D="Object",d=b.ue,g={},f=[],k=p,n,z=!1,r=0,C=function(){return{send:function(a){if(H){var b=new e.XMLHttpRequest; b.open("GET",a,!0);G&&(b.withCredentials=!0);b.send()}else throw"";}}}(),q=function(){return{send:function(a){(new Image).src=a}}}();e.encodeURIComponent&&(d.attach&&(d.attach("beforeunload",y),d.attach("pagehide",y)),F(),d.trigger=v)},"client-wbl-trg")(ue_csm,window); (function(k,d,h){function f(a,c,b){a&&a.indexOf&&0===a.indexOf("http")&&0!==a.indexOf("https")&&l(s,c,a,b)}function g(a,c,b){a&&a.indexOf&&(location.href.split("#")[0]!=a&&null!==a&&"undefined"!==typeof a||l(t,c,a,b))}function l(a,c,b,e){m[b]||(e=u&&e?n(e):"N/A",d.ueLogError&&d.ueLogError({message:a+c+" : "+b,logLevel:v,stack:"N/A"},{attribution:e}),m[b]=1,p++)}function e(a,c){if(a&&c)for(var b=0;b<a.length;b++)try{c(a[b])}catch(d){}}function q(){return d.performance&&d.performance.getEntriesByType? d.performance.getEntriesByType("resource"):[]}function n(a){if(a.id)return"//*[@id='"+a.id+"']";var c;c=1;var b;for(b=a.previousSibling;b;b=b.previousSibling)b.nodeName==a.nodeName&&(c+=1);b=a.nodeName;1!=c&&(b+="["+c+"]");a.parentNode&&(b=n(a.parentNode)+"/"+b);return b}function w(){var a=h.images;a&&a.length&&e(a,function(a){var b=a.getAttribute("src");f(b,"img",a);g(b,"img",a)})}function x(){var a=h.scripts;a&&a.length&&e(a,function(a){var b=a.getAttribute("src");f(b,"script",a);g(b,"script",a)})} function y(){var a=h.styleSheets;a&&a.length&&e(a,function(a){if(a=a.ownerNode){var b=a.getAttribute("href");f(b,"style",a);g(b,"style",a)}})}function z(){if(A){var a=q();e(a,function(a){f(a.name,a.initiatorType)})}}function B(){e(q(),function(a){g(a.name,a.initiatorType)})}function r(){var a;a=d.location&&d.location.protocol?d.location.protocol:void 0;"https:"==a&&(z(),w(),x(),y(),B(),p<C&&setTimeout(r,D))}var s="[CSM] Insecure content detected ",t="[CSM] Ajax request to same page detected ",v="WARN", m={},p=0,D=k.ue_nsip||1E3,C=5,A=1==k.ue_urt,u=!0;ue_csm.ue_disableNonSecure||(d.performance&&d.performance.setResourceTimingBufferSize&&d.performance.setResourceTimingBufferSize(300),r())})(ue_csm,window,document); var ue_aa_a = "C"; if (ue.trigger && (ue_aa_a === "C" || ue_aa_a === "T1")) { ue.trigger("UEDATA_AA_SERVERSIDE_ASSIGNMENT_CLIENTSIDE_TRIGGER_190249", ue_aa_a); } (function(f,b){function g(){try{b.PerformanceObserver&&"function"===typeof b.PerformanceObserver&&(a=new b.PerformanceObserver(function(b){c(b.getEntries())}),a.observe(d))}catch(h){k()}}function m(){for(var h=d.entryTypes,a=0;a<h.length;a++)c(b.performance.getEntriesByType(h[a]))}function c(a){if(a&&Array.isArray(a)){for(var c=0,e=0;e<a.length;e++){var d=l.indexOf(a[e].name);if(-1!==d){var g=Math.round(b.performance.timing.navigationStart+a[e].startTime);f.uet(n[d],void 0,void 0,g);c++}}l.length=== c&&k()}}function k(){a&&a.disconnect&&"function"===typeof a.disconnect&&a.disconnect()}if("function"===typeof f.uet&&b.performance&&"object"===typeof b.performance&&b.performance.getEntriesByType&&"function"===typeof b.performance.getEntriesByType&&b.performance.timing&&"object"===typeof b.performance.timing&&"number"===typeof b.performance.timing.navigationStart){var d={entryTypes:["paint"]},l=["first-paint","first-contentful-paint"],n=["fp","fcp"],a;try{m(),g()}catch(p){f.ueLogError(p,{logLevel:"ERROR", attribution:"performanceMetrics"})}}})(ue_csm,window); if (window.csa) { csa("Events")("setEntity", { page:{pageType: "PromotionsDiscoveryHz", subPageType: "", pageTypeId: ""} }); } csa.plugin(function(c){var m="transitionStart",n="pageVisible",e="PageTiming",t="visibilitychange",s="$latency.visible",i=c.global,r=(i.performance||{}).timing,a=["navigationStart","unloadEventStart","unloadEventEnd","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","domLoading","domInteractive","domContentLoadedEventStart","domContentLoadedEventEnd","domComplete","loadEventStart","loadEventEnd"],u=c.config,o=i.Math,l=o.max,g=o.floor,d=i.document||{},f=(r||{}).navigationStart,v=f,p=0,S=null;if(i.Object.keys&&[].forEach&&!u["KillSwitch."+e]){if(!r||null===f||f<=0||void 0===f)return c.error("Invalid navigation timing data: "+f);S=new E({schemaId:"<ns>.PageLatency.6",producerId:"csa"}),"boolean"!=typeof d.hidden&&"string"!=typeof d.visibilityState||!d.removeEventListener?c.emit(s):b()?(c.emit(s),I(n,f)):c.on(d,t,function e(){b()&&(v=c.time(),d.removeEventListener(t,e),I(m,v),I(n,v),c.emit(s))}),c.once("$unload",h),c.once("$load",h),c.on("$pageTransition",function(){v=c.time()}),c.register(e,{mark:I,instance:function(e){return new E(e)}})}function E(e){var i,r=null,a=e.ent||{page:["pageType","subPageType","requestId"]},o=e.logger||c("Events",{producerId:e.producerId,lob:u.lob||"0"});if(!e||!e.producerId||!e.schemaId)return c.error("The producer id and schema Id must be defined for PageLatencyInstance.");function d(){return i||v}function n(){r=c.UUID()}this.mark=function(n,t){if(null!=n)return t=t||c.time(),n===m&&(i=t),c.once(s,function(){o("log",{messageId:r,__merge:function(e){e.markers[n]=function(e,n){return l(0,n-(e||v))}(d(),t),e.markerTimestamps[n]=g(t)},markers:{},markerTimestamps:{},navigationStartTimestamp:d()?new Date(d()).toISOString():null,schemaId:e.schemaId},{ent:a})}),t},n(),c.on("$beforePageTransition",n)}function I(e,n){e===m&&(v=n);var t=S.mark(e,n);c.emit("$timing:"+e,t)}function h(){if(!p){for(var e=0;e<a.length;e++)r[a[e]]&&I(a[e],r[a[e]]);p=1}}function b(){return!d.hidden||"visible"===d.visibilityState}});csa.plugin(function(u){var f,c,l="length",a="parentElement",t="target",i="getEntriesByName",e="perf",n=null,r="_csa_flt",o="_csa_llt",s="previousSibling",d="visuallyLoaded",g="client",h="offset",m="scroll",p="Width",v="Height",y=g+p,E=g+v,S=h+p,b=h+v,x=m+p,O=m+v,_="_osrc",w="_elt",L="_eid",T=10,I=5,N=15,k=100,B=u.global,H=u.timeout,W=B.Math,Y=W.max,C=W.floor,F=W.ceil,M=B.document||{},R=M.body||{},V=M.documentElement||{},$=B.performance||{},P=($.timing||{}).navigationStart,X=Date.now,D=Object.values||(u.types||{}).ovl,J=u("PageTiming"),j=u("SpeedIndexBuffers"),q=[],Q=[],U=[],z=[],A=[],G=[],K=.1,Z=.1,ee=0,ne=0,te=!0,ie=0,re=0,oe=1==u.config["SpeedIndex.ForceReplay"],ae=0,fe=1,ue=0,ce={},le=[],se=0,de={buffered:1};function ge(e){u.global.ue_csa_ss_tag||u.emit("$csmTag:"+e,0,de)}function he(){for(var e=X(),n=0;f;){if(0!==f[l]){if(!1!==f.h(f[0])&&f.shift(),n++,!oe&&n%T==0&&X()-e>I)break}else f=f.n}ee=0,f&&(ee||(!0===M.hidden?(oe=1,he()):u.timeout(he,0)))}function me(e,n,t,i,r){ue=C(e),q=n,Q=t,U=i,G=r;var o=M.createTreeWalker(M.body,NodeFilter.SHOW_TEXT,null,null),a={w:B.innerWidth,h:B.innerHeight,x:B.pageXOffset,y:B.pageYOffset};M.body[w]=e,z.push({w:o,vp:a}),A.push({img:M.images,iter:0}),q.h=pe,(q.n=Q).h=ve,(Q.n=U).h=ye,(U.n=z).h=Ee,(z.n=A).h=Se,(A.n=G).h=be,f=q,he()}function pe(e){e.m.forEach(function(e){for(var n=e;n&&(e===n||!n[r]||!n[o]);)n[r]||(n[r]=e[r]),n[o]||(n[o]=e[o]),n[w]=n[r]-P,n=n[s]})}function ve(e){e.m.forEach(function(e){var n=e[t];_ in n||(n[_]=e.oldValue)})}function ye(n){n.m.forEach(function(e){e[t][w]=n.t-P})}function Ee(e){for(var n,t=e.vp,i=e.w,r=T;(n=i.nextNode())&&0<r;){r-=1;var o=(n[a]||{}).nodeName;"SCRIPT"!==o&&"STYLE"!==o&&"NOSCRIPT"!==o&&"BODY"!==o&&0!==(n.nodeValue||"").trim()[l]&&Le(n[a],xe(n),t)}return!n}function Se(e){for(var n={w:B.innerWidth,h:B.innerHeight,x:B.pageXOffset,y:B.pageYOffset},t=T;e.iter<e.img[l]&&0<t;){var i,r=e.img[e.iter],o=we(r),a=o&&xe(o)||xe(r);o?(o[w]=a,i=_e(o.querySelector('[aria-posinset="1"] img')||r)||a,r=o):i=_e(r)||a,re&&c<i&&(i=a),Le(r,i,n),e.iter+=1,t-=1}return e.img[l]<=e.iter}function be(e){var n=[],i=0,r=0,o=ne,t=B.innerHeight||Y(R[O]||0,R[b]||0,V[E]||0,V[O]||0,V[b]||0),a=C(e.y/k),f=F((e.y+t)/k);le.slice(a,f).forEach(function(e){(e.elems||[]).forEach(function(e){e.lt in n||(n[e.lt]={}),e.id in n[e.lt]||(i+=(n[e.lt][e.id]=e).a)})}),ge("startVL"),D(n).forEach(function(e){D(e).forEach(function(e){var n=1-r/i,t=Y(e.lt,o);se+=n*(t-o),o=t,function(e,n){var t;for(;K<=1&&K-.01<=e;)Te(d+(t=(100*K).toFixed(0)),n.lt),"50"!==t&&"90"!==t||u("Content",{target:n.e})("mark",d+t,P+F(n.lt||0)),K+=Z}((r+=e.a)/i,e)})}),ge("endVL"),ne=e.t-P,G[l]<=1&&(Te("speedIndex",se),Te(d+"0",ue)),te&&(te=!1,Te("atfSpeedIndex",se))}function xe(e){for(var n=e[a],t=N;n&&0<t;){if(n[w]||0===n[w])return Y(n[w],ue);n=n.parentElement,t-=1}}function Oe(e,n){if(e){if(!e.indexOf("data:"))return xe(n);var t=$[i](e)||[];if(0<t[l])return Y(F(t[0].responseEnd||0),ue)}}function _e(e){return Oe(e[_],e)||Oe(e.currentSrc,e)||Oe(e.src,e)}function we(e){for(var n=10,t=e.parentElement;t&&0<n;){if(t.classList&&t.classList.contains("a-carousel-viewport"))return t;t=t.parentElement,n-=1}return null}function Le(e,n,t){if((n||0===n)&&!e[L]){var i=e.getBoundingClientRect(),r=i.width*i.height,o=t.w||Y(R[x]||0,R[S]||0,V[y]||0,V[x]||0,V[S]||0)||i.right,a=i.width/2,f=fe++;if(0!=r&&!(a<i.right-o||i.right<a)){for(var u={e:e,lt:n,a:r,id:f},c=C((i.top+t.y)/k),l=F((i.top+t.y+i.height)/k),s=c;s<=l;s++)s in le||(le[s]={elems:[],lt:0}),le[s].elems.push(u);e[L]=f}}}function Te(e,n){J("mark",e,P+F((ce[e]=n)||0))}function Ie(e){ae||(ge("browserQuite"+e),j("getBuffers",me),ae=1)}P&&D&&$[i]?(ge(e+"Yes"),j("registerListener",function(){re&&(clearTimeout(ie),ie=H(Ie.bind(n,"Mut"),2500))}),u.once("$unload",function(){oe=1,Ie("Ud")}),u.once("$load",function(){re=1,c=X()-P,ie=H(Ie.bind(n,"Ld"),2500)}),u.once("$timing:functional",Ie.bind(n,"Fn")),j("replayModuleIsLive"),u.register("SpeedIndex",{getMarkers:function(e){e&&e(JSON.parse(JSON.stringify(ce)))}})):ge(e+"No")});csa.plugin(function(e){var m=!!e.config["LCP.elementDedup"],t=!1,n=e("PageTiming"),r=e.global.PerformanceObserver,a=e.global.performance;function i(){return a.timing.navigationStart}function o(){t||function(o){var l=new r(function(e){var t=e.getEntries();if(0!==t.length){var n=t[t.length-1];if(m&&""!==n.id&&n.element&&"IMG"===n.element.tagName){for(var r={},a=t[0],i=0;i<t.length;i++)t[i].id in r||(""!==t[i].id&&(r[t[i].id]=!0),a.startTime<t[i].startTime&&(a=t[i]));n=a}l.disconnect(),o({startTime:n.startTime,renderTime:n.renderTime,loadTime:n.loadTime})}});try{l.observe({type:"largest-contentful-paint",buffered:!0})}catch(e){}}(function(e){e&&(t=!0,n("mark","largestContentfulPaint",Math.floor(e.startTime+i())),e.renderTime&&n("mark","largestContentfulPaint.render",Math.floor(e.renderTime+i())),e.loadTime&&n("mark","largestContentfulPaint.load",Math.floor(e.loadTime+i())))})}r&&a&&a.timing&&(e.once("$unload",o),e.once("$load",o),e.register("LargestContentfulPaint",{}))});csa.plugin(function(r){var e=r("Metrics",{producerId:"csa"}),n=r.global.PerformanceObserver;n&&(n=new n(function(r){var t=r.getEntries();if(0===t.length||!t[0].processingStart||!t[0].startTime)return;!function(r){r=r||0,n.disconnect(),0<=r?e("recordMetric","firstInputDelay",r):e("recordMetric","firstInputDelay.invalid",1)}(t[0].processingStart-t[0].startTime)}),function(){try{n.observe({type:"first-input",buffered:!0})}catch(r){}}())});csa.plugin(function(d){var e="Metrics",g=d.config,f=0;function r(i){var c,t,e=i.producerId,r=i.logger,o=r||d("Events",{producerId:e,lob:g.lob||"0"}),s=(i||{}).dimensions||{},u={},n=-1;if(!e&&!r)return d.error("Either a producer id or custom logger must be defined");function a(){n!==f&&(c=d.UUID(),t=d.UUID(),u={},n=f)}this.recordMetric=function(r,n){var e=i.logOptions||{ent:{page:["pageType","subPageType","requestId"]}};e.debugMetric=i.debugMetric,a(),o("log",{messageId:c,schemaId:i.schemaId||"<ns>.Metric.4",metrics:{},dimensions:s,__merge:function(e){e.metrics[r]=n}},e)},this.recordCounter=function(r,e){var n=i.logOptions||{ent:{page:["pageType","subPageType","requestId"]}};if("string"!=typeof r||"number"!=typeof e||!isFinite(e))return d.error("Invalid type given for counter name or counter value: "+r+"/"+e);a(),r in u||(u[r]={});var c=u[r];"f"in c||(c.f=e),c.c=(c.c||0)+1,c.s=(c.s||0)+e,c.l=e,o("log",{messageId:t,schemaId:i.schemaId||"<ns>.InternalCounters.3",c:{},__merge:function(e){r in e.c||(e.c[r]={}),c.fs||(c.fs=1,e.c[r].f=c.f),1<c.c&&(e.c[r].s=c.s,e.c[r].l=c.l,e.c[r].c=c.c)}},n)}}g["KillSwitch."+e]||(new r({producerId:"csa"}).recordMetric("baselineMetricEvent",1),d.on("$beforePageTransition",function(){f++}),d.register(e,{instance:function(e){return new r(e||{})}}))});csa.plugin(function(s){var n=s.config,r=(s.global.performance||{}).timing,c=(r||{}).navigationStart||s.time(),g=0;function e(){g+=1}function i(i){i=i||{};var o=s.UUID(),t=g,r=i.producerId,e=i.logger,a=e||s("Events",{producerId:r,lob:n.lob||"0"});if(!r&&!e)return s.error("Either a producer id or custom logger must be defined");this.mark=function(e,r){var n=(void 0===r?s.time():r)-c;t!==g&&(t=g,o=s.UUID()),a("log",{messageId:o,schemaId:i.schemaId||"<ns>.Timer.1",markers:{},__merge:function(r){r.markers[e]=n}},i.logOptions)}}r&&(e(),s.on("$beforePageTransition",e),s.register("Timers",{instance:function(r){return new i(r||{})}}))});csa.plugin(function(t){var e="takeRecords",i="disconnect",n="function",o=t("Metrics",{producerId:"csa"}),c=t("PageTiming"),a=t.global,u=t.timeout,r=t.on,f=a.PerformanceObserver,m=0,l=!1,s=0,d=a.performance,h=a.document,v=null,y=!1,g=t.blank;function p(){l||(l=!0,clearTimeout(v),typeof f[e]===n&&f[e](),typeof f[i]===n&&f[i](),o("recordMetric","documentCumulativeLayoutShift",m),c("mark","cumulativeLayoutShiftLastTimestamp",Math.floor(s+d.timing.navigationStart)))}f&&d&&d.timing&&h&&(f=new f(function(t){v&&clearTimeout(v);t.getEntries().forEach(function(t){t.hadRecentInput||(m+=t.value,s<t.startTime&&(s=t.startTime))}),v=u(p,5e3)}),function(){try{f.observe({type:"layout-shift",buffered:!0}),v=u(p,5e3)}catch(t){}}(),g=r(h,"click",function(t){y||(y=!0,o("recordMetric","documentCumulativeLayoutShiftToFirstInput",m),g())}),r(h,"visibilitychange",function(){"hidden"===h.visibilityState&&p()}),t.once("$unload",p))});csa.plugin(function(e){var t,n=e.global,r=n.PerformanceObserver,c=e("Metrics",{producerId:"csa"}),o=0,i=0,a=-1,l=n.Math,f=l.max,u=l.ceil;if(r){t=new r(function(e){e.getEntries().forEach(function(e){var t=e.duration;o+=t,i+=t,a=f(t,a)})});try{t.observe({type:"longtask",buffered:!0})}catch(e){}t=new r(function(e){0<e.getEntries().length&&(i=0,a=-1)});try{t.observe({type:"largest-contentful-paint",buffered:!0})}catch(e){}e.on("$unload",g),e.on("$beforePageTransition",g)}function g(){c("recordMetric","totalBlockingTime",u(i||0)),c("recordMetric","totalBlockingTimeInclLCP",u(o||0)),c("recordMetric","maxBlockingTime",u(a||0)),i=o=0,a=-1}});csa.plugin(function(o){var e="CacheDetection",r="csa-ctoken-",c=o.store,t=o.deleteStored,n=o.config,i=n[e+".RequestID"],a=n[e+".Callback"],s=o.global,u=s.document||{},d=s.Date,l=o("Events"),f=o("Events",{producerId:"csa",lob:n.lob||"0"});function p(e){try{var c=u.cookie.match(RegExp("(^| )"+e+"=([^;]+)"));return c&&c[2].trim()}catch(e){}}n["KillSwitch."+e]||(function(){var e=function(){var e=p("cdn-rid");if(e)return{r:e,s:"cdn"}}()||function(){if(o.store(r+i))return{r:o.UUID().toUpperCase().replace(/-/g,"").slice(0,20),s:"device"}}()||{},c=e.r,n=e.s;if(!!c){var t=p("session-id");!function(e,c,n,t){l("setEntity",{page:{pageSource:"cache",requestId:e,cacheRequestId:i,cacheSource:t},session:{id:n}})}(c,0,t,n),"device"===n&&f("log",{schemaId:"<ns>.CacheImpression.2"},{ent:"all"}),a&&a(c,t,n)}}(),c(r+i,d.now()+36e5),o.once("$load",function(){var n=d.now();t(function(e,c){return 0==e.indexOf(r)&&parseInt(c)<n})}))});csa.plugin(function(u){var i,t="Content",e="MutationObserver",n="addedNodes",a="querySelectorAll",f="matches",r="getAttributeNames",o="getAttribute",s="dataset",c="widget",l="producerId",d="slotId",h="iSlotId",g={ent:{element:1,page:["pageType","subPageType","requestId"]}},p=5,m=u.config[t+".BubbleUp.SearchDepth"]||35,y=u.config[t+".SearchPage"]||0,v="csaC",b=v+"Id",E="logRender",w={},I=u.config,O=I[t+".Selectors"]||[],C=I[t+".WhitelistedAttributes"]||{href:1,class:1},N=I[t+".EnableContentEntities"],S=I["KillSwitch.ContentRendered"],k=u.global,A=k.document||{},U=A.documentElement,L=k.HTMLElement,R={},_=[],j=function(t,e,n,i){var o=this,r=u("Events",{producerId:t||"csa",lob:I.lob||"0"});e.type=e.type||c,o.id=e.id,o.l=r,o.e=e,o.el=n,o.rt=i,o.dlo=g,o.op=W(n,"csaOp"),o.log=function(t,e){r("log",t,e||g)},o.entities=function(t){t(e)},e.id&&r("setEntity",{element:e})},x=j.prototype;function D(t){var e=(t=t||{}).element,n=t.target;return e?function(t,e){var n;n=t instanceof L?K(t)||Y(e[l],t,z,u.time()):R[t.id]||H(e[l],0,t,u.time());return n}(e,t):n?M(n):u.error("No element or target argument provided.")}function M(t){var e=function(t){var e=null,n=0;for(;t&&n<m;){if(n++,P(t,b)){e=t;break}t=t.parentElement}return e}(t);return e?K(e):new j("csa",{id:null},null,u.time())}function P(t,e){if(t&&t.dataset)return t.dataset[e]}function T(t,e,n){_.push({n:n,e:t,t:e}),B()}function q(){for(var t=u.time(),e=0;0<_.length;){var n=_.shift();if(w[n.n](n.e,n.t),++e%10==0&&u.time()-t>p)break}i=0,_.length&&B()}function B(){i=i||u.raf(q)}function X(t,e,n){return{n:t,e:e,t:n}}function Y(t,e,n,i){var o=u.UUID(),r={id:o},c=M(e);return e[s][b]=o,n(r,e),c&&c.id&&(r.parentId=c.id),H(t,e,r,i)}function $(t){return isNaN(t)?null:Math.round(t)}function H(t,e,n,i){N&&(n.schemaId="<ns>.ContentEntity.2"),n.id=n.id||u.UUID();var o=new j(t,n,e,i);return function(t){return!S&&((t.op||{}).hasOwnProperty(E)||y)}(o)&&function(t,e){var n={},i=u.exec($);t.el&&(n=t.el.getBoundingClientRect()),t.log({schemaId:"<ns>.ContentRender.3",timestamp:e,width:i(n.width),height:i(n.height),positionX:i(n.left+k.pageXOffset),positionY:i(n.top+k.pageYOffset)})}(o,i),u.emit("$content.register",o),R[n.id]=o}function K(t){return R[(t[s]||{})[b]]}function W(n,i){var o={};return r in(n=n||{})&&Object.keys(n[s]).forEach(function(t){if(!t.indexOf(i)&&i.length<t.length){var e=function(t){return(t[0]||"").toLowerCase()+t.slice(1)}(t.slice(i.length));o[e]=n[s][t]}}),o}function z(t,e){r in e&&(function(t,e){var n=W(t,v);Object.keys(n).forEach(function(t){e[t]=n[t]})}(e,t),d in t&&(t[h]=t[d]),function(e,n){(e[r]()||[]).forEach(function(t){t in C&&(n[t]=e[o](t))})}(e,t))}U&&A[a]&&k[e]&&(O.push({selector:"*[data-csa-c-type]",entity:z}),O.push({selector:".celwidget",entity:function(t,e){z(t,e),t[d]=t[d]||e[o]("cel_widget_id")||e.id,t.legacyId=e[o]("cel_widget_id")||e.id,t.type=t.type||c}}),w[1]=function(t,e){t.forEach(function(t){t[n]&&t[n].constructor&&"NodeList"===t[n].constructor.name&&Array.prototype.forEach.call(t[n],function(t){_.unshift(X(2,t,e))})})},w[2]=function(r,c){a in r&&f in r&&O.forEach(function(t){for(var e=t.selector,n=r[f](e),i=r[a](e),o=i.length-1;0<=o;o--)_.unshift(X(3,{e:i[o],s:t},c));n&&_.unshift(X(3,{e:r,s:t},c))})},w[3]=function(t,e){var n=t.e;K(n)||Y("csa",n,t.s.entity,e)},w[4]=function(){u.register(t,{instance:D})},new k[e](function(t){T(t,u.time(),1)}).observe(U,{childList:!0,subtree:!0}),T(U,u.time(),2),T(null,u.time(),4),u.on("$content.export",function(e){Object.keys(e).forEach(function(t){x[t]=e[t]})}))});csa.plugin(function(o){var i,t="ContentImpressions",e="KillSwitch.",n="IntersectionObserver",r="getAttribute",s="dataset",c="intersectionRatio",a="csaCId",m=1e3,l=o.global,f=o.config,u=f[e+t],v=f[e+t+".ContentViews"],g=((l.performance||{}).timing||{}).navigationStart||o.time(),d={};function h(t){t&&(t.v=1,function(t){t.vt=o.time(),t.el.log({schemaId:"<ns>.ContentView.4",timeToViewed:t.vt-t.el.rt,pageFirstPaintToElementViewed:t.vt-g})}(t))}function I(t){t&&!t.it&&(t.i=o.time()-t.is>m,function(t){t.it=o.time(),t.el.log({schemaId:"<ns>.ContentImpressed.3",timeToImpressed:t.it-t.el.rt,pageFirstPaintToElementImpressed:t.it-g})}(t))}!u&&l[n]&&(i=new l[n](function(t){var n=o.time();t.forEach(function(t){var e=function(t){if(t&&t[r])return d[t[s][a]]}(t.target);if(e){o.emit("$content.intersection",{meta:e.el,t:n,e:t});var i=t.intersectionRect;t.isIntersecting&&0<i.width&&0<i.height&&(v||e.v||h(e),.5<=t[c]&&!e.is&&(e.is=n,e.timer=o.timeout(function(){I(e)},m))),t[c]<.5&&!e.it&&e.timer&&(l.clearTimeout(e.timer),e.is=0,e.timer=0)}})},{threshold:[0,.5,.99]}),o.on("$content.register",function(t){var e=t.el;e&&(d[t.id]={el:t,v:0,i:0,is:0,vt:0,it:0},i.observe(e))}))});csa.plugin(function(e){e.config["KillSwitch.ContentLatency"]||e.emit("$content.export",{mark:function(t,n){var o=this;o.t||(o.t=e("Timers",{logger:o.l,schemaId:"<ns>.ContentLatency.4",logOptions:o.dlo})),o.t("mark",t,n)}})});csa.plugin(function(t){function n(i,e,o){var c={};function r(t,n,e){t in c&&o<=n-c[t].s&&(function(n,e,i){if(!p)return;E(function(t){T(n,t),t.w[n][e]=a((t.w[n][e]||0)+i)})}(t,i,n-c[t].d),c[t].d=n),e||delete c[t]}this.update=function(t,n){n.isIntersecting&&e<=n.intersectionRatio?function(t,n){t in c||(c[t]={s:n,d:n})}(t,u()):r(t,u())},this.stopAll=function(t){var n=u();for(var e in c)r(e,n,t)},this.reset=function(){var t=u();for(var n in c)c[n].s=t,c[n].d=t}}var e=t.config,u=t.time,i="ContentInteractionsSummary",o=e[i+".FlushInterval"]||5e3,c=e[i+".FlushBackoff"]||1.5,r=t.global,s=t.on,a=Math.floor,f=(r.document||{}).documentElement||{},l=((r.performance||{}).timing||{}).responseStart||t.time(),d=o,m=0,p=!0,v=t.UUID(),g=t("Events",{producerId:"csa",lob:e.lob||"0"}),w=new n("it0",0,0),I=new n("it50",.5,1e3),h=new n("it100",.99,0),b={},A={};function $(){w.stopAll(!0),I.stopAll(!0),h.stopAll(!0),S()}function C(){w.reset(),I.reset(),h.reset(),S()}function S(){d&&(clearTimeout(m),m=t.timeout($,d),d*=c)}function U(n){E(function(t){T(n,t),t.w[n].mc=(t.w[n].mc||0)+1})}function E(t){g("log",{messageId:v,schemaId:"<ns>.ContentInteractionsSummary.2",w:{},__merge:t},{ent:{page:["requestId"]}})}function T(t,n){t in n.w||(n.w[t]={})}e["KillSwitch."+i]||(s("$content.intersection",function(t){if(t&&t.meta&&t.e){var n=t.meta.id;if(n in b){var e=t.e.boundingClientRect||{};e.width<5||e.height<5||(w.update(n,t.e),I.update(n,t.e),h.update(n,t.e),!t.e.isIntersecting||n in A||(A[n]=1,function(n,e){E(function(t){T(n,t),t.w[n].ttfv=a(e)})}(n,u()-l)))}}}),s("$content.register",function(t){(t.e||{}).slotId&&(b[t.id]={},function(e){E(function(t){var n=e.id;T(n,t),t.w[n].sid=(e.e||{}).slotId,t.w[n].cid=(e.e||{}).contentId})}(t))}),s("$beforePageTransition",function(){$(),C(),v=t.UUID(),S()}),s("$beforeunload",function(){w.stopAll(),I.stopAll(),h.stopAll(),d=null}),s("$visible",function(t){t?C():($(),clearTimeout(m)),p=t},{buffered:1}),s(f,"click",function(t){for(var n=t.target,e=25;n&&0<e;){var i=(n.dataset||{}).csaCId;i&&U(i),n=n.parentElement,e-=1}},{capture:!0,passive:!0}),S())});csa.plugin(function(d){var t,o,e="normal",c="reload",i="history",s="new-tab",n="ajax",r=1,a=2,u="lastActive",l="lastInteraction",f="used",p="csa-tabbed-browsing",y="visibilityState",g="page",v="experience",b="request",I="initialized",m={"back-memory-cache":1,"tab-switch":1,"history-navigation-page-cache":1},h="TabbedBrowsing",T="<ns>."+h+".4",S="visible",w=d.global,x=d.config,P=d("Events",{producerId:"csa",lob:x.lob||"0"}),q=w.location||{},z=w.document,A=w.JSON,C=((w.performance||{}).navigation||{}).type,E=d.store,O=d.on,$=d.storageSupport(),k=!1,R={},j={},B={},J={},K={},M=!1,N=!1,D=!1,F=0,G=x["CSA.isRunningInsideMShop"];function H(e){try{return A.parse(E(p,void 0,{session:e})||"{}")||{}}catch(e){d.error('Could not parse storage value for key "'+p+'": '+e)}return{}}function L(e,i){E(p,A.stringify(i||{}),{session:e})}function Q(e){var i=j.tid||e.id,t={},n=R[u]||{};for(var r in n)n.hasOwnProperty(r)&&(t[r]=n[r]);!G&&t.tid!==i||(t.tid=i,t.pid=e.id,t.ent=K),J={pid:e.id,tid:i,ent:K,lastInteraction:j[l]||{},initialized:!0},B={lastActive:t,lastInteraction:R[l]||{},time:d.time(),initialized:!0}}function U(e){var i=e===s,t=z.referrer,n=!(t&&t.length)||!~t.indexOf(q.origin||""),r=i&&!G&&n,a={type:e,toTabId:J.tid,toPageId:J.pid,transitTime:d.time()-R.time||null};r||function(e,i,t){var n=e===c,r=i||G&&!(j[I]&&j.ent)?R[u]||{}:j,a=R[l]||{},d=j[l]||{},o=i||G&&!(d.id&&!d[f])?a:d;t.fromTabId=r.tid,t.fromPageId=r.pid;var s=r.ent||{};s.rid&&(t.fromRequestId=s.rid||null),s.ety&&(t.fromExperienceType=s.ety||null),s.esty&&(t.fromExperienceSubType=s.esty||null),n||!o.id||o[f]||(t.interactionId=o.id||null,o.sid&&(t.interactionSlotId=o.sid||null),a.id===o.id&&(a[f]=!0),d.id===o.id&&(d[f]=!0))}(e,i,a),P("log",{navigation:a,schemaId:T},{ent:{page:["pageType","subPageType","requestId"]}})}function V(e){D=function(e){return e&&e in m}(e.transitionType),function(){R=H(!1),j=H(!0);var e=R[l],i=j[l],t=!1,n=!1;e&&i&&e.id===i.id&&e[f]!==i[f]&&(t=!e[f],n=!i[f],i[f]=e[f]=!0,t&&L(!1,R),n&&L(!0,j))}(),Q(e),M=!0,function(e){var i,t;i=X(),t=Z(!0),(i||t)&&Q(e)}(e),F=1}function W(){k&&!D?U(n):(k=!0,function(){if(C===a||D)U(i);else if(C===r)U(j[I]?c:s);else{U(j[I]||G&&R[I]?e:s)}}())}function X(){var e=t,i={};return!!(M&&e&&e.e&&e.w)&&(e.w("entities",function(e){i=e||{}}),j[l]={id:e.e.messageId,sid:i.slotId,used:!(R[l]={id:e.e.messageId,sid:i.slotId,used:!1})},!(t=null))}function Y(e,i,t,n){var r=!1,a=e[u];return N?(!a||a.tid!==J.tid||!a[S]||a.pid!==t||!a.ent&&n||n&&function(e,i){var t=e||{},n=i||{};return t.rid!==n.rid||t.ety!==n.ety||t.esty!==n.esty}(a.ent,n))&&(e[u]={visible:!0,pid:t,tid:i,ent:n},r=!0):!G&&a&&a.tid===J.tid&&a[S]&&(r=!(a[S]=!1)),r}function Z(e){var i=!1;if(N=G&&e||z[y]===S,M){var t=R[u]||{};i=Y(R,j.tid||t.tid||J.tid,j.pid||t.pid||J.pid,j.ent||t.ent||J.ent)}return i}x["KillSwitch."+h]||$.local&&$.session&&A&&z&&y in z&&(o=function(){try{return w.self!==w.top}catch(e){return!0}}(),O("$entities.set",function(e){if(!o&&e){var i=(e[b]||{}).id||(e[g]||{}).requestId,t=(e[v]||{}).experienceType||(e[g]||{}).pageType,n=(e[v]||{}).experienceSubType||(e[g]||{}).subPageType,r=!K.rid&&i||!K.ety&&t||!K.esty&&n;if(K.rid=K.rid||i,K.ety=K.ety||t,K.esty=K.esty||n,r&&F){var a=R[u]||{};a.tid===j.tid&&(a.ent=K,L(!1,R)),j.ent=K,L(!0,j)}}},{buffered:1}),O("$pageChange",function(e){o||(V(e),W(),L(!1,B),L(!0,J),j=J,R=B)},{buffered:1}),O("$content.interaction",function(e){t=e,X()&&(L(!1,R),L(!0,j))}),O(z,"visibilitychange",function(){!o&&Z()&&L(!1,R)},{capture:!1,passive:!0}))});csa.plugin(function(c){var e=c("Metrics",{producerId:"csa"});c.on(c.global,"pageshow",function(c){c&&c.persisted&&e("recordMetric","bfCache",1)})});csa.plugin(function(n){var e,t,i,o,r,a,c,u,f,s,l,d,p,g,m,v,h,b,y="hasFocus",S="$app.",T="avail",$="client",w="document",I="inner",P="offset",D="screen",C="scroll",E="Width",F="Height",O=T+E,q=T+F,x=$+E,z=$+F,H=I+E,K=I+F,M=P+E,W=P+F,X=C+E,Y=C+F,j="up",k="down",A="none",B=20,G=n.config,J=G["KillSwitch.PageInteractionsSummary"],L=n("Events",{producerId:"csa",lob:G.lob||"0"}),N=1,Q=n.global||{},R=n.time,U=n.on,V=n.once,Z=Q[w]||{},_=Q[D]||{},nn=Q.Math||{},en=nn.abs,tn=nn.max,on=nn.ceil,rn=((Q.performance||{}).timing||{}).responseStart,an=function(){return Z[y]()},cn=1,un=100,fn={},sn=1,ln=0,dn=0,pn=k,gn=A;function mn(){c=t=o=r=e,i=d=0,a=u=f=s=l=0,pn=k,gn=A,dn=ln=0,yn(),bn()}function vn(){rn&&!o&&(c=on((o=p)-rn),sn=1)}function hn(){var n=m-i;(!t||t&&t<=p)&&(n&&(++a,sn=dn=1),i=m,n),function(){if(gn=d<m?k:j,pn!==gn){var n=en(m-d);B<n&&(++l,ln&&!dn&&++a,pn=gn,sn=ln=1,d=m,dn=0)}else dn=0,d=m}(),t=p+un}function bn(){u=on(tn(u,m+b)),g&&(f=on(tn(f,g+h))),sn=1}function yn(){p=R(),g=en(Q.pageXOffset||0),m=tn(Q.pageYOffset||0,0),v=0<g||0<m,h=Q[H]||0,b=Q[K]||0}function Sn(){yn(),vn(),hn(),bn()}function Tn(){if(r){var n=on(R()-r);s+=n,r=e,sn=0<n}}function $n(){r=r||R()}function wn(n,e,t,i){e[n+E]=on(t||0),e[n+F]=on(i||0)}function In(n){var e=n===fn,t=an();if(t||sn){if(!e){if(!N)return;N=0,t&&Tn()}var i=function(){var n={},e=Z.documentElement||{},t=Z.body||{};return wn("availableScreen",n,_[O],_[q]),wn(w,n,tn(t[X]||0,t[M]||0,e[x]||0,e[X]||0,e[M]||0),tn(t[Y]||0,t[W]||0,e[z]||0,e[Y]||0,e[W]||0)),wn(D,n,_.width,_.height),wn("viewport",n,Q[H],Q[K]),n}(),o=function(){var n={scrollCounts:a,reachedDepth:u,horizontalScrollDistance:f,dwellTime:s,vScrollDirChanges:l};return"number"==typeof c&&(n.clientTimeToFirstScroll=c),n}();e?sn=0:(mn(),rn=R(),t&&(r=rn)),L("log",{activity:o,dimensions:i,schemaId:"<ns>.PageInteractionsSummary.3"},{ent:{page:["pageType","subPageType","requestId"]}})}}function Pn(){Tn(),In(fn)}function Dn(n,e){return function(){cn=e,n()}}function Cn(){an=function(){return cn},cn&&!r&&(r=R())}"function"!=typeof Z[y]||J||(mn(),v&&vn(),U(Q,C,Sn,{passive:!0}),U(Q,"blur",Pn),U(Q,"focus",Dn($n,1)),V(S+"android",Cn),V(S+"ios",Cn),U(S+"pause",Dn(Pn,0)),U(S+"resume",Dn($n,1)),U(S+"resign",Dn(Pn,0)),U(S+"active",Dn($n,1)),an()&&(r=rn||R()),V("$beforeunload",In),U("$beforeunload",In),U("$document.hidden",Pn),U("$beforePageTransition",In),U("$afterPageTransition",function(){sn=N=1}))});csa.plugin(function(e){var o,n,r="Navigator",a="<ns>."+r+".5",i=e.global,c=e.config,d=i.navigator||{},t=d.connection||{},l=i.Math.round,u=e("Events",{producerId:"csa",lob:c.lob||"0"});function v(){o={network:{downlink:void 0,downlinkMax:void 0,rtt:void 0,type:void 0,effectiveType:void 0,saveData:void 0},language:void 0,doNotTrack:void 0,hardwareConcurrency:void 0,deviceMemory:void 0,cookieEnabled:void 0,webdriver:void 0},w(),o.language=d.language||null,o.doNotTrack=function(){switch(d.doNotTrack){case"1":return"enabled";case"0":return"disabled";case"unspecified":return d.doNotTrack;default:return null}}(),o.hardwareConcurrency="hardwareConcurrency"in d?l(d.hardwareConcurrency||0):null,o.deviceMemory="deviceMemory"in d?l(d.deviceMemory||0):null,o.cookieEnabled="cookieEnabled"in d?d.cookieEnabled:null,o.webdriver="webdriver"in d?d.webdriver:null}function k(){u("log",{network:(n={},Object.keys(o.network).forEach(function(e){n[e]=o.network[e]+""}),n),language:o.language,doNotTrack:o.doNotTrack,hardwareConcurrency:o.hardwareConcurrency,deviceMemory:o.deviceMemory,cookieEnabled:o.cookieEnabled,webdriver:o.webdriver,schemaId:a},{ent:{page:["pageType","subPageType","requestId"]}})}function w(){!function(n){Object.keys(o.network).forEach(function(e){o.network[e]=n[e]})}({downlink:"downlink"in t?l(t.downlink||0):null,downlinkMax:"downlinkMax"in t?l(t.downlinkMax||0):null,rtt:"rtt"in t?(t.rtt||0).toFixed():null,type:t.type||null,effectiveType:t.effectiveType||null,saveData:"saveData"in t?t.saveData:null})}function f(){w(),k()}function y(){v(),k()}c["KillSwitch."+r]||(v(),k(),e.on("$afterPageTransition",y),e.on(t,"change",f))}); if (window.ue && window.ue.uels) { ue.uels("https://c.amazon-adsystem.com/bao-csm/forensics/a9-tq-forensics-incremental.min.js"); } ue.exec(function(d,c){function g(e,c){e&&ue.tag(e+c);return!!e}function n(){for(var e=RegExp("^https://(.*\.(images|ssl-images|media)-amazon\.com|"+c.location.hostname+")/images/","i"),d={},h=0,k=c.performance.getEntriesByType("resource"),l=!1,b,a,m,f=0;f<k.length;f++)if(a=k[f],0<a.transferSize&&a.transferSize>=a.encodedBodySize&&(b=e.exec(String(a.name)))&&3===b.length){a:{b=a.serverTiming||[];for(a=0;a<b.length;a++)if("provider"===b[a].name){b=b[a].description;break a}b=void 0}b&&(l||(l=g(b,"_cdn_fr")), a=d[b]=(d[b]||0)+1,a>h&&(m=b,h=a))}g(m,"_cdn_mp")}d.ue&&"function"===typeof d.ue.tag&&c.performance&&c.location&&n()},"cdnTagging")(ue_csm,window); } (n=>{var A;n.RXVM=function(r){var i=n([1,function(n){n.u.t[m(n)]=h(n)},2,function(n){n.i[0].t[m(n)]=h(n)},3,h,4,function(n){var r=h(n),t=h(n),n=h(n);b(n)||(n[t]=r)},10,function(n){n.u.o.push(h(n))},12,function(n){for(var r=F(n);0<r--;)n.v.push(S(n))},30,function(n){return!h(n)},42,function(){},43,function(n){for(var r=F(n);0<r--;)n.u.t.push(n.l.pop())},45,a(!0),44,a(!1),48,v(0,y),49,v(1,y),50,v(2,y),51,v(-1,y),52,v(0,_),53,v(1,_),54,v(2,_),55,v(-1,_),58,function(n){p(n,x(n))},59,l(!0),60,l(!1),64,function(n){var r=x(n),t=w(n,n.u._);return p(n,r),t},65,function(n){var r=F(n),t=x(n),u=w(n,n.u._);n.u.t[r]=u,p(n,t)}]),o={40:function(n,r){return"__rx_cls"in n?n.__rx_cls===r.__rx_ref:n instanceof r}},t=(o[20]=Math.pow,s(16,"+"),s(17,"-"),s(18,"*"),s(19,"/"),s(21,"%"),s(22,"&"),s(23,"|"),s(24,"^"),s(25,"<<"),s(26,">>"),s(27,">>>"),s(28,"&&"),s(29,"||"),s(31,">"),s(33,">="),s(32,"<"),s(34,"<="),s(35,"=="),s(36,"==="),s(37,"!="),s(38,"!=="),s(39," in "),n([10,A,11,null,14,!0,15,!1])),u=n([1,function(n){return n.h},17,F,18,function(n){n=m(n)|m(n)<<8|m(n)<<16|m(n)<<24;return n=2147483647<n?-4294967295+n-1:n},19,function(n){for(var r=[],t=0;t<4;t++)r.push(m(n));return new Float32Array(new Uint8Array(r).buffer)[0]},12,S,13,function(n){return n.v[F(n)]},20,function(){return[]},21,function(n){for(var r=F(n),t=[];0<r--;)t.unshift(h(n));return t},22,function(){return{}},23,function(n){for(var r=F(n)/2,t={};0<r--;){var u=h(n);t[h(n)]=u}return t},32,function(n){return n.u.t[F(n)]},33,function(n){return n.i[0].t[F(n)]},48,function(n){var r=h(n),n=h(n);return b(n)?n:("function"==typeof(r=n[r])&&(r.__rx_this=n),r)},51,function(n){var r=h(n),t=0;return b(r)?r:function(){return{value:r[t],done:!(t++<r.length)}}},50,function(n){return n.u.o.pop()},52,function(n){return typeof h(n)}]);function e(n){for(;(r=n).u&&r.u._<r.p.length;){r=m(n);n.h=f(r,n)}var r}function f(n,r){var t,u;return n in o?(t=h(r),u=h(r),o[n](u,t)):n in i?i[n](r):void k("e2:"+n+":"+r.u._)}function c(n,r){return{m:n,_:n,t:[],o:[],F:r}}function n(n){for(var r={},t=0;t<n.length;t+=2)r[n[t]]=n[t+1];return r}function a(i){return function(n){var r=i?h(n):A,t=n.i.pop(),u=A,u=t.F?t.t[0]:r;return n.l=[],n.u=n.i[n.i.length-1],d(n,n.u.m),u}}function v(u,i){return function(n){var r=h(n),t=u;for(-1===u&&(t=F(n));0<t--;)n.l.push(h(n));if(n.h=A,r)return i(r,n)}}function l(u){return function(n){var r=h(n),t=x(n);(u&&r||!r&&!u)&&p(n,t)}}function s(u,i){o[u]=function(n,r){var t=Function("a","b","return a"+i+"b");return(o[u]=t)(n,r)}}function _(n,r){var t;if(n.__rx_ref&&n.S===r){var u=c(n.__rx_ref,!0);u.t.push({__rx_cls:n.__rx_ref}),r.i.push(u),r.u=u,d(r,u.m)}else if("function"==typeof n){u=r.l.reverse().splice(0),u=Function.prototype.bind.apply(n,[null].concat(u));try{t=new u,r.l=[]}catch(n){}}else k("e5:"+n+":"+r.u._);return t}function y(n,r){var t;if(n.__rx_ref&&n.S===r){var u=c(n.__rx_ref);u.t.push(n.__rx_this||this),r.i.push(u),r.u=u,d(r,u.m)}else if("function"==typeof n){u=r.l.reverse().splice(0);try{t=n.apply(n.__rx_this||this,u),r.l=[]}catch(n){}}else k("e4:"+n);return t}function h(n){var r=m(n);return 0<(128&r)?f(127&r,n):r in t?t[r]:r in u?u[r](n):void k("e3:"+r)}function w(t,u){var n=g(function(){var n=c(u),r=n.t;return r.push(this),r.push.apply(r,arguments),t.i.push(n),t.u=n,d(t,n.m),e(t),t.h});return n.__rx_ref=u,n.S=t,n}function b(n){return(n===A||null===n)&&(r&&k("e10"+n),1)}function d(n,r){n.g=r%127+37}function p(n,r){n.u._+=r}function m(n){return n.p[n.u._++]^n.g}function x(n){n=m(n)|m(n)<<8;return n=32767<n?-65535+n-1:n}function F(n){for(var r,t=0,u=0,i=n.u._;t+=(127&(r=n.p[i+u]^n.g))*Math.pow(2,7*u),u+=1,0<(128&r););return p(n,u),t}function S(n){for(var r=F(n),t="";0<r--;)t+=String.fromCharCode(m(n));return t}function g(n){return function(){try{return n.apply(this,arguments)}catch(n){k(n)}}}function k(n){if(r)throw Error(n)}this.execute=g(function(n,r){var t,u;return 82!==n[0]&&88!==n[1]?k("e1"):(n=n,t=3,(u=c(0)).t[0]=(r=r)||{},u._=t,d(r={p:n,h:0,i:[u],u:u,l:[],v:[],g:0},0),e(t=r),t)})}})("undefined"==typeof window?global:window); (n=>{for(var i="undefined"==typeof window?n:window,t=0,n="addEventListener",f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),u=[],r=i.rx||{},o=r.c||{},e=o.rxp||"/rd/uedata",a=o.fi||5e3,c={},d={},w=[],v=0,x=0;x<f.length;x++)u[f[x]]=x;function y(n,r){return function(){try{return n.apply(this,arguments)}catch(n){h(n.message||n,n)}}}function h(n,r){n=(""+(n||"")).substring(0,100),w.push(t),w.push(n.length);for(var i=0;i<n.length;i++)w.push(n.charCodeAt(i));if(o.DEBUG)throw r||n;U()}function l(n,r){r=y(r),n in d||(d[n]=[]),d[n].push(r),n in c&&r()}function s(n,r){n in c||(c[n]=r,(d[n]||[]).forEach(function(n){n(r)}))}function m(n){for(var r=0,i=0,t="",o=0;o<n.length;o+=1)for(i+=8,r=r<<8|n[o];6<=i;)t+=f[r>>i-6],r&=255>>8-(i-=6);return 0<i&&(t+=f[r<<6-i]),t}function A(n){for(var r=0,i=0,t=[],o=0;o<n.length&&"="!==n[o];o+=1)for(i+=6,r=r<<6|u[n[o]];8<=i;)t.push(r>>i-8),r&=255>>8-(i-=8);return new Uint8Array(t)}function U(){!v&&0<a&&(setTimeout(y(g),a),v=1)}function g(){if((v=0)===w.length)return"";rx.ep(w,p),w=[]}function p(n){n=m(new Uint8Array(n));n=e+"?rid="+rx.rid+"&sid="+rx.sid+"&rx="+n;(new Image).src=n}function b(n){s("load",n)}function E(n){b(n),s("unload",n),g()}(i.rx=r).err=h,r.r=y(l),r.e=y(s),r.exec=y,r.p=y(function(n,r){s("rxm:"+n,r),w.push(255&n),w=w.concat(r),U()}),r.ex64=y(function(r,n){l(n||"init",function(){var n;i.RXVM&&(n=A(r),i.$RX||(i.$RX=new i.RXVM),$RX.execute(n,i))})}),r.e64=y(m),r.d64=y(A),r.erc4=y(function(){var n=rx.ep4(w);return rx.rid+"#"+m(new Uint8Array(n))}),s("init",{}),n in i&&(i[n]("load",y(b)),i[n]("beforeunload",y(E)),i[n]("pagehide",y(E)))})(window); rx.ex64("UlgBKT0nV10vcExLUR1kV1dEXCNJQEtCUU0hUU1ASy9KS0ZKSFVJQFFALUZESUlHREZOJ0JRIWhEUU0gQ0lKSlchYURRQCZLSlImVkBRLnBMS1EWF2RXV0RcI0dQQ0NAVyNWUEdRSUAiQEtGV1xVUSFLREhAImRgdghmZ2YjQUxCQFZRInZtZAgXEBMgYWBncGIhQF1ARiZXTEEmVkxBJCQVKCUFJSQnuDMVKSRGBSQkJrgVKSNGV1xVUUoFJRUpLUhWZldcVVFKBSVkImMlXnRARXh0VHVFeHdVdHR3dHR2ZHVJ1UV4d1V0VXZRdURFeX8WHRQHNhoREDQBVXRVdn90cUdVdlV3dHblZHRVdk+kilhVd2QtPiVrQ0FEcGBCYEFEcGBDYEFgQmBBRGBEYENgQWxkLOsldF1eXEteW0teWk5fXllOX15YTl9eV05fY/9O311/V05fW39Xf1d/XF5Xz05ef1dluaBeV05fY/9O311/V3FfXlrKTt9dz2/Kb1Jdf15/V39ez29/V39cf1psfldcf1p/V39cXlfPTl5/V2WWoF5XTl9j/29SXX9df1cQX15Yyk7fXc9OXn9YXlnKTt9dz29/WH9cf1lsfldcf1l/WH9cbm9TWy8qLDd/W8dvyk7fXc9vf1l/XG9/WH9cf1xvf1d/XV5Xz05ef1dl+aByf1tkL20lGDEPlBMyPjA+MwIDPjATMhMxHjIJAzMPlBMyPjcbMzcTMT42EzJzIDN2bWxRWXxcbFBaLjkvKTAofFxwOTI3AT43EzIeEzIfZC69JVR9Q+LhXnvhXnl+f1NPT3J1T3J2Xn9sbpd4fnV+Tk9yd09yeF5/TWJ+T3J5T3J/Xn9+fH5KT3J+Xn/vT3J9X35ue357fkpPcnNef2p+X3x8T3JyfnV+Sk9yfl5/TXV+Tk9ydF97TU1PcnRfe257X35MT3JwT3JxXnx8X3tee2h5bv9+cn1eeXN9FglybnJvdX5NXnVffU1TZClQJbedoAK9mZ2csKyskZaskZW9nI+NdJudlp2trJGUrJGbvZyugZ2skZqskZy9nJ2enamskZ29nAyskZ68nY2YnZ+dqayRkL2ciZ28np+skZGdlp2prJGdvZyulp2trJGXvJ+urqyRl7yfjZi8na69lbyfvZmxnWQoKyS9lKe3kbaXl5eXp7eRtpSXlJekppuEppuYt5W2l5uFnJfW/ZYQOg4LNjoaOxs6OT46CAs3MlJWS1RJT3BeQgs2NRo4Pi45NzxfXlhJQktPNjQ0LD8quzo2OTYqNisbOjc4SVpMMTp7JjurgYKEoIG8sI2UoYKMgIShhIyF39/l8uuhga2hhDE6CRoxCQkWOpyXpLecpKSXlZekppuEppuYt5W2lJuFnJfWvZZoQnFzT0YwLyogJmNCUlNSQ0FFQn9zTldiQU9DR2JFT0YcHCYxKmJCbmJFnJekt5ykpJeSl6qmm4K3lLOWp6aalff6+qaakcbk+fv/5fO3loOUtpK2lZyXkqSaksnJ8+S3l7oUFSgwBSQFLi8kIRcpJ0BVBSQUFSgwBSQFKS8kIRcpJkBVEQUkGbkVKDIFJBUoMwUkMSUUFSgwBSQFKBckFSgyBSQVKDMFJA==","load"); rx.ex64("UlgBKSAhQUpLQCBTRElQQCBDSUpKVydXXSFAXUBGJCQVKSFoRFFNBSVkJ5gleVNTUGJeVD43PDUmOnJTU1FDUlNWYXJTYnJWU1dTU1RiX1NyV272XWJfUnJXWFJTUcJyVHJRaI2tU1XPQ1LBclByUVNaQ1JTW2FyU2JyW1NYU1NUYl9Tclhu9l1iX1JyWEJSU1rCxkNQw3JVclRyWmiLrWNiXlYhIyAmc1PBclByWlNZU2NiX1BzU3JQREOtrVFTWFNjYl9Qc1NyVURDra1RU1hTY2JfUHNTcllEQ62tUVNYU1FHUWBgYH9TZCZlJb+VpbWWtJWVlpW5gZIChWuVpIWWtJYOhZykhZa0lgKFa5WkhZW0lg6FnKSFlbSWAoVrlaSFlLSWDoWcpIWUtJYUFSghFSgmBSUFJy8kIRcpJ1ZEFSgmBSUUFSghFSgmBSUFJi8kIRcpJlZERxUoJgUl","load"); rx.ex64("UlgBKS8sUkBHQVdMU0BXI2pHT0BGUSFOQFxWIkxLQUBdakMhQUpLQCBTRElQQCBkV1dEXCN2XEhHSkkgdVdKXVwnV10kJDQ1JCc0JCQmuDMVKSxLRFNMQkRRSlcFJSQhuDMVKS1BSkZQSEBLUQUlZCA2JbK1BgaolJLo9Pnh7+rx//DsuZhkIyglGh2tlxEwPTAAPTARM2QiZyVrcHFMQ3FMQGBBYEFAQHJAcWFAQENAQEJxTERhQ33lTnFMRWFDWEFwcUxCYUJNRSIlIh5lUEFAfUBDQWxPe5G+bE5kLZQlrba3ioW3ioamh6aHhoa0hrenhoaFhoaEt4qCp4W7I4i3ioOnhQ+HtreKhKeEi4HYxvX15v6mloeGm4YhioGnhJsjt4qBpoe3p4Smh4a7hoWHqom2t4qEp4SLgNjU/url6OumloeGm4YhioCnhJsjt4qApoe3p4Smh4a7hoWHqom2t4qEp4SLgdjX9ej//qaWh4abhiGKj6eEmyO3io+mh7enhKaHhruGhYeqib3meKqIZCwFJRQTo5kfPjI1XV9SUm5WX1BKUVOZHz4yNmFOVl9QSlFTZC/hJUhTUm5vARAHAxYHJw4HDwcMFkNmbmQBAwwUAxFjY2NTUm5oBQcWIQ0MFgcaFkJjbmcVBwAFDmNgY178QmBgYk9sU1JubgUHFicaFgcMEQsNDEJgbns1JyAlLj0GBwAXBT0QBwwGBxAHED0LDAQNYVJudTcsLyMxKScmPTAnLCYnMCcwPTUnICUuY2hjU1JubgUHFjIDEAMPBxYHEEJgUGNhY17GaEJhYGJPbFNSb2FCYW5pMRULBBYxCgMGBxBDc2JjT2NkLgYlBgGIHCAnRUJCSV5kSUVLRFgNLBwgJ0NZWEleZElFS0RYDSxkKQ4leX73Y19ZOj09NiEEOjcnO3JTY19YMD86Nj0nBDo3JzvORWNfVzE8NypyVyQoMC0FKQUuBS8FLAUtBSIFIwUgZCtCJbyXl4eWl5SHlqo2ppqQ+vP48eL+t5u2lKyWp6aakvPu8/Wmm5+3lqa2lLebppeXlZeqMpy2lZWWl5WYqraVnJaXlwEPtpSHl7aXl5QGh5e2lKwjaaSmmpfmppuft5aDlLaXt5S3l7oXFSkkVxUoLAUlBSspIUlKREE=","load"); rx.ex64("UlgBKS81REFBYFNAS1FpTFZRQEtAVyxISlBWQEFKUksiSEpQVkBQVTZXQEhKU0BgU0BLUWlMVlFAS0BXJ1ddLFFMSEB2UURIVS5VQFdDSldIREtGQCZLSlIhQF1ARiRXJCQ0BSQnNCokJjIhKykiRkRVUVBXQCspIlVEVlZMU0AkIbgzFSktQUpGUEhAS1EFJSQgFSkhaERRTQUlJCMrJCw0JSQuMWQpOSV6Y2BdUHFUU3FTcVddUWNgXVBxVFNxU3FYXVJ8ZCg6JVpydn9DQH1zUXRzUXNRd31xQ0B9c1F0c1FzUXh9clxkKwwlua8NspWSk7+RlZyio5+Q4PLxo56XspOymJmSoaOfkuOjnpeyk6Gykr9kKjMlakBxcUxGcUxHYEFcQHFMRGFAQ0tAbWQ1GyVwWmtrVlxrVl16W0Zaa1Zee1paWVpaWMp6UXtZWVLLSlp6UmprV18rLigzelB7WGf6ell6Ul1ba3pVa3pWdxQVKC0VKCEFJQUqJCIkFBUoLRUoIQUlBTUkLSQXFSgsFSghBSUFKSkhSUpEQRcVKCwVKCEFJQUrKSNQS0lKREE=","load"); rx.ex64("UlgBKSIsSEpQVkBISlNAJ1ddJlZERyFGQExJIVVQVk0mREdWJFckJDQEJCc07SQkJjTaJCQhMiErKSJGRFVRUFdAKykiVURWVkxTQCQguDMVKS1BSkZQSEBLUQUlJCMVKSFoRFFNBSUkLSskKDQlJCsxJCoxZDU6JbStrpKO//r62+j78OrS9+3q+/D77L+bnb+av5mTnrJkNAAlaEBKTXFyTlEwJy8tNCcHNCcsNg4rMTYnLCcwY0dBY0ZjRU9CbmQ3YCVBV/VKY2prR2ljZFpbZmlbZmpKa0plampqWltmaVtmakprSmRhalpbZ20IBAUICh9LallqampZW2dqG1tmakprS2pKakdkNnkkHjQFBTk2W1pCBTk+RVBHU1pHWFRbVlAUNSg0BTk8QVxYUGZBVFhFFTQ0NzQ0NqgkNQU5MEVUUlBtFTQ0MagkNQU5MEVUUlBsFTQJqZEUPhUxkRQ/FTY0NRkJqaoUN6QUPBU3FDw5NTc8Pzc/Pzc+Pzc5PwmTPxQ8QDUHBTkwVEFUWwcUM6QUPxU2pBQ+FTE0MDQEBTkxRkRHQRQzpaEkN6QVNhQ/oSQ3pBUxFD4/NAQFODYUMwc0MzQJqJEUPBU3kSQ1FTM+NQQFODEUOyQ1Dyg1BAU4NhQzpyTdMqakFDwVNxUzNDI0BAU4MRQ7FTIJkz8UOXU1BAU4MBQzpBQ5FTAkNKcFOTdlfBQzJDc/NAQFODAUM6QUORUwPzQHBTk2WFxbFDMHBzQ9NAQFODEUOqck3TIVPTc4pSQ0FDg3PBU3Nz8VNjc+FTE3ORUwCaoUNhQ4MzUFFCcFFCQZFBUpIUBdQEYVKCQFJQU2JCIkFxUoIxUoJAUlBTUpIUlKREEXFSgjFSgkBSUFNykjUEtJSkRB","load"); rx.ex64("UlgBKSYjVkZXSklJJ1ddJFckJDQHJCc07SQkJjTaJCQhMiErKSJGRFVRUFdAKykiVURWVkxTQCQgFSkhaERRTQUlJCMrJC40JSQpMWQoOiVfRkV5ZRQRETADEBsBORwGARAbEAdUdXZUcVRyeHVZZCsAJbKanperqJSL6v319+793e799uzU8evs/fb96rmYm7mcuZ+VmLRkKg4laH7cY0RDQm5ARE1zck5BMSMgck9DY0JjTkNDQ3ByTkMyck9DY0JiQ2NDbmQ1iiVacEFBfXIfHgZBfXoBFAMXHgMcEB8SFFBxbHBBfXgFGBwUIgUQHAFRcHBzcHBy7GBxQX12AhIDHh0dKFBxTe3uUHPgUHlRc1B5eHFzeXtzeHtze3tN13tQeUdxQEF9chATAlB04FB4UXJwdXBAQX11EhQYHVB042CZduLgUHlRc1F1cHRwQEF9dQEEAhlQfVF0c3rhYHBQenN5UXNzeFFyTe5QclB6d3FBUH5BUH9dFBUpIUBdQEYVKCQFJQU1JCIkFxUoJxUoJAUlBSgpIUlKREEXFSgnFSgkBSUFKikjUEtJSkRB","load"); rx.ex64("UlgBKSghaERRTTZXQEhKU0BgU0BLUWlMVlFAS0BXLEhKUFZASEpTQCBGSUxGTiNWRldKSUkmUURCJ1ddIEZKUEtRIkZJTEBLUX0iRklMQEtRfCJWRldKSUl8IUBdQEY1REFBYFNAS1FpTFZRQEtAVyQkuDMVKS1BSkZQSEBLUQUlJCe4MxUpJ1BABSUkJhUpJlBAXQUlJCEVKSFWVFdRFSglBSUkIBUpJlVKUhUoJQUlJCMVKSZER1YVKCUFJSQiMiErKSJVRFZWTFNAKykiRkRVUVBXQCQtNEEkLDRBJC8uJC4uJCkuJCguJCsuJCouJDU0JSQ0NCVkNwwliJGSr6ODoqGDpYOor6CRkq+jg6Khg6WDqa+hkZKvo4OioYOlg66vpo5kNkAlemxgXVVxUmVQYWBdVXFSXEY4MSN9IyQiPz43fTk+JDUiMTMkOT8+bMxxU2BcUzkjPHFSWVBicVNdVlxSMSRsYF1XcVJLUGJgXVdxUkFRXEEDJCI/PjcZPiQ1IjEzJDk/PmBxQnxkMT8lETsGpqUrOgo3Mxo7pSs6CjcyGjs5OgobKRZkMHwlc1lkxP5TeVb+U3lVaVhqeV1JWsl5VWhVUHhZUllqeV1JWsl5VmhVUXhZUllIampSWWl5XGpZWllaSch4WnlJZPl5UHlJW1hoeUtaVWhVUHhZWlZoVVF4WXRkMwslHTcKkD0XOSQ2Bxcwpxc5Bjs8FzYmNxcmNCY3CpcXPxcmNTYGFyU0OQY7PBc2GmQydiVCWVhlY1hlbkloSX1qYmlZWGVjWGVuSWhJfGpjaVlYZWNYZW5JaEl+amRpW1hlZEloa0lvSWJlaltYZWRJaGtJb0ljZWtbWGVkSWhrSW9JZGVsRBcVKSRXFSgjBSUFMikhSUpEQQ==","load"); rx.ex64("UlgBKScmUURCJ1ddJCS4MxUpLUFKRlBIQEtRBSUkJ7gzFSknUEAFJSQmFSkmUEBdBSVkIXUlcFpua1ddCT48HiMrelvLV1NmcwAFYAZwcst7WldecwUne3JRWmprV142Oi84M2tXXTg0NDAyPnpaaVpZWmtrV18vKTI2a0pZe1lHWntZdlpkIBolGzEMAD0wETIEMAEAPTARMqAQMTwiQkgdWFlXWFVDRB1RU0RZX14KDKwRMwA8M1lDXBEyOTACETM9MTwyUUQcZCN3JVlCUnd+cnJyckJDf3YAAx8aB1Nyf3IzcENicnJvclNycnFyT1NxWnNCQ393EgccEVJzU3FycHJCQ395EBsSATAcFxYyB1NwYnNyd3JCUnZTd18XFSkkVxUoJAUlBSMpIUlKREE=","load"); /* ◬ */ </script> </div> <noscript> <img height="1" width="1" style='display:none;visibility:hidden;' src='//fls-na.amazon.com/1/batch/1/OP/ATVPDKIKX0DER:146-2461427-5656742:8CD8WFQGA8E5PSWF02S4$uedata=s:%2Frd%2Fuedata%3Fnoscript%26id%3D8CD8WFQGA8E5PSWF02S4:0' alt=""/> </noscript> <script>window.ue && ue.count && ue.count('CSMLibrarySize', 78975)</script> <!-- sp:end-feature:csm:body-close --> </div></body></html> <!-- _ .__(.)< (MEOW) \___) ~~~~~~~~~~~~~~~~~~--> <!-- sp:eh:v6oCSP3lz6fTaKoXv9Dtf1szPW1JTdQZ3Fh3emP/B2xIuLkiErBNF0g9JThClODwDh/XFlDLaIc2qZFGcvov+nHYB1V0sC87Pnj32u4X2WusNPI2m8jwnp5cxYo= -->

Pages: 1 2 3 4 5 6 7 8 9 10