function FormsFinanceCalculatorDirective(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k){function g(r){function u(n){var t=r.ffc.form.settings.availableModels,i;return!t||t&&t.length==0?null:t.length===1?t[0]:t.length>1?(i=t.findIndex(function(t){return n!=null?t.toLowerCase()===n.toLowerCase():!1}),i>-1?t[i]:null):null}var s=this;k.info("Build and Price Data:");k.info(r.buildAndPriceData);r.ffc.urlParameters=f.search();r.BuildPriceService=p;r.testValue=10;e.$on("change-active-vehicle",function(){var n=h.getLexusVehicle(r.ffc.urlParameters);(r.ffc.form.data.carmodel=u(n.model),r.clearSomeCarData(),r.ffc.form.data.carmodel!=null)&&e.$broadcast("field-car-model-engine-variant-update-selected")});r.init=function(n){var t=h.getLexusVehicle(r.ffc.urlParameters),i=h.getLexusDealer(r.ffc.urlParameters),n=n||{},o;n.balloonPayment=n.balloonPayment||{};n.loanTerm=n.loanTerm||{};n.summary=n.summary||{};n.messages=n.messages||{};r.dealerState=n.dealerState;r.forceDealerId=n.forceDealerId;r.isDealerSite=n.isDealerSite;r.isMultiBranchDealer=n.isMultiBranchDealer;r.dealerCompositeID=n.dealerCompositeID;r.pricingSuccess=!0;r.currentPath=f.path();r.ffc.form={submitting:!1,completed:!1,errors:!1,settings:{availableModels:n.availableModels?n.availableModels:null,availableGrades:n.availableGrades?n.availableGrades:null,balloonPayment:{fixedValue:n.balloonPayment.fixedValue?n.balloonPayment.fixedValue:null,min:n.balloonPayment.min?n.balloonPayment.min:0,max:n.balloonPayment.max?n.balloonPayment.max:50,step:n.balloonPayment.step?n.balloonPayment.step:5,disabled:n.balloonPayment.disabled!=null?n.balloonPayment.disabled:!0},loanTerm:{personalMax:n.loanTerm.personalMax?n.loanTerm.personalMax:5,businessMax:n.loanTerm.businessMax?n.loanTerm.businessMax:5,max:n.loanTerm.max?n.loanTerm.max:5,min:1},summary:{paymentInterval:n.summary.paymentInterval?n.summary.paymentInterval:"month"},messages:{apiError:n.messages.apiError?n.messages.apiError:"Oops, something went wrong while we were doing the sums.  Please check the form values and try again.  If the problem persists, please contact your dealer directly."},disclaimerPage:n.disclaimerPage,enablePricingByZone:n.enablePricingByZone=="true"},data:{postcodes:null,deposit:null,interestrate:null,interestRateCopy:"",carmodel:t.model,grade:t.grade,engineVariant:t.engineVariant,engineVariantAndGrade:t.engineVariant+";"+t.grade,enhancementPack:t.enhancementPack,trim:t.trim,colour:t.colour,loanterm:null,balloonPayment:0,loantype:"Personal",dealerId:i.dealerID,dealerName:i.dealerName,source:r.ffc.urlParameters.source||null},emailsettings:{email:{subject:"Lexus Financial Services: Finance estimate",body:"",introText:"",disclaimer:"",fullBodyContents:""}},results:{paint:null,trim:null,driveAwayPrice:0,installmentPerMonth:0,installmentPerWeek:0,finalBalloonPayment:0},pricingSuccess:!0,dealerquoteform:{Show:!1}};k.info("$scope.ffc.form.data:");k.info(r.ffc.form.data);r.ffc.form.settings.balloonPayment.fixedValue!=null&&(r.ffc.form.data.balloonPayment=r.ffc.form.settings.balloonPayment.fixedValue);o=r.ffc.form.settings.availableModels;o&&(r.ffc.form.data.carmodel=u(r.ffc.form.data.carmodel),r.clearSomeCarData(),e.$broadcast("vehicle-preference-change",{model:r.ffc.form.data.carmodel,grade:undefined,engineVariant:undefined,enhancementPack:undefined}),e.$broadcast("field-car-model-engine-variant-update-selected"));h.getLexusVisitorSession().then(function(n){var t=h.getLexusVisitor(r.ffc.urlParameters);r.ffc.form.data.email=n.Data.email;r.ffc.form.data.firstname=n.Data.name;r.ffc.form.data.lastname=n.Data.surname;r.ffc.form.data.phone=n.Data.phone;r.ffc.form.data.message=null;r.ffc.form.data.prefer=n.Data.preferredContactMethod?n.Data.preferredContactMethod:"email";r.ffc.form.data.phonetype=n.Data.phoneType?n.Data.phoneType:"home";r.ffc.form.data.additionalcomments=null;r.ffc.form.data.subscribe=!1;r.ffc.form.data.captcha="";r.ffc.form.data.messagedynamic="";t.suburb&&t.postCode&&t.state&&(r.ffc.form.data.postcodes||(r.ffc.form.data.postcodes=[]),r.ffc.form.data.postcodes.push(h.getAutocompleteTagFromVisitor(t)))},function(){r.ffc.form.data.email=null;r.ffc.form.data.firstname=null;r.ffc.form.data.lastname=null;r.ffc.form.data.phone=null;r.ffc.form.data.message=null;r.ffc.form.data.prefer="email";r.ffc.form.data.phonetype="home";r.ffc.form.data.additionalcomments=null;r.ffc.form.data.subscribe=!1;r.ffc.form.data.captcha="";r.ffc.form.data.messagedynamic=""}).finally(function(){r.ffc.form.data.carmodel&&(e.$broadcast("field-car-model-engine-variant-update-without-reset"),r.ffc.form.data.engineVariantAndGrade&&e.$broadcast("field-car-model-enhancement-pack-update-selected"));r.ffc.form.data.postcodes&&r.ffc.form.data.postcodes.length>0&&!r.isDealerSite&&r.searchNow();r.isDealerSite&&r.isMultiBranchDealer&&(r.ffc.form.data.dealerId=null,r.ffc.form.data.dealerName=null,r.loadBranches(r.forceDealerId));r.isDealerSite&&!r.isMultiBranchDealer&&(r.ffc.form.data.dealerId=r.dealerCompositeID,r.ffc.form.data.dealerName=null)})};r.clearSomeCarData=function(){r.ffc.form.data.engineVariant=undefined;r.ffc.form.data.grade=undefined;r.ffc.form.data.engineVariantAndGrade=undefined;r.ffc.form.data.enhancementPack=undefined};r.createGenericMessage=function(n){var i=$("#carmodel_"+n+" option:selected").text(),t="I am interested in finding out more about vehicle finance on the ";return t+=i+" "+$("#engineVariant_"+n+" option:selected").text()+", ",t+=$("#enhancementPack_"+n+" option:selected").val()==""?"":$("#enhancementPack_"+n+" option:selected").text()+", ",t+=(r.ffc.form.results.paint?r.ffc.form.results.paint.uriName:"")+"<br><br>",t+="<strong>Usage:<\/strong> "+r.ffc.form.data.loantype.replace(/\w\S*/g,function(n){return n.charAt(0).toUpperCase()+n.substr(1)})+"<br>",t+="<strong>"+(r.ffc.form.data.loantype.toLowerCase()==="personal"?"Comparison Rate":"Interest Rate")+":<\/strong> "+r.ffc.form.data.interestrate+" %<br>",t+="<strong>Deposit:<\/strong> $"+r.ffc.form.data.deposit+"<br>",t+="<strong>Loan Term:<\/strong> "+r.ffc.form.data.loanterm+" years<br>",t+="<strong>Balloon Payment<span class='lx-finance-summary__section-payment-info'>3<\/span> :<\/strong> "+(r.pricingSuccess?"$"+r.ffc.form.results.finalBalloonPayment:"Price currently not available")+"<br>",t+="<strong>Drive Away<span class='lx-finance-summary__section-payment-info'>1<\/span> :<\/strong> "+(r.pricingSuccess?"$"+r.ffc.form.results.driveAwayPrice:"Price currently not available")+"<br>",t+="<strong>Estimated Repayment<span class='lx-finance-summary__section-payment-info'>2<\/span> :<\/strong> ",t+=r.ffc.form.settings.summary.paymentInterval=="month"?r.pricingSuccess?"$"+r.ffc.form.results.installmentPerMonth+" per month <br>":"Price currently not available <br>":r.pricingSuccess?"$"+r.ffc.form.results.installmentPerWeek+" per week <br>":"Price currently not available <br>",r.ffc.form.data.messagedynamic=t,y.trustAsHtml(t)};r.setFocus=function(n){$("html, body").animate({scrollTop:$("#postcodes").offset().top-80});n.preventDefault();$("#postcodes :input").focus()};r.setFocusWithScroll=function(n){n.preventDefault();$("html, body").animate({scrollTop:$("#postcodes").offset().top-80},200)};r.getMailLink=function(n){n=n||0;var u=$("#carmodel_"+n+" option:selected").text(),f=$("#engineVariant_"+n+" option:selected").text(),e=$("#enhancementPack_"+n+" option:selected").text(),i="\n",t=r.ffc.form.emailsettings.email.introText+i+i;return t+="Vehicle Model : "+u+i,t+="Variant and Grade : "+f+i,t+="Enhancement Pack : "+e+i,t+="Disclaimer Paint : The price is based on "+(r.ffc.form.results.paint?r.ffc.form.results.paint.uriName.toUpperCase():"a default")+" exterior and ",t+=(r.ffc.form.results.trim?r.ffc.form.results.trim.uriName.toUpperCase():"a default")+" trim"+i,t+="Interest Rate : "+r.ffc.form.data.interestrate+"%"+i,t+="Deposit : $"+r.ffc.form.data.deposit+i,t+="Loan Term : "+r.ffc.form.data.loanterm+" years"+i,t+="Usage : "+r.ffc.form.data.loantype+i,t+="Drive-away : ",t+=r.pricingSuccess?"$"+r.ffc.form.results.driveAwayPrice:"Price currently not available",t+=i,r.ffc.form.settings.summary.paymentInterval=="month"?(t+="Estimated Monthly Repayment^ : ",t+=r.pricingSuccess?"$"+r.ffc.form.results.installmentPerMonth:"Price currently not available"):(t+="Estimated Weekly Repayment^ : ",t+=r.pricingSuccess?"$"+r.ffc.form.results.installmentPerWeek:"Price currently not available"),t+=i,t+="Final Balloon Payment++ : $"+r.ffc.form.results.finalBalloonPayment+i+i,t+=r.ffc.form.emailsettings.email.disclaimer+i,r.ffc.form.emailsettings.email.fullBodyContents=t,"mailto:?subject="+encodeURIComponent(r.ffc.form.emailsettings.email.subject)+"&body="+encodeURIComponent(r.ffc.form.emailsettings.email.fullBodyContents)};r.getBuildPriceLink=function(){var n=r.ffc.form.data.carmodel?r.BuildPriceService.encodeUriFragment(r.ffc.form.data.carmodel):"";return n=n+"/",r.ffc.form.data.engineVariant&&(n=n+r.BuildPriceService.encodeUriFragment(r.ffc.form.data.engineVariant)+"/",n=n+r.BuildPriceService.encodeUriFragment(r.ffc.form.data.grade)+"/",r.ffc.form.data.enhancementPack&&(n=n+r.BuildPriceService.encodeUriFragment(r.ffc.form.data.enhancementPack)+"/"),r.ffc.form.results.paint&&(n=n+r.BuildPriceService.encodeUriFragment(r.ffc.form.results.paint.uriName)+"/"),r.ffc.form.results.trim&&(n=n+r.BuildPriceService.encodeUriFragment(r.ffc.form.results.trim.uriName)),n=n+"/4#lx-bp-nav"),r.BuildPriceService.encodeUriPath(n)};r.updateIntroText=function(n){r.ffc.form.emailsettings.email.introText=y.trustAsHtml(n)};r.updateDisclaimerText=function(n){r.ffc.form.emailsettings.email.disclaimer=y.trustAsHtml(n)};r.deselectDealer=function(){r.ffc.form.data.dealerId=r.ffc.form.data.dealerName=null};r.selectDealer=function(n){var i=$(document).scrollTop(),t=$("#"+n).parents(".lx-form__find-dealer-js").offset().top;i>t&&TweenLite.to(window,.5,{scrollTo:{y:t},ease:Power2.easeOut})};r.searchNow=function(){r.ffc.form.dealersLoading=!0;e.$broadcast("visitor-details-change-autocomplete",r.ffc.form.data.postcodes[0].data);o.setParam("postCode",r.ffc.form.data.postcodes[0].data.postCode);o.setParam("suburb",r.ffc.form.data.postcodes[0].data.suburb);o.setParam("type","Sales");r.ffc.form.data.postcode=r.ffc.form.data.postcodes[0].data.postCode;o.GetResults()};r.clearPostcode=function(){r.ffc.form.data.postcodes=null;r.ffc.form.dealerquoteform.Show=!1};r.updatePostcode=function(n){r.ffc.form.tagsLoading=!1;e.$broadcast("visitor-details-cookie-change",{postCode:n.data.postcode,suburb:n.data.suburb,state:n.data.state,pricingZone:n.data.pricingZone});r.ffc.form.data.postcodes=[];r.ffc.form.data.postcodes[0]=n;r.dealerSearch(n)};r.loadBranches=function(n){r.ffc.form.dealersLoading=!0;o.setParam("dealerID",n);o.setParam("type","Sales");o.GetDealerBranches()};r.dealerSearch=function(){r.searchDealersNow()};r.searchDealersNow=function(){r.ffc.form.dealersLoading=!0;e.$broadcast("visitor-details-change-autocomplete",r.ffc.form.data.postcodes[0].data);r.ffc.form.data.postcodes&&r.ffc.form.data.postcodes.length>0&&!r.isDealerSite&&r.searchNow();r.isDealerSite&&r.isMultiBranchDealer&&(r.ffc.form.data.dealerId=null,r.ffc.form.data.dealerName=null,r.loadBranches(r.forceDealerId));r.isDealerSite&&!r.isMultiBranchDealer&&r.dealerState&&(o.setParam("dealerID",r.forceDealerId),o.setParam("dealerState",r.dealerState),o.setParam("type","Sales"),o.GetResult())};r.$on("dealer-search-results-received",function(n,t){r.ffc.form.dealersLoading=!1;r.ffc.form.dealers=t.Data;r.checkDealersLoaded();r.ffc.form.dealerquoteform.Show&&$("html, body").animate({scrollTop:$("#scrollFormTop").offset().top},200)});r.checkDealersLoaded=function(){var n=r.ffc.form.dealers.find(function(n){return n.dealerCode==r.ffc.form.data.dealerId});n||(r.ffc.form.data.dealerId=null);r.ffc.form.dealers.length==1&&(r.ffc.form.data.dealerId=r.ffc.form.dealers[0].dealerCode)};r.$on("dealer-search-result-received",function(n,t){r.ffc.form.dealersLoading=!1;r.ffc.form.dealer=t.Data;r.ffc.form.dealerquoteform.Show&&$("html, body").animate({scrollTop:$("#scrollFormTop").offset().top},200);r.ffc.form.dealerlocations=t.Data.locations;r.ffc.form.dealerlocations==null&&(r.ffc.form.dealerlocations=[]);t.Data&&angular.forEach(t.Data,function(n){n&&angular.forEach(n.locations,function(n){this.push(n)},r.ffc.form.dealerlocations)});r.ffc.form.dealerlocations.length==1&&(r.ffc.form.data.locationId=r.ffc.form.dealerlocations[0].locationId)});r.getData=function(){return{DriveAwayPrice:r.ffc.form.results.driveAwayPrice,Deposit:r.ffc.form.data.deposit,InterestRate:r.ffc.form.data.interestrate,LoanTerm:r.ffc.form.data.loanterm,BalloonPayment:r.ffc.form.data.balloonpayment}};r.isSectionDisabled=function(n){switch(n){case"summary":case"loanDetails":if(!(r.ffc.form.data.carmodel&&r.ffc.form.data.engineVariantAndGrade))return!0;case"vehicleDetails":if(!(r.ffc.form.data.postcodes&&r.ffc.form.data.postcodes.length>0))return!0}return!1};r.updateLoanType=function(){r.bindLoanTermOptions();r.bindBalloonPaymentOptions();r.interestRateCopy()};r.updateLoanTerm=function(){r.bindBalloonPaymentOptions()};r.interestRateCopy=function(){r.ffc.form.data.loantype.toLowerCase()==="business"&&(r.ffc.form.data.interestRateCopy=r.ffc.form.data.interestRateBusiness>0?r.ffc.form.data.interestRateBusiness:r.ffc.form.data.interestrate);r.ffc.form.data.loantype.toLowerCase()==="personal"&&(r.ffc.form.data.interestRateCopy=r.ffc.form.data.interestRatePersonal>0?r.ffc.form.data.interestRatePersonal:r.ffc.form.data.interestrate)};r.bindLoanTermOptions=function(){switch(r.ffc.form.data.loantype){case"personal":r.ffc.form.settings.loanTerm.max=r.ffc.form.settings.loanTerm.personalMax;break;case"business":r.ffc.form.settings.loanTerm.max=r.ffc.form.settings.loanTerm.businessMax}r.ffc.form.data.loanterm=Math.min(r.ffc.form.settings.loanTerm.max,Math.max(r.ffc.form.settings.loanTerm.min,r.ffc.form.data.loanterm))};r.bindBalloonPaymentOptions=function(){r.ffc.form.settings.balloonPayment.fixedValue||r.ffc.form.data.loantype&&r.ffc.form.data.loanterm&&n({method:"GET",url:t("formatArgs")(Lexus.API.Lookup.FinanceBalloonPaymentOptions,[Lexus.ID.Site,r.ffc.form.data.loantype,r.ffc.form.data.loanterm,r.ffc.form.data.loantype])}).then(function(n){n.data.Data&&(r.ffc.form.settings.balloonPayment.min=n.data.Data.Min,r.ffc.form.settings.balloonPayment.step=n.data.Data.Step,r.ffc.form.data.balloonPayment=Math.min(n.data.Data.Max,Math.max(n.data.Data.Min,r.ffc.form.data.balloonPayment)),r.ffc.form.settings.balloonPayment.max=n.data.Data.Max);r.ffc.form.settings.balloonPayment.disabled=n.data.Data.DisableBalloonPayments;e.$broadcast("balloon-payment-options-received")},function(){e.$broadcast("open-modal-window",{content:r.ffc.form.settings.messages.apiError,variant:Lexus.ModalVariant.Content,closeOnEvent:"close-modal-window",wrapper:["<p style='padding: 20px 65px 0px 20px; text-align: left'>","<\/p>"]})}).finally(function(){})};r.$watchGroup(["ffc.form.data.carmodel","ffc.form.data.enhancementPack","ffc.form.data.postcodes","ffc.form.data.engineVariantAndGrade"],function(n,t,i){var r={},u,f;if(r.carmodel=n[0],r.enhancementPack=n[1],r.postcodes=n[2],r.engineVariantAndGrade=n[3],(i.ffc.form.data.engineVariantAndGrade!=r.engineVariantAndGrade||i.ffc.form.data.enhancementPack!=r.enhancementPack)&&(i.ffc.form.data.trim=i.ffc.form.results.trim=null,i.ffc.form.data.colour=i.ffc.form.results.paint=null),k.info("carmodel: "+r.carmodel),k.info("enhancementPack: "+r.enhancementPack),k.info("engineVariantAndGrade: "+r.engineVariantAndGrade),u="",r.postcodes&&r.postcodes.length>0){if(f=h.splitAutoCompleteResult(r.postcodes[0].text),u=r.postcodes[0].data.pricingZone,!f.postCode)return}else{i.ffc.form.results.driveAwayPrice=0;return}p.waitFor.call(i,"ffc.formfields.data.enhancementPacks",p.waitCondition.NOTEMPTY).then(function(){var s=i.ffc.formfields.data.enhancementPacks.find(function(n){return i.ffc.form.data.enhancementPack==n.uriName}),o=i.ffc.formfields.data.enginevariantsandgrades.find(function(n){return i.ffc.form.data.engineVariantAndGrade==n.key}),h,t,n;if(s&&s.mdmid){if(h=s.mdmid,!o){i.ffc.form.data.engineVariantAndGrade=undefined;return}n=o.gradeId;t=i.ffc.form.data.engineVariant;v.setParam("enablePricingByZone",i.ffc.form.settings.enablePricingByZone);i.ffc.form.data.trim&&i.ffc.form.data.colour?w.getModels(function(){w.getVariants(t,n,function(){var r=w.getVariantByName(t,n,i.ffc.form.data.enhancementPack);w.getTrims(t,n,r.mdmid,function(){var o=w.getTrimByName(t,n,r.mdmid,i.ffc.form.data.trim);o||(o=r.trims.availableTrims[0],i.ffc.form.data.trim=o.uriName);w.getPaints(t,n,r.mdmid,o.id,function(){var s=w.getPaintByName(t,n,r.mdmid,o.id,i.ffc.form.data.colour);s||(s=o.paints.availableColours[0],i.ffc.form.data.colour=s.uriName);v.detailPriceByPaint(n,h,o.id,s.materialCode,f.postCode,i.ffc.form.data.deposit.replace(",",""),i.ffc.form.data.interestrate,i.ffc.form.data.loanterm,i.ffc.form.results.finalBalloonPayment,i.ffc.form.data.loantype,u).then(function(n){n.status==="Success"&&(i.pricingResult(n.data.driveAway),i.ffc.form.results.driveAwayPrice=n.data.driveAway,i.ffc.form.results.paint=s,i.ffc.form.results.trim=o)},function(){i.pricingResult(!1);e.$broadcast("open-modal-window",{content:i.ffc.form.settings.messages.apiError,variant:Lexus.ModalVariant.Content,closeOnEvent:"close-modal-window",wrapper:["<p style='padding: 20px 65px 0px 20px; text-align: left'>","<\/p>"]})})})})})}):v.driveAwayByEnhancementPack(n,h,f.postCode,u).then(function(n){n.status==="Success"&&(n.data&&n.data.driveAway?(i.pricingResult(n.data.driveAway),i.ffc.form.results.driveAwayPrice=n.data.driveAway,i.ffc.form.results.paint=n.data.paint,i.ffc.form.results.trim=n.data.trim):i.pricingResult(0))},function(){i.pricingResult(!1);e.$broadcast("open-modal-window",{content:i.ffc.form.settings.messages.apiError,variant:Lexus.ModalVariant.Content,closeOnEvent:"close-modal-window",wrapper:["<p style='padding: 20px 65px 0px 20px; text-align: left'>","<\/p>"]})})}else r.engineVariantAndGrade&&i.ffc.formfields.data.enginevariantsandgrades?o&&(n=o.gradeId,v.driveAwayByGrade(n,f.postCode,u).then(function(n){n.status==="Success"&&(n.data&&n.data.driveAway?(i.pricingResult(n.data.driveAway),i.ffc.form.results.driveAwayPrice=n.data.driveAway,i.ffc.form.results.paint=n.data.paint,i.ffc.form.results.trim=n.data.trim):i.pricingResult(0))},function(){i.pricingResult(!1);e.$broadcast("open-modal-window",{content:i.ffc.form.settings.messages.apiError,variant:Lexus.ModalVariant.Content,closeOnEvent:"close-modal-window",wrapper:["<p style='padding: 20px 65px 0px 20px; text-align: left'>","<\/p>"]})})):i.ffc.form.results.driveAwayPrice=0})});r.$watchGroup(["ffc.form.results.driveAwayPrice","ffc.form.data.deposit","ffc.form.data.interestrate","ffc.form.data.loanterm","ffc.form.data.balloonPayment","ffc.form.data.loantype"],function(n,t,r){var u={};if(u.driveAwayPrice=n[0],u.deposit=n[1],u.interestrate=n[2],u.loanterm=n[3],u.balloonPayment=n[4],u.loantype=n[5],r.delayedRecalc&&i.cancel(r.delayedRecalc),u.driveAwayPrice===0){r.ffc.form.results.installmentPerMonth=0;r.ffc.form.results.installmentPerWeek=0;r.ffc.form.results.finalBalloonPayment=0;return}u.driveAwayPrice>0&&u.deposit&&u.interestrate&&u.loanterm&&u.balloonPayment!=null&&u.loantype&&(r.delayedRecalc=i(r.recalc,500,!0,u))});r.pricingResult=function(n){var t=typeof n=="number"?n!=0:typeof n=="boolean"?n:!1;t?angular.element("body").removeClass("pricing-error"):angular.element("body").addClass("pricing-error");r.pricingSuccess=t};r.recalc=function(){var i=r.ffc.form.data.interestrate;r.ffc.form.data.interestRateOverride>0&&r.ffc.form.data.loantype.toLowerCase()==="personal"&&(i=r.ffc.form.data.interestRateOverride);r.ffc.form.data.interestRateOverrideBusiness>0&&r.ffc.form.data.loantype.toLowerCase()==="business"&&(i=r.ffc.form.data.interestRateOverrideBusiness);n({method:"GET",url:t("formatArgs")(Lexus.API.Lookup.FinanceCalculator,[Lexus.ID.Site,r.ffc.form.results.driveAwayPrice,r.ffc.form.data.deposit.toString().replace(/,/g,""),i,r.ffc.form.data.loanterm,r.ffc.form.data.balloonPayment,r.ffc.form.data.loantype])}).then(function(n){n.data.Status=="Success"?(r.ffc.form.results.installmentPerMonth=n.data.Data.InstallmentPerMonth,r.ffc.form.results.installmentPerWeek=n.data.Data.InstallmentPerWeek,r.ffc.form.results.finalBalloonPayment=n.data.Data.FinalBalloonPayment,r.ffc.form.failed=!1):e.$broadcast("open-modal-window",{content:n.data.ErrorMessage,variant:Lexus.ModalVariant.Content,closeOnEvent:"close-modal-window",wrapper:["<p style='padding: 20px 65px 0px 20px; text-align: left'>","<\/p>"]})},function(){r.ffc.form.failed=!0;e.$broadcast("open-modal-window",{content:r.ffc.form.settings.messages.apiError,variant:Lexus.ModalVariant.Content,closeOnEvent:"close-modal-window",wrapper:["<p style='padding: 20px 65px 0px 20px; text-align: left'>","<\/p>"]})})};r.openDealerQuoteForm=function(n){r.ffc.form.completed=!1;r.ffc.form.dealerquoteform.Show=!0;r.createGenericMessage(n);r.searchDealersNow()};r.getDataRequestQuoteData=function(){var n=r.ffc.form.data.deposit.toString().replace(",","");return{AdditionalComments:r.ffc.form.data.additionalcomments,Source:r.ffc.form.data.source,DealerId:r.ffc.form.data.dealerId,ContextDealerSiteId:r.forceDealerId,Message:r.ffc.form.data.messagedynamic,PostCode:r.ffc.form.data.postcode,Phone:r.ffc.form.data.phone,FirstName:r.ffc.form.data.firstname,LastName:r.ffc.form.data.lastname,Email:r.ffc.form.data.email,PreferredContactMethod:r.ffc.form.data.prefer,Subscribe:r.ffc.form.data.subscribe,PhoneType:r.ffc.form.data.phonetype,Captcha:r.ffc.form.data.captcha,Model:r.ffc.form.data.carmodel,EngineVariant:r.ffc.form.data.engineVariant,Grade:r.ffc.form.data.grade,EnhancementPack:r.ffc.form.data.enhancementPack,Paint:r.ffc.form.results?r.ffc.form.results.paint.name:null,Trim:r.ffc.form.results?r.ffc.form.results.trim.name:null,LoanType:r.ffc.form.data.loantype,InterestRate:r.ffc.form.data.interestrate,Deposit:n,LoanTerm:r.ffc.form.data.loanterm,BalloonPayment:r.ffc.form.data.balloonPayment,DriveAwayPrice:r.ffc.form.results.driveAwayPrice,MonthlyPayments:r.ffc.form.results.installmentPerMonth,FormUrl:r.ffc.form.settings.disclaimerPage&&r.ffc.form.settings.disclaimerPage!=""?r.ffc.form.settings.disclaimerPage:f.absUrl()}};e.$on("submit-finance-calculator-form",function(){r.ffc.form.submitting=!0;var i=r.getDataRequestQuoteData();b.attachEloquaFields(i);n({method:"POST",url:t("formatArgs")(Lexus.API.FormSubmission.RequestDealerQuoteUrl,[Lexus.ID.Site]),data:i}).then(function(n){n.data.Status=="Success"?r.submissionPass(n.data):r.submissionFail(n.data)},function(n){r.submissionFail(n.data)}).finally(function(){e.$broadcast("form-result")})});r.submissionPass=function(){r.ffc.form.completed=!0;r.ffc.form.failed=!1;r.ffc.form.submitting=!1;f.state("RequestDealerQuoteForm=Pass");a.ShowResult(r.successContent[0]);e.$broadcast("gtm-form-success","Finance Calculator");e.$broadcast("visitor-details-session-change",r.getDataRequestQuoteData())};r.submissionFail=function(n){r.ffc.form.failed=!0;r.ffc.form.errors=n.Data;r.ffc.form.submitting=!1;r.ffc.form.completed=!0;f.state("RequestDealerQuoteForm=Fail");a.ShowResult(r.failureContent[0]);console.error(n.ErrorMessage)};r.email=function(){};r.calculateNext=function(n,t,i,u,f,e){var h=Number(r.ffc.form.data.interestrate),c=Number(i),l=Number(u),s=Number(t),o;f=="Increase"?(o=r.roundToIncrement(h+s,s),o>c?r.showInterestrateModal(u,i):r.ffc.form.data.interestrate=o.toFixed(2)):f=="Decrease"&&(o=r.roundToIncrement(h-s,s),o<l||o<=0?r.showInterestrateModal(u,i):r.ffc.form.data.interestrate=o.toFixed(2));r.formatNumberToDecimal(r.ffc.form.data.interestrate,e)};r.showInterestrateModal=function(n,t){r.$emit("open-modal-window",{content:"Interest Rate should be between "+n+" and "+t+"",wrapper:['<p class="lx-modal__paragraph">',"<\/p>"]})};r.filterValue=function(n,t,i){var r=n.keyCode||n.charCode;isNaN(String.fromCharCode(r))&&(r!=44&&r!=46&&r!=8&&n.preventDefault(),i=="interestrate"&&(r==46&&$("#interestRate").val().indexOf(".")!=-1&&n.preventDefault(),r==44&&n.preventDefault()))};r.initDeposit=function(n){var t=Math.floor(Number(n.toString().replace(",",""))).toLocaleString("en",{useGrouping:!0});r.ffc.form.data.deposit=t};r.validate=function(n,t,i,u,f){var o=Number(t),e=r.roundToIncrement(Number(r.ffc.form.data.interestrate),o),s=Number(i),h=Number(u);(e>s||e<h||e<=0)&&r.showInterestrateModal(u,i);r.ffc.form.data.interestrate=e>s?s.toFixed(2):e<h||e<=0+o?Math.max(h,0+o).toFixed(2):e.toFixed(2);r.formatNumberToDecimal(r.ffc.form.data.interestrate,f)};r.roundToIncrement=function(n,t){if(typeof n!="number"||typeof t!="number")throw new Error('Value is not of type "number"');if(t!=0){var i=1/t;return Math.round(n*i)/i}return n};r.formatNumber=function(n,t){if(t!=null){var i;t[d]==null||isNaN(i=Number(n.toString().replace(/,/g,"")))||(r.ffc.form.data.deposit=Math.floor(i).toLocaleString("en",{useGrouping:!0}));t[d]!=null&&(r.ffc.form.data.deposit=r.ffc.form.data.deposit.replace("-",""))}};r.formatNumberToDecimal=function(n,t){t!=null&&(t[d]==null||isNaN(Number(n.replace(",","")))||n.replace(",","").indexOf(".")==-1&&(r.ffc.form.data.interestrate=Number(n).toFixed(2)),t[d]!=null&&(r.ffc.form.data.interestrate=r.ffc.form.data.interestrate.replace("-","")))};r.byAvailableGrades=function(n){return!r.ffc.form.settings.availableGrades||r.ffc.form.settings.availableGrades.includes(n.mdmGradeId)}}var d="";return g.$inject=["$scope"],{scope:!0,restrict:"A",controller:g,controllerAs:"ffc",bindToController:!0,link:function(n,t,i){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure");d=i.lxFormsName}}}(function(){"use strict";angular.module("Lexus",["Lexus.Directives","Lexus.Components","Lexus.Factories","Lexus.Services","Lexus.Filters","ngTouch","ngCookies","ngSanitize","ngAnimate","ngTagsInput","ng-directives-utils.transcludeReplace","vcRecaptcha","720kb.datepicker","ngRoute","ngDialog","angularCancelOnNavigateModule","angulartics","Lexus.angulartics","angulartics.debug","duParallax"]);angular.module("Lexus.Directives",[]);angular.module("Lexus.Factories",[]);angular.module("Lexus.Services",[]);angular.module("Lexus.Filters",[]);angular.module("Lexus.Components",[])})();angular.module("Lexus.Filters",[]).filter("formatArgs",[function(){return function(n,t){var u=n.match(/\{[0-9]+\}/g),r=0,i;if(angular.forEach(t,function(t,i){n=n.replace("{"+i+"}",t);r++}),u.length>r)for(i=r;i<u.length;i++)n=n.replace("/{"+i+"}","");return n}}]).filter("format",[function(){return function(n,t){return t.replace("{0}",n)}}]).filter("replaceCaseInsensitive",[function(){return function(n,t){if(typeof n!="string")return n;var i=new RegExp(t,"i");return n.replace(i,"")}}]).filter("sanatize",[function(){return function(n){if(n!==null)return n.replace(/[^a-z0-9.\-@\s\/\'\&\u2019\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]+/gi,"")}}]).filter("lowerCaseFirstLetter",function(){return function(n){return n?n.charAt(0).toLowerCase()+n.substr(1):""}}).filter("currencyNoZero",["$filter",function(n){return function(t){return parseInt(t)===0?"":n("currency")(t)}}]).filter("currencyNoZeroNoCents",["$filter",function(n){return function(t){return parseInt(t)===0?"":n("currency")(t,undefined,0)}}]).filter("currencyRounded",["$filter",function(n){return function(t){return n("currency")(Math.round(t))}}]).filter("dateToBE",["$filter",function(){return function(n,t){if(angular.isDefined(n)&&!angular.equals(n,"")){var i=moment(n,t);return{day:i.format("D"),month:i.format("M"),year:i.format("YYYY"),fullDate:i.format("YYYY-M-D")}}return{day:"",month:"",year:"",fullDate:""}}}]).filter("dateToUniversal",["$filter",function(){return function(n){if(angular.isDefined(n)&&!angular.equals(n,"")){var t=moment(n,"YYYY-MM-DD");return t.unix()}return""}}]).filter("filterLower",function(){return function(n,t){return n.filter(function(n){if(n.rating<=t.rating)return n})}}).filter("filterHigher",function(){return function(n,t){return n.filter(function(n){if(n.rating>=t.rating)return n})}}).filter("removeSpaces",function(){return function(n){return String(n).replace(/\s+/g,"")}}).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(n,t){function u(t,i){function r(){var t=[];return function(i,r){if(angular.isObject(r)&&!(r==null)){if(~t.indexOf(r))return"[Circular]";t.push(r)}return n==r?"$WINDOW":n.document==r?"$DOCUMENT":r&&r.$evalAsync&&r.$watch?"$SCOPE":r}}return[t,JSON.stringify(i,r())].join("#").replace(/"/g,"")}function f(n){var t=n.targetScope.$id;forEach(i[t],function(n){delete r[n]});delete i[t]}function e(){c(function(){t.$$phase||(r={})},2e3)}function o(n,t){var r=n.$id;return angular.isUndefined(i[r])&&(n.$on("$destroy",f),i[r]=[]),i[r].push(t)}function s(n,t){var i=u(n,t);return r[i]}function h(n,t,i,f){var s=u(n,t);return r[s]=f,i&&i.$evalAsync&&i.$watch?o(i,s):e(),f}var r={},i={},c=n.setTimeout;return{isMemoized:s,memoize:h}}]}).filter("groupBy",["$parse","filterWatcher",function(n,t){return function(i,r){function u(n,t){var i={},r;return angular.forEach(n,function(n){r=t(n);i[r]||(i[r]=[]);i[r].push(n)}),i}return!angular.isObject(i)||angular.isUndefined(r)?i:t.isMemoized("groupBy",arguments)||t.memoize("groupBy",arguments,this,u(i,n(r)))}}]);angular.module("Lexus.Factories").factory("API",["$http","$q",function(n,t){return{get:function(i,r){var u=t.defer();return n({method:"GET",url:i}).then(function(n){r&&r();n.data.ErrorMessage?u.reject(n.data,200):u.resolve(n.data)},function(n){var t={reason:n.data,status:n.status,ErrorMessage:n.statusText};u.reject(t)}),u.promise},post:function(i,r){var u=t.defer();return n({method:"POST",url:i,data:r}).then(function(n){n.data.ErrorMessage?u.reject(n.data,200):u.resolve(n.data)},function(n){var t={reason:n.data,status:n.status,ErrorMessage:n.statusText};u.reject(t)}),u.promise},del:function(i,r){var u=t.defer();return n({method:"DELETE",url:i}).then(function(n){r&&r();n.data.ErrorMessage?u.reject(n.data,200):u.resolve(n.data)},function(n){var t={reason:n.data,status:n.status,ErrorMessage:n.statusText};u.reject(t)}),u.promise}}}]);angular.module("angularCancelOnNavigateModule",[]).config(["$httpProvider",function(n){n.interceptors.push("HttpRequestTimeoutInterceptor")}]).run(["$rootScope","HttpPendingRequestsService",function(){}]);angular.module("angularCancelOnNavigateModule").service("HttpPendingRequestsService",["$q",function(n){function i(){var i=n.defer();return t.push(i),i.promise}function r(){console.log("%c HttpPendingRequestsService cancelAll() -> cancelPromises: ","color: red;",t);angular.forEach(t,function(n){n.promise.isGloballyCancelled=!0;n.resolve()});t.length=0}var t=[];return{newTimeout:i,cancelAll:r}}]);angular.module("angularCancelOnNavigateModule").factory("HttpRequestTimeoutInterceptor",["$q","HttpPendingRequestsService",function(n,t){return{request:function(n){return n=n||{},n.timeout!==undefined||n.noCancelOnRouteChange||(n.timeout=t.newTimeout()),n},responseError:function(t){return t.config.timeout.isGloballyCancelled?n.defer().promise:n.reject(t)}}}]);angular.module("Lexus.Factories").factory("Geolocation",["$q","$rootScope",function(n,t){return function(){var i=n.defer(),o="geolocation"in navigator,r,f={timeout:8e3},e,u;return o?(e=function(n){n&&(window.clearTimeout(r),i.resolve({lat:n.coords.latitude,lng:n.coords.longitude,success:!0,message:"pass"}))},u=function(n){window.clearTimeout(r);i.reject({success:!1,error:n,message:n},200)},r=window.setTimeout(u,f.timeout),navigator.geolocation.getCurrentPosition(e,u,f),t.$on("modal-open",function(){window.clearTimeout(r)})):i.reject({success:!1,message:"geoLocation is not supported"}),i.promise}}]);angular.module("Lexus.Factories").factory("Geodecode",["$q","$filter","API","Geolocation",function(n,t,i,r){return function(){var f=n.defer(),u={isSuccessfull:!1,data:{},message:""},e={},o=function(n){if(n&&n.success){var r=t("formatArgs")(Lexus.API.Address.GeoDecode,[Lexus.ID.Site,n.lat,n.lng]);i.get(r).then(function(n){$.each(n.Data.results,function(n,t){t.types[0]==="postal_code"&&(e.postcode=t.address_components[0].short_name);t.types[0]==="locality"&&(e.suburb=t.address_components[0].short_name);t.types[0]==="administrative_area_level_1"&&(e.state=t.address_components[0].short_name)});u.isSuccessfull=!0;u.data=e;f.resolve(u)},function(){u.message="failed to get the parsed address";f.reject(u)})}else u.message="failed to get the co-ordinates from geolocation service",f.reject(u)},s=function(n){u.message=n?n.message:"geo service unavailable";f.reject(u)},h=r();return h.then(o,s),f.promise}}]);angular.module("Lexus.Services").service("AddressSuggestService",["$timeout","$http","API","$filter",function(n,t,i,r){var f=this,u={};return u.defaults={siteID:Lexus.ID.Site,term:null},u.params={siteID:u.defaults.siteID,term:u.defaults.term},f.GetResults=function(n){return u.params.searchQueryUrl=r("formatArgs")(Lexus.API.Lookup.Suburb,[u.params.siteID,u.params.term]),i.get(u.params.searchQueryUrl,n)},f.setParam=function(n,t){u.params[n]=t},f.getParam=function(n){return u.params[n]},f}]);angular.module("Lexus.Services").factory("BuildPriceService",["$q","$timeout","BuildPriceAPIService",function(n,t,i){var r=this;return r.events={pageNavigation:"bp-page-navigation",pageNavigationBroadcast:"bp-page-navigation-broadcast",openPostcodeDialog:"open-change-postcode",closePostcodeDialog:"close-change-postcode",postcodeChanged:"postcode-changed",openPostcodeSlideout:"open-postcode-slideout",confirmPostcodeFromSlideout:"confirm-postcode-slideout",overviewDataReceived:"bp-overview-data-received",vehicleDataReceived:"bp-vehicle-data",enhancementPacksReceived:"bp-enhancement-pack-data",trimsReceived:"bp-trim-data",paintsReceived:"bp-colour-data",modelSelected:"bp-did-select-model",modelSelectedUpdateMenu:"bp-did-select-model-update-menu",engineVariantSelected:"bp-did-select-engine-variant",gradeSelected:"bp-did-select-grade",enhancementPackSelected:"bp-did-select-enhancement-pack",paintSelected:"bp-did-select-paint",trimSelected:"bp-did-select-trim",threeSixtyLoad:"bp-did-360-start",threeSixtyLoaded:"bp-did-360-done",userSelection:"bp-user-selection",priceLoad:"bp-did-price-start",priceDone:"bp-did-price-done",priceReceived:"bp-did-price-succeed",priceError:"bp-did-price-error",onOfferText:"bp-on-offer-text",vehicleDataRelay:"bp-vehicle-relay",paintDataRelay:"bp-paint-relay",invalidSelectionError:"bp-invalid-selection",holdPricingCalls:"bp-hold-pricing-calls",holdPricingCallsRelay:"bp-hold-pricing-calls-relay",gtmEvent:"bp-gtm-event",onCompareVehicles:"cv-on-compare-vehicles",compareVehicleActiveSelection:"cv-vehicle-active-selection",triggerSaveBuildPriceDialog:"trigger-save-build-price",triggerCloseSaveBuildPriceDialog:"trigger-close-save-build-price",closeSaveBuildPriceDialog:"close-save-build-price",openSaveBuildPriceDialog:"open-save-build-price"},r.findModelInVehicleData=function(n){var t;for(var r in i.data)if(t=i.data[r].models.find(function(t){return t.uriName===n}),t)return t},r.findEngineVariantInVehicleData=function(n){var t,u,r;for(t in i.data)for(u in i.data[t].models)if(r=i.data[t].models[u].modelEngineVariants.find(function(t){return t.uriName===n}),r)return r;return{grades:[]}},r.findGradeInVehicleData=function(n){var r,t,u,f;for(t in i.data)for(u in i.data[t].models)for(f in i.data[t].models[u].modelEngineVariants)if(r=i.data[t].models[u].modelEngineVariants[f].grades.find(function(t){return t.id===n}),r)return r},r.waitCondition={CHANGED:0,NOTNULL:1,ISNULL:2,NOTEMPTY:3,ISTRUE:4,ISSTRICTLYTRUE:5,ISFALSE:6,ISSTRICTLYFALSE:7},r.stepIds={MODEL:"MODEL",GRADE:"GRADE",ENHANCEMENT_PACK:"ENHANCEMENT_PACK",PAINT_TRIM:"PAINT_TRIM",SUMMARY:"SUMMARY"},r.routingSettings={baseUrl:"",argIdx:["carmodel","engineVariant","grade","enhancementPack","colour","trim"]},r.waitFor=function(target,waitCondition){var defer=n.defer(),currentValue=eval("this."+target),unbind;return(waitCondition===r.waitCondition.NOTNULL&&currentValue!=null||waitCondition===r.waitCondition.ISNULL&&currentValue==null)&&defer.resolve(currentValue),unbind=this.$watch(target,function(n){switch(waitCondition){case r.waitCondition.CHANGED:unbind();defer.resolve(n);break;case r.waitCondition.NOTNULL:n!=null&&(unbind(),defer.resolve(n));break;case r.waitCondition.ISNULL:n==null&&(unbind(),defer.resolve(n));break;case r.waitCondition.NOTEMPTY:n!=null&&n.length!=null&&n.length>0&&(unbind(),defer.resolve(n));break;case r.waitCondition.ISTRUE:n==!0&&(unbind(),defer.resolve(n));break;case r.waitCondition.ISSTRICTLYTRUE:n===!0&&(unbind(),defer.resolve(n));break;case r.waitCondition.ISFALSE:n==!1&&(unbind(),defer.resolve(n));break;case r.waitCondition.ISSTRICTLYFALSE:n===!1&&(unbind(),defer.resolve(n));break;default:unbind();defer.reject()}}),defer.promise},r.watchDebounce=function(i,r,u){var f,e=n.defer();return function(){var o=this,s=arguments,h=function(){f=null;u||(e.resolve(i.apply(o,s)),e=n.defer())},c=u&&!f;return f&&t.cancel(f),f=t(h,r),c&&(e.resolve(i.apply(o,s)),e=n.defer()),e.promise}},r.getGradeNameFromId=function(n){var t=r.findGradeInVehicleData(n);return t?t.name:"Unknown"},r.getColourFromUri=function(n,t){return n.find(function(n){return n.uriName==t})},r.emitInvalidSelection=function(n){console.error("Specification validation failed in "+(n.controllerName?n.controllerName:"scope id "+n.$scope.$id)+": '"+n.invalidValue+"' - value defaulted to '"+n.defaultValue+"'");n.$scope.$emit(r.events.invalidSelectionError,n)},r.fragmentReplacementMap=[[/-/g,"_",/_/g,"-"],[/\s/g,"-",/-/g," "],[/\//g,"~",/~/g,"/"]],r.pathReplacementMap=[[/\/+/g,"/"]],r.encodeUriFragment=function(n){if(n!=null){for(var t=0;t<r.fragmentReplacementMap.length;t++)n=n.replace(r.fragmentReplacementMap[t][0],r.fragmentReplacementMap[t][1]);return n}},r.decodeUriFragment=function(n){if(n!=null){for(var t=r.fragmentReplacementMap.length-1;t>=0;t--)n=n.replace(r.fragmentReplacementMap[t][2],r.fragmentReplacementMap[t][3]);return n}},r.encodeUriPath=function(n){if(n!=null){for(var t=0;t<r.pathReplacementMap.length;t++)n=n.replace(r.pathReplacementMap[t][0],r.pathReplacementMap[t][1]);return n}},r.getBuildPriceLink=function(n,t){var i=n.carmodel?r.encodeUriFragment(n.carmodel):"";return i=i+"/",n.engineVariant&&(i=i+r.encodeUriFragment(n.engineVariant)+"/",n.grade&&(i=i+r.encodeUriFragment(n.grade)+"/",n.enhancementPack&&(i=i+n.enhancementPack+"/",n.colour&&(i=i+r.encodeUriFragment(n.colour)+"/"),n.trim&&(i=i+r.encodeUriFragment(n.trim)+"/",t&&(i=i+"/"+t+"#lx-bp-nav"))))),r.encodeUriPath(i)},r}]);angular.module("Lexus.Services").factory("BuildPriceAPIService",["$q","$timeout","VehicleService",function(n,t,i){var r=this;return r.isEmpty=function(n){for(var t in n)if(n.hasOwnProperty(t))return!1;return JSON.stringify(n)===JSON.stringify({})},r.waitCondition={CHANGED:0,NOTNULL:1,ISNULL:2,NOTEMPTY:3},r.waitFor=function(target,waitCondition){function isEmpty(n){for(var t in n)if(n.hasOwnProperty(t))return!1;return JSON.stringify(n)===JSON.stringify({})}var defer=n.defer(),currentValue=eval("this."+target),obj;return(waitCondition===r.waitCondition.NOTNULL&&currentValue!=null||waitCondition===r.waitCondition.ISNULL&&currentValue==null)&&defer.resolve(currentValue),Object.prototype.watch||Object.defineProperty(Object.prototype,"watch",{enumerable:!1,configurable:!0,writable:!1,value:function(n,t){var i=this[n],r=i,u=function(){return r},f=function(u){return i=r,r=t.call(this,n,i,u)};delete this[n]&&Object.defineProperty(this,n,{get:u,set:f,enumerable:!0,configurable:!0})}}),Object.prototype.unwatch||Object.defineProperty(Object.prototype,"unwatch",{enumerable:!1,configurable:!0,writable:!1,value:function(n){var t=this[n];delete this[n];this[n]=t}}),obj=this,obj.watch(target,function(n,t,i){switch(waitCondition){case r.waitCondition.CHANGED:obj.unwatch(target);defer.resolve(i);break;case r.waitCondition.NOTNULL:i!=null&&(obj.unwatch(target),defer.resolve(i));break;case r.waitCondition.ISNULL:i==null&&(obj.unwatch(target),defer.resolve(i));break;case r.waitCondition.NOTEMPTY:isEmpty(i)||(obj.unwatch(target),defer.resolve(i));break;default:obj.unwatch(target);defer.reject()}}),defer.promise},r.getModels=function(n){return i.getVehiclesOverview().then(function(t){return r.data=t.data,n&&typeof n=="function"&&n(),t},function(){var n="Error loading vehicle overview";console.error?console.error(n):console.log("Error: "+n)})},r.findEngineVariantInVehicleData=function(n){var i,t,u,e,f;for(i in r.data)if(r.data.hasOwnProperty(i)){t=r.data[i];for(u in t.models)if(t.models.hasOwnProperty(u)&&(e=t.models[u],f=e.modelEngineVariants.find(function(t){return t.uriName===n}),f))return f}},r.findModelInVehicleData=function(n){var t,u,i;for(t in r.data)if(r.data.hasOwnProperty(t)&&(u=r.data[t],i=u.models.find(function(t){return t.uriName===n}),i))return i},r.getGradeByName=function(n,t){if(n==null||t==null)return!1;var i=(r.findEngineVariantInVehicleData(n)||{}).grades;return(i||[]).find(function(n){return n.uriName==t})},r.getGradeByID=function(n,t){return(r.findEngineVariantInVehicleData(n).grades||[]).find(function(n){return n.id==t})},r.getVariantByID=function(n,t,i){var u=r.getGradeByID(n,t);return(u.variants||[]).find(function(n){return n.mdmid==i})},r.getVariantByName=function(n,t,i){var u=r.getGradeByID(n,t);return(u.variants||[]).find(function(n){return n.uriName==i})},r.getTrimByID=function(n,t,i,u){var f=r.getVariantByID(n,t,i);return(f.trims.availableTrims||[]).find(function(n){return n.id==u})},r.getTrimByName=function(n,t,i,u){var f=r.getVariantByID(n,t,i);return(f.trims.availableTrims||[]).find(function(n){return n.uriName==u})},r.getPaintByID=function(n,t,i,u,f){var e=r.getTrimByID(n,t,i,u);return(e.paints.availableColours||[]).find(function(n){return n.materialCode==f})},r.getPaintByName=function(n,t,i,u,f){var e=r.getTrimByID(n,t,i,u);return(e.paints.availableColours||[]).find(function(n){return n.shortName==f||n.uriName==f})},r.getVariants=function(n,t,u){var f=r.getGradeByID(n,t);return f.variants?(u&&typeof u=="function"&&u(f.variants),f.variants):i.getVariants(t).then(function(n){f.variants||(f.variants=n.data);u&&typeof u=="function"&&u(n.data)},function(){var n="Error loading enhancement packs";console.error?console.error(n):console.log("Error: "+n)})},r.getTrims=function(n,t,u,f){r.getVariants(n,t,function(){var e=r.getVariantByID(n,t,u),o=r.getGradeByID(n,t),s,h;e.trims?(s=e.trims.availableTrims,h=r.GetUnAvailableCollection(o.availableTrims,s),e.trims={allTrims:o.availableTrims,availableTrims:s,unavailableTrims:h},f&&typeof f=="function"&&f(e.trims.availableTrims,e.trims.unavailableTrims,e.trims.allTrims)):i.getTrims(t,u).then(function(n){n.data.length==0&&console.warn("getTrims received 0 results for "+engineVariant+" with grade ID "+t);var i=n.data,u=r.GetUnAvailableCollection(o.availableTrims,i);e.trims||(e.trims={allTrims:o.availableTrims,availableTrims:i,unavailableTrims:u});f&&typeof f=="function"&&f(e.trims.availableTrims,e.trims.unavailableTrims,e.trims.allTrims)},function(){console.error("getTrims returned an error")})})},r.getPaints=function(n,t,u,f,e){r.getTrims(n,t,u,function(){var o=r.getTrimByID(n,t,u,f),s=r.getGradeByID(n,t);o.paints?e&&typeof e=="function"&&e(o.paints.availableColours,o.paints.unavailableColours):i.getPaints(t,u,f).then(function(n){n.data.length==0&&console.warn("getColours received 0 results for "+f);var t=n.data,i=r.GetUnAvailableCollection(s.availablePaints,t);o.paints||(o.paints={availableColours:t,unavailableColours:i});e&&typeof e=="function"&&e(o.paints.availableColours,o.paints.unavailableColours)},function(){console.error("getColours returned an error")})})},r.GetUnAvailableCollection=function(n,t){for(var u,i,f,e=[],r=0,o=n.length;r<o;r++){for(u=!1,i=0,f=t.length;i<f;i++)n[r].code==t[i].code&&(u=!0);u||e.push(n[r])}return e},r.FilterAvailableCollection=function(n,t){for(var u,i,f,e=[],r=0,o=n.length;r<o;r++){for(u=!1,i=0,f=t.length;i<f;i++)n[r].code==t[i].code&&(u=!0);u&&e.push(n[r])}return e},r.getUnavailableTrimsBasedOnPaint=function(n,t,i,u,f){var o=r.getGradeByID(n,t),s=r.getPaintByName(n,t,i,u,f),e=s.availableTrims,h=r.GetUnAvailableCollection(o.availableTrims,e);return{availableTrims:e,unavailableTrims:h}},r.getExteriorImages=function(n,t,u,f,e,o){r.getPaints(n,t,u,f,function(){var s=r.getPaintByID(n,t,u,f,e);s.images&&s.images.exterior?o&&typeof o=="function"&&o(s.images.exterior):i.getVehicleImages(t,u,f,e).then(function(n){s.images||(s.images={});s.images.exterior||(s.images.exterior=n.data);o&&typeof o=="function"&&o(s.images.exterior)})})},r}]);angular.module("Lexus.Services").factory("PreLaunchAPIService",["$q","$timeout","PreLaunchVehicleService",function(n,t,i){var r=this;return r.getModels=function(n){return i.getVehiclesOverview().then(function(t){return r.data=t.data,n&&typeof n=="function"&&n(),t},function(){var n="Error loading vehicle overview for pre launch vehicles";console.error?console.error(n):console.log("Error: "+n)})},r.findEngineVariantInVehicleData=function(n){var i,t,u,e,f;for(i in r.data)if(r.data.hasOwnProperty(i)){t=r.data[i];for(u in t.models)if(t.models.hasOwnProperty(u)&&(e=t.models[u],f=e.modelEngineVariants.find(function(t){return t.uriName===n}),f))return f}},r.getGradesList=function(n){if(n==null)return!1;var t=(r.findEngineVariantInVehicleData(n)||{}).grades;return(t||[]).map(function(n){return n.name})},r.getGradesByEngineVariant=function(n){if(n==null)return!1;var t=(r.findEngineVariantInVehicleData(n)||{}).grades;return t||[]},r.getInteriorsByGradeName=function(n,t){if(n==null)return!1;var u=(r.findEngineVariantInVehicleData(n)||{}).grades,i=(u||[]).find(function(n){return n.name==t});return i&&i.baseVariant?i.baseVariant.trims:[]},r.getExteriorsByGradeName=function(n,t){if(n==null)return!1;var u=(r.findEngineVariantInVehicleData(n)||{}).grades,i=(u||[]).find(function(n){return n.name==t});return i&&i.baseVariant?i.baseVariant.paints:[]},r}]);angular.module("Lexus.Services").service("DealersService",["$timeout","$filter","$http","$rootScope","API",function(n,t,i,r,u){var e=this,f={},o=function(n){return typeof atob=="function"?decodeURIComponent(atob(n)):typeof Buffer!="undefined"&&typeof Buffer.from=="function"?decodeURIComponent(Buffer.from(n,"base64").toString()):n},h=function(n){n&&n.locations&&n.locations.length&&n.locations.forEach(e.DecodeLocationEmail)},s=function(n){n&&n.Data&&(n.Data instanceof Array?n.Data.forEach(h):h(n.Data))};return f.defaults={siteID:Lexus.ID.Site,postCode:"null",suburb:"null",state:"null",type:"All",dealerID:"",branchCode:"",dealerState:""},f.params={siteID:f.defaults.siteID,postCode:f.defaults.postCode,suburb:f.defaults.suburb,state:f.defaults.state,type:f.defaults.type,dealerID:f.defaults.dealerID,branchCode:f.defaults.branchCode,dealerState:f.defaults.dealerState},e.DeconstructCompositeID=function(n){if(n.indexOf("-")){var t=n.split("-");return{dealerID:t[0],branchCode:t[1],sapCode:t[2]}}return},e.DecodeLocationEmail=function(n){n&&n.elMailFirstPartEncoded&&n.elMailLastPartEncoded&&(n.email=o(n.elMailFirstPartEncoded)+"@"+o(n.elMailLastPartEncoded));n&&n.serviceElMailFirstPartEncoded&&n.serviceElMailLastPartEncoded&&(n.serviceEmail=o(n.serviceElMailFirstPartEncoded)+"@"+o(n.serviceElMailLastPartEncoded))},e.GetDealerBranches=function(){f.params.searchQueryUrl=t("formatArgs")(Lexus.API.Lookup.DealerBranches,[f.params.siteID,f.params.dealerID,f.params.type]);u.get(f.params.searchQueryUrl).then(function(t){s(t);r.$broadcast("dealer-search-results-received",t);n(r.$broadcast("refresh-gtm","Dealer Results"),0)},function(n){r.$broadcast("dealer-search-results-error",n)})},e.GetDealerBranch=function(){f.params.searchQueryUrl=t("formatArgs")(Lexus.API.Lookup.DealerBranchByCode,[f.params.siteID,f.params.dealerID,f.params.branchCode]);u.get(f.params.searchQueryUrl).then(function(t){s(t);r.$broadcast("dealer-search-results-received",t);n(r.$broadcast("refresh-gtm","Dealer Results"),0)},function(n){r.$broadcast("dealer-search-results-error",n)})},e.GetResult=function(){f.params.searchQueryUrl=t("formatArgs")(Lexus.API.Lookup.DealerById,[f.params.siteID,f.params.dealerID,f.params.dealerState]);u.get(f.params.searchQueryUrl).then(function(t){s(t);r.$broadcast("dealer-search-result-received",t);n(r.$broadcast("refresh-gtm","Dealer Results"),0)},function(n){r.$broadcast("dealer-search-result-error",n)})},e.GetResults=function(){return f.params.searchQueryUrl=t("formatArgs")(Lexus.API.Lookup.DealersByLocation,[f.params.siteID,f.params.postCode,f.params.suburb,f.params.state,f.params.type]),u.get(f.params.searchQueryUrl).then(function(t){return s(t),r.$broadcast("dealer-search-results-received",t),n(r.$broadcast("refresh-gtm","Dealer Results"),0),t},function(n){r.$broadcast("dealer-search-results-error",n);throw n;})},e.setParam=function(n,t){f.params[n]=t},e.getParam=function(n){return f.params[n]},e}]);angular.module("Lexus.Services").service("FormsService",["$timeout","$http","$rootScope",function(n,t,i){var r=this;return r.ShowResult=function(n){n.classList.contains("lx-form-no-scroll")||TweenLite.to(window,2,{scrollTo:{y:n.parentElement.offsetTop,x:0},ease:Power4.easeOut});i.$broadcast("broadcast.lazyLoadRevalidate")},r}]);angular.module("Lexus.Services").service("MouseDetectionService",["$rootScope",function(n){var i=this,t=function(){return this.resetMouseFoundAndBuffer(),this.startWatching(),this};return t.prototype.timestampMsArrayLooksLikeMouseData=function(n,t,i){var f=n.length===t,e=t/i*1e3,r,u;return f&&(r=n[0],u=n[n.length-1],e>=u-r)?!0:!1},t.prototype.resetMouseFoundAndBuffer=function(){this.mouseMoveTimestampMsBuffer=[];this.mouseFound=!1;n.$broadcast("did-lose-mouse")},t.prototype.tellMouseFound=function(){this.mouseFound=!0;n.$broadcast("did-detect-mouse")},t.prototype.stopWatching=function(){$("body").off("mousemove.MouseDetectionAgent")},t.prototype.startWatching=function(){var n=this,t=10;$("body").on("mousemove.MouseDetectionAgent",function(){n.mouseMoveTimestampMsBuffer.length>=t&&n.mouseMoveTimestampMsBuffer.shift();n.mouseMoveTimestampMsBuffer.push((new Date).valueOf());n.timestampMsArrayLooksLikeMouseData(n.mouseMoveTimestampMsBuffer,t,10)&&(n.tellMouseFound(),n.stopWatching())})},new t}]);angular.module("Lexus.Services").service("PricingService",["$filter","API",function(n,t){function r(r,u,f){var e=Lexus.API.Lookup.DriveAwayByGrade,o=u,s;return i.params.enablePricingByZone===!0&&f&&(e=Lexus.API.Lookup.DriveAwayByGradeByZone,o=f),s=n("formatArgs")(e,[i.params.siteID,r,o]),t.get(s)}function u(r,u,f,e){var o=Lexus.API.Lookup.DriveAwayByEnhancementPack,s=f,h;return i.params.enablePricingByZone===!0&&e&&(o=Lexus.API.Lookup.DriveAwayByEnhancementPackByZone,s=e),h=n("formatArgs")(o,[i.params.siteID,r,u,s]),t.get(h)}function f(r,u,f,e,o,s,h,c,l,a,v){var y=Lexus.API.Lookup.DetailPriceByPaint,p=o,w;return i.params.enablePricingByZone===!0&&v&&(y=Lexus.API.Lookup.DetailPriceByPaintByZone,p=v),w=n("formatArgs")(y,[i.params.siteID,r,u,f,e,p,s,h,c,l,a]),t.get(w)}function e(n,t){i.params[n]=t}function o(n){return i.params[n]}var i={defaults:{siteID:Lexus.ID.Site,gradeId:null,postCode:null,pricingZone:null,enablePricingByZone:!1}};return i.params={siteID:i.defaults.siteID,gradeId:i.defaults.gradeId,postCode:i.defaults.postCode,pricingZone:i.defaults.pricingZone,enablePricingByZone:i.defaults.enablePricingByZone},{driveAwayByGrade:r,driveAwayByEnhancementPack:u,detailPriceByPaint:f,setParam:e,getParam:o}}]);angular.module("Lexus.Services").service("RepairersService",["$timeout","$filter","$http","$rootScope","API",function(n,t,i,r,u){var e=this,f={};return f.defaults={siteID:Lexus.ID.Site,state:"null"},f.params={siteID:f.defaults.siteID,state:f.defaults.state},e.GetResults=function(){f.params.searchQueryUrl=t("formatArgs")(Lexus.API.Lookup.RepairerByState,[f.params.siteID,f.params.state]);u.get(f.params.searchQueryUrl).then(function(n){r.$broadcast("repairers-search-results-received",n)},function(n){r.$broadcast("repairers-search-results-error",n)})},e.setParam=function(n,t){f.params[n]=t},e.getParam=function(n){return f.params[n]},e}]);angular.module("Lexus.Services").service("UserPreferencesService",["$filter","$rootScope","$cookies","API","$location","$log",function(n,t,i,r,u){var e=this,f,o;return e.$location=u,f={},o=Lexus.ID.CacheVersion,f.defaults={visitor:{postCode:null,suburb:null,state:null,pricingZone:null},dealer:{dealerID:null,dealerCodeSimple:null,branchCode:null,dealerName:null,dealerType:null,dealerUrl:null,dealerState:null},vehicle:{model:null,grade:null,engineVariant:null,enhancementPack:null,trim:null,colour:null},compareVehicles:{model:null,bodyType:null,modelsBrowsed:null,variantsSelected:null},analytics:{identifier:null},languagePref:{translate:null},personalization:{lifestyle:null}},f.params={visitor:{postCode:f.defaults.visitor.postCode,suburb:f.defaults.visitor.suburb,state:f.defaults.visitor.state,pricingZone:f.defaults.visitor.pricingZone},dealer:{dealerID:f.defaults.dealer.dealerID,dealerCodeSimple:f.defaults.dealer.dealerCodeSimple,branchCode:f.defaults.dealer.branchCode,dealerName:f.defaults.dealer.dealerName,dealerType:f.defaults.dealer.dealerType,dealerUrl:f.defaults.dealer.dealerUrl,dealerState:f.defaults.dealer.dealerState},vehicle:{model:f.defaults.vehicle.model,grade:f.defaults.vehicle.grade,engineVariant:f.defaults.vehicle.engineVariant,enhancementPack:f.defaults.vehicle.enhancementPack,trim:f.defaults.vehicle.trim,colour:f.defaults.vehicle.colour},compareVehicles:{model:f.defaults.compareVehicles.model,bodyType:f.defaults.compareVehicles.bodyType,modelsBrowsed:f.defaults.compareVehicles.modelsBrowsed,variantsSelected:f.defaults.compareVehicles.variantsSelected},analytics:{identifier:f.defaults.analytics.identifier},languagePref:{translate:f.defaults.languagePref.translate},personalization:{lifestyle:f.defaults.personalization.lifestyle}},e.init=function(){var n=i.getObject("lexus-visitor"+o),t=i.getObject("lexus-dealer"+o),r=i.getObject("lexus-vehicle"+o),u=i.getObject("lexus-compare-vehicles"+o),e=i.getObject("lexus-analytics"+o),s=i.getObject("lexus-analytics"+o),h=i.getObject("lexus-personalization"+o);n&&(f.params.visitor=n);t&&(f.params.dealer=t);r&&(f.params.vehicle=r);u&&(f.params.compareVehicles=u);e&&(f.params.analytics=e);s&&(f.params.languagePref=s);h&&(f.params.personalization=h)},t.$on("preferred-dealer-change",function(n,t){t.dealerID&&t.dealerID!=0?i.putObject("lexus-dealer"+o,t):i.remove("lexus-dealer"+o)}),e.setVisitorCookie=function(n,t){t.postCode&&t.suburb&&t.state||!t.postCode&&!t.suburb&&!t.state?i.putObject("lexus-visitor"+o,t):console.error("Incomplete visitor cookie")},e.setAnalyticsCookie=function(n){n?i.putObject("lexus-analytics"+o,n):console.error("No analytics info.")},e.getAnalyticsCookie=function(n){var t=i.getObject("lexus-analytics"+o)||f.params.analytics;return n&&(t.identifier=n.identifier||t.identifier),t},e.setLanguagePref=function(n,t){n?i.putObject("lexus-language-pref-"+t+o,n):console.error("No language preference info.")},e.getLanguagePref=function(n){return i.getObject("lexus-language-pref-"+n+o)||f.params.languagePref},e.setPageVisited=function(n,t){if(!t||t==""){console.warn("Visit not recorded for page "+window.location.pathname+", guid is null or empty");return}var u="lexus-page-visit"+o,r=i.getObject(u)||[];r.find(function(n){return n===t})==null&&(r.push(t),i.putObject(u,r))},t.$on("record-page-visit",e.setPageVisited),t.$on("visitor-details-cookie-change",e.setVisitorCookie),t.$on("visitor-details-change-autocomplete",function(n,t){t.postcode&&(t.postCode=t.postcode,delete t.postcode);e.setVisitorCookie(n,t)}),t.$on("visitor-details-session-change",function(t,i){return r.post(n("formatArgs")(Lexus.API.User.SetPreferences,[Lexus.ID.Site]),i)}),t.$on("language-pref-change",function(n,t){e.setLanguagePref(n,t)}),t.$on("vehicle-preference-change",function(n,t){i.putObject("lexus-vehicle"+o,t)}),t.$on("compare-vehicle-change",function(n,t){i.putObject("lexus-compare-vehicles"+o,t)}),t.$on("personalization-change",function(n,t){i.putObject("lexus-personalization"+o,t)}),e.getAutocompleteTagFromVisitor=function(n){return{text:n.suburb+" "+n.postCode,data:{postcode:n.postCode,suburb:n.suburb,state:n.state,pricingZone:n.pricingZone}}},e.splitAutoCompleteResult=function(n){var t="splitAutoCompleteResult deprecated: use <postcode-result>.data directly instead of splitting <postcode-result>.text";return console.warn?console.warn(t):console.log(t),{postCode:n.slice(n.lastIndexOf(" ")+1,n.length).trim(),suburb:n.slice(0,n.lastIndexOf(" ")).trim()}},e.getParam=function(n){return f.params[n]},e.getLexusDealer=function(n){var t=i.getObject("lexus-dealer"+o)||f.params.dealer;return n&&(t.dealerID=n.dealerID||t.dealerID,t.dealerCodeSimple=n.dealerCodeSimple||t.dealerCodeSimple,t.dealerName=n.dealerName||t.dealerName,t.dealerState=n.dealerState||t.dealerState),t},e.getLexusVisitor=function(n){var t=i.getObject("lexus-visitor"+o)||f.params.visitor;return n,t},e.getLexusVehicle=function(n){var t=i.getObject("lexus-vehicle"+o)||f.params.vehicle;return n&&(t.model=n.model||t.model,t.grade=n.grade||t.grade,t.engineVariant=n.engineVariant||t.engineVariant,t.enhancementPack=n.enhancementPack||t.enhancementPack,t.trim=n.trim||t.trim,t.colour=n.colour||t.colour),t},e.isPageVisited=function(n){if(!n||n=="")return!1;var r="lexus-page-visit"+o,t=i.getObject(r);if(t&&t.length>0)return t.indexOf(function(t){return t==n})!=null},e.getLexusVisitorSession=function(){return r.get(n("formatArgs")(Lexus.API.User.GetPreferences,[Lexus.ID.Site]))},e.getUtmParameters=function(){for(var n,i=["utm_campaign","utm_medium","utm_source","utm_content"],r={},u=this.$location.search(),t=0,f=i.length;t<f;t++)n=i[t],typeof n=="string"&&(r[n.replace(/utm_/,"")]=u[n]);return r},e.getEloquaCustomerGUID=function(){return typeof GetElqCustomerGUID=="function"?GetElqCustomerGUID():""},e.getCompareVehiclesState=function(n){var t=i.getObject("lexus-compare-vehicles"+o)||f.params.compareVehicles;return n&&(t.model=n.model||t.model,t.bodyType=n.bodyType||t.bodyType,t.modelsBrowsed=n.modelsBrowsed||t.modelsBrowsed,t.variantsSelected=n.variantsSelected||t.variantsSelected),t},e.getPersonalizationState=function(n){var t=i.getObject("lexus-personalization"+o)||f.params.personalization;return n&&(t.lifestyle=n.lifestyle||t.lifestyle),t},e.init(),e}]);angular.module("Lexus.Services").service("VehicleService",["$timeout","$filter","$http","API","$rootScope",function(n,t,i,r){var f=this,u={};return u.defaults={siteID:Lexus.ID.Site,bodyTypeId:null,modelId:null,engineVariants:[]},u.params={siteID:u.defaults.siteID,bodyTypeId:u.defaults.bodyTypeId,modelId:u.defaults.modelId,engineVariants:u.defaults.engineVariants},f.getBodyTypes=function(){var n=t("formatArgs")(Lexus.API.Lookup.VehicleBodyTypes,[u.params.siteID]);return r.get(n)},f.getVehiclesOverview=function(){var n=t("formatArgs")(Lexus.API.Lookup.VehiclesOverview,[u.params.siteID]);return r.get(n)},f.getModels=function(n){var i=t("formatArgs")(Lexus.API.Lookup.VehicleModels,[u.params.siteID,n]);return r.get(i)},f.getEngineVariants=function(n){var i=t("formatArgs")(Lexus.API.Lookup.VehicleEngineVariants,[u.params.siteID,n]);return r.get(i)},f.getEngineVariantsWithGrades=function(n){var i=t("formatArgs")(Lexus.API.Lookup.VehicleEngineVariantsWithGrades,[u.params.siteID,n]);return r.get(i)},f.getTrims=function(n,i){var f=t("formatArgs")(Lexus.API.Lookup.VehicleTrims,[u.params.siteID,n,i]);return r.get(f)},f.getPaints=function(n,i,f){var e=t("formatArgs")(Lexus.API.Lookup.VehiclePaints,[u.params.siteID,n,i,f]);return r.get(e)},f.getVariants=function(n){var i=t("formatArgs")(Lexus.API.Lookup.VehicleVariants,[u.params.siteID,n]);return r.get(i)},f.getEnhancementPacks=function(n){var i=t("formatArgs")(Lexus.API.Lookup.VehicleEnhancementPacks,[u.params.siteID,n]);return r.get(i)},f.getVehicleImages=function(n,i,f,e){var o=t("formatArgs")(Lexus.API.Lookup.VehicleImages,[u.params.siteID,n,i,f,e]);return r.get(o)},f.getVehiclePanoXMLUrl=function(n,i,r,f){return t("formatArgs")(Lexus.API.Lookup.PanoXML,[u.params.siteID,n,i,r,f])},f.setParam=function(n,t){u.params[n]=t},f.getParam=function(n){return u.params[n]},f}]);angular.module("Lexus.Services").service("PreLaunchVehicleService",["$timeout","$filter","$http","API","$rootScope",function(n,t,i,r){var f=this,u={};return u.defaults={siteID:Lexus.ID.Site},u.params={siteID:u.defaults.siteID},f.getVehiclesOverview=function(){var n=t("formatArgs")(Lexus.API.Lookup.VehiclesOverviewPreLaunch,[u.params.siteID]);return r.get(n)},f.getTrims=function(n,i){var f=t("formatArgs")(Lexus.API.Lookup.VehicleTrims,[u.params.siteID,n,i]);return r.get(f)},f}]);angular.module("Lexus.Services").factory("EloquaService",["UserPreferencesService",function(n){function t(t){var i=n.getEloquaCustomerGUID();return t&&(t.ElqCustomerGUID=i),t}return{attachEloquaFields:t}}]);angular.module("Lexus.Services").service("ViewportService",["$window",function(n){var t=this;return t.isMobile=function(){return n.innerWidth<Lexus.Breakpoint.Small},t.isDesktop=function(){return!t.isMobile()},t}]),function(){angular.module("Lexus.Services").service("FontIconService",function(){var n=this;return n.generateDataURLfromIcon=function(n,t,i){var u=document.createElement("canvas"),r=u.getContext("2d");return u.height=n,u.width=n,r.fillStyle=i,r.font=n+"px icomoon",r.textAlign="center",r.textBaseline="middle",r.fillText(t,n/2,n/2),u.toDataURL("image/png")},n})}();angular.module("Lexus.Directives").directive("lxAccordion",["$window","$timeout","$filter","$http",function(){function n(n,t,i,r,u,f,e){var o=this;n.init=function(n,t){o.panels=[];o.collapseOthersOnExpansion=n;o.broadcastSelection=t};n.toggleVisible=function(t){var r=!o.panels[t].visible,i;if(o.panels[t].visible=r,r&&!o.panels[t].hasBeenVisible&&(n.$broadcast("broadcast.contentGalleryReload",{targetId:o.panels[t].id}),o.panels[t].hasBeenVisible=!0),r==!0&&o.collapseOthersOnExpansion)for(i=0;i<o.panels.length;i++)i!=t&&(o.panels[i].visible=!1);o.broadcastSelection&&e.$broadcast("variant-selected",{selectedVariantIndex:t})};n.initPanel=function(n,t){o.panels[n]={};o.panels[n].id=n;o.panels[n].visible=t;o.panels[n].hasBeenVisible=!1};n.expandItemByDefault=function(n){return u.location.hash===n?!0:!1}}return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$rootScope"],{scope:!0,restrict:"A",controller:n,controllerAs:"ac",bindToController:!0,link:function(){}}}]);angular.module("Lexus.Directives").directive("lxBackToTop",["$window","$timeout","$document",function(n,t,i){return{scope:!0,restrict:"E",template:'<div class="lx-back-to-top lx-back-to-top--arrow-up"><span class="top-text">Top<\/span><\/div>',link:function(r,u,f){function h(){l=o.height();a=w.height();v=a-l}function c(){var t=o.scrollTop(),n=Math.floor(t/v*100);e||(n>=f.scrollpercentage&&!s?(e=!0,u.stop().fadeIn(p,function(){s=!0;e=!1})):n<f.scrollpercentage&&s&&(e=!0,u.stop().fadeOut(p,function(){s=!1;e=!1})))}var o=angular.element(n),w=angular.element(i),l,a,v,y,p=200,s=!1,e=!1;o.bind("resize",function(){h()});o.bind("scroll",function(){t.cancel(y);y=t(c,250)});u.hide().on("click",function(){$("html, body").animate({scrollTop:0},"500")});h();c()}}}]);angular.module("Lexus.Directives").directive("lxAnchorMenuBar",["$window",function(n){function t(n,t,i){function r(t){n.$broadcast("anchor-menu-opened",t)}function u(t){n.$broadcast("anchor-menu-closed",t)}this.mobileMenuOpen=!1;this.menuOpenTimeouts=[];this.menuCloseTimeouts=[];this.getCurrentlyScrolledId=function(){return n.currentlyScrolledId};this.getCurrentlyActiveItem=function(){var i=t("filter")(n.anchorMenuItems,{anchorId:n.currentlyScrolledId});return i!=null&&i.length>0?i[0].title:""};this.toggleMobileAnchorMenu=function(){var t,f;if(this.mobileMenuOpen=!this.mobileMenuOpen,this.mobileMenuOpen==!0){if(n.anchorMenuItems){for(t=0;t<this.menuOpenTimeouts.length;t++)i.cancel(this.menuOpenTimeouts[t]);for(this.menuOpenTimeouts=[],t=0;t<n.anchorMenuItems.length;t++)f=i(r,600,!0,n.anchorMenuItems[t]),this.menuOpenTimeouts.push(f)}}else if(n.anchorMenuItems){for(t=0;t<this.menuCloseTimeouts.length;t++)i.cancel(this.menuCloseTimeouts[t]);for(this.menuCloseTimeouts=[],t=0;t<n.anchorMenuItems.length;t++)f=i(u,0,!0,n.anchorMenuItems[t]),this.menuCloseTimeouts.push(f)}$("body").removeClass("modal-open");this.mobileMenuOpen&&$("body").addClass("modal-open")};this.closeMobileAnchorMenu=function(){this.mobileMenuOpen=!1;$("body").removeClass("modal-open")}}return t.$inject=["$scope","$filter","$timeout"],{scope:!0,restrict:"A",controller:t,controllerAs:"amc",bindToController:{modelName:"@"},link:function(t,i,r){function o(n){for(var i,u,r,f=0;f<t.anchorMenuItems.length;f++)(i=t.anchorMenuItems[f],u=$("#"+i.anchorId)[0],u)&&(i.offsetTop=u.offsetTop,n.pageYOffset+73>=i.offsetTop&&(r==null||i.offsetTop>r.offsetTop)&&(r=i));t.currentlyScrolledId=r!=null?r.anchorId:t.anchorMenuItems[0].anchorId}var f,u,e;if(t.currentlyScrolledId="",r.anchorMenuItems)for(t.anchorMenuItems=angular.fromJson(r.anchorMenuItems),f=0,u=t.anchorMenuItems.length-1;u>=0;u--)e=t.anchorMenuItems[u],e.transitionDelay=f,t.anchorMenuItems[u]=e,f+=.15;angular.element(n).bind("scroll",function(){o(n)})}}}]);angular.module("Lexus.Directives").directive("lxAnchorMenuItem",["$rootScope","$anchorScroll","$location",function(){return{scope:!0,restrict:"A",require:"^lxAnchorMenuBar",link:function(n,t,i,r){n.anchorId=i.anchorId;n.isActive=function(){return r.getCurrentlyScrolledId()==i.anchorId};n.$on("anchor-menu-opened",function(i,r){n.anchorId==r.anchorId&&(t.css({transition:"opacity 0.25s ease-out "+r.transitionDelay+"s, transform 0.25s ease-out "+r.transitionDelay+"s"}),t.addClass("menu-open"))});n.$on("anchor-menu-closed",function(i,r){n.anchorId==r.anchorId&&t.removeClass("menu-open")})}}}]);angular.module("Lexus.angulartics",["angulartics"]).config(["$analyticsProvider",function(n){function t(t,i){var r=window.dataLayer=window.dataLayer||[];i=i||{};r.push({event:i.event||"interaction",target:i.category,action:i.action,"target-properties":i.label,value:i.value,"interaction-type":i.noninteraction,model:i.model,driveAwayPrice:i.driveAwayPrice,variant:i.variant,userId:n.settings.ga.userId})}n.settings.ga={userId:null};n.registerPageTrack(function(t){var i=window.dataLayer=window.dataLayer||[];i.push({event:"content-view","content-name":t,userId:n.settings.ga.userId})});n.registerEventTrack(t);n.registerExceptionTrack(function(n){t(n.toString(),{category:"Exceptions",label:n.stack})});n.registerSetUsername(function(t){n.settings.ga.userId=t})}]);angular.module("Lexus.Directives").directive("lxGtm",["$window","$timeout","$filter","$http","$analytics",function(n,t,i,r,u){function f(n,t,i,r,u,f,e,o,s){function b(n){var t=document.createElement("span");return t.innerHTML=n,t.textContent||t.innerText}function l(n,t,i){var r=n;switch(n){case":path":r=window.location.pathname;break;case":link":r=t.getAttribute("href");break;case":parentlink":r=t.parentElement.getAttribute("href")}return t.matches("[type]")&&t.type.toLowerCase()=="submit"&&i=="label"&&angular.element(t).closest("form").hasClass("ng-invalid")&&(r+=" - Errors"),r.replace(/\n/g," ")}function k(n){var u=n.closest("[data-gtm-label]"),t=n.closest("[data-gtm-category]"),i=n.closest("[data-gtm-sub-category]"),r=n.closest("[data-gtm-drive-away-price]"),f=u?l(u.dataset.gtmLabel,n,"label"):!1,e=i?l(i?i.dataset.gtmSubCategory:"",n,"subCategory"):!1,o=t?l(t?t.dataset.gtmCategory:"",n,"category"):!1,s=r?l(r?r.dataset.gtmDriveAwayPrice:"",n,"driveAwayPrice"):!1;if(f&&e&&o)return{el:n,category:o,subCategory:e,label:f,driveAwayPrice:s}}function v(n,t,i){t.carmodel!=null&&t.carmodel!=""&&h(n,{category:n,action:"Model",label:i.source+": "+t.carmodel});t.engineVariant!=null&&t.engineVariant!=""&&h(n,{category:n,action:"Variant",label:i.source+": "+t.engineVariant});t.grade!=null&&t.grade!=""&&h(n,{category:n,action:"Grade",label:i.source+": "+t.grade});t.enhancementPack!=null&&t.enhancementPack!=""&&h(n,{category:n,action:"Enhancement Pack",label:i.source+": "+t.enhancementPack});t.colour!=null&&t.colour!=""&&h(n,{category:n,action:"Colour",label:i.source+": "+t.colour});t.trim!=null&&t.trim!=""&&h(n,{category:n,action:"Trim",label:i.source+": "+t.trim})}function d(){u(function(){a();p()},0,!1);u(function(){a();p();w(100,0,10)},500,!1)}var c=this;c.trackers=[];c.forms={};c.chatTracked=!1;window.Element&&!Element.prototype.closest&&(Element.prototype.closest=function(n){var r=(this.document||this.ownerDocument).querySelectorAll(n),t,i=this;do for(t=r.length;--t>=0&&r.item(t)!==i;);while(t<0&&(i=i.parentElement));return i});Element.prototype.matches||(Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector||function(n){for(var i=(this.document||this.ownerDocument).querySelectorAll(n),t=i.length;--t>=0&&i.item(t)!==this;);return t>-1});var h=function(n,t){var t=t,i=s.getLexusVehicle();t.model=i.model;t.variant=i.engineVariant;o.eventTrack(n.replace(/\s/gi,"-"),t)},y=function(n){var t=n.target;u(function(){var n=k(t);n&&h(n.subCategory,{category:n.category,action:n.subCategory,label:n.label,driveAwayPrice:n.driveAwayPrice})})},g=function(n){var i=n.target,t=i.dataset.gtmFormDetails.split("||");c.forms[t[0]][t[1]].touched=!0},nt=function(){h("Live Chat",{category:window.location.pathname,action:"Live Chat",label:"Chat Clicked"})},a=function(){var n,i,t;for(c.labels=document.querySelectorAll("[data-gtm-label]"),n=0,i=c.labels.length;n<i;n++){t=c.labels[n];angular.element(t).off("click",y);angular.element(t).on("click",y)}},p=function(){for(var u,i,f,r,s,n,l,t,e,h=document.querySelectorAll("form"),o=0,a=h.length;o<a;o++)for(u=h[o],i=u.closest("[data-gtm-sub-category]").dataset.gtmSubCategory.replace(/\W/g,""),c.forms[i]=[],f=u.querySelectorAll("input,select,textarea,button"),r=0,s=f.length;r<s;r++)if(n=f[r],l=n.closest("label"),n.type!="hidden"&&n.type!="submit"&&!n.matches('[style*="display: none"')){t=null;t==null&&(t=n.closest("label")?n.closest("label").innerText:null);t==null&&(t=n.closest(".lx-form-text-label")?n.closest(".lx-form-text-label").innerText:null);t==null&&(t=n.hasAttribute("id")?document.querySelector("[for="+n.id+"]").innerText:n.innerText);t=t.replace(/^\n/,"").replace(/^\s*/,"").replace(/(.*)\n(.*)/g,"$1").replace(/\W/g,"-").replace(/-{2,}/g,"-");e={el:n,label:t,index:c.forms[i].length,touched:!1};n.setAttribute("data-gtm-form-details",i+"||"+e.index);angular.element(n).on("blur change input",g);c.forms[i].push(e)}},tt=function(){var n=document.querySelector("img[id^=LCM]");if(n&&!c.chatTracked){angular.element(n).on("click",nt);c.chatTracked=!0}},w=function(n,t,i){typeof LCM!="undefined"&&LCM?(console.log(LCM),tt()):t<i&&setTimeout(function(){w(n,t+1,i)},n)};n.$on("open-modal-window",function(n,t){var i=new RegExp("oops|error|warning|unavailable|problem","gi",""),r=t.content.match(i)?"Error Message":"Dialog",u={category:window.location.pathname,action:"Modal "+r,label:b(t.content)};h("Modal Window",u)});t.$on("gtm-form-success",function(n,t,i){var r=window.location.pathname,u=t,f="Form Submission Success"+(i!=null?" - "+i:"");h(r,{category:r,action:u,label:f})});t.$on("gtm-form-failure",function(n,t){var i=window.location.pathname,r=t;h(i,{category:i,action:r,label:"Form Submission Failure"})});t.$on("gtm-buildPrice",function(n,t){var i="Build And Price",r;t.source.toLowerCase().match(/initial|summary|default/)&&(r=t.data,v(i,r,t));t.source=="360"&&h(i,{category:i,action:"360",label:"Vehicle Rotated"});t.source.toLowerCase().replace(/\s/gi,"")=="postcoderoadblock"&&(t.data.dialogDisplayed?t.data.firstVisit?h(i,{category:"Postcode Roadblock",action:i,label:"Roadblock displayed"}):h(i,{category:"Postcode Roadblock",action:i,label:"Postcode displayed"}):h(i,{category:"Postcode Roadblock",action:i,label:"Roadblock and Postcode not displayed"}))});t.$on("gtm-preLaunch",function(n,t){var i;t.source.toLowerCase().match(/initial|interior|exterior|default/)&&(i=t.data,v("Pre Launch",i,t))});t.$on("refresh-gtm",function(n,t){console.log("lxGtm: refresh-gtm event received from: ",t);u(function(){a()},150,!1)});f.addEventListener("beforeunload",function(){var n=Object.keys(c.forms);n.length>0&&n.forEach(function(n){var i=c.forms[n],r=[],t="",u;i.forEach(function(n){n.touched&&(r.push(n),t+=t.length>0?" >> "+n.label:n.label)});u={category:window.location.pathname,action:n,label:r.length+"/"+i.length+" fields: "+t};h(n,u)})});d()}return f.$inject=["$rootScope","$scope","$http","$filter","$timeout","$window","$interval","$analytics","UserPreferencesService"],{scope:!0,restrict:"A",controller:f,controllerAs:"gtm",bindToController:!0,link:function(){var i={},t,r;i.now=Date.now||function(){return(new Date).getTime()};i.debounce=function(n,t,r){var u,f,e,s,o,h=function(){var c=i.now()-s;c<t&&c>=0?u=setTimeout(h,t-c):(u=null,r||(o=n.apply(e,f),u||(e=f=null)))};return function(){e=this;f=arguments;s=i.now();var c=r&&!u;return u||(u=setTimeout(h,t)),c&&(o=n.apply(e,f),e=f=null),o}};i.throttle=function(n,t){var r,u,f,e,o,s,h=i.debounce(function(){o=e=!1},t);return function(){r=this;u=arguments;var i=function(){f=null;o&&n.apply(r,u);h()};return f||(f=setTimeout(i,t)),e?o=!0:s=n.apply(r,u),h(),e=!0,s}};t=0;r=function(){var f=n.pageYOffset,e=n.innerHeight,o=document.body.clientHeight,i=(f/(o-e)*100).toFixed(),r=function(n,i){n!=i&&(t=n,u.eventTrack("Scroll Event",{event:"Scroll",category:window.location.pathname,action:"Page Scroll",label:t+"%",noninteraction:!0}))};i-t>10||i-t<-10?r((i/10).toFixed()*10,t):i==0?r(0,t):i==100&&r(100,t)};angular.element(n).bind("scroll",i.throttle(r,100))}}}]);angular.module("Lexus.Directives").directive("lxHero",[function(){return{restrict:"A",link:function(n,t,i){function o(){u()}function u(){var i=r.innerHeight(),u=t.hasClass("has-cta-bar")?0:e.length>0?e.innerHeight():96,o=f.length>0?f.innerHeight():0,n=i-h-u-o;r.width()<c&&(n=261);t.height(n)}var l=i.controls||!1,r=angular.element(window),s=angular.element("header"),f=angular.element(".lx-b-nav"),e=angular.element(".lx-cta-bar"),h=s.innerHeight(),c=Lexus.Breakpoint.Small;r.resize(function(){u()});r.ready(function(){o()})}}}]);angular.module("Lexus.Directives").directive("lxBackgroundImage",[function(){return{restrict:"A",link:function(n,t,i){function o(){f()}function f(){if(u=r.width()<=Lexus.Breakpoint.ExtraExtraSmall?Lexus.Breakpoint.ExtraExtraSmall:r.width()<=Lexus.Breakpoint.ExtraSmall?Lexus.Breakpoint.ExtraSmall:r.width()<=Lexus.Breakpoint.Small?Lexus.Breakpoint.Small:1920,e!=u){var n=i.background+"?q=95&w="+u;i.backgroundFillVertical&&(n=i.background+"?q=95&h="+t[0].clientHeight);t.css({"background-image":"url("+n+")"});e=u}}var s=i.controls||!1,r=angular.element(window),e=0,u=0;r.resize(function(){f()});r.ready(function(){o()})}}}]);angular.module("Lexus.Directives").directive("lxImageResize",[function(){return{restrict:"A",link:function(n,t,i){function o(){f()}function f(){if(u=r.width()<=Lexus.Breakpoint.ExtraExtraSmall?Lexus.Breakpoint.ExtraExtraSmall:r.width()<=Lexus.Breakpoint.ExtraSmall?Lexus.Breakpoint.ExtraSmall:r.width()<=Lexus.Breakpoint.Small?Lexus.Breakpoint.Small:1200,e!=u){var n=i.image+"?q=95&w="+u;i.$set("src",n);e=u}}var s=i.controls||!1,r=angular.element(window),e=0,u=0;r.resize(function(){f()});r.ready(function(){o()})}}}]);angular.module("Lexus.Directives").directive("lxCarousel",[function(){return{restrict:"A",link:function(n,t,i){function o(){s();h();v()}function s(){var i=u.innerHeight(),n=i-b-88;w.length>0&&(u.width()<e&&(n=261),t.height(n),l.height(t.height()))}function h(){(f||r=="src")&&u.width()>e?(r="src-lg",c()):(f||r=="src-lg")&&u.width()<=e&&(r="src",c());f=!1}function c(){$(l).each(function(){var n=$(this).hasClass("lx-carousel__image")?$(this):$(this).find(".lx-carousel__image");n.attr("src",null).attr("src",n.attr("data-"+r))})}function v(){function i(n){angular.isDefined(n)&&(angular.isUndefined(n.css("background-image"))||n.css("background-image")=="none"||!angular.equals(r,a))&&(n.css("background-image",'url("'+n.data(r)+'")'),n.find("img").attr("src",n.data(r)).hide())}var n=t.find(".lx-carousel__image"),u=n.length;k=t.bxSlider({mode:"fade",minSlides:1,maxSlides:1,slideMargin:0,captions:!0,auto:!0,pause:5e3,pager:!0,autoHover:!0,nextText:"",prevText:"",controls:y,onSliderLoad:function(t){if(u){var r=angular.element(n[t]),f=angular.element(n[t+1]);i(r);i(f)}},onSlideBefore:function(){},onSlideAfter:function(t,f,e){if(u){var o=angular.element(n[e]),s=angular.element(n[e+1]);i(o);i(s);a=r}}})}var y=i.controls||!1,u=angular.element(window),p=angular.element("header"),l=t.find(".lx-carousel__image"),w=t.parent(".lx-carousel"),b=p.innerHeight(),r="src-lg",f=!0,a,e=Lexus.Breakpoint.Small,k;u.resize(function(){o();s();h()});u.ready(function(){o()})}}}]),function(){var n="EVENT_OPEN_LIGHTBOX",t="EVENT_OWL_CHANGED";angular.module("Lexus.Directives").directive("lxImageGalleryCarousel",["FontIconService","$timeout","$window",function(i,r,u){function e(n,t,r,f,e){function y(n){for(var i,f=0,r=t.find(".js-owl-carousel").first().find(".item img").toArray(),u=0;u<r.length;u++)i=new Image,i.src=r[u].src,i.addEventListener("load",function(){f+=1;f===r.length&&n()})}function h(){var n=t.find(".owl-stage").first();n.width(n.width()*2);window.addEventListener("load",function(){f.$owlCarousel.trigger("refresh.owl.carousel")})}function c(){var n=t.find(".lx-image-gallery-carousel__owl-body").first().height();s.each(function(){$(this).css({height:n+"px",width:"auto"})});typeof f.$owlCarousel!="undefined"&&f.$owlCarousel.trigger("refresh.owl.carousel")}var o,s,l,a,v;if(e(n,function(n){t.append(n)}),o={items:2,margin:40,nav:!1,dots:!1,smartSpeed:750,autoWidth:!0,onInitialized:h,onRefreshed:h},s=t.find(".js-owl-carousel").first().find(".item"),typeof r.lxImageGalleryCarouselOptions!="undefined"&&(o=angular.extend(o,JSON.parse(r.lxImageGalleryCarouselOptions))),f.numberOfItems=s.length,f.hasLightbox=typeof r.lxImageGalleryCarouselHasLightbox!="undefined",f.isInsideLightbox=typeof r.lxImageGalleryCarouselIsInsideLightbox!="undefined",f.isInsideLightbox){$(u).on("resize",c);c()}y(function(){n.$apply(function(){f.$owlCarousel=t.find(".js-owl-carousel").first().owlCarousel(o);f.owlCarouselInitialised=!0})});f.hasLightbox&&(l=i.generateDataURLfromIcon(32,"","#f0eee6"),s.find("img").each(function(){$(this).css("cursor","url("+l+") 16 16, auto")}));f.isInsideLightbox&&(a=i.generateDataURLfromIcon(32,"","#e4e1d7"),v=i.generateDataURLfromIcon(32,"","#e4e1d7"),t.find(".js-lx-image-gallery-carousel-overlay-nav-button-prev").first().css("cursor","url("+a+") 16 16, auto"),t.find(".js-lx-image-gallery-carousel-overlay-nav-button-next").first().css("cursor","url("+v+") 16 16, auto"))}function f(i,r){function e(){f=u.$owlCarousel.owlCarousel();f.on("changed.owl.carousel",function(n){u.sliderValue=n.item.index+1;i.$$phase||i.$apply();u.hasLightbox&&i.$broadcast(t,u.sliderValue)});r.$observe("lxImageGalleryCarouselSliderValue",function(n){f.trigger("to.owl.carousel",n)})}var f=null,u=this;u.sliderValue=1;u.handleNextClick=function(){f&&f.trigger("next.owl.carousel")};u.handlePrevClick=function(){f&&f.trigger("prev.owl.carousel")};u.handleItemClick=function(t){if(u.hasLightbox){if(!$(t.target).hasClass("lx-image-gallery-carousel__owl-carousel-image")){t.stopPropagation();return}i.$broadcast(n,u.sliderValue)}};u.handleSliderChange=function(){f&&f.trigger("to.owl.carousel",u.sliderValue-1)};i.$watch("ImageGalleryCtrl",function(n,t){n.owlCarouselInitialised&&!t.owlCarouselInitialised&&e()},!0)}return f.$inject=["$scope","$attrs"],{scope:!0,restrict:"A",link:e,controller:f,controllerAs:"ImageGalleryCtrl",bindToController:!0,transclude:!0}}]);angular.module("Lexus.Directives").directive("lxImageGalleryCarouselLightbox",function(){function i(i,r){var u=this,f=r[0],e=$(document),o="keyup.lxImageGalleryCarousel";u.isOpen=!1;u.sliderValue=1;u.open=function(){bodyScrollLock.disableBodyScroll(f);u.isOpen=!0;e.on(o,function(n){n.key==="Escape"&&(u.isOpen=!1,bodyScrollLock.enableBodyScroll(f),i.$apply())})};u.close=function(){u.isOpen=!1;bodyScrollLock.enableBodyScroll(f);e.off(o)};i.$on(n,function(){u.open()});i.$on(t,function(n,t){u.sliderValue=t-1})}return i.$inject=["$scope","$element"],{scope:!0,restrict:"A",controller:i,controllerAs:"LightboxCtrl",bindToController:!0}})}();angular.module("Lexus.Directives").directive("lxCampaignPromoTile",function(){function n(n){var t=this;t.shiftPromoTilesUp=!1;n.init=function(){n.showPromoTile=!0};n.toggleShow=function(){n.showPromoTile=!n.showPromoTile};n.$on("shift-promo-tiles-up",function(n,i){t.shiftPromoTilesUp=i})}return n.$inject=["$scope","$window","$rootScope"],{scope:!0,restrict:"A",controller:n,controllerAs:"cptc",bindToController:!0,link:function(){}}});angular.module("Lexus.Directives").directive("lxCampaignRangeExplore",function(){function n(n,t,i,r){var u=this;n.init=function(t){n.showSplashScreen=t};n.initControl=function(){n.showCampaignDetails=!n.showSplashScreen;n.blurOverlayImage=!0;n.animationStarted=!1;n.showSplashScreen&&$("body").addClass("is-locked")};n.attachActivateOnScroll=function(){r(function(){n.scrollEvent()},300)};n.scrollEvent=function(){window.onscroll=function(){n.animationStarted||(n.animationStarted=!0,n.closeOverlay())}};n.scrollIntoView=function(n){TweenLite.to(window,0,{scrollTo:0,onComplete:n})};n.animationComplete=function(){$(".lx-campaign-range-explore__overlay-svg").hide();$(".lx-campaign-range-explore__centered").hide();$(".lx-campaign-range-explore__background").hide()};n.fadeoutText=function(){$(".lx-campaign-range-explore__overlay").hide();var t=new TimelineLite;t.delay(3);t.to($(".lx-campaign-range-explore__centered"),.7,{css:{opacity:"0"},onComplete:n.animateSVGShowOffer});t.play()};n.hideBackground=function(){var n=new TimelineLite;n.to($(".lx-campaign-range-explore__background"),1,{css:{opacity:"0"}});n.play()};n.animateSVGShowOffer=function(){n.scrollIntoView();n.hideBackground();$("body").removeClass("is-locked");var t=new TimelineLite({onComplete:n.animationComplete});t.to("#Poly-1",3,{y:"200%"},"showOffer").to("#Poly-2",3,{y:"-200%"},"showOffer").to("#Poly-3",3,{x:"200%"},"showOffer").to("#Poly-4",3,{x:"-200%"},"showOffer");t.play();r(function(){i.$broadcast("calculate-widths")},100)};n.closeOverlay=function(){var r=new TimelineLite,i,t;r.to($(".lx-campaign-range-explore__overlay-logo, .lx-campaign-range-explore__overlay-heading"),1.2,{css:{top:"-5%",opacity:"0"}});r.play();i=new TimelineLite;i.to($(".lx-campaign-range-explore__overlay-animation-outer"),2,{css:{opacity:"0"}});i.play();n.blurOverlayImage=!1;t=new TimelineLite;t.to($(".lx-campaign-range-explore__overlay-svg"),.8,{css:{opacity:"0.9"}});t.to($(".lx-campaign-range-explore__centered"),0,{css:{transform:"translateY(15%)"}});t.to($(".lx-campaign-range-explore__centered"),1,{css:{transform:"translateY(0)",opacity:"0.9"},onComplete:n.fadeoutText});t.play();n.showCampaignDetails=!0}}return n.$inject=["$scope","$window","$rootScope","$timeout"],{scope:!0,restrict:"A",controller:n,controllerAs:"crec",bindToController:!0,link:function(n,t){n.directiveElement=t;n.initControl()}}}).directive("lxCampaignRangeExploreMainImage",[function(){return{restrict:"A",link:function(n,t,i){function f(){u()}function u(){var n=r.innerHeight();t.height(n)}var e=i.controls||!1,r=angular.element(window);r.resize(function(){u()});r.ready(function(){f()})}}}]).directive("lxCampaignRangeExploreHero",["$window","$timeout","$filter","$http","$location","$rootScope",function(n,t,i,r,u,f){function e(n){var e=this,t=angular.element(window),u=0,i=0,r="",o=angular.element(".lx-campaign-range-explore__image-panel").attr("data-background");n.resolvedImage=null;n.previousVehicle=function(){f.$broadcast("change-previous-vehicle")};n.nextVehicle=function(){f.$broadcast("change-next-vehicle")};n.scrollTo=function(n){TweenLite.to(window,.5,{scrollTo:n,ease:Power2.easeOut})};f.$on("change-active-vehicle",function(t,i){n.er.activeVehicle=i;n.model=i.name;n.modelFullName=i.fullName;n.updateBackgroundImage(i.imageSrc)});n.updateModelTitle=function(t){t&&(n.model=t.name,n.modelFullName=t.fullName)};n.updateBackgroundImage=function(f){i=t.width()<=Lexus.Breakpoint.ExtraExtraSmall?Lexus.Breakpoint.ExtraExtraSmall:t.width()<=Lexus.Breakpoint.ExtraSmall?Lexus.Breakpoint.ExtraSmall:t.width()<=Lexus.Breakpoint.Small?Lexus.Breakpoint.Small:Lexus.Breakpoint.Medium;u!=i&&(r="?q=95&w="+i,u=i);n.resolvedImage!=f+r&&(n.resolvedImage=f+r)};t.resize(function(){n.updateBackgroundImage(n.er.activeVehicle.imageSrc)});n.init=function(){n.er={activeVehicle:{}}}}return e.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location"],{scope:!0,restrict:"A",controller:e,controllerAs:"er",bindToController:!0,link:function(){}}}]).directive("lxCampaignRangeExploreSlider",["$window","$timeout","$filter","$http","$location","$rootScope","UserPreferencesService","VehicleService",function(n,t,i,r,u,f,e){function o(n,t,i,r,u,f,o,s){var h=this;n.urlParameters=o.search();n.init=function(t,i){n.overscrollPadding=t;n.markerRadius=i;n.carouselTweenTime=1;n.markerTweenTime=1;n.easingFunction=Power2.easeOut;n.sliderItemCollection=[];var r=e.getLexusVehicle(n.urlParameters);r&&r.model&&n.changeActiveVehicleIndex(n.findIndexByModel(r.model),!0);s.$on("change-previous-vehicle",function(){var t=n.carouselPos-1>=0?n.carouselPos-1:n.sliderItemCollection.length-1;n.changeActiveVehicleIndex(t,!0);n.smoothScrollToIndex(t)});s.$on("change-next-vehicle",function(){var t=n.carouselPos+1<=n.sliderItemCollection.length-1?n.carouselPos+1:0;n.changeActiveVehicleIndex(t,!0);n.smoothScrollToIndex(t)})};n.findIndexByModel=function(t){var i=-1;return n.sliderItemCollection&&n.sliderItemCollection.length>0&&t&&(i=n.sliderItemCollection.findIndex(function(n){return n.name.toLowerCase()===t.toLowerCase()})),i==-1?0:i};n.smoothScrollToIndex=function(t){var i=n.itemWidth*t;i=Math.round(i+n.overscrollPadding+n.itemWidth/2-n.outerContainerWidth/2);TweenLite.to(n.carouselSlider,n.carouselTweenTime,{scrollTo:{x:i},ease:n.easingFunction});s.$broadcast("pause-smooth-scroll-to","")};s.$on("pause-smooth-scroll-to",function(){s.pauseSmoothScrollTo=!0;setTimeout(function(){s.pauseSmoothScrollTo=!1},1500)});n.smoothScrollTo=function(t){if(s.pauseSmoothScrollTo!==!0){var i=n.carouselSlider.position().left,r=(t.clientX-i)/n.outerContainerWidth;n.carouselPos=n.maxScrollX*r;TweenLite.to(n.carouselSlider,n.carouselTweenTime,{scrollTo:{x:n.carouselPos},ease:n.easingFunction})}};n.smoothSnapToNearest=function(){var r=n.overscrollPadding,i=n.itemWidth,t=n.carouselPos%i-r,u=n.carouselPos-t,f=n.carouselPos-t+i;t!==0&&(t<i/2?TweenLite.to(n.carouselSlider,n.carouselTweenTime,{scrollTo:{x:u},ease:n.easingFunction}):TweenLite.to(n.carouselSlider,n.carouselTweenTime,{scrollTo:{x:f},ease:n.easingFunction}))};n.setMarkerPosition=function(t){var i=t||0,r;if(!n.activeMarker&&i<10){setTimeout(function(){n.setMarkerPosition(i+1)},100);return}r=Math.round(n.overscrollPadding+n.carouselPos*n.itemWidth+n.itemWidth*.5-n.markerRadius);n.activeMarker.css("left",r+"px")};n.$on("ngRepeatFinished",function(){n.sliderItemCollection[0].style={"margin-left":n.overscrollPadding+"px"};n.sliderItemCollection[n.sliderItemCollection.length-1].style={"margin-right":n.overscrollPadding+"px"};r(function(){s.$broadcast("calculate-widths")},100);n.setMarkerPosition();var t=e.getLexusVehicle(n.urlParameters);t&&t.model&&n.changeActiveVehicleIndex(n.findIndexByModel(t.model),!0)});this.addSliderItem=function(t){n.sliderItemCollection[t.index]=t;n.sliderItemCollection[t.index].disabled=!1;n.sliderItemCollection[t.index].style={};t.init?(n.carouselPos=parseInt(t.index),n.sliderItemCollection[t.index].active=!0,r(function(){s.$broadcast("change-active-vehicle",t)},100)):n.sliderItemCollection[t.index].active=!1};s.$on("campaign-vehicle-preference-change",function(t,i){if(i){var r=n.findIndexByModel(i.model);r>=0&&n.changeActiveVehicleIndex(r,!1)}});n.changeActiveVehicleIndex=function(t,i,r){if(n.sliderItemCollection.length>0){n.carouselPos=t;angular.forEach(n.sliderItemCollection,function(n,i){n.active=i==t});n.setMarkerPosition();var u=n.sliderItemCollection[t];n.updateBackgroundImage(u.imageSrc);n.updateModelTitle(u);i&&n.updateCookieAlertOthers(u);(r||n.slider&&n.slider.smoothScrollonClick)&&n.smoothScrollToIndex(t)}};n.updateCookieAlertOthers=function(n){r(function(){s.$broadcast("change-active-vehicle",n)},100);s.$broadcast("campaign-vehicle-preference-change",{model:n.name,grade:undefined,engineVariant:undefined,enhancementPack:undefined})};s.$on("filter-body-type",function(t,i){var f=!1,u;angular.forEach(n.sliderItemCollection,function(n){var t=!(i=="all"||i==n.bodyType);n.disabled=t;t&&n.active&&(n.active=!1,f=!0)});f&&(u=!0,angular.forEach(n.sliderItemCollection,function(t,i){u&&(t.disabled||(t.active=!0,n.smoothScrollToIndex(i),u=!1,r(function(){s.$broadcast("change-active-vehicle",t);n.changeActiveVehicleIndex(t.index)},100)))}))})}return o.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location","$rootScope","UserPreferencesService","VehicleService"],{scope:!0,restrict:"A",controller:o,controllerAs:"ers",bindToController:!0,link:function(t,i){function r(){t.carouselSlider[0].removeEventListener&&(t.carouselSlider[0].removeEventListener("touchstart",u),t.carouselSlider[0].removeEventListener("touchmove",e),t.carouselSlider[0].removeEventListener("touchend",o))}function s(){r();t.carouselSlider[0].addEventListener&&(t.carouselSlider[0].addEventListener("touchstart",u,!1),t.carouselSlider[0].addEventListener("touchmove",e,!1),t.carouselSlider[0].addEventListener("touchend",o,!1))}var u=function(n){t.slider.startClientX=n.changedTouches[0].screenX},e=function(n){var r=n.changedTouches[0].screenX-t.slider.startClientX,i=Math.ceil(Math.abs(r)/t.itemWidth);t.slider.jumpToIndex=r<0?t.carouselPos+i<=t.sliderItemCollection.length-1?t.carouselPos+i:t.carouselPos:t.carouselPos-i>=0?t.carouselPos-i:0},o=function(){t.slider.jumpToIndex!=null&&t.slider.jumpToIndex!=t.carouselPos&&t.changeActiveVehicleIndex(t.slider.jumpToIndex,!0,!0)};f.$on("calculate-widths",function(){t.carouselSlider=i;t.activeMarker=i.find(".lx-campaign-range-explore__marker-js");t.$innerContainer=t.carouselSlider.children().first(".lx-campaign-range-explore__subpanels");t.itemWidth=t.$innerContainer.find(".lx-campaign-range-explore__subpanel").first().width();t.outerContainerWidth=t.carouselSlider.width();t.maxScrollX=t.$innerContainer.width()-t.outerContainerWidth;t.slider={startClientX:undefined,jumpToIndex:null,smoothScrollonClick:!1};!Modernizr.touchevents||angular.element(n).width()>=Lexus.Breakpoint.Medium?(t.carouselSlider.mousemove(function(n){t.smoothScrollTo(n)}),t.carouselSlider.mouseleave(function(n){t.smoothSnapToNearest(n)}),r(),t.slider.smoothScrollonClick=!1):Modernizr.touchevents&&angular.element(n).width()<Lexus.Breakpoint.Medium&&(s(),t.slider.smoothScrollonClick=!0);angular.forEach(t.$innerContainer.children(".lx-campaign-range-explore__subpanel"),function(n){n.className=n.className})});angular.element(n).bind("resize",function(){f.$broadcast("calculate-widths")});t.$on("$destroy",function(){r()})}}}]).directive("lxCampaignRangeExploreSliderItem",["$window","$timeout","$filter","$http","$location","$rootScope",function(){return{scope:!0,restrict:"AE",require:"^lxCampaignRangeExploreSlider",link:function(n,t,i,r){r.addSliderItem(i)}}}]),function(){"use strict";function n(n,t,i){function o(t,f,o){var l,s;for(r=angular.fromJson(o.engineVariants),u=o.buildAndPriceUrl,e=o.gradeName,s=0;s<r.length;s++)r[s].selected=!1;if(l=i.getLexusVehicle(n.search()),l){var h=null,a=null,c=null;for(s=0;s<r.length;s++)if(r[s].model===l.model){h=r[s];a=h.engineVariant;break}c=a?t.selectVariant(h.engineVariant,h.gradeId,h.variantId,h.enhancementPack):t.selectVariant(r[0].engineVariant,r[0].gradeId,r[0].variantId,r[0].enhancementPack)}else c=t.selectVariant(r[0].engineVariant,r[0].gradeId,r[0].variantId,r[0].enhancementPack);c!=null&&t.setModelName(r[c].model,r[c].engineVariant)}function f(i,f,o,s,h){i.variantName="";i.gradeId="";i.variantId="";i.enhancementPack="";i.selectVariant=function(n,u,f,e){for(var s=null,o=0;o<r.length;o++)r[o].engineVariant===n?(r[o].selected=!0,s=o,t.$broadcast("vehicle-preference-change",{model:r[o].model,engineVariant:r[o].engineVariant,grade:r[o].grade})):r[o].selected=!1;return i.variantName=n,i.gradeId=u,i.variantId=f,i.enhancementPack=e,t.$broadcast("broadcast.lazyLoadRevalidate"),s};i.isSelected=function(n){for(var t=0;t<r.length;t++)if(r[t].engineVariant===n)return r[t].selected};i.isModelSelected=function(n){return i.modelName===n};i.setModelName=function(n,t){i.modelName=n;i.variantName=t;t&&!i.isSelected(t)&&i.selectVariant(t,i.gradeId,i.variantId,i.enhancementPack)};i.displayTab=function(n){return n==i.modelName};i.buildLink=function(){var t=null,r=null,c=h.getLexusVisitor(n.search()),l=c?c.postCode:"3000";o.getTrims(i.gradeId,i.variantId).then(function(n){n.data.length==0&&console.info("getTrims received 0 results for "+i.variantName+" with grade ID "+i.gradeId);var h=n.data;h&&h.length>0&&(t=h[0],o.getPaints(i.gradeId,i.variantId,t.id).then(function(n){var o,c,h;n.data.length==0&&console.info("getPaints received 0 results for "+i.variantName+" with grade ID "+i.gradeId+" and trim Id "+t.id);o=n.data;o&&o.length>0&&(r=o[0],c={carmodel:i.modelName,engineVariant:i.variantName,grade:e,postcode:l,enhancementPack:i.enhancementPack,colour:r.uriName,trim:t.uriName},h=u?u+"/"+s.getBuildPriceLink(c,2):"",h&&(f.location.href=h))},function(){console.error("getTrims returned an error")}))},function(){console.error("getTrims returned an error")})}}var r=null,u=null,e=null;return f.$inject=["$scope","$window","VehicleService","BuildPriceService","UserPreferencesService"],{scope:!0,restrict:"A",controller:f,link:o}}angular.module("Lexus.Directives").directive("lxCampaignModelRangeEngineVariant",n);n.$inject=["$location","$rootScope","UserPreferencesService"]}();angular.module("Lexus.Directives").directive("lxContentGallery",[function(){return{scope:{parentAccordionPanelId:"@"},restrict:"A",link:function(n,t,i){function h(){c();l();n.$on("broadcast.contentGalleryReload",function(t,i){i.targetId.toString()===n.parentAccordionPanelId&&s.reloadSlider()})}function c(){(f||r=="src")&&u.width()>o?(r="src-lg",e()):(f||r=="src-lg")&&u.width()<=o&&(r="src",e());f=!1}function e(){$(a).each(function(){var n=$(this).find("img"),t;n.attr("src",null).attr("src",n.attr("data-"+r));t=1})}function l(){s=t.bxSlider({mode:"fade",slideMargin:0,captions:!0,auto:!1,pause:5e3,pager:!1,autoHover:!0,nextText:"",prevText:"",adaptiveHeight:!0,onSliderLoad:function(){},onSlideBefore:function(){},onSlideAfter:function(){}})}var v=i.controls||!1,u=angular.element(window),a=t.find(".lx-content-gallery__slide"),r="src-lg",f=!0,o=Lexus.Breakpoint.Small,s;u.resize(function(){});u.ready(function(){h()})}}}]);angular.module("Lexus.Directives").directive("lxContentVideo",["$rootScope","$window",function(n,t){function i(n){var t=this;n.init=function(){}}return i.$inject=["$scope","$rootScope"],{scope:!0,restrict:"A",controller:i,controllerAs:"cv",bindToController:!0,link:function(n,i,r){function u(n,t,i,r){if(!i["data-playing"]){var u=i.width/i.height,e=(i.muted||"").toLowerCase()==="true"?"true":"false";r.innerHTML='<iframe src="//www.youtube.com/embed/'+i.id+"?modestbranding=1&autoplay=1&mute="+e+'&autohide=2&border=0&wmode=opaque&enablejsapi=1&controls=1&rel=0" frameborder="0" class="lx-video__inner-iframe" width="'+i.width+'" widthOriginal="'+i.width+'" height="'+i.height+'" aspect="'+u+'" allowfullscreen="allowfullscreen"><\/iframe>';i.$set("data-playing",!0);f(t);n.$on("content-video-window-resize",function(){f(t)})}}function f(n){var t=n.find("iframe");t[0].attributes.widthOriginal.value>=n[0].clientWidth&&(t[0].width=n[0].clientWidth,t[0].height=n[0].clientWidth/t[0].attributes.aspect.value)}if((r.autoplay||"").toLowerCase()==="true")u(n,i,r,i[0]);else i.on("click",function(t){u(n,i,r,t.currentTarget)});angular.element(t).bind("resize",function(){n.$broadcast("content-video-window-resize")})}}}]);angular.module("Lexus.Directives").directive("lxDealerLookup",["$rootScope","DealersService","AddressSuggestService","UserPreferencesService",function(){function n(n,t,i,r,u,f){var o=this,e=f;n.init=function(){n.tags=[];n.tagsLoading=!1;n.ds={tags:[],type:"Sales",results:null,loading:!1};var i=e.getLexusVisitor(),t=e.getLexusDealer();i&&i.postCode&&i.suburb&&(n.ds.tags.push({text:i.suburb+" "+i.postCode,data:{postCode:i.postCode,suburb:i.suburb}}),n.searchNow());n.preferredDealer=t&&t.dealerID&&t.branchCode&&t.dealerName&&t.dealerUrl?{id:t.dealerID,branchCode:t.branchCode,name:t.dealerName,url:t.dealerUrl}:{}};n.ChangeDealerType=function(t){n.ds.type=t;n.ds.tags.length&&(n.searchNow(),n.updatePreferredDealer())};n.updatePreferredDealer=function(){t.$broadcast("preferred-dealer-change",{dealerID:n.preferredDealer.id,dealerCodeSimple:n.preferredDealer.dealerCodeSimple,branchCode:n.preferredDealer.branchCode,dealerName:n.preferredDealer.name,dealerType:n.ds.type,dealerUrl:n.preferredDealer.url,dealerState:n.preferredDealer.state})};n.dealerSearch=function(t){n.ds.tags=[];n.ds.tags[0]=t;n.searchNow()};n.checkServiceType=function(t){var i=n.ds.type;return typeof t=="string"?i=t:typeof t=="object"&&t!=null&&(i=t.serviceType),console.log("$scope.checkServiceType: ",i),i.toLowerCase().match(/^service$/)?!0:!1};n.modifyResults=function(t){var t,i,r;if(console.log("modifyResults called: ",t),t!=null){for(t=t,i=0,r=t.length;i<r;i++)t[i].serviceOnly!=null&&(t[i].serviceOnly=n.checkServiceType(t));return t}};n.searchNow=function(){n.ds.loading=!0;t.$broadcast("visitor-details-change-autocomplete",n.ds.tags[0].data);r.setParam("postCode",n.ds.tags[0].data.postCode);r.setParam("suburb",n.ds.tags[0].data.suburb);r.setParam("type",n.ds.type);r.GetResults().then(function(t){console.log("$scope.ds.type: ",n.ds.type);n.ds.results=n.modifyResults(t.Data);n.modifyResults();n.ds.loading=!1;n.ds.showChangeDealer=!1},function(n){console.log(n)})};n.clearSearch=function(){n.$broadcast("clear-dealer-search-input");n.ds.tags=[]};n.setPreferredDealer=function(t,i,r){var u=t.dealerCode===r.id;u?(n.preferredDealer.id=null,n.preferredDealer.branchCode=null,n.preferredDealer.dealerCodeSimple=null,n.preferredDealer.name=null,n.preferredDealer.url=null,n.preferredDealer.state=null):(n.preferredDealer.id=t.dealerCode,n.preferredDealer.branchCode=i.branchCode,n.preferredDealer.dealerCodeSimple=t.dealerCodeSimple,n.preferredDealer.name=t.dealerName,n.preferredDealer.url=t.dealerUrl||i.webSite,n.preferredDealer.state=i.state);n.updatePreferredDealer()};n.loadTags=function(t){return n.tagsLoading=!0,u.setParam("term",t),u.GetResults(n.tagsLoaded)};n.tagsLoaded=function(){n.tagsLoading=!1};n.autocompleteLoading=function(){return n.tagsLoading}}return n.$inject=["$scope","$rootScope","$http","DealersService","AddressSuggestService","UserPreferencesService"],{scope:!0,restrict:"A",controller:n,controllerAs:"dlc",bindToController:!0,link:function(n,t){n.$on("clear-dealer-search-input",function(){t.find("tags-input input")[0].value=""})}}}]);angular.module("Lexus.Directives").directive("lxRecallLookup",["$rootScope",function(){function n(n,t,i,r,u,f,e,o,s){var h=this;n.init=function(t){n.rlc.form={result:null,loading:!1,completed:!1,step:0,confirmed:!1,downloading:!1,data:{campaignCode:t}}};n.cancelLookup=function(){n.rlc.form.step=0;grecaptcha.reset();TweenLite.to(window,2,{scrollTo:{y:n.resultsElement[0].offsetTop,x:0},ease:Power4.easeOut});n.vinInput.select()};t.$on("recall-lookup-form-confirm",function(){var i=n.getData();n.rlc.form.submitting=!0;s.post(u("formatArgs")(Lexus.API.Lookup.VINLookup,[Lexus.ID.Site]),i).then(function(t){t.Status=="Success"?n.confirmationSuccess(t.Data):n.confirmationFailure(t.Data)},function(t){n.confirmationFailure(t.Data)}).finally(function(){t.$broadcast("form-result")})});n.recallLookup=function(){var t=n.getData();n.rlc.form.submitting=!0;s.post(u("formatArgs")(Lexus.API.Lookup.RecallLookup,[Lexus.ID.Site]),t).then(function(t){t.Status=="Success"?n.submissionPass(t.Data):n.submissionFail(t.Data)},function(t){n.submissionFail(t.Data)})};t.$on("vin-change",function(){n.rlc.form.step>0&&(n.rlc.form.step=0,n.rlc.form.completed=!1,grecaptcha.reset(),n.rlc.form.data.captcha=null)});n.getData=function(){return{Captcha:n.rlc.form.data.captcha,Vin:n.rlc.form.data.vin,CampaignCode:n.rlc.form.data.campaignCode}};n.confirmationSuccess=function(t){n.rlc.form.confirmed=!0;n.rlc.form.step=1;n.rlc.form.submitting=!1;n.rlc.form.data.vehicle=t;TweenLite.to(window,2,{scrollTo:{y:n.resultsElement[0].offsetTop,x:0},ease:Power4.easeOut})};n.confirmationFailure=function(){n.rlc.form.confirmed=!1;n.rlc.form.step=1;n.rlc.form.submitting=!1;TweenLite.to(window,2,{scrollTo:{y:n.resultsElement[0].offsetTop,x:0},ease:Power4.easeOut})};n.submissionPass=function(i){n.rlc.form.step=2;n.rlc.form.completed=!0;n.rlc.form.failed=!1;n.rlc.form.submitting=!1;r.state("RecallLookupForm=Pass");n.rlc.form.result=i;TweenLite.to(window,2,{scrollTo:{y:n.resultsElement[0].offsetTop,x:0},ease:Power4.easeOut});t.$broadcast("gtm-form-success","Recall Lookup")};n.submissionFail=function(t){n.rlc.form.step=2;n.rlc.form.failed=!0;t&&t.Data&&(n.rlc.form.errors=t.Data);n.rlc.form.submitting=!1;n.rlc.form.completed=!0;r.state("RecallLookupForm=Fail");TweenLite.to(window,2,{scrollTo:{y:n.resultsElement[0].offsetTop,x:0},ease:Power4.easeOut});console.error(t.ErrorMessage)}}return n.$inject=["$scope","$rootScope","$http","$location","$filter","$window","$sce","FormsService","API"],{scope:!0,restrict:"A",controller:n,controllerAs:"rlc",bindToController:!0,link:function(n,t){n.resultsElement=t.find(".lx-results-section");n.reCaptcha=t.find("#captcha");n.vinInput=t.find("#vin")}}}]);angular.module("Lexus.Directives").directive("lxRecallLookupTakata",["$rootScope",function(){function n(n,t,i,r,u,f,e,o,s,h){function l(n,t,i){var e,o,r,f,s,u,h;for(t=t||"",i=i||512,e=atob(n),o=[],r=0;r<e.length;r+=i){for(f=e.slice(r,r+i),s=new Array(f.length),u=0;u<f.length;u++)s[u]=f.charCodeAt(u);h=new Uint8Array(s);o.push(h)}return new Blob(o,{type:t})}function c(){var n=u.search();return n.p}var a=this;n.init=function(i){n.rlc.form={result:null,loading:!1,completed:!1,step:0,confirmed:!1,searchDate:null,downloading:!1,params:null,data:{campaignCode:i,recallCacheData:null}};var r=n.splitHash(u.hash());r.VIN&&(n.rlc.form.data.vin=r.VIN,t.$broadcast("recall-lookup-form-confirm",{skipHashClear:!0}));c()&&(window.ABCpdf_go=!1,n.rlc.form.params=u.search())};n.downloadPdf=function(){n.rlc.form.downloading=!0;var i=n.rlc.form.data.vin,r=n.rlc.form.confirmed,u=n.rlc.form.searchDate,t=window.location.origin+window.location.pathname+"?p=1";t=encodeURI(t);h.get(f("formatArgs")(Lexus.API.Lookup.GetPDFbyURL,[Lexus.ID.Site,t,u,i,r])).then(function(n){var r,u;if(n.Status=="Success")if(r=l(n.Data,"application/pdf"),u=e.URL||e.webkitURL,window.navigator&&window.navigator.msSaveOrOpenBlob)window.navigator.msSaveOrOpenBlob(r);else{var s=o.trustAsResourceUrl(u.createObjectURL(r)),t=document.createElement("a"),h=f("formatArgs")("Lexus-{0}-SearchResult.pdf",[i]);t.href=s;t.download=h;document.body.appendChild(t);t.click()}else console.log("response : ",n)},function(n){console.log("response : ",n)}).finally(function(){n.rlc.form.downloading=!1})};n.splitHash=function(n){var t={};return angular.forEach(n.split("&"),function(n){var i=n.split("=");t[i[0]]=i[1]}),t};n.cancelLookup=function(){u.hash("");n.rlc.form.step=0;n.rlc.form.data.vin="";n.vinInput.select();i(function(){TweenLite.to(window,2,{scrollTo:{y:n.searchElement[0].offsetTop,x:0},ease:Power4.easeOut})},50)};t.$on("recall-lookup-form-confirm",function(i,r){var o=n.getData(),e;n.resetForm();r&&(!r||r.skipHashClear)||(e=n.splitHash(u.hash()),e.VIN&&e.VIN!=o.Vin&&(n.rlc.form.step=0,u.hash("")));n.rlc.form.submitting=!0;h.post(f("formatArgs")(Lexus.API.Lookup.RecallLookupTakata,[Lexus.ID.Site]),o).then(function(t){n.rlc.form.data.recallCacheData=t;t.Status=="Success"?n.confirmationSuccess(t.Data):n.confirmationFailure(t.Data)},function(t){n.rlc.form.data.recallCacheData=t;n.confirmationFailure(t.Data)}).finally(function(){t.$broadcast("form-result")})});n.recallLookupTakata=function(){var i=n.getData(),t;n.rlc.form.submitting=!0;t=n.rlc.form.data.recallCacheData;t&&t.Status=="Success"?n.submissionPass(t.Data):n.submissionFail(t.Data);n.rlc.form.step=3};t.$on("vin-change",function(){n.rlc.form.step>0&&(n.rlc.form.step=0,n.rlc.form.completed=!1)});n.getData=function(){return{Vin:n.rlc.form.data.vin,CampaignCode:n.rlc.form.data.campaignCode}};n.confirmationSuccess=function(t){n.rlc.form.confirmed=!0;n.rlc.form.step=1;n.rlc.form.submitting=!1;var r=t.VehicleInformation;c()&&n.rlc.form.params&&n.rlc.form.params.datetime&&(r.SearchDate=n.rlc.form.params.datetime);n.rlc.form.searchDate=r.SearchDate;n.rlc.form.data.vehicle=r;u.hash().indexOf("VIN=")>=0&&u.hash().indexOf("Confirmed=")>=0?(u.hash("VIN="+n.rlc.form.data.vin),n.recallLookupTakata(null)):(u.hash("VIN="+n.rlc.form.data.vin),i(function(){TweenLite.to(window,2,{scrollTo:{y:n.resultsElement[0].offsetTop,x:0},ease:Power4.easeOut})},50))};n.confirmationFailure=function(){n.rlc.form.confirmed=!1;n.rlc.form.step=1;n.rlc.form.submitting=!1;i(function(){TweenLite.to(window,2,{scrollTo:{y:n.resultsElement[0].offsetTop,x:0},ease:Power4.easeOut})},50)};n.submissionPass=function(r){n.rlc.form.step=2;n.rlc.form.completed=!0;n.rlc.form.failed=!1;n.rlc.form.submitting=!1;u.state("RecallLookupForm=Pass");u.hash(u.hash()+"&Confirmed=true");n.rlc.form.result=r;i(function(){TweenLite.to(window,2,{scrollTo:{y:n.lookupResults[0].offsetTop,x:0},ease:Power4.easeOut});t.$broadcast("gtm-form-success","Recall Lookup")},50);c()&&i(function(){window.ABCpdf_go=!0},200)};n.submissionFail=function(t){n.rlc.form.step=2;n.rlc.form.failed=!0;t&&t.Data&&(n.rlc.form.errors=t.Data);n.rlc.form.submitting=!1;n.rlc.form.completed=!0;u.state("RecallLookupForm=Fail");i(function(){TweenLite.to(window,2,{scrollTo:{y:n.lookupResults[0].offsetTop,x:0},ease:Power4.easeOut});console.error(t.ErrorMessage)},50)};n.resetForm=function(){n.rlc.form.failed=!1;n.rlc.form.submitting=!1}}return n.$inject=["$scope","$rootScope","$timeout","$http","$location","$filter","$window","$sce","FormsService","API"],{scope:!0,restrict:"A",controller:n,controllerAs:"rlc",bindToController:!0,link:function(n,t){n.resultsElement=t.find(".lx-results-section__details");n.searchElement=t.find(".lx-search-section");n.vinInput=t.find("#vin");n.lookupResults=t.find(".lx-recall-lookup-results")}}}]);angular.module("Lexus.Directives").directive("lxFadeIn",["$window","$timeout","$filter","$http","$analytics",function(n){return{scope:!0,restrict:"A",bindToController:!0,link:function(t,i){var r={},u;r.now=Date.now||function(){return(new Date).getTime()};r.debounce=function(n,t,i){var u,f,e,s,o,h=function(){var c=r.now()-s;c<t&&c>=0?u=setTimeout(h,t-c):(u=null,i||(o=n.apply(e,f),u||(e=f=null)))};return function(){e=this;f=arguments;s=r.now();var c=i&&!u;return u||(u=setTimeout(h,t)),c&&(o=n.apply(e,f),e=f=null),o}};r.throttle=function(n,t){var i,u,f,e,o,s,h=r.debounce(function(){o=e=!1},t);return function(){i=this;u=arguments;var r=function(){f=null;o&&n.apply(i,u);h()};return f||(f=setTimeout(r,t)),e?o=!0:s=n.apply(i,u),h(),e=!0,s}};window.Element&&!Element.prototype.closest&&(Element.prototype.closest=function(n){var r=(this.document||this.ownerDocument).querySelectorAll(n),t,i=this;do for(t=r.length;--t>=0&&r.item(t)!==i;);while(t<0&&(i=i.parentElement));return i});var f="lx-appear",e="lx-disappeared",s=".lx-footer,.lx-footer-sticky,.lx-b-nav,.lx-c-nav,.lx-save-build-price__slideouttray,.lx-postcode-slideout",o=i.find("h1,h2,h3,h4,h5,h6,p,li,a[class*=cta],button[class*=cta],[class*=button],[class*=btn]");o.each(function(n,t){t.closest(s)||(angular.element(t).addClass(f),angular.element(t).addClass(e))});u=function(){var i=arguments?arguments[0]:!1,t=n.pageYOffset,r=n.innerHeight,u=t+r;(t>100||i)&&o.each(function(n,t){angular.element(t).offset().top<u&&(angular.element(t).removeClass(e),setTimeout(function(){angular.element(t).removeClass(f)},500))})};angular.element(n).bind("scroll",r.throttle(u,50));angular.element(document).ready(function(){setTimeout(function(){u(!0)},500)})}}}]);angular.module("Lexus.Directives").directive("lxFeatureTiles",[function(){function n(n,t,i,r){var u=this;n.init=function(){u.modalWrapper=['<div class="lx-feature-tiles__section is-in-modal">',"<\/div>"];u.section=".lx-feature-tiles__section";u.sectionHeight="600";u.breakpoint=Lexus.Breakpoint.ExtraSmall};n.featureBtn=function(t){window.innerWidth>=u.breakpoint?n.loadModal(u.panels[t].content):n.ft.panels[t].isOpen=!n.ft.panels[t].isOpen};n.loadModal=function(n){r.$broadcast("open-modal-window",{content:n,wrapper:u.modalWrapper})}}return n.$inject=["$scope","$compile","$window","$rootScope"],{scope:!0,restrict:"A",controller:n,controllerAs:"ft",bindToController:!0,link:function(n,t){function r(t,i){i.length===0?angular.forEach(t,function(t,r){i[r]={isLong:t.offsetHeight>n.ft.sectionHeight,isOpen:!1,content:t.innerHTML}}):angular.forEach(t,function(t,r){i[r].isLong||(i[r].isLong=t.offsetHeight>n.ft.sectionHeight)})}var i;n.ft.panels=[];var u=t.find(n.ft.section),f=t.find(n.ft.section+" img"),e,o=0;for(r(u,n.ft.panels),i=0;i<f.length;i++)(function(t){f[t].addEventListener("load",function(){o++;o===f.length&&(r(u,n.ft.panels),n.$digest())})})(i);window.addEventListener("resize",function(){clearTimeout(e);e=setTimeout(function(){r(u,n.ft.panels);n.$digest()},50)})}}}]);angular.module("Lexus.Directives").directive("lxFixedFirstColumn",[function(){function n(n,t){var i=setInterval(function(){var n=t.find("tr");angular.forEach(n,function(n){var r=angular.element(n).children(),o,u;if(!(r.length<1)){r.length===2&&t.find(".lx-responsive-table-viewport").css("overflow-x","hidden");o=angular.element(r[0]).children()[0]||r[0];u=r[1];r[0].style.height="";u&&(r[1].style.height="");var f=o.offsetHeight,s=u?u.offsetHeight:0,e=Math.max(f,s);r[0].style.height=e+"px";n.style.height=e+"px";u&&(u.style.height=e+"px");f!==0&&f===s&&clearInterval(i)}})},0)}return{restrict:"A",template:"<div class='lx-responsive-table-viewport'><div ng-transclude><\/div><\/div>",transclude:!0,link:function(t,i){n(t,i);var r=function(){n(t,i)};$(window).on("resize",r);t.$on("$destroy",function(){$(window).off("resize",r)})}}}]);angular.module("Lexus.Directives").directive("lxFormFieldCarModelEngineVariantWithGrade",[function(){function n(n,t,i,r,u,f,e){function l(n,t){return n.name+" "+u("replaceCaseInsensitive")(t.name,n.name)}function o(n,t){return n.name+";"+t.name}function s(n){if(n){var t=n.split(";");if(t.length===2)return{engineVariant:t[0],grade:t[1]}}}function h(){var t,i;n.ffc.formfields.data.enginevariantsandgrades&&(t=n.ffc.formfields.data.enginevariantsandgrades.find(function(t){return n.ffc.form.data.engineVariantAndGrade==t.key}),t&&(i=t.gradeId,n.ffc.form.data.loadingEnhancementPacks=!0,r.getVariants(i).then(function(t){if(n.ffc.form.data.loadingEnhancementPacks=!1,t.status==="Success")if(n.ffc.formfields.data.enhancementPacks=t.data,n.ffc.form.data.engineVariantAndGrade==null&&(n.ffc.formfields.data.enhancementPacks=null),n.ffc.form.data.enhancementPack&&n.ffc.form.data.enhancementPack!==""){var i=n.ffc.formfields.data.enhancementPacks.find(function(t){return n.ffc.form.data.enhancementPack==t.uriName});i||(e.warn("resetting enhancement pack1"),n.ffc.form.data.enhancementPack=n.ffc.formfields.data.enhancementPacks[0].uriName)}else e.warn("resetting enhancement pack2"),n.ffc.form.data.enhancementPack=n.ffc.formfields.data.enhancementPacks[0].uriName})))}function c(){n.ffc.formfields.data.enhancementPacks=null;n.ffc.formfields.data.enginevariantsandgrades=null;n.ffc.form.data.engineVariantAndGrade=null;n.ffc.form.data.engineVariant=null;n.ffc.form.data.grade=null}var a=this;n.init=function(){n.ffc=n.ffc||{};n.ffc.formfields={data:{enginevariants:[],enhancementPacks:[]},comingSoonModels:{}}};n.bindEngineVariants1=function(){r.getVehiclesOverview().then(function(t){var i;t.data.find(function(t){t.models.find(function(t){if(n.ffc.form.data.carmodel==t.name){i=t;return}});return});r.getEngineVariantsWithGrades(i.id).then(function(t){if(t.status==="Success"){n.ffc.formfields.data.enginevariantsandgrades=[];var i=!1;t.data.forEach(function(t){t.grades.forEach(function(r){n.ffc.formfields.data.enginevariantsandgrades.push({engineVariant:t.name,grade:r.name,gradeId:r.id,mdmGradeId:r.gradeID,label:l(t,r),key:o(t,r)});o(t,r)==n.ffc.form.data.engineVariantAndGrade&&(i=!0)})});i||(n.ffc.form.data.engineVariantAndGrade=null,n.ffc.formfields.data.enhancementPacks=null);h()}}).then(function(){})}).then(function(){})};t.$on("field-car-model-engine-variant-update-selected",function(t,i){(!i||i&&i.vehicleIndex&&i.vehicleIndex==n.vehicleIndex)&&n.updateModelSelection(!0)});t.$on("field-car-model-engine-variant-update-without-reset",function(){n.updateModelSelection(!1)});t.$on("field-car-model-enhancement-pack-update-selected",function(){n.updateEngineVariantSelection()});n.updateModelSelection=function(r){if(n.ffc.formfields.comingSoonModels[n.ffc.form.data.carmodel]){c();return}r&&c();n.bindEngineVariants1();t.$broadcast("vehicle-preference-change",{model:n.ffc.form.data.carmodel,grade:i.getLexusVehicle()?i.getLexusVehicle().grade:"",engineVariant:i.getLexusVehicle()?i.getLexusVehicle().engineVariant:"",enhancementPack:i.getLexusVehicle()?i.getLexusVehicle().enhancementPack:"",vehicleIndex:n.vehicleIndex})};n.updateEngineVariantSelection=function(r){r&&(n.ffc.formfields.data.enhancementPacks=null,n.ffc.form.data.enhancementPack=null);h();var u=s(n.ffc.form.data.engineVariantAndGrade),f=u?u.engineVariant:null,e=u?u.grade:null;n.ffc.form.data.engineVariant=f;n.ffc.form.data.grade=e;console.log("updateEngineVariantSelection");console.log("clearChildControls="+r);t.$broadcast("vehicle-preference-change",{model:n.ffc.form.data.carmodel,engineVariant:f?f:i.getLexusVehicle()?i.getLexusVehicle().engineVariant:"",grade:e?e:i.getLexusVehicle()?i.getLexusVehicle().grade:"",enhancementPack:i.getLexusVehicle()?i.getLexusVehicle().enhancementPack:"",vehicleIndex:n.vehicleIndex})};n.updateEnhancementPackSelection=function(){var r=s(n.ffc.form.data.engineVariantAndGrade),u=r?r.engineVariant:"",f=r?r.grade:"";console.log("updateEnhancementPackSelection");t.$broadcast("vehicle-preference-change",{model:n.ffc.form.data.carmodel,grade:f?f:i.getLexusVehicle().grade,engineVariant:u?u:i.getLexusVehicle().engineVariant,enhancementPack:n.ffc.form.data.enhancementPack})};n.modelDisplayName=function(t,i,r,u){return n.ffc.formfields.comingSoonModels[t]=r&&r.toLowerCase()=="true",r&&r.toLowerCase()=="true"?"All-New "+t+" - "+i+" ("+u+")":t+"-"+i}}return n.$inject=["$scope","$rootScope","UserPreferencesService","VehicleService","$filter","$element","$log"],{scope:!0,restrict:"A",controller:n,controllerAs:"form",bindToController:!0,link:function(n,t,i){n.vehicleIndex=i.vehicleIndex||"0"}}}]).directive("lxFormFieldCarModelEngineVariant",[function(){function n(n,t,i,r){var u=this;n.init=function(){n.ffc.formfields={data:{enginevariants:[]},comingSoonModels:{}}};n.bindEngineVariants2=function(){if(n.ffc.formfields.comingSoonModels[n.ffc.form.data.carmodel]){n.ffc.form.data.carmodel=null;n.ffc.form.data.enginevariant=null;return}r.getVehiclesOverview().then(function(t){var i;t.data.find(function(t){t.models.find(function(t){if(n.ffc.form.data.carmodel==t.name){i=t;return}});return});r.getEngineVariants(i.id).then(function(t){t.status==="Success"&&(n.ffc.formfields.data.enginevariants=t.data)}).then(function(){})}).then(function(){})};t.$on("field-car-model-engine-variant-update-selected",function(){n.bindEngineVariants2()});n.updateModelSelection=function(){if(n.ffc.formfields.comingSoonModels[n.ffc.form.data.carmodel]){n.ffc.form.data.enginevariant=null;return}n.bindEngineVariants2();t.$broadcast("vehicle-preference-change",{model:n.ffc.form.data.carmodel})};n.updateEngineVariantSelection=function(){console.log("updateEngineVariantSelection");t.$broadcast("vehicle-preference-change",{model:n.ffc.form.data.carmodel,engineVariant:n.ffc.form.data.enginevariant})};n.modelDisplayName=function(t,i,r,u){return n.ffc.formfields.comingSoonModels[t]=r&&r.toLowerCase()=="true",r&&r.toLowerCase()=="true"?"All-New "+t+" - "+i+" ("+u+")":t+"-"+i}}return n.$inject=["$scope","$rootScope","UserPreferencesService","VehicleService","$filter","$element"],{scope:!0,restrict:"A",controller:n,controllerAs:"form",bindToController:!0,link:function(){}}}]).directive("lxFormFieldCarModel",[function(){function n(n,t){var i=this;n.init=function(){n.ffc.formfields={data:{enginevariants:[]},comingSoonModels:{}}};t.$on("field-car-model-update-selected",function(){n.updateModelSelection()});n.updateModelSelection=function(){if(n.ffc.formfields.comingSoonModels[n.ffc.form.data.carmodel]){n.ffc.form.data.carmodel=null;return}t.$broadcast("vehicle-preference-change",{model:n.ffc.form.data.carmodel})};n.modelDisplayName=function(t,i,r,u){return n.ffc.formfields.comingSoonModels[t]=r&&r.toLowerCase()=="true",r&&r.toLowerCase()=="true"?"All-New "+t+" - "+i+" ("+u+")":t+"-"+i}}return n.$inject=["$scope","$rootScope","UserPreferencesService","VehicleService","$filter","$element"],{scope:!0,restrict:"A",controller:n,controllerAs:"form",bindToController:!0,link:function(){}}}]).directive("lxFormFieldDateWrap",["$rootScope",function(n){function t(n){var t=this;n.init=function(){}}return t.$inject=["$scope","$rootScope","$filter","$element"],{scope:!0,restrict:"E",controller:t,controllerAs:"form",bindToController:!0,link:function(t,i,r){var f=r.name,u=i.find("#datePicker");u.bind("change",function(t){moment(t.target.value,"DD-MM-YYYY").isValid()?n.$broadcast("date-picker-valid"):n.$broadcast("date-picker-invalid")})}}}]).directive("lxFormFieldRangeInput",["$rootScope",function(n){function t(n,t,i){var r=this;n.init=function(){};n.formatOutput=function(n,t){return i("formatArgs")(n,[t])}}return t.$inject=["$scope","$rootScope","$filter","$element"],{scope:!0,restrict:"A",controller:t,controllerAs:"form",bindToController:!0,link:function(t,i,r){function f(){o=parseInt(u.attr("min"))||0;a=parseInt(u.attr("max"))||1;e=u.val();v=c?t.formatOutput(c,e):e;b=a-o;s=25;y=38;h=(e-o)/b*100;p=Math.round(s*h/100-s/2)+y/2;w=u.next(".lx-form-slider__output");w.css("left","calc("+h+"% - "+p+"px)").html(v)}var u,o,a,e,v,y,s,h,p,w,b,c,l;u=i.find("input[type='range']");u.on("input change",function(){f()});r.format&&(c=r.format);r.watch&&(l=[],r.watch.split&&r.watch.split(",").forEach(function(n){l.push(n.trim())}),l.forEach(function(n){t.$watch(n,function(n,t){n!=t&&f()})}));n.$on("balloon-payment-options-received",function(){f()});f()}}}]).directive("lxTooltip",[function(){function n(n){var t=this;n.init=function(){n.showDisclaimer=!1};n.show=function(){n.showDisclaimer=!0};n.hide=function(){n.showDisclaimer=!1};n.toggleIt=function(t){n.isToggled=!n.isToggled;t.stopPropagation()}}return n.$inject=["$scope","$rootScope","$filter","$element"],{scope:{cssClass:"@"},restrict:"AE",controller:n,controllerAs:"dbc",bindToController:!0,transclude:!0,template:'<div class="lx-tooltip__info-overlay is-{{alignment}} {{cssClass}}"ng-class="{\'is-open\': isMouse && isMouseInside || !isMouse && isToggled}" mouse-detected="isMouse = true" ng-click="toggleIt($event)" ng-mouseenter="isMouseInside = true" ng-mouseleave="isMouseInside = false"><div class="lx-tooltip__info-icon" ng-hide="showOffer"><\/div><div class="lx-tooltip__info-on-offer" ng-show="showOffer"><span>{{onOfferTitle}}<\/span><\/div><div class="lx-tooltip__info-content" data-ng-transclude ><\/div><\/div>',link:function(n,t,i){n.alignment=i.lxTooltip;n.showOffer=i.tooltipOffer!=null?i.tooltipOffer:!1;n.onOfferTitle=i.tooltipTitle!=null?i.tooltipTitle:"ON OFFER*"}}}]);angular.module("Lexus.Directives").directive("lxForm",[function(){function t(t,r,u,f,e,o,s){function c(n){var r=new Date(n),t=""+(r.getMonth()+1),i=""+r.getDate(),u=r.getFullYear();return t.length<2&&(t="0"+t),i.length<2&&(i="0"+i),[u,t,i].join("-")}var h=this,l=moment().subtract(1,"days"),a=moment().add(3,"months");t.dateError=function(n){var i;if(n=n||"lxForm",i=t[n].datePicker.$viewValue?t[n].datePicker.$viewValue:"",!i)return t.form.dateError[2];var r=i.indexOf("/")>1?i.split("/"):!1,u=r!=!1?r[2]+"-"+r[1]+"-"+r[0]:i,u=Date.parse(u);return isNaN(u)?t.form.dateError[0]:t.form.dateError[2]};t.dateChange=function(){};t.$on("initialize",function(){t.user={};t.form.dateError=["Invalid date","Please choose a date that is in the valid range","Please pick date from the calendar"];t.form.specificErrorMessages={VINMsg:"VIN must be 17 alphanumberic characters",VINLookupFailedMsg:"VIN cannot be found, please check that what you have entered is correct",RegistrationInvalidMsg:"Maximum seven characters. Numbers and letters only."};t.form.errorMessages=["This field is required","The format is not valid","The input is too short","The captcha is required","The value is not suitable"];t.form.namePattern=/^[a-zA-Z- ']*$/;t.form.nameMinLength=2;t.form.messageMinLength=16;t.form.postcodeMinLength=4;t.form.dealerPostcodeMinLength=4;t.form.yearMinLength=4;t.form.phoneMinLength=10;t.form.vinMinLength=17;t.form.emailPattern=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@(\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})$/;t.form.numberPattern=/^\d+$/;t.form.phonePattern=/^(0[23478]|\+[1-9])\d{8,15}$/i;t.form.hiddenUnselected=!1;t.form.hasHTML5DatePicker=Modernizr.inputtypes.date;t.form.dateFormat="date";t.form.minYear="1990";t.dateMin=moment().add(1,"d").hour(12).startOf("h");t.dateMax=moment().add(3,"months").hour(12).startOf("h");t.dateDefault=new Date(moment().add(3,"d").hour(12).startOf("h"));t.form.dateMin2=c(l);t.form.dateMax2=c(a);t.form.datePattern=/^(0[1-9]|1[0-9]|2[0-9]|3[01])\/(0[1-9]|1[012])\/(201[6-9])/;t[n].date=t.dateDefault;t.form.tagsLoading=!1;t.form.alphanumeric=/^[a-zA-Z0-9]*$/});t.errorText=function(n,t,i,r,u){return r,u?h.specificErrorMessages[u]:n?t&&n<t?h.errorMessages[2]:i?h.errorMessages[4]:h.errorMessages[1]:h.errorMessages[0]};t.showUnselected=function(){h.hiddenUnselected=!1};t.hideUnselected=function(){h.hiddenUnselected||(h.hiddenUnselected=!0)};t.VINchange=function(){r.$broadcast("vin-change")};t.submit=function(n){n=n||"lxForm";t[n].$invalid?(angular.forEach(t[n].$error,function(n){angular.forEach(n,function(n){n&&n.$setTouched&&(n.$setTouched(),n.$setDirty())})}),e.find(".ng-invalid")[0].id==="postcodes"?e.find(".ng-invalid input")[0].focus():e.find(".ng-invalid")[0].focus()):(r.$broadcast("open-modal-window",{content:'<div class="lx-loader">Loading...<\/div>',closeOnEvent:"close-modal-window",variant:Lexus.ModalVariant.Spinner}),r.$broadcast(i,{content:t.user}))};r.$on("form-result",function(){r.$broadcast("close-modal-window")});r.$on("date-picker-invalid",function(){t[n].datePicker.$setValidity("validDate",!1);t.$apply()});r.$on("vin-lookup-success",function(){t[n].vin.$setValidity("notfound",!0)});r.$on("vin-lookup-failed",function(){t[n].vin.$setValidity("notfound",!1)});t.loadTags=function(n){return t.form.tagsLoading=!0,s.setParam("term",n),s.GetResults(t.tagsLoaded)};t.tagsLoaded=function(){t.form.tagsLoading=!1};t.autocompleteLoading=function(){return t.form.tagsLoading};r.$on("date-picker-valid",function(){t[n].datePicker.$setValidity("validDate",!0);t.$apply()})}var i="",n="";return t.$inject=["$scope","$rootScope","UserPreferencesService","$filter","$element","$timeout","AddressSuggestService"],{scope:!0,restrict:"A",controller:t,controllerAs:"form",bindToController:!0,link:function(t,r,u){i=u.lxForm;n=u.name;t.$broadcast("initialize")}}}]);angular.module("Lexus.Directives").directive("lxFormsBookAService",["$window","$timeout","$filter","$http","$location","API",function(){function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v){var y=this;n.ffc.urlParameters=e.search();n.init=function(t,i,r,u){c.getLexusVisitorSession().then(function(i){var u=c.getLexusDealer(n.ffc.urlParameters),r=c.getLexusVisitor(n.ffc.urlParameters);n.ffc.form={submitting:!1,completed:!1,errors:!1,dealers:[],data:{postcodes:[],carmodel:"",subscribe:!1,postcode:"",suburb:"",state:"",pricingZone:"",email:i.Data.email,phonetype:i.Data.phoneType?i.Data.phoneType:"home",firstname:i.Data.name,lastname:i.Data.surname,phone:i.Data.phone,prefer:i.Data.preferredContactMethod?i.Data.preferredContactMethod:"email",captcha:"",dealerId:u.dealerID,dealerName:u.dealerName,preferredlocation:"home",kmdriven:"",registration:"",year:"",date:moment().add(7,"d").hour(12).startOf("h").format("DD/MM/YYYY"),timeofday:"AM",additionalcomments:"",address:"",contextDealerSiteId:t}};r.suburb&&r.postCode&&r.state&&(n.ffc.form.data.postcodes.push({data:{postcode:r.postCode,state:r.state,suburb:r.suburb,pricingZone:r.pricingZone},text:r.suburb+" "+r.postCode}),n.ffc.form.data.postcode=r.postCode,n.ffc.form.data.state=r.state,n.ffc.form.data.suburb=r.suburb,n.ffc.form.data.pricingZone=r.pricingZone)},function(){n.ffc.form={submitting:!1,completed:!1,errors:!1,dealers:[],data:{postcodes:[],carmodel:"",subscribe:!1,postcode:"",state:"",suburb:"",email:null,phonetype:"home",firstname:null,lastname:null,phone:null,prefer:"email",captcha:"",dealerId:null,dealerName:null,preferredlocation:"home",kmdriven:"",registration:"",year:"",date:"",timeofday:"AM",additionalcomments:"",address:""}}}).finally(function(){r&&u&&(n.ffc.form.data.dealerId=null,n.ffc.form.data.dealerName=null,n.loadBranches(t));r&&!u&&(n.ffc.form.data.dealerId=i,n.ffc.form.data.dealerName=null)})};n.updatePostcode=function(t){n.ffc.form.data.postcodes=[];n.ffc.form.data.postcodes[0]=t;n.ffc.form.data.postcode=t.data.postcode;n.ffc.form.data.suburb=t.data.suburb;n.ffc.form.data.state=t.data.state;n.ffc.form.data.pricingZone=t.data.pricingZone;o.$broadcast("visitor-details-cookie-change",{postCode:t.data.postcode,suburb:t.data.suburb,state:t.data.state})};n.loadBranches=function(t){n.ffc.form.dealersLoading=!0;s.setParam("dealerID",t);s.setParam("type","Service");s.GetDealerBranches()};n.$on("dealer-search-results-received",function(t,i){n.ffc.form.dealersLoading=!1;n.ffc.form.dealers=i.Data;n.checkDealersLoaded()});n.checkDealersLoaded=function(){var t=n.ffc.form.dealers.find(function(t){return t.dealerCode==n.ffc.form.data.dealerId});t||(n.ffc.form.data.dealerId=null);n.ffc.form.dealers.length==1&&(n.ffc.form.data.dealerId=n.ffc.form.dealers[0].dealerCode)};n.deselectDealer=function(){n.ffc.form.data.dealerId=n.ffc.form.data.dealerName=null};n.selectDealer=function(n){var i=$(document).scrollTop(),t=$("#"+n).parents(".lx-form__find-dealer-js").offset().top;i>t&&TweenLite.to(window,.5,{scrollTo:{y:t},ease:Power2.easeOut})};n.searchNow=function(){n.ffc.form.dealersLoading=!0;o.$broadcast("visitor-details-change-autocomplete",n.ffc.form.data.postcodes[0].data);n.ffc.form.data.postcode=n.ffc.form.data.postcodes[0].data.postCode};n.getData=function(){n.searchNow();var t="",i="";return n.ffc.form.data.carmodel.lastIndexOf(" ")!=-1&&(t=n.ffc.form.data.carmodel.split(" ")[0],i=n.ffc.form.data.carmodel.split(" ")[1]),n.ffc.form.data.carmodel=="Other"&&(t=n.ffc.form.data.carmodelother),{FirstName:n.ffc.form.data.firstname,LastName:n.ffc.form.data.lastname,Email:n.ffc.form.data.email,Phone:n.ffc.form.data.phone,PreferredContactMethod:n.ffc.form.data.prefer,Model:t,DealerId:n.ffc.form.data.dealerId,ContextDealerSiteId:n.ffc.form.data.contextDealerSiteId,DealerName:n.ffc.form.data.dealerName,Subscribe:n.ffc.form.data.subscribe.toString(),Captcha:n.ffc.form.data.captcha,PreferredLocation:n.ffc.form.data.preferredlocation,KMDriven:n.ffc.form.data.kmdriven,Year:n.ffc.form.data.year,Registration:n.ffc.form.data.registration,Date:new Date(moment(n.ffc.form.data.date,"DD/MM/YYYY")).toDateString(),TimeOfDay:n.ffc.form.data.timeofday,AdditionalComments:n.ffc.form.data.additionalcomments,Address:n.ffc.form.data.address,Suburb:n.ffc.form.data.suburb,State:n.ffc.form.data.state,Postcode:n.ffc.form.data.postcode,EngineVariant:i,PhoneType:"Not Specified"}};n.modelChanged=function(){var t=n.ffc.form.data.carmodel&&n.ffc.form.data.carmodel.indexOf(" ")?n.ffc.form.data.carmodel.split(/\s+(?!F)/)[0]:n.ffc.form.data.carmodel;o.$broadcast("vehicle-preference-change",{model:t,engineVariant:n.ffc.form.data.carmodel})};o.$on("submit-book-a-service-form",function(){n.ffc.form.submitting=!0;t({method:"POST",url:i("formatArgs")(Lexus.API.FormSubmission.BookAServiceUrl,[Lexus.ID.Site]),data:n.getData()}).then(function(t){t.data.Status=="Success"?n.submissionPass(t.data):n.submissionFail(t.data)},function(t){n.submissionFail(t.data)}).finally(function(){o.$broadcast("form-result")})});n.submissionPass=function(){n.ffc.form.completed=!0;n.ffc.form.failed=!1;n.ffc.form.submitting=!1;e.state("PreBookTestDriveForm=Pass");v.ShowResult(n.successContent[0]);o.$broadcast("gtm-form-success","Book A Service");o.$broadcast("visitor-details-session-change",n.getData())};n.submissionFail=function(t){n.ffc.form.failed=!0;n.ffc.form.errors=t.Data;n.ffc.form.submitting=!1;n.ffc.form.completed=!0;e.state("PreBookTestDriveForm=Fail");v.ShowResult(n.failureContent[0]);console.error(t.ErrorMessage)}}return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location","$rootScope","DealersService","AddressSuggestService","UserPreferencesService","VehicleService","vcRecaptchaService","FormsService"],{scope:!0,restrict:"A",controller:n,controllerAs:"ffc",bindToController:!0,link:function(n,t){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure")}}}]);angular.module("Lexus.Directives").directive("lxFormsContactUs",["$window","$timeout","$filter","$http","$location",function(){function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v){var y=this;n.init=function(t,i,r,u,f){h.getLexusVisitorSession().then(function(i){var o=h.getLexusVisitor(),e=h.getLexusDealer(n.ffc.urlParameters);i.Data||(i={Data:{email:"",name:"",surname:"",phone:""}});n.ffc.form={submitting:!1,completed:!1,errors:!1,data:{contextDealerSiteId:t,subscribe:!1,email:i.Data.email,firstname:i.Data.name,lastname:i.Data.surname,requesttype:f,phone:i.Data.phone,prefer:i.Data.preferredContactMethod?i.Data.preferredContactMethod:"email",captcha:"",dealerId:e.dealerID,isDealerSite:r,isMultiBranchDealer:u}}},function(){}).finally(function(){n.ffc.form.data.postcodes&&n.ffc.form.data.postcodes.length>0&&!r&&(n.ffc.form.data.dealerId="");r&&u&&(n.ffc.form.data.dealerId=null,n.ffc.form.data.dealerName=null,n.loadBranches(t));r&&!u&&(n.ffc.form.data.dealerId=i,n.ffc.form.data.dealerName=null)})};n.getData=function(){return{EnquiryReason:n.ffc.form.data.requesttype,CarModel:n.ffc.form.data.carmodel,Message:n.ffc.form.data.message,FirstName:n.ffc.form.data.firstname,LastName:n.ffc.form.data.lastname,Email:n.ffc.form.data.email,Phone:n.ffc.form.data.phone,PreferredContactMethod:n.ffc.form.data.prefer,Subscribe:n.ffc.form.data.subscribe.toString(),Captcha:n.ffc.form.data.captcha,DealerId:n.ffc.form.data.dealerId,ContextDealerSiteId:n.ffc.form.data.contextDealerSiteId,PhoneType:"Not Specified"}};o.$on("submit-contact-us-form",function(){n.ffc.form.submitting=!0;var r=n.getData();v.attachEloquaFields(r);t({method:"POST",url:i("formatArgs")(Lexus.API.FormSubmission.ContactUs,[Lexus.ID.Site]),data:r}).then(function(t){t.data.Status=="Success"?n.submissionPass(t.data):n.submissionFail(t.data)},function(t){n.submissionFail(t.data)}).finally(function(){o.$broadcast("form-result")})});n.loadBranches=function(t){n.ffc.form.dealersLoading=!0;a.setParam("dealerID",t);a.setParam("type","Sales");a.GetDealerBranches()};n.$on("dealer-search-results-received",function(t,i){n.ffc.form.dealersLoading=!1;n.ffc.form.dealers=i.Data;n.checkDealersLoaded()});n.checkDealersLoaded=function(){var t=n.ffc.form.dealers.find(function(t){return t.dealerCode==n.ffc.form.data.dealerId});t||(n.ffc.form.data.dealerId=null);n.ffc.form.dealers.length==1&&(n.ffc.form.data.dealerId=n.ffc.form.dealers[0].dealerCode)};n.submissionPass=function(){n.ffc.form.completed=!0;n.ffc.form.failed=!1;n.ffc.form.submitting=!1;e.state("ContactUsForm=Pass");l.ShowResult(n.successContent[0]);o.$broadcast("gtm-form-success","Contact Us",n.ffc.form.data.requesttype);o.$broadcast("visitor-details-session-change",n.getData())};n.submissionFail=function(t){n.ffc.form.failed=!0;n.ffc.form.errors=t.Data;n.ffc.form.submitting=!1;n.ffc.form.completed=!0;e.state("ContactUsForm=Fail");l.ShowResult(n.failureContent[0]);console.error(t.ErrorMessage)}}return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location","$rootScope","AddressSuggestService","UserPreferencesService","vcRecaptchaService","FormsService","DealersService","EloquaService"],{scope:!0,restrict:"A",controller:n,controllerAs:"ffc",bindToController:!0,link:function(n,t){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure")}}}]);angular.module("Lexus.Directives").directive("lxFormsFinanceCalculator",["$http","$filter","$timeout","$window","$interval","$location","$rootScope","DealersService","AddressSuggestService","UserPreferencesService","VehicleService","vcRecaptchaService","FormsService","PricingService","$sce","BuildPriceService","BuildPriceAPIService","EloquaService","$log",FormsFinanceCalculatorDirective]);angular.module("Lexus.Directives").directive("lxFormsFinanceContact",["$window","$timeout","$filter","$http","$location",function(){function n(n,t,i,r,u,f,e,o,s,h,c,l){var a=this;n.init=function(){h.getLexusVisitorSession().then(function(t){var i=h.getLexusVisitor();n.ffc.form={submitting:!1,completed:!1,errors:!1,data:{subscribe:!1,postcodes:[],postcode:"",email:t.Data.email,phonetype:t.Data.phoneType&&t.Data.phoneType!=""?t.Data.phoneType:"home",firstname:t.Data.name,lastname:t.Data.surname,phone:t.Data.phone,prefer:t.Data.preferredContactMethod?t.Data.preferredContactMethod:"email",captcha:"",requesttype:null}};i=h.getLexusVisitor();i&&i.postCode&&i.suburb&&i.state&&n.ffc.form.data.postcodes.push(h.getAutocompleteTagFromVisitor(i))},function(){})};n.getData=function(){var t=h.splitAutoCompleteResult(n.ffc.form.data.postcodes[0].text);return{Message:n.ffc.form.data.message,FirstName:n.ffc.form.data.firstname,LastName:n.ffc.form.data.lastname,Email:n.ffc.form.data.email,PostCode:t.postCode,Phone:n.ffc.form.data.phone,PhoneType:n.ffc.form.data.phonetype,PreferredContactMethod:n.ffc.form.data.prefer,Subscribe:n.ffc.form.data.subscribe.toString(),Captcha:n.ffc.form.data.captcha,RequestType:n.ffc.form.data.requesttype}};o.$on("submit-financial-form",function(){o.$broadcast("visitor-details-cookie-change-autocomplete",n.ffc.form.data.postcodes[0].text);n.ffc.form.submitting=!0;t({method:"POST",url:i("formatArgs")(Lexus.API.FormSubmission.FinanceContact,[Lexus.ID.Site]),data:n.getData()}).then(function(t){t.data.Status=="Success"?n.submissionPass(t.data):n.submissionFail(t.data)},function(t){n.submissionFail(t.data)}).finally(function(){o.$broadcast("form-result")})});n.submissionPass=function(){n.ffc.form.completed=!0;n.ffc.form.failed=!1;n.ffc.form.submitting=!1;e.state("FinanceForm=Pass");l.ShowResult(n.successContent[0]);o.$broadcast("gtm-form-success","Finance Contact");o.$broadcast("visitor-details-session-change",n.getData())};n.submissionFail=function(t){n.ffc.form.failed=!0;n.ffc.form.errors=t.Data;n.ffc.form.submitting=!1;n.ffc.form.completed=!0;e.state("FinanceForm=Fail");l.ShowResult(n.failureContent[0]);console.error(t.ErrorMessage)};n.updatePostcode=function(t){n.ffc.form.data.postcodes=[];n.ffc.form.data.postcodes[0]=t}}var t="";return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location","$rootScope","AddressSuggestService","UserPreferencesService","vcRecaptchaService","FormsService","API"],{scope:!0,restrict:"A",controller:n,controllerAs:"ffc",bindToController:!0,link:function(n,i,r){n.successContent=i.find(".lx-form-success");n.failureContent=i.find(".lx-form-failure");t=r.lxFormsType}}}]);angular.module("Lexus.Directives").directive("lxFormsInsuranceContact",["$window","$timeout","$filter","$http","$location",function(){function n(n,t,i,r,u,f,e,o,s,h,c,l){var a=this;n.init=function(){h.getLexusVisitorSession().then(function(t){var i=h.getLexusVisitor();n.ffc.form={submitting:!1,completed:!1,errors:!1,data:{subscribe:!1,postcodes:[],postcode:"",email:t.Data.email,phonetype:t.Data.phoneType&&t.Data.phoneType!=""?t.Data.phoneType:"home",firstname:t.Data.name,lastname:t.Data.surname,phone:t.Data.phone,prefer:t.Data.preferredContactMethod?t.Data.preferredContactMethod:"email",captcha:"",requesttype:null}};i=h.getLexusVisitor();i&&i.postCode&&i.suburb&&n.ffc.form.data.postcodes.push({text:i.suburb+" "+i.postCode})},function(){})};n.getData=function(){var t=h.splitAutoCompleteResult(n.ffc.form.data.postcodes[0].text);return{Message:n.ffc.form.data.message,FirstName:n.ffc.form.data.firstname,LastName:n.ffc.form.data.lastname,Email:n.ffc.form.data.email,PostCode:t.postCode,Phone:n.ffc.form.data.phone,PhoneType:n.ffc.form.data.phonetype,PreferredContactMethod:n.ffc.form.data.prefer,Subscribe:n.ffc.form.data.subscribe.toString(),Captcha:n.ffc.form.data.captcha,RequestType:n.ffc.form.data.requesttype}};o.$on("submit-insurance-form",function(){o.$broadcast("visitor-details-cookie-change-autocomplete",n.ffc.form.data.postcodes[0].text);n.ffc.form.submitting=!0;t({method:"POST",url:i("formatArgs")(Lexus.API.FormSubmission.InsuranceContact,[Lexus.ID.Site]),data:n.getData()}).then(function(t){t.data.Status=="Success"?n.submissionPass(t.data):n.submissionFail(t.data)},function(t){n.submissionFail(t.data)}).finally(function(){o.$broadcast("form-result")})});n.submissionPass=function(){n.ffc.form.completed=!0;n.ffc.form.failed=!1;n.ffc.form.submitting=!1;e.state("InsuranceForm=Pass");l.ShowResult(n.successContent[0]);o.$broadcast("gtm-form-success","Insurance Contact");o.$broadcast("visitor-details-session-change",n.getData())};n.submissionFail=function(t){n.ffc.form.failed=!0;n.ffc.form.errors=t.Data;n.ffc.form.submitting=!1;n.ffc.form.completed=!0;e.state("InsuranceForm=Fail");l.ShowResult(n.failureContent[0]);console.error(t.ErrorMessage)};n.updatePostcode=function(t){n.ffc.form.data.postcodes=[];n.ffc.form.data.postcodes[0]=t}}var t="";return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location","$rootScope","AddressSuggestService","UserPreferencesService","vcRecaptchaService","FormsService","API"],{scope:!0,restrict:"A",controller:n,controllerAs:"ffc",bindToController:!0,link:function(n,i,r){n.successContent=i.find(".lx-form-success");n.failureContent=i.find(".lx-form-failure");t=r.lxFormsType}}}]);angular.module("Lexus.Directives").directive("lxFormsRegisterInterest",["$window","$timeout","$filter","$http","$location",function(){function n(n,r,u,f,e,o,s,h,c,l,a,v,y){var p=this;n.init=function(){l.getLexusVisitorSession().then(function(r){r.Data=r.Data||{};var u=l.getLexusVisitor();n.ffc.form={submitting:!1,completed:!1,errors:!1,data:{subscribe:!1,email:r.Data.email,firstname:r.Data.name,lastname:r.Data.surname,phone:r.Data.phone,daterange:"",model:t,vehicle:"",dealerId:i,captcha:"",purchasedelay:null,currentmake:null}}},function(){})};n.getData=function(){return{Model:n.ffc.form.data.model,FirstName:n.ffc.form.data.firstname,LastName:n.ffc.form.data.lastname,Email:n.ffc.form.data.email,PlanToPurchase:n.ffc.form.data.purchasedelay,Phone:n.ffc.form.data.phone,VehicleTypeOwned:n.ffc.form.data.currentmake,Subscribe:n.ffc.form.data.subscribe.toString(),Captcha:n.ffc.form.data.captcha,DealerId:n.ffc.form.data.dealerId,PhoneType:"Not Specified"}};h.$on("submit-register-interest-form",function(){n.ffc.form.submitting=!0;var t=n.getData();y.attachEloquaFields(t);r({method:"POST",url:u("formatArgs")(Lexus.API.FormSubmission.FutureVehicleInterest,[Lexus.ID.Site]),data:t}).then(function(t){t.data.Status=="Success"?n.submissionPass(t.data):n.submissionFail(t.data)},function(t){n.submissionFail(t.data)}).finally(function(){h.$broadcast("form-result")})});n.submissionPass=function(){n.ffc.form.completed=!0;n.ffc.form.failed=!1;n.ffc.form.submitting=!1;s.state("RegisterInterestForm=Pass");v.ShowResult(n.successContent[0]);h.$broadcast("gtm-form-success","Register Interest Form");h.$broadcast("visitor-details-session-change",n.getData())};n.submissionFail=function(t){n.ffc.form.failed=!0;n.ffc.form.errors=t.Data;n.ffc.form.submitting=!1;n.ffc.form.completed=!0;s.state("RegisterInterestForm=Fail");v.ShowResult(n.failureContent[0]);t.ErrorMessage&&console.error(t.ErrorMessage)}}var t="",i="";return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location","$rootScope","AddressSuggestService","UserPreferencesService","vcRecaptchaService","FormsService","EloquaService"],{scope:!0,restrict:"A",controller:n,controllerAs:"ffc",bindToController:!0,link:function(n,r,u){n.successContent=r.find(".lx-form-success");n.failureContent=r.find(".lx-form-failure");t=u.lxFormsRegister;i=u.lxFormsDealerId}}}]),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c){function a(t){function p(){var n=r.search();e.getLexusVisitorSession().then(function(i){var f=e.getLexusVehicle(n),u=e.getLexusDealer(n),r=e.getLexusVisitor(n);t.ffc.form={submitting:!1,completed:!1,errors:!1,brochureUrl:null,disableAddressValidation:!0,dealerTagsLoading:!1,data:{carmodel:f.model,brochureType:"digital-brochure",firstname:i.Data.name,lastname:i.Data.surname,address:i.Data.address,postcodes:[],dealerpostcodes:[],postcode:r.postCode,pricingZone:r.pricingZone,suburb:r.suburb,state:r.state,email:i.Data.email,phone:i.Data.phone,purchasedelay:null,currentmake:null,subscribe:!1,captcha:"",dealerId:u.dealerID,dealerName:u.dealerName}};r.suburb&&r.postCode&&(t.ffc.form.data.dealerpostcodes.push({text:r.suburb+" "+r.postCode}),t.ffc.form.data.postcodes.push({text:r.suburb+" "+r.postCode}))},function(){t.ffc.form={submitting:!1,completed:!1,errors:!1,brochureUrl:null,disableAddressValidation:!0,data:{carmodel:null,brochureType:"digital-brochure",firstname:null,lastname:null,address:null,postcodes:[],postcode:null,suburb:null,state:null,email:null,phone:null,purchasedelay:null,currentmake:null,subscribe:!1,captcha:""}}}).finally(function(){t.ffc.form.data.dealerpostcodes&&t.ffc.form.data.dealerpostcodes.length>0&&a();l.isDealerSite&&l.isMultiBranchDealership&&(t.ffc.form.data.dealerId=null,t.ffc.form.data.dealerName=null,u(l.forceDealerId));l.isDealerSite&&!l.isMultiBranchDealership&&(t.ffc.form.data.dealerId=l.dealerCompositeID,t.ffc.form.data.dealerName=null);t.ffc.form.data.carmodel&&f.$broadcast("field-car-model-update-selected")});t.updateBrochureType()}function u(n){t.ffc.form.dealersLoading=!0;h.setParam("dealerID",n);h.setParam("type","Sales");h.GetDealerBranches()}function w(n){return t.ffc.form.dealers.find(function(t){return t.dealerCode==n})}function a(){t.ffc.form.dealersLoading=!0;var n=e.splitAutoCompleteResult(t.ffc.form.data.dealerpostcodes[0].text);h.setParam("postCode",n.postCode);h.setParam("suburb",n.suburb);h.setParam("type","Sales");h.GetResults()}function v(){return{Model:t.ffc.form.data.carmodel,DealerId:t.ffc.form.data.dealerId,ContextDealerSiteId:l.forceDealerId,FirstName:t.ffc.form.data.firstname,LastName:t.ffc.form.data.lastname,BrochureType:t.ffc.form.data.brochureType,Address:t.ffc.form.data.address,Postcode:t.ffc.form.data.postcode,State:t.ffc.form.data.state,Suburb:t.ffc.form.data.suburb,Email:t.ffc.form.data.email,Phone:t.ffc.form.data.phone,PlanToPurchase:t.ffc.form.data.purchasedelay,VehicleTypeOwned:t.ffc.form.data.currentmake,Captcha:t.ffc.form.data.captcha,Subscribe:t.ffc.form.data.subscribe}}function b(n){t.ffc.form.brochureUrl=n.Data.BrochureUrl;t.ffc.form.completed=!0;t.ffc.form.failed=!1;t.ffc.form.submitting=!1;r.state("RequestBrochureForm=Pass");o.ShowResult(t.successContent[0]);f.$broadcast("visitor-details-session-change",v())}function y(n){t.ffc.form.failed=!0;t.ffc.form.errors=n.Data;t.ffc.form.submitting=!1;t.ffc.form.completed=!0;r.state("RequestBrochureForm=Fail");o.ShowResult(t.failureContent[0]);console.error(n.ErrorMessage)}t.$on("dealer-search-results-received",function(n,i){t.ffc.form.dealersLoading=!1;t.ffc.form.dealers=i.Data;var r=w(t.ffc.form.data.dealerId);r||(t.ffc.form.data.dealerId=null);t.ffc.form.dealers.length==1&&(t.ffc.form.data.dealerId=t.ffc.form.dealers[0].dealerCode)});t.deselectDealer=function(){t.ffc.form.data.dealerId=t.ffc.form.data.dealerName=null};t.selectDealer=function(n){var i=$(document).scrollTop(),t=$("#"+n).parents(".lx-form__find-dealer-js").offset().top;i>t&&TweenLite.to(window,.5,{scrollTo:{y:t},ease:Power2.easeOut})};t.dealerSearch=function(){t.ffc.form.dealersLoading=!0;t.ffc.form.data.dealerpostcodes&&t.ffc.form.data.dealerpostcodes.length>0&&!t.isDealerSite&&a();l.isDealerSite&&l.isMultiBranchDealership&&(t.ffc.form.data.dealerId=null,t.ffc.form.data.dealerName=null,u(l.forceDealerId));l.isDealerSite&&!l.isMultiBranchDealership&&l.dealerState&&(h.setParam("dealerID",l.forceDealerId),h.setParam("dealerState",l.dealerState),h.setParam("type","Sales"),h.GetResult())};t.$on("dealer-search-result-received",function(n,i){t.ffc.form.dealersLoading=!1;t.ffc.form.dealer=i.Data;t.ffc.form.dealerlocations=i.Data.locations;t.ffc.form.dealerlocations==null&&(t.ffc.form.dealerlocations=[]);i.Data&&angular.forEach(i.Data,function(n){n&&angular.forEach(n.locations,function(n){console.log(n);this.push(n)},t.ffc.form.dealerlocations)});t.ffc.form.dealerlocations.length==1&&(t.ffc.form.data.locationId=t.ffc.form.dealerlocations[0].locationId)});t.updateBrochureType=function(){t.ffc&&t.ffc.form&&t.ffc.form.data&&t.ffc.form.data.brochureType&&(t.ffc.form.disableAddressValidation=t.ffc.form.data.brochureType=="digital-brochure")};t.minTags=function(){return t.ffc&&t.ffc.form&&t.ffc.form.disableAddressValidation?t.ffc.form.disableAddressValidation?"0":"1":"1"};t.clearDealerPostcode=function(){t.ffc.form.data.dealerpostcodes=null};t.clearPostcode=function(){t.ffc.form.data.postcodes=null};t.updateDealerPostcode=function(n){t.ffc.form.data.dealerpostcodes=[];t.ffc.form.data.dealerpostcodes[0]=n;t.dealerSearch(n);t.ffc.form.data.postcode||(t.ffc.form.data.postcodes=[],t.ffc.form.data.postcodes.push({text:n.data.suburb+" "+n.data.postcode}),t.ffc.form.data.postcode=n.data.postcode,t.ffc.form.data.suburb=n.data.suburb,t.ffc.form.data.state=n.data.state,t.ffc.form.data.pricingZone=n.data.pricingZone,f.$broadcast("visitor-details-cookie-change",{postCode:n.data.postcode,suburb:n.data.suburb,state:n.data.state,pricingZone:n.data.pricingZone}))};t.updatePostcode=function(n){t.ffc.form.data.postcodes=[];t.ffc.form.data.postcodes[0]=n;t.ffc.form.data.postcode=n.data.postcode;t.ffc.form.data.suburb=n.data.suburb;t.ffc.form.data.state=n.data.state;t.ffc.form.data.pricingZone=n.data.pricingZone;f.$broadcast("visitor-details-cookie-change",{postCode:n.data.postcode,suburb:n.data.suburb,state:n.data.state,pricingZone:n.data.pricingZone})};f.$on("vehicle-preference-change",function(n,i){t.ffc.form.data.carmodel=i.model});f.$on("submit-request-brochure-form",function(){var t=v();s.attachEloquaFields(t);i({method:"POST",url:n("formatArgs")(Lexus.API.FormSubmission.RequestBrochure,[Lexus.ID.Site]),data:t}).then(function(n){n.data.Status=="Success"?(b(n.data),f.$broadcast("gtm-form-success","Request Brochure")):y(n.data)},function(n){y(n.data)}).finally(function(){f.$broadcast("form-result")})});t.loadDealerTags=function(n){return t.ffc.form.dealerTagsLoading=!0,c.setParam("term",n),c.GetResults(function(){t.ffc.form.dealerTagsLoading=!1})};p()}var l;return a.$inject=["$scope"],{scope:!0,restrict:"A",controller:a,controllerAs:"ffc",bindToController:!0,link:function(n,t,i){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure");l=JSON.parse(i.brochureData)}}}angular.module("Lexus.Directives").directive("lxFormsRequestBrochure",n);n.$inject=["$filter","$timeout","$http","$location","API","$rootScope","UserPreferencesService","FormsService","EloquaService","DealersService","AddressSuggestService"]}();angular.module("Lexus.Directives").directive("lxFormsSubscribeNewsLetter",["$window","$timeout","$filter","$http","$location",function(){function n(n,t,i,r,u,f,e,o,s,h,c,l){var a=this;n.init=function(){h.getLexusVisitorSession().then(function(t){var i=h.getLexusVisitor();n.ffc.form={submitting:!1,completed:!1,errors:!1,data:{subscribe:!1,email:t.Data.email,firstname:t.Data.name,lastname:t.Data.surname,phone:t.Data.phone,captcha:""}}},function(){n.ffc.form={submitting:!1,completed:!1,errors:!1,data:{subscribe:!1,email:null,firstname:null,lastname:null,phone:null,captcha:""}}}).finally(function(){})};n.getData=function(){return{FirstName:n.ffc.form.data.firstname,LastName:n.ffc.form.data.lastname,Email:n.ffc.form.data.email,Phone:n.ffc.form.data.phone,Subscribe:n.ffc.form.data.subscribe.toString(),Captcha:n.ffc.form.data.captcha,PhoneType:"Not Specified"}};o.$on("submit-subscribe-newsletter-form",function(){n.ffc.form.submitting=!0;t({method:"POST",url:i("formatArgs")(Lexus.API.FormSubmission.SubscribeNewsletterUrl,[Lexus.ID.Site]),data:n.getData()}).then(function(t){t.data.Status=="Success"?n.submissionPass(t.data):n.submissionFail(t.data)},function(t){n.submissionFail(t.data)}).finally(function(){o.$broadcast("form-result")})});n.submissionPass=function(){n.ffc.form.completed=!0;n.ffc.form.failed=!1;n.ffc.form.submitting=!1;e.state("SubscribeNewsLetterForm=Pass");l.ShowResult(n.successContent[0]);o.$broadcast("gtm-form-success","Subscribe Newsletter Form");o.$broadcast("visitor-details-session-change",n.getData())};n.submissionFail=function(t){n.ffc.form.failed=!0;n.ffc.form.errors=t.Data;n.ffc.form.submitting=!1;n.ffc.form.completed=!0;e.state("SubscribeNewsLetterForm=Fail");l.ShowResult(n.failureContent[0]);console.error(t.ErrorMessage)}}return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location","$rootScope","AddressSuggestService","UserPreferencesService","vcRecaptchaService","FormsService"],{scope:!0,restrict:"A",controller:n,controllerAs:"ffc",bindToController:!0,link:function(n,t){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure")}}}]),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h){function c(r){var e=this;r.ffc.urlParameters=i.search();r.init=function(n,t,i,f){o.getLexusVisitorSession().then(function(t){var u=o.getLexusVehicle(r.ffc.urlParameters),f=o.getLexusDealer(r.ffc.urlParameters),i=o.getLexusVisitor(r.ffc.urlParameters);r.ffc.form={submitting:!1,completed:!1,errors:!1,dealers:[],data:{postcodes:[],carmodel:u.model,grade:u.grade,enginevariant:u.engineVariant,contextDealerSiteId:n,subscribe:!1,postcode:"",email:t.Data.email,phonetype:t.Data.phoneType?t.Data.phoneType:"home",firstname:t.Data.name,lastname:t.Data.surname,phone:t.Data.phone,prefer:t.Data.preferredContactMethod?t.Data.preferredContactMethod:"email",captcha:"",dealerId:f.dealerID,dealerName:f.dealerName,preferredlocation:"home",purchasedelay:null,currentmake:null}};i.suburb&&i.postCode&&r.ffc.form.data.postcodes.push({text:i.suburb+" "+i.postCode,data:{postCode:i.postCode,suburb:i.suburb}})},function(){r.ffc.form={submitting:!1,completed:!1,errors:!1,dealers:[],data:{postcodes:[],carmodel:null,grade:null,subscribe:!1,postcode:"",email:null,phonetype:"home",firstname:null,lastname:null,phone:null,prefer:"email",captcha:"",dealerId:null,dealerName:null,preferredlocation:"home",purchasedelay:null,currentmake:null}}}).finally(function(){r.ffc.form.data.carmodel&&u.$broadcast("field-car-model-engine-variant-update-selected");r.ffc.form.data.postcodes&&r.ffc.form.data.postcodes.length>0&&!i&&r.searchNow();i&&f&&(r.ffc.form.data.dealerId=null,r.ffc.form.data.dealerName=null,r.loadBranches(n));i&&!f&&(r.ffc.form.data.dealerId=t,r.ffc.form.data.dealerName=null)})};r.deselectDealer=function(){r.ffc.form.data.dealerName=null};r.selectDealer=function(n){var u=$(document).scrollTop(),t=$("#"+n).parents(".lx-form__find-dealer-js").offset().top,i;u>t&&TweenLite.to(window,.5,{scrollTo:{y:t},ease:Power2.easeOut});try{i=n.replace("option-","");r.ffc.form.data.dealerName=r.ffc.form.dealers.find(function(n){return n.dealerCode==i}).dealerName}catch(f){(console.error||console.log)(f)}};r.loadBranches=function(n){f.setParam("dealerID",n);f.setParam("type","Sales");f.GetDealerBranches()};r.dealerSearch=function(n){r.ffc.form.data.postcodes=[];r.ffc.form.data.postcodes[0]=n;r.searchNow()};r.searchNow=function(){r.ffc.form.dealersLoading=!0;u.$broadcast("visitor-details-change-autocomplete",r.ffc.form.data.postcodes[0].data);f.setParam("postCode",r.ffc.form.data.postcodes[0].data.postCode);f.setParam("suburb",r.ffc.form.data.postcodes[0].data.suburb);f.setParam("type","Sales");f.GetResults()};u.$on("vehicle-preference-change",function(n,t){r.ffc.form.data.carmodel=t.model;r.ffc.form.data.enginevariant=t.engineVariant});r.$on("dealer-search-results-received",function(n,t){r.ffc.form.dealersLoading=!1;r.ffc.form.dealers=t.Data;r.checkDealersLoaded()});r.checkDealersLoaded=function(){var n=r.ffc.form.dealers.find(function(n){return n.dealerCode==r.ffc.form.data.dealerId});n||(r.ffc.form.data.dealerId=null);r.ffc.form.dealers.length==1&&(r.ffc.form.data.dealerId=r.ffc.form.dealers[0].dealerCode)};r.getData=function(){var n=o.getUtmParameters(),t=null;return r.ffc.form.data.postcodes.length>0&&r.ffc.form.data.postcodes[0].text&&(t=parseInt(r.ffc.form.data.postcodes[0].text.split(" ").reverse()[0])),{FirstName:r.ffc.form.data.firstname,LastName:r.ffc.form.data.lastname,Email:r.ffc.form.data.email,Phone:r.ffc.form.data.phone,PreferredContactMethod:r.ffc.form.data.prefer,Model:r.ffc.form.data.carmodel,Grade:r.ffc.form.data.grade,EngineVariant:r.ffc.form.data.enginevariant,ContextDealerSiteId:r.ffc.form.data.contextDealerSiteId,DealerId:r.ffc.form.data.dealerId,Subscribe:r.ffc.form.data.subscribe.toString(),Captcha:r.ffc.form.data.captcha,PreferredLocation:r.ffc.form.data.preferredlocation,PlanToPurchase:r.ffc.form.data.purchasedelay,VehicleTypeOwned:r.ffc.form.data.currentmake,PhoneType:"Not Specified",UtmSource:n.source,UtmMedium:n.medium,UtmCampaign:n.campaign,UtmContent:n.content,Postcode:t,DealerName:r.ffc.form.data.dealerName}};u.$on("submit-test-drive-concierage-form",function(){var i=r.getData();h.attachEloquaFields(i);r.ffc.form.submitting=!0;t({method:"POST",url:n("formatArgs")(Lexus.API.FormSubmission.TestDriveConcierge,[Lexus.ID.Site]),data:i}).then(function(n){n.data.Status=="Success"?r.submissionPass(n.data):r.submissionFail(n.data)},function(n){r.submissionFail(n.data)}).finally(function(){u.$broadcast("form-result")})});r.submissionPass=function(){r.ffc.form.completed=!0;r.ffc.form.failed=!1;r.ffc.form.submitting=!1;i.state("ConcierageTestDriveForm=Pass");s.ShowResult(r.successContent[0]);u.$broadcast("gtm-form-success","Test Drive Concierge");u.$broadcast("visitor-details-session-change",r.getData())};r.submissionFail=function(n){r.ffc.form.failed=!0;r.ffc.form.errors=n.Data;r.ffc.form.submitting=!1;r.ffc.form.completed=!0;i.state("ConcierageTestDriveForm=Fail");s.ShowResult(r.failureContent[0]);console.error(n.ErrorMessage)}}return c.$inject=["$scope"],{scope:!0,restrict:"A",controller:c,controllerAs:"ffc",bindToController:!0,link:function(n,t){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure")}}}angular.module("Lexus.Directives").directive("lxFormsTestDriveConcierge",n);n.$inject=["$filter","$http","$location","API","$rootScope","DealersService","AddressSuggestService","UserPreferencesService","FormsService","EloquaService"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h){function l(r){var e=this;r.ffc.urlParameters=i.search();r.init=function(n,t,i,u){o.getLexusVisitorSession().then(function(t){var u=o.getLexusDealer(r.ffc.urlParameters),i=o.getLexusVisitor(r.ffc.urlParameters);r.ffc.form={submitting:!1,completed:!1,errors:!1,dealers:[],data:{postcodes:[],carmodel:c,subscribe:!1,postcode:"",email:t.Data.email,phonetype:t.Data.phoneType?t.Data.phoneType:"home",firstname:t.Data.name,lastname:t.Data.surname,phone:t.Data.phone,prefer:t.Data.preferredContactMethod?t.Data.preferredContactMethod:"email",captcha:"",contextDealerSiteId:n,dealerId:u.dealerID,dealerName:u.dealerName,preferredlocation:"home",purchasedelay:null,currentmake:null}};i.suburb&&i.postCode&&r.ffc.form.data.postcodes.push({text:i.suburb+" "+i.postCode,data:{postCode:i.postCode,suburb:i.suburb}})},function(){r.ffc.form={submitting:!1,completed:!1,errors:!1,dealers:[],data:{postcodes:[],carmodel:c,subscribe:!1,postcode:"",email:null,phonetype:"home",firstname:null,lastname:null,phone:null,prefer:"email",captcha:"",dealerId:null,dealerName:null,preferredlocation:"home",purchasedelay:null,currentmake:null}}}).finally(function(){r.ffc.form.data.postcodes&&r.ffc.form.data.postcodes.length>0&&!i&&r.searchNow();i&&u&&(r.ffc.form.data.dealerId=null,r.ffc.form.data.dealerName=null,r.loadBranches(n));i&&!u&&(r.ffc.form.data.dealerId=t,r.ffc.form.data.dealerName=null)})};r.deselectDealer=function(){r.ffc.form.data.dealerName=null};r.selectDealer=function(n){var u=$(document).scrollTop(),t=$("#"+n).parents(".lx-form__find-dealer-js").offset().top,i;u>t&&TweenLite.to(window,.5,{scrollTo:{y:t},ease:Power2.easeOut});try{i=n.replace("option-","");r.ffc.form.data.dealerName=r.ffc.form.dealers.find(function(n){return n.dealerCode==i}).dealerName}catch(f){(console.error||console.log)(f)}};r.loadBranches=function(n){f.setParam("dealerID",n);f.setParam("type","Sales");f.GetDealerBranches()};r.dealerSearch=function(n){r.ffc.form.data.postcodes=[];r.ffc.form.data.postcodes[0]=n;r.searchNow()};r.searchNow=function(){r.ffc.form.dealersLoading=!0;u.$broadcast("visitor-details-change-autocomplete",r.ffc.form.data.postcodes[0].data);f.setParam("postCode",r.ffc.form.data.postcodes[0].data.postCode);f.setParam("suburb",r.ffc.form.data.postcodes[0].data.suburb);f.setParam("type","Sales");f.GetResults()};r.$on("dealer-search-results-received",function(n,t){r.ffc.form.dealersLoading=!1;r.ffc.form.dealers=t.Data;r.checkDealersLoaded()});r.checkDealersLoaded=function(){var n=r.ffc.form.dealers.find(function(n){return n.dealerCode==r.ffc.form.data.dealerId});n||(r.ffc.form.data.dealerId=null);r.ffc.form.dealers.length==1&&(r.ffc.form.data.dealerId=r.ffc.form.dealers[0].dealerCode)};r.getData=function(){var n=o.getUtmParameters(),t=null;return r.ffc.form.data.postcodes.length>0&&r.ffc.form.data.postcodes[0].text&&(t=parseInt(r.ffc.form.data.postcodes[0].text.split(" ").reverse()[0])),{FirstName:r.ffc.form.data.firstname,LastName:r.ffc.form.data.lastname,Email:r.ffc.form.data.email,Phone:r.ffc.form.data.phone,PreferredContactMethod:r.ffc.form.data.prefer,Model:c,DealerId:r.ffc.form.data.dealerId,ContextDealerSiteId:r.ffc.form.data.contextDealerSiteId,Subscribe:r.ffc.form.data.subscribe.toString(),Captcha:r.ffc.form.data.captcha,PlanToPurchase:r.ffc.form.data.purchasedelay,VehicleTypeOwned:r.ffc.form.data.currentmake,PreferredLocation:r.ffc.form.data.preferredlocation,PhoneType:"Not Specified",UtmSource:n.source,UtmMedium:n.medium,UtmCampaign:n.campaign,UtmContent:n.content,Postcode:t,DealerName:r.ffc.form.data.dealerName}};u.$on("submit-test-drive-prelaunch-form",function(){var i=r.getData();h.attachEloquaFields(i);r.ffc.form.submitting=!0;t({method:"POST",url:n("formatArgs")(Lexus.API.FormSubmission.PreLaunchTestDriveUrl,[Lexus.ID.Site]),data:i}).then(function(n){n.data.Status=="Success"?r.submissionPass(n.data):r.submissionFail(n.data)},function(n){r.submissionFail(n.data)}).finally(function(){u.$broadcast("form-result")})});r.submissionPass=function(){r.ffc.form.completed=!0;r.ffc.form.failed=!1;r.ffc.form.submitting=!1;i.state("PreBookTestDriveForm=Pass");s.ShowResult(r.successContent[0]);u.$broadcast("gtm-form-success","Test Drive Prelaunch");u.$broadcast("visitor-details-session-change",r.getData())};r.submissionFail=function(n){r.ffc.form.failed=!0;r.ffc.form.errors=n.Data;r.ffc.form.submitting=!1;r.ffc.form.completed=!0;i.state("PreBookTestDriveForm=Fail");s.ShowResult(r.failureContent[0]);console.error(n.ErrorMessage)}}var c="";return l.$inject=["$scope"],{scope:!0,restrict:"A",controller:l,controllerAs:"ffc",bindToController:!0,link:function(n,t,i){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure");c=i.lxFormsFutureModel}}}angular.module("Lexus.Directives").directive("lxFormsTestDrivePreLaunch",n);n.$inject=["$filter","$http","$location","API","$rootScope","DealersService","AddressSuggestService","UserPreferencesService","FormsService","EloquaService"]}();angular.module("Lexus.Directives").directive("lxFormsTestDrive",["$rootScope","$filter","$http","$location","API","DealersService","AddressSuggestService","UserPreferencesService","FormsService","EloquaService",function(n,t,i,r,u,f,e,o,s,h){function c(u){var e=this;u.ffc.urlParameters=r.search();u.init=function(t,i,r,f){o.getLexusVisitorSession().then(function(n){var r=o.getLexusVehicle(u.ffc.urlParameters),f=o.getLexusDealer(u.ffc.urlParameters),i=o.getLexusVisitor(u.ffc.urlParameters);u.ffc.form={submitting:!1,completed:!1,errors:!1,dealers:null,data:{postcodes:[],carmodel:r.model,grade:r.grade,enginevariant:r.engineVariant,subscribe:!1,postcode:"",email:n.Data.email,phonetype:n.Data.phoneType?n.Data.phoneType:"home",firstname:n.Data.name,lastname:n.Data.surname,phone:n.Data.phone,prefer:n.Data.preferredContactMethod?n.Data.preferredContactMethod:"email",captcha:"",dealerId:f.dealerID,dealerName:f.dealerName,purchasedelay:null,currentmake:null,contextDealerSiteId:t}};i.suburb&&i.postCode&&u.ffc.form.data.postcodes.push({text:i.suburb+" "+i.postCode,data:{postCode:i.postCode,suburb:i.suburb}})},function(){u.ffc.form={submitting:!1,completed:!1,errors:!1,dealers:null,data:{postcodes:[],carmodel:null,grade:null,subscribe:!1,postcode:"",email:null,phonetype:"home",firstname:null,lastname:null,phone:null,prefer:"email",captcha:"",dealerId:null,dealerName:null,purchasedelay:null,currentmake:null}}}).finally(function(){u.ffc.form.data.carmodel&&n.$broadcast("field-car-model-engine-variant-update-selected");u.ffc.form.data.postcodes&&u.ffc.form.data.postcodes.length>0&&!r&&u.searchNow();r&&f&&(u.ffc.form.data.dealerId=null,u.ffc.form.data.dealerName=null,u.loadBranches(t));r&&!f&&(u.ffc.form.data.dealerId=i,u.ffc.form.data.dealerName=null)})};u.deselectDealer=function(){u.ffc.form.data.dealerName=null};u.selectDealer=function(n){var r=$(document).scrollTop(),t=$("#"+n).parents(".lx-form__find-dealer-js").offset().top,i;r>t&&TweenLite.to(window,.5,{scrollTo:{y:t},ease:Power2.easeOut});try{i=n.replace("option-","");u.ffc.form.data.dealerName=u.ffc.form.dealers.find(function(n){return n.dealerCode==i}).dealerName}catch(f){(console.error||console.log)(f)}};u.loadBranches=function(n){u.ffc.form.dealersLoading=!0;f.setParam("dealerID",n);f.setParam("type","Sales");f.GetDealerBranches()};u.dealerSearch=function(n){u.ffc.form.data.postcodes=[];u.ffc.form.data.postcodes[0]=n;u.searchNow()};u.$on("dealer-search-results-received",function(n,t){u.ffc.form.dealersLoading=!1;u.ffc.form.dealers=t.Data;u.checkDealersLoaded()});u.checkDealersLoaded=function(){var n=u.ffc.form.dealers.find(function(n){return n.dealerCode==u.ffc.form.data.dealerId});n||(u.ffc.form.data.dealerId=null);u.ffc.form.dealers.length==1&&(u.ffc.form.data.dealerId=u.ffc.form.dealers[0].dealerCode)};u.searchNow=function(){u.ffc.form.dealersLoading=!0;n.$broadcast("visitor-details-change-autocomplete",u.ffc.form.data.postcodes[0].data);f.setParam("postCode",u.ffc.form.data.postcodes[0].data.postCode);f.setParam("suburb",u.ffc.form.data.postcodes[0].data.suburb);f.setParam("type","Sales");f.GetResults()};u.getData=function(){var n=o.getUtmParameters(),t=null;return u.ffc.form.data.postcodes.length>0&&u.ffc.form.data.postcodes[0].text&&(t=parseInt(u.ffc.form.data.postcodes[0].text.split(" ").reverse()[0])),{Model:u.ffc.form.data.carmodel,EngineVariant:u.ffc.form.data.enginevariant,DealerId:u.ffc.form.data.dealerId,ContextDealerSiteId:u.ffc.form.data.contextDealerSiteId,FirstName:u.ffc.form.data.firstname,LastName:u.ffc.form.data.lastname,Email:u.ffc.form.data.email,Phone:u.ffc.form.data.phone,PreferredContactMethod:u.ffc.form.data.prefer,PlanToPurchase:u.ffc.form.data.purchasedelay,VehicleTypeOwned:u.ffc.form.data.currentmake,Captcha:u.ffc.form.data.captcha,Subscribe:u.ffc.form.data.subscribe,UtmSource:n.source,UtmMedium:n.medium,UtmCampaign:n.campaign,UtmContent:n.content,Postcode:t,DealerName:u.ffc.form.data.dealerName}};n.$on("vehicle-preference-change",function(n,t){u.ffc.form.data.carmodel=t.model;u.ffc.form.data.enginevariant=t.engineVariant});n.$on("submit-test-drive-form",function(){var r=u.getData();h.attachEloquaFields(r);u.ffc.form.submitting=!0;i({method:"POST",url:t("formatArgs")(Lexus.API.FormSubmission.TestDrive,[Lexus.ID.Site]),data:r}).then(function(n){n.data.Status=="Success"?u.submissionPass(n.data):u.submissionFail(n.data)},function(n){u.submissionFail(n.data)}).finally(function(){n.$broadcast("form-result")})});u.submissionPass=function(){u.ffc.form.completed=!0;u.ffc.form.failed=!1;u.ffc.form.submitting=!1;r.state("TestDriveForm=Pass");s.ShowResult(u.successContent[0]);n.$broadcast("gtm-form-success","Test Drive");n.$broadcast("visitor-details-session-change",u.getData())};u.submissionFail=function(n){u.ffc.form.failed=!0;u.ffc.form.errors=n.Data;u.ffc.form.submitting=!1;u.ffc.form.completed=!0;r.state("TestDriveForm=Fail");s.ShowResult(u.failureContent[0]);console.error(n.ErrorMessage)}}return c.$inject=["$scope"],{scope:!0,restrict:"A",controller:c,controllerAs:"ffc",bindToController:!0,link:function(n,t){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure")}}}]);angular.module("Lexus.Directives").directive("lxFormsUpdateDetail",["$window","$timeout","$filter","$http","$location",function(){function n(n,t,i,r,u,f,e,o,s,h,c,l){var a=this;n.init=function(t){n.ffc.form={submitting:!1,completed:!1,errors:!1,data:{subscribe:!1,firstname:"",lastname:"",address:"",postcodes:[],email:"",phonetype:"",updatetype:"",phone:"",prefer:"email",captcha:"",vin:"",registration:"",requesttype:""}};n.ffc.form.data.updatetype=t};o.$on("submit-update-detail-form",function(){var r=n.getData();t({method:"POST",url:i("formatArgs")(Lexus.API.FormSubmission.UpdateDetails,[Lexus.ID.Site]),data:r}).then(function(t){t.data.Status=="Success"?n.submissionPass(t.data):n.submissionFail(t.data)},function(t){n.submissionFail(t.data)}).finally(function(){o.$broadcast("form-result")})});o.$on("vin-change",function(){if(!n.ffc.form.data.vin){o.$broadcast("vin-lookup-success");return}var t=n.getData();n.ffc.form.submitting=!0;h.post(i("formatArgs")(Lexus.API.Lookup.VINLookupTakata,[Lexus.ID.Site]),n.getVinData()).then(function(n){n.Status=="Success"?o.$broadcast("vin-lookup-success"):o.$broadcast("vin-lookup-failed")},function(){o.$broadcast("vin-lookup-failed")})});n.getData=function(){var t=l.splitAutoCompleteResult(n.ffc.form.data.postcodes[0].text);return{UpdateType:n.ffc.form.data.updatetype,FirstName:n.ffc.form.data.firstname,LastName:n.ffc.form.data.lastname,Email:n.ffc.form.data.email,Phone:n.ffc.form.data.phone,StreetAddress:n.ffc.form.data.address,Postcode:t.postCode,PhoneType:n.ffc.form.data.phonetype,PreferredContactMethod:n.ffc.form.data.prefer,Captcha:n.ffc.form.data.captcha,Vin:n.ffc.form.data.vin,Registration:n.ffc.form.data.registration,StateRegistered:n.ffc.form.data.requesttype,Subscribe:n.ffc.form.data.subscribe}};n.getVinData=function(){return{Vin:n.ffc.form.data.vin}};n.submissionPass=function(){n.ffc.form.completed=!0;n.ffc.form.failed=!1;n.ffc.form.submitting=!1;e.state("UpdateDetails=Pass");c.ShowResult(n.successContent[0]);o.$broadcast("gtm-form-success","Update Details");o.$broadcast("visitor-details-session-change",n.getData())};n.submissionFail=function(t){n.ffc.form.failed=!0;n.ffc.form.errors=t.Data;n.ffc.form.submitting=!1;n.ffc.form.completed=!0;e.state("UpdateDetails=Fail");c.ShowResult(n.failureContent[0]);console.error(t.ErrorMessage)}}return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location","$rootScope","vcRecaptchaService","API","FormsService","UserPreferencesService"],{scope:!0,restrict:"A",controller:n,controllerAs:"ffc",bindToController:!0,link:function(n,t){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure")}}}]);angular.module("Lexus.Directives").directive("lxGoogleMap",["$window","$timeout","$filter","$http",function(n,t){function i(){var n=this}return i.$inject=["$scope","$http","$filter","$timeout","$window","$interval"],{scope:!0,restrict:"A",controller:i,controllerAs:"gm",bindToController:!0,link:function(i,r,u){function e(n,t){var r={lat:Number(t.lat),lng:Number(t.lng)},i=new google.maps.Map(n,{center:r,zoom:13}),u,f;i.setOptions({styles:s,zoomControl:!0,mapTypeControl:!1,scaleControl:!1,streetViewControl:!0,rotateControl:!1,fullscreenControl:!1});google.maps.event.trigger(i,"resize");u=t.iconAnchorX&&t.icon?{url:t.icon,size:new google.maps.Size(t.iconWidth,t.iconHeight),origin:new google.maps.Point(t.iconOriginX,t.iconOriginY),anchor:new google.maps.Point(t.iconAnchorX,t.iconAnchorY)}:t.icon?t.icon:"";f=new google.maps.Marker({position:r,map:i,title:t.dealername,icon:u})}function o(n){var t,i;return!n||1!==n.nodeType?!1:(i=document.documentElement,t=n.getBoundingClientRect(),!!t&&t.bottom>=0&&t.right>=0&&t.top<=i.clientHeight&&t.left<=i.clientWidth)}var s=[{featureType:"all",elementType:"geometry.fill",stylers:[{color:"#d7d3c6"},{saturation:"0"}]},{featureType:"administrative",elementType:"all",stylers:[{color:"#f0eee7"}]},{featureType:"administrative",elementType:"geometry",stylers:[{color:"#d7d3c6"}]},{featureType:"administrative",elementType:"labels.text.fill",stylers:[{color:"#232635"}]},{featureType:"administrative",elementType:"labels.icon",stylers:[{color:"#ca4b19"}]},{featureType:"administrative.country",elementType:"all",stylers:[{color:"#d7d3c6"}]},{featureType:"landscape",elementType:"all",stylers:[{color:"#d7d3c6"}]},{featureType:"landscape.man_made",elementType:"geometry.fill",stylers:[{color:"#d7d3c6"}]},{featureType:"landscape.man_made",elementType:"labels.text.fill",stylers:[{color:"#313649"}]},{featureType:"landscape.natural.landcover",elementType:"geometry.fill",stylers:[{color:"#d7d3c6"}]},{featureType:"landscape.natural.landcover",elementType:"labels.text.fill",stylers:[{color:"#313649"}]},{featureType:"landscape.natural.terrain",elementType:"geometry.fill",stylers:[{color:"#d7d3c6"}]},{featureType:"poi",elementType:"all",stylers:[{visibility:"off"},{color:"#ca4b19"}]},{featureType:"road",elementType:"all",stylers:[{saturation:-100},{lightness:45}]},{featureType:"road",elementType:"labels.text.fill",stylers:[{color:"#ffffff"}]},{featureType:"road",elementType:"labels.text.stroke",stylers:[{color:"#f0eee7"}]},{featureType:"road.highway",elementType:"all",stylers:[{visibility:"simplified"}]},{featureType:"road.highway",elementType:"geometry.fill",stylers:[{color:"#f0eee7"}]},{featureType:"road.highway",elementType:"labels.text.fill",stylers:[{color:"#313649"}]},{featureType:"road.highway",elementType:"labels.text.stroke",stylers:[{color:"#f0eee7"}]},{featureType:"road.arterial",elementType:"geometry.fill",stylers:[{color:"#f0eee7"}]},{featureType:"road.arterial",elementType:"labels.text.fill",stylers:[{color:"#313649"}]},{featureType:"road.arterial",elementType:"labels.text.stroke",stylers:[{color:"#f0eee7"}]},{featureType:"road.arterial",elementType:"labels.icon",stylers:[{visibility:"off"}]},{featureType:"road.local",elementType:"geometry.fill",stylers:[{color:"#e4e1d7"}]},{featureType:"road.local",elementType:"geometry.stroke",stylers:[{visibility:"simplified"},{color:"#f0eee7"}]},{featureType:"road.local",elementType:"labels.text.fill",stylers:[{color:"#313649"}]},{featureType:"road.local",elementType:"labels.text.stroke",stylers:[{color:"#f0eee7"}]},{featureType:"transit",elementType:"all",stylers:[{visibility:"off"},{color:"#beb4b2"}]},{featureType:"transit",elementType:"labels.icon",stylers:[{visibility:"off"}]},{featureType:"transit.station.rail",elementType:"all",stylers:[{visibility:"off"}]},{featureType:"water",elementType:"all",stylers:[{color:"#313649"},{visibility:"on"}]}],f;o(r[0])?(e(r[0],u),i.loaded=!0):(i.loaded=!1,f=!0,angular.element(n).bind("scroll",function(){f&&(f=!1,t(function(){!i.loaded&&o(r[0])&&(e(r[0],u),i.loaded=!0);f=!0},2e3))}))}}}]);angular.module("Lexus.Directives").directive("buttonClick",[function(){return function(n,t){$(t).click(function(n){n.preventDefault()})}}]).directive("runOnBlur",[function(){return function(n,t,i){t.blur(function(){angular.isDefined(i.runOnBlur)&&n.$apply(function(){n.$eval(i.runOnBlur)})})}}]).directive("onFinishRender",["$timeout",function(n){return{restrict:"A",link:function(t){t.$last===!0&&n(function(){t.$emit("ngRepeatFinished")})}}}]).directive("enterPress",[function(){return function(n,t,i){t.bind("keydown keypress",function(t){t.which===13&&(n.$apply(function(){n.$eval(i.enterPress)}),t.preventDefault())})}}]).directive("backImg",function(){return function(n,t,i){var r=i.backImg;t.css("background-image","url("+r+")")}}).directive("forceFocusOnClick",[function(){return function(n,t){t.bind("click",function(n){this!=document.activeElement&&(n.stopPropagation(),this.focus())})}}]).directive("lxSmallLoader",[function(){return{scope:{showLoader:"=",transition:"@"},restrict:"AE",transclude:!0,template:'<div class="lx-small-loader" data-ng-class="{\'is-loading\': showLoader, \'lx-small-loader--with-transition\': transition}"><div class="lx-small-loader__container" data-ng-class="{\'lx-small-loader__transitionable\': transition}" data-ng-show="showLoader">'+new Array(13).join('<i class="lx-small-loader__circle">•<\/i>')+'<\/div><div data-ng-class="{\'lx-small-loader__transitionable\': transition}" data-ng-transclude data-ng-hide="showLoader"><\/div><\/div>'}}]).directive("mouseDetected",["$rootScope","MouseDetectionService",function(n){return{restrict:"A",scope:{onMouseDetected:"&mouseDetected"},link:function(t){n.$on("did-detect-mouse",function(){t.onMouseDetected();t.$apply()})}}}]).directive("identifyBrowser",["$window",function(){return function(n,t){function f(){var n=window.navigator.userAgent,i=n.indexOf("MSIE "),u,r,t;return i>0?parseInt(n.substring(i+5,n.indexOf(".",i)),10):(u=n.indexOf("Trident/"),u>0)?(r=n.indexOf("rv:"),parseInt(n.substring(r+3,n.indexOf(".",r)),10)):(t=n.indexOf("Edge/"),t>0)?parseInt(n.substring(t+5,n.indexOf(".",t)),10):!1}var i="Unknown",r=f(),u=0;r===!1?i="Unknown":r>=12?(i="ms-edge",u=r):(i="ms-ie",u=r);i!="Unknown"&&angular.element(t).addClass(i)}}]).directive("scrollTopOnFocus",["$window",function(n){return function(t,i){i.bind("click",function(t){var r=$(i[0]).offset().top;t.preventDefault();n.innerWidth<=Lexus.Breakpoint.ExtraSmall&&TweenLite.to(window,1,{scrollTo:{y:r,x:0},ease:Power4.easeOut})})}}]).directive("scrollToIdOnClick",[function(){return function(n,t,i){t.bind("click",function(){var n=i.scrollDuration!=null?i.scrollDuration:2,t=$("#"+i.scrollTarget);t.length&&TweenMax.to(window,n,{scrollTo:{y:"#"+i.scrollTarget,offsetY:i.scrollOffset,ease:Power4.easeOut,autoKill:!1}})})}}]),function(){"use strict";function n(){return{scope:{cssClass:"@"},restrict:"A",transclude:!0,template:'<div class="{{cssClass}}" ng-class="{\'is-open\': isMouse && isMouseInside || !isMouse && isToggled}" mouse-detected="isMouse = true" ng-click="isToggled = !isToggled" ng-mouseenter="isMouseInside = true" ng-mouseleave="isMouseInside = false"><ng-transclude><\/ng-transclude><\/div>'}}angular.module("Lexus.Directives").directive("lxImageDisclaimer",n)}();angular.module("Lexus.Directives").directive("lazyLoadImages",[function(){return{link:function(n,t){function r(){var n=t.find(".b-lazy");angular.forEach(n,function(n){var t=angular.element(n),i=t.data("src"),u=t.data("src-mw"),f=t.data("src-q"),h=Math.round(Lexus.Breakpoint.ExtraExtraSmall*1.5),e=Math.round(Lexus.Breakpoint.ExtraSmall*1.5),o=Math.round(Lexus.Breakpoint.Small*1.5),s=Math.round(Lexus.Breakpoint.Medium),r="";angular.isDefined(u)&&(r+="mw="+u,e=o=s=u);angular.isDefined(f)&&(angular.isDefined(u)&&(r+="&"),r+="q="+f);r&&t.attr("data-src",i+"?"+r);t.attr("data-src-xxs",i+"?mw="+h+"&q=95").attr("data-src-xs",i+"?mw="+e+"&q=95").attr("data-src-sm",i+"?mw="+o+"&q=95").attr("data-src-md",i+"?mw="+s+"&q=95")})}function u(){i=new Blazy({offset:600,breakpoints:[{width:Lexus.Breakpoint.ExtraExtraSmall,src:"data-src-xxs"},{width:Lexus.Breakpoint.ExtraSmall,src:"data-src-xs"},{width:Lexus.Breakpoint.Small,src:"data-src-sm"},{width:Lexus.Breakpoint.Medium,src:"data-src-md"}]})}var f=angular.element(window),i;r();u();n.$on("broadcast.lazyLoad",function(){r();i.revalidate()});n.$on("broadcast.lazyLoadRevalidate",function(){i.revalidate()});f.on("resize",function(){i.revalidate()})}}}]).directive("initLazyLoadImage",["$rootScope","$timeout",function(n,t){return{link:function(i,r){r.on("click",function(){t(function(){n.$broadcast("broadcast.lazyLoad")},300)})}}}]);angular.module("Lexus.Directives").directive("lxModal",[function(){function n(n,t,i,r){function f(n,t){return n.modalIsOpen=t,n}function e(n,t){return n[0]+t+n[1]}function o(){var n=document.createElement("div"),i,t,r,u;n.style.visibility="hidden";n.style.width="100px";n.style.msOverflowStyle="scrollbar";document.body.appendChild(n);i=n.offsetWidth;n.style.overflow="scroll";t=document.createElement("div");t.style.width="100%";n.appendChild(t);r=t.offsetWidth;n.parentNode.removeChild(n);u=i-r;document.styleSheets[0].insertRule(".is-locked { padding-right:"+u+"px;}",document.styleSheets[0].cssRules.length)}var u=this;u=f(u,!1);n.modalContent="";n.modalClose=function(){u.isClosing="is-closing";u=f(u,!1);t(function(){n.modalContent=""},250)};n.modalOpen=function(n){u=f(u,!0);n&&n(event)};r.$on("open-modal-window",function(t,r){u.variantClass=r.variant;u.closeOnEvent=r.variant==Lexus.ModalVariant.Spinner;r.wrapper&&(r.content=e(r.wrapper,r.content));n.modalContent=i.trustAsHtml(r.content);n.modalOpen()});r.$on("close-modal-window",function(){n.modalClose()});window.innerWidth>480&&o()}return n.$inject=["$scope","$timeout","$sce","$rootScope"],{scope:!0,restrict:"A",controller:n,controllerAs:"modal",bindToController:!0,link:function(){}}}]);angular.module("Lexus.Directives").directive("lxParallax",["$compile","$window",function(n,t){function i(){return t.innerWidth<Lexus.Breakpoint.Small}function r(n,t){var i=this;n.animatorX="";n.animatorY="";n.customAnimator="";n.initXY=function(i,r,u,f){n.stepSpeed=i;n.triggerOffsetY=f;n.animatorFunc=t.createAnimator(i,r,u,f)};n.initScrollFade=function(t,i){n.scrollFade=function(n){var u=window.innerHeight,f=u*t,e=u*i,r=((n.elemY+e)/f).toFixed(2);return r=r<=0?0:r,r=r>=1?1:r,{opacity:r}}}}return r.$inject=["$scope","parallaxHelper"],{scope:{stepSpeed:"@animStepSpeed",minX:"@animMinX",maxX:"@animMaxX",minY:"@animMinY",maxY:"@animMaxY","case":"@animCase",enabledMobile:"@animEnabledMobile",triggerOffsetY:"@animTriggerOffsetY"},restrict:"A",controller:r,controllerAs:"pc",bindToController:!0,transclude:!0,template:function(n,t){if(!i()||i()&&t.animEnabledMobile==="1")switch(t.animCase){case"x":return'<div data-du-parallax="true" x="animatorFunc"><ng-transclude/><\/div>';case"y":return'<div data-du-parallax="true" y="animatorFunc"><ng-transclude/><\/div>';case"fade":return'<div data-du-parallax="true" custom="scrollFade"><ng-transclude/><\/div>';case"custom":return"<ng-transclude/>"}else return"<ng-transclude/>"},link:function(n,t,r){if(!i()||i()&&r.animEnabledMobile==="1")switch(n.pc.case){case"x":n.initXY(+n.pc.stepSpeed,+n.pc.maxX,+n.pc.minX,+n.pc.triggerOffsetY);break;case"y":n.initXY(+n.pc.stepSpeed,+n.pc.maxY,+n.pc.minY,+n.pc.triggerOffsetY);break;case"fade":n.initScrollFade(+n.pc.stepSpeed,+n.pc.triggerOffsetY)}}}}]),function(){"use strict";angular.module("Lexus.Directives").directive("lxSearchResults",["$window","$timeout","$filter","$http","$location",function(){function n(n,t,i,r,u,f,e){var o=this;n.init=function(){n.src={searchTerm:e.search().q}};n.runSearch=function(){u.location.href=Lexus.URI.SearchResultsPage+"?q="+n.src.searchTerm}}return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location"],{scope:!0,restrict:"A",controller:n,controllerAs:"src",bindToController:!0,link:function(){}}}])}();angular.module("Lexus.Directives").directive("lxMobileCarousel",[function(){function n(n){function i(n){return n.mainClass=t.showingClass[2]+n.isShowing,n.firstSecClass=r(n.isShowing,n.showingClass[0]),n.secondSecClass=f(n.isShowing,n.showingClass),n.thirdSecClass=u(n.isShowing,n.showingClass[1]),n}function r(n,t){var i="";return n>1&&(i=t),i}function u(n,t){var i="";return n<3&&(i=t),i}function f(n,i){var r="";return n===3?r=i[0]:t.isShowing===1&&(r=i[1]),r}var t=this;n.init=function(n){t.isShowing=2;n&&(t.isShowing=n);t.showingClass=["is-showing-right","is-showing-left","is-showing-"];t=i(t)};n.prevSec=function(){t.isShowing>1&&t.isShowing--;t=i(t)};n.nextSec=function(){t.isShowing<3&&t.isShowing++;t=i(t)}}return n.$inject=["$scope"],{scope:!0,restrict:"A",controller:n,controllerAs:"mc",bindToController:!0,link:function(){}}}]);angular.module("Lexus.Directives").directive("lxStickToTop",["$window",function(n){return{link:function(t,i,r){function s(n){var t=n.get(0).getBoundingClientRect(),i=t.bottom-t.top,r=parseInt(n.css("margin-top").match(/([0-9]+(\.[0-9])?)/g)[0],10),u=parseInt(n.css("margin-bottom").match(/([0-9]+(\.[0-9])?)/g)[0],10);return i+r+u}function a(n){e.css({height:n?s(i)+"px":"0",visibility:n?"":"hidden"});o&&o.css({height:n?u.topBeforeFixed+"px":"0",visibility:n?"":"hidden"})}function v(t){var u=$("html");u.css("overflow-anchor","none");n.clearTimeout(l);t.isFixed?(i.css({position:"fixed",top:t.topWhenFixed,transform:"translate3d(0,0,0)"}),i.addClass(r.lxStickyHeaderClass||"lx-sticky-header")):(i.css({position:"",top:0,transform:"translate3d(0,0,0)"}),i.removeClass(r.lxStickyHeaderClass||"lx-sticky-header"));a(t.isPlaceholderTopOutsideViewport||t.isFixed,t);l=n.setTimeout(function(){u.css("overflow-anchor","")},100)}function f(){var t=$(".lx-stick-to-top-placeholder").toArray(),o=t.slice(0,t.indexOf(e.get(0))),f=0;angular.forEach(o,function(n){f+=s($(n))});var c=e.get(0).getBoundingClientRect().top,l=s(i),n=l-p;i.hasClass(r.lxStickyHeaderClass)||(u.topBeforeFixed=n);i.hasClass(r.lxStickyHeaderClass)&&(n=u.topBeforeFixed);u.isPlaceholderTopOutsideViewport=-c>n;u.isFixed=u.isPlaceholderTopOutsideViewport;u.topWhenFixed=f;h&&$.extend(u,h);v(u)}function c(n){h=n===null||typeof n=="undefined"?undefined:n;f()}function y(){u={};i.data("lxStickToTop",w);e=$('<div class="'+(r.lxStickToTopPlaceholderClass||"")+' lx-stick-to-top-placeholder"><\/div>');i.before(e);(r.lxUsePusher||!0)==!0&&(o=$('<div class="lx-stick-to-top-pusher"><\/div>'),i.after(o));var n=$(window);n.on("scroll",f);n.on("resize",f);f()}var u,h,l=null,p=50,w={setRepaintOverrides:c,clearRepaintOverrides:function(){c(null)}},e,o;y();t.$on("$destroy",function(){e.remove();var n=$(window);n.off("scroll",f);n.off("resize",f)})}}}]);angular.module("Lexus.Directives").directive("lxNumberAnimator",[function(){function n(n){if(n.roundingModel=n.roundingModel||"floor",n.validRoundingModels.indexOf(n.roundingModel)==-1){var t="Invalid rounding model '"+n.roundingModel+"' - value should be 'floor', 'round' or 'ceiling'";console.error?console.error(t):console.log("ERROR: "+t);n.roundingModel="floor"}n.animatedValue=0;n.interimValue={value:0};n.$watch("source",function(t){typeof t=="number"&&TweenLite.to(n.interimValue,1,{ease:Expo.easeOut,value:t,onUpdate:function(){var t;t=n.roundingModel==="floor"?Math.floor(n.interimValue.value):n.roundingModel==="ceiling"?Math.ceil(n.interimValue.value):Math.round(n.interimValue.value);n.animatedValue=t.toLocaleString("en",{useGrouping:!0});n.$digest()}})})}return{scope:{source:"<ngModel",roundingModel:"@round"},restrict:"E",template:"{{animatedValue}}",link:function(t,i,r){t.source=0;t.validRoundingModels=["floor","round","ceiling"];n(t,i,r)}}}]),function(){"use strict";function n(n,t){function i(i){var r=this;i.init=function(){var r,u;i.ds={loading:!0};r=n.getLexusDealer();i.rdl.data.hasPreferredDealer=r&&r.dealerID;!i.rdl.data.isDealerSite&&i.rdl.data.hasPreferredDealer?(i.rdl.data.dealerState=r.dealerState,u=t.DeconstructCompositeID(r.dealerID),i.rdl.data.dealerID=u.dealerID,i.rdl.data.dealerToShow=!0,t.setParam("dealerID",i.rdl.data.dealerID),t.setParam("branchCode",i.rdl.data.branchCode||u.branchCode),t.GetDealerBranch()):i.rdl.data.isDealerSite&&!i.rdl.data.isMultiBranch?(t.setParam("dealerID",i.rdl.data.dealerID),t.setParam("dealerState",i.rdl.data.dealerState),t.setParam("type",i.rdl.data.serviceTypeToShow),i.rdl.data.dealerToShow=!0,t.GetDealerBranches()):i.rdl.data.isDealerSite&&i.rdl.data.isMultiBranch&&(t.setParam("dealerID",i.rdl.data.dealerID),t.setParam("type",i.rdl.data.serviceTypeToShow),i.rdl.data.dealerToShow=!0,t.GetDealerBranches())};i.checkServiceType=function(n){var t="";return typeof n=="string"?t=n:typeof n=="object"&&n!=null&&(t=n.serviceType),console.log("$scope.checkServiceType: ",t),t.toLowerCase().match(/^service$/)?!0:!1};i.$on("dealer-search-results-received",function(n,t){var r=t.Data;i.ds.results=r;i.ds.showChangeDealer=!i.rdl.data.isDealerSite;i.ds.loading=!1});i.$on("dealer-search-result-received",function(n,t){var r=[];r.push(t.Data);i.ds.results=r;i.ds.showChangeDealer=!i.rdl.data.isDealerSite;i.ds.loading=!1})}return i.$inject=["$scope"],{scope:!0,restrict:"A",controller:i,controllerAs:"rdl",bindToController:!0,link:function(n,t,i){n.rdl={};n.rdl.data={};n.rdl.data.isDealerSite=i.isDealerSite==="true";n.rdl.data.dealerID=i.dealerId;n.rdl.data.dealerState=i.dealerState;n.rdl.data.dealerToShow=!1;n.rdl.data.isMultiBranch=i.dealerIsMultiBranch==="true";n.rdl.data.branchCode=i.dealerBranchCode;n.rdl.data.serviceTypeToShow=i.serviceTypeToShow;n.init()}}}angular.module("Lexus.Directives").directive("lxRangeDealerLookup",n);n.$inject=["UserPreferencesService","DealersService"]}(),function(){"use strict";function n(n,t,i){function u(n){for(var u=null,i=0;i<r.length;i++)r[i].engineVariant===n?(r[i].selected=!0,u=i,t.$broadcast("vehicle-preference-change",{model:r[i].model,engineVariant:r[i].engineVariant,grade:r[i].grade})):r[i].selected=!1;return t.$broadcast("broadcast.lazyLoadRevalidate"),u}function e(t,f,e){var c,l,h,s;for(r=angular.fromJson(e.engineVariants),o=e.showSeats=="true",s=0;s<r.length;s++)r[s].selected=!1;if(c=i.getLexusVehicle(n.search()),c){for(l=null,h=null,s=0;s<r.length;s++)if(r[s].engineVariant===c.engineVariant){l=c.engineVariant;break}h=l?u(c.engineVariant):u(r[0].engineVariant)}else h=u(r[0].engineVariant);h!=null&&t.setFilterKey(r[h].seats,r[h].engineVariant)}function f(n){var t=this;n.select=u;n.isSelected=function(n){for(var t=0;t<r.length;t++)if(r[t].engineVariant===n)return r[t].selected};n.setFilterKey=function(t,i){n.filterKey=t;n.isSelected(i)||n.select(i)};n.displayTab=function(t){return t==n.filterKey}}var r=null,o=!1;return f.$inject=["$scope"],{scope:!0,restrict:"A",controller:f,controllerAs:"revModal",link:e}}angular.module("Lexus.Directives").directive("lxRangeEngineVariant",n);n.$inject=["$location","$rootScope","UserPreferencesService"]}();angular.module("Lexus.Directives").directive("lxLifestyleEngineVariant",function(){function n(n,t,i,r){function f(t){var i,r;n.selectedVariant=t.name;n.selectedVariantDescription=t.description;h();i=1200;u.width()<=Lexus.Breakpoint.ExtraExtraSmall?i=Lexus.Breakpoint.ExtraExtraSmall:u.width()<=Lexus.Breakpoint.ExtraSmall?i=Lexus.Breakpoint.ExtraSmall:u.width()<=Lexus.Breakpoint.Small&&(i=Lexus.Breakpoint.Small);r=t.image+"?q=95&w="+i;n.selectedVariantImage=r}function o(t){var i=n.itemWidth*t;TweenLite.to(n.lifestyleSlider,1,{scrollTo:{x:i},ease:n.easingFunction})}function s(t){var r=n.lifestyleTabs.find(".lx-tabs__item"),i=0;t>0&&(i=r[t].offsetLeft-n.tabContainerWidth*Lexus.Tabs.CenterFactor);TweenLite.to(n.lifestyleTabs,1,{scrollTo:{x:i},ease:n.easingFunction})}function h(){r.$broadcast("vehicle-preference-change",{model:"UX",engineVariant:n.selectedVariant})}function e(n){n&&r.$broadcast("personalization-change",{lifestyle:{name:n.name,image:n.image}})}n.lifestyles=[];n.selectedLifestyleIndex=0;n.variants=[];n.selectedVariant=null;n.selectedVariantImage=null;n.selectedVariantDescription=null;this.addLifeStyle=function(t){n.lifestyles.push(t);n.selectedLifestyleIndex==0&&e(n.lifestyles[n.selectedLifestyleIndex])};this.setSelectedLifestyle=function(t){if(t>=0&&t<n.lifestyles.length){s(t);o(t);n.selectedLifestyleIndex=t;var i=n.lifestyles[n.selectedLifestyleIndex];e(i)}};this.addVariant=function(t){n.variants.push(t);n.selectedVariant==null&&f(t)};this.setSelectedVariant=function(t){var r=i("filter")(n.variants,{name:t}),u=r!=null&&r.length>0?r[0]:null;u!=null&&f(u)};this.prevLifestyle=function(){this.setSelectedLifestyle(n.selectedLifestyleIndex-1)};this.nextLifestyle=function(){this.setSelectedLifestyle(n.selectedLifestyleIndex+1)};n.$on("variant-selected",function(t,i){var r=n.variants[i.selectedVariantIndex];r!=null&&f(r)});var u=angular.element(window);u.resize(function(){n.itemWidth=n.lifestyleSlider.find(".lx-lifestyle-engine-variant__lifestyle-image").first().width();n.tabContainerWidth=n.lifestyleTabs.first().width()})}return n.$inject=["$scope","$attrs","$filter","$rootScope"],{scope:!0,restrict:"A",controller:n,controllerAs:"lev",bindToController:!0,link:function(n,t){n.lifestyleSlider=t.find(".lx-lifestyle-engine-variant__lifestyles");n.itemWidth=n.lifestyleSlider.find(".lx-lifestyle-engine-variant__lifestyle-image").first().width();n.lifestyleTabs=t.find(".lx-lifestyle-engine-variant__lifestyle-selector__inner");n.tabContainerWidth=n.lifestyleTabs.first().width()}}}).directive("lxLifestyle",["$window","$timeout","$filter","$http","$location","$rootScope",function(){return{scope:!0,restrict:"A",require:"^lxLifestyleEngineVariant",link:function(n,t,i,r){r.addLifeStyle(i)}}}]).directive("lxVariant",["$window","$timeout","$filter","$http","$location","$rootScope",function(){return{scope:!0,restrict:"A",require:"^lxLifestyleEngineVariant",link:function(n,t,i,r){r.addVariant(i)}}}]);angular.module("Lexus.Directives").directive("lxRangeExploreBodyTypeSelector",function(){function n(n,t,i){var r=this;n.init=function(){n.erbts.bodyTypeSelectors=[];n.highlightBox(angular.element(".lx-explore-range__body-type-item:eq(0)"))};n.addBodyType=function(t,i){n.erbts.bodyTypeSelectors[t]={};n.erbts.bodyTypeSelectors[t].bodyType=i;n.erbts.bodyTypeSelectors[t].active=t==0?!0:!1};n.switchActiveBodyType=function(t,r){n.highlightBox(angular.element(t.currentTarget));angular.forEach(n.erbts.bodyTypeSelectors,function(n,t){t==r?(n.active=!0,i.$broadcast("filter-body-type",n.bodyType)):n.active=!1})};n.highlightBox=function(n){var t=n,i=t.offset().left-t.parent().offset().left;angular.element(".lx-explore-range__body-type-box").css({width:t[0].clientWidth,transform:"translate3d("+i+"px,0,0)"});angular.element(".lx-explore-range__body-type-box").css({opacity:1})};angular.element(t).bind("resize",function(){n.highlightBox(angular.element(".lx-explore-range__body-type-item.is-active"))});i.$on("set-body-type",function(t,i){angular.forEach(n.erbts.bodyTypeSelectors,function(t,r){t.bodyType==i&&n.switchActiveBodyType(r)})})}return n.$inject=["$scope","$window","$rootScope"],{scope:!0,restrict:"A",controller:n,controllerAs:"erbts",bindToController:!0,link:function(){}}}).directive("lxRangeExploreHero",["$window","$timeout","$filter","$http","$location","$rootScope",function(n,t,i,r,u,f){function e(n){function u(u){t=r.width()<=Lexus.Breakpoint.ExtraExtraSmall?Lexus.Breakpoint.ExtraExtraSmall:r.width()<=Lexus.Breakpoint.ExtraSmall?Lexus.Breakpoint.ExtraSmall:r.width()<=Lexus.Breakpoint.Small?Lexus.Breakpoint.Small:Lexus.Breakpoint.Medium;e!=t&&(i="?q=95&w="+t,e=t,t<=Lexus.Breakpoint.Small&&(i=""));n.resolvedImage!=u+i&&(i==""?n.resolvedimage=null:n.resolvedImage=u+i)}var o=this,r=angular.element(window),e=0,t=0,i="",s=angular.element(".lx-explore-range__image-panel").attr("data-background");n.resolvedImage=null;f.$on("change-active-vehicle",function(t,i){n.er.activeVehicle=i;u(i.imageSrc)});r.resize(function(){u(n.er.activeVehicle.imageSrc)});n.init=function(){n.er={activeVehicle:{}}}}return e.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location"],{scope:!0,restrict:"A",controller:e,controllerAs:"er",bindToController:!0,link:function(){}}}]).directive("lxRangeExploreSlider",["$window","$timeout","$filter","$http","$location","$rootScope",function(n,t,i,r,u,f){function e(n,t,i,r,u,f,e,o){var s=this;n.init=function(t,i){n.overscrollPadding=t;n.markerRadius=i;n.carouselTweenTime=1;n.markerTweenTime=1;n.easingFunction=Power2.easeOut;n.sliderItemCollection=[]};n.smoothScrollToIndex=function(t){var i=n.itemWidth*t;i=i+n.overscrollPadding;TweenLite.to(n.carouselSlider,n.carouselTweenTime,{scrollTo:{x:i},ease:n.easingFunction});o.$broadcast("pause-smooth-scroll-to","")};o.$on("pause-smooth-scroll-to",function(){o.pauseSmoothScrollTo=!0;setTimeout(function(){o.pauseSmoothScrollTo=!1},1500)});n.smoothScrollTo=function(t){if(o.pauseSmoothScrollTo!==!0){var i=n.carouselSlider.position().left,r=(t.clientX-i)/n.outerContainerWidth;n.carouselPos=n.maxScrollX*r;TweenLite.to(n.carouselSlider,n.carouselTweenTime,{scrollTo:{x:n.carouselPos},ease:n.easingFunction})}};n.smoothSnapToNearest=function(){var r=n.overscrollPadding,i=n.itemWidth,t=n.carouselPos%i-r,u=n.carouselPos-t,f=n.carouselPos-t+i;t!==0&&(t<i/2?TweenLite.to(n.carouselSlider,n.carouselTweenTime,{scrollTo:{x:u},ease:n.easingFunction}):TweenLite.to(n.carouselSlider,n.carouselTweenTime,{scrollTo:{x:f},ease:n.easingFunction}))};n.setMarkerPosition=function(t){var i=t||0,r;if(!n.activeMarker&&i<10){setTimeout(function(){n.setMarkerPosition(i+1)},100);return}r=Math.round(n.overscrollPadding+n.carouselPos*n.itemWidth+n.itemWidth*.5-n.markerRadius);n.activeMarker.css("left",r+"px")};n.$on("ngRepeatFinished",function(){n.sliderItemCollection[0].style={"margin-left":n.overscrollPadding+"px"};n.sliderItemCollection[n.sliderItemCollection.length-1].style={"margin-right":n.overscrollPadding+"px"};r(function(){o.$broadcast("calculate-widths")},100);n.setMarkerPosition()});this.addSliderItem=function(t){n.sliderItemCollection[t.index]=t;n.sliderItemCollection[t.index].disabled=!1;n.sliderItemCollection[t.index].style={};t.init?(n.carouselPos=parseInt(t.index),n.sliderItemCollection[t.index].active=!0,r(function(){o.$broadcast("change-active-vehicle",t)},100)):n.sliderItemCollection[t.index].active=!1};n.changeActiveVehicleClick=function(t){n.sliderItemCollection[t].disabled&&o.$broadcast("set-body-type","all");n.carouselPos=t;angular.forEach(n.sliderItemCollection,function(n,i){n.active=i==t});n.setMarkerPosition();r(function(){o.$broadcast("change-active-vehicle",n.sliderItemCollection[t])},100)};o.$on("filter-body-type",function(t,i){var f=!1,u;angular.forEach(n.sliderItemCollection,function(n){var t=!(i=="all"||i==n.bodyType);n.disabled=t;t&&n.active&&(n.active=!1,f=!0)});f&&(u=!0,angular.forEach(n.sliderItemCollection,function(t,i){u&&(t.disabled||(t.active=!0,n.smoothScrollToIndex(i),u=!1,r(function(){o.$broadcast("change-active-vehicle",t);n.changeActiveVehicleClick(t.index)},100)))}))})}return e.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location","$rootScope"],{scope:!0,restrict:"A",controller:e,controllerAs:"ers",bindToController:!0,link:function(t,i){f.$on("calculate-widths",function(){t.carouselSlider=i;t.activeMarker=i.find(".lx-explore-range__marker-js");t.$innerContainer=t.carouselSlider.children().first(".lx-explore-range__scroll-container");t.itemWidth=t.$innerContainer.find(".lx-explore-range__subpanel").first().width();t.outerContainerWidth=t.carouselSlider.width();t.maxScrollX=t.$innerContainer.width()-t.outerContainerWidth;(!Modernizr.touchevents||angular.element(n).width()>=Lexus.Breakpoint.Medium)&&(t.carouselSlider.mousemove(function(n){t.smoothScrollTo(n)}),t.carouselSlider.mouseleave(function(n){t.smoothSnapToNearest(n)}));angular.forEach(t.$innerContainer.children(".lx-explore-range__subpanel"),function(n){n.className=n.className})});angular.element(n).bind("resize",function(){f.$broadcast("calculate-widths")})}}}]).directive("lxRangeExploreSliderItem",["$window","$timeout","$filter","$http","$location","$rootScope",function(){return{scope:!0,restrict:"AE",require:"^lxRangeExploreSlider",link:function(n,t,i,r){r.addSliderItem(i)}}}]),function(n){"use strict";function t(t,i,r,u,f,e,o,s,h,c){function l(t){function u(n,i,r){t.rtd.data.engineVariant=i;e.$broadcast("vehicle-preference-change",{model:n,grade:r,engineVariant:i});h()}function h(){t.rtd.featuresByCategoryLoading=!0;s.get(i("formatArgs")(Lexus.API.Lookup.RangeTechDataFeatures,[Lexus.ID.Site,t.rtd.data.engineVariant])).then(function(n){n&&(t.rtd.featuresByCategoryRendering=!0,r(function(){t.rtd.data.featuresByCategory=n.data;t.rtd.featuresByCategoryRendering=!1},1),e.$broadcast("refresh-gtm","Tech Data"),t.rtd.featuresByCategoryLoading=!1)},function(n){c.error(n);t.rtd.featuresByCategoryLoading=!1})}var l=this;t.rtd.urlParameters=f.search();l.apiService=s;t.init=function(){t.rtd=t.rtd||{};var n=o.getLexusVehicle(t.rtd.urlParameters);t.rtd.data={model:o.getLexusVehicle().model?o.getLexusVehicle().model:null,grade:o.getLexusVehicle()?o.getLexusVehicle().grade:null,engineVariant:null,featuresData:null,featuresByCategory:[]};t.rtd.data.engineVariants=[];t.rtd.featuresByCategoryRendering=!1;n&&(t.rtd.data.engineVariant=n.engineVariant);t.rtd.data.engineVariant&&u(t.rtd.data.model,t.rtd.data.engineVariant,t.rtd.data.grade)};t.loadLazyImages=function(){e.$broadcast("broadcast.lazyLoadRevalidate")};t.getActiveClass=function(i,r,u){return(i===0&&(t.defaultTab=r),t.rtd.data.engineVariant===r||!t.rtd.data.engineVariant&&i===0)?(t.defaultTab=r,t.selectedTab===n&&t.updateVehicleSelectionIndex(i,!0),t.selectedTab=i,"active"):(i===u-1&&t.selectedTab===n&&($("#"+t.defaultTab.replace(" ","")).addClass("active"),t.rtd.data.engineVariant=t.defaultTab,t.selectedTab=0,t.updateVehicleSelectionIndex(0,!0)),"")};t.updateVehicleSelectionIndex=function(n){u(t.rtd.data.engineVariants[n].model,t.rtd.data.engineVariants[n].engineVariant,t.rtd.data.engineVariants[n].grade)};t.addEngineVariant=function(n,i,r,u){t.rtd.data.engineVariants[n]={model:i,engineVariant:r,grade:u}};t.findValueByKey=function(n,t){if(t.specs)return t.specs[n]}}return l.$inject=["$scope"],{scope:!0,restrict:"A",controller:l,controllerAs:"rtd",bindToController:!0}}angular.module("Lexus.Directives").directive("lxRangeTechData",t);t.$inject=["$http","$filter","$timeout","$interval","$location","$rootScope","UserPreferencesService","API","$sce","$log"]}();angular.module("Lexus.Directives").directive("lxRepairerLookup",["$rootScope","RepairersService",function(){function n(n,t,i,r){var u=this;n.init=function(){n.ds={state:"nsw",results:[],loading:!1};n.repairerSearch()};n.repairerInit=function(){};n.repairerSearch=function(){n.ds.loading=!0;r.setParam("state",n.ds.state);r.GetResults()};n.$on("repairers-search-results-received",function(t,i){n.ds.results=i.Data;n.ds.loading=!1})}return n.$inject=["$scope","$rootScope","$http","RepairersService","AddressSuggestService","UserPreferencesService"],{scope:!0,restrict:"A",controller:n,controllerAs:"dlc",bindToController:!0,link:function(){}}}]);angular.module("Lexus.Directives").directive("lxResponsiveSet",[function(){function n(n){function i(n,t,i){function r(){return t>=window.innerWidth}return r()&&n==="mobile"?i:!r()&&n==="desktop"?i:""}var t=this;t.breakpoint=Lexus.Breakpoint.Small;n.desktopSet=function(n){return i("desktop",t.breakpoint,n)};window.addEventListener("resize",function(){setTimeout(function(){n.$digest()},50)})}return n.$inject=["$scope","$window"],{scope:!0,restrict:"A",controller:n,controllerAs:"rs",bindToController:!0,link:function(){}}}]),function(){function n(){return{replace:!0,scope:{name:"@",label:"@",description:"@",ngModel:"="},template:'<div class="lx-form-text-label lx-form-unsubscribe" for="{{name}}"><input class="lx-form-checkbox" type="checkbox" id="{{name}}" name="{{name}}" ng-model="ngModel"/><label class="lx-form-checkbox-label lx-form-unsubscribe__label" for="{{name}}" data-gtm-label="{{label}}"> {{label}}<\/label><p class="lx-form-unsubscribe__explanation">{{description}}<\/p><\/div>'}}angular.module("Lexus.Directives").directive("lxUnsubscribeQuestion",n)}(),function(){function n(n,t,i,r,u,f){function o(n,t,i){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure");n.ffc.form={submitting:!1,completed:!1,failed:!1};n.ffc.formData=JSON.parse(i.formData);n.ffc.fullUnsubscribe=i.fullUnsubscribe==="true"}function e(e){function s(){o.form.failed=!0;o.form.submitting=!1;o.form.completed=!0;r.ShowResult(e.failureContent[0])}var o=this;e.$on("submit-unsubscribe-marketing-emails-form",function(){var h,c,l;n.attachEloquaFields(o.formData);h=u.search();o.formData.ename=h.ename;o.formData.emailAddress=h.email;o.form.submitting=!0;c="";c=o.fullUnsubscribe?Lexus.API.FormSubmission.UnsubscribeMarketingEmailsOwner:Lexus.API.FormSubmission.UnsubscribeMarketingEmailProspect;l=i("formatArgs")(c,[Lexus.ID.Site]);t({method:"POST",url:l,data:o.formData}).then(function(n){n.data.Status=="Success"?(o.form.completed=!0,o.form.failed=!1,o.form.submitting=!1,f.$broadcast("gtm-form-success","Unsubscribe Marketing Emails"),r.ShowResult(e.successContent[0])):s(n.data)},function(n){s(n.data)}).finally(function(){f.$broadcast("form-result")})})}return e.$inject=["$scope"],{scope:!0,restrict:"A",controllerAs:"ffc",bindToController:!0,controller:e,link:o}}angular.module("Lexus.Directives").directive("lxFormsUnsubscribeMarketingEmails",n);n.$inject=["EloquaService","$http","$filter","FormsService","$location","$rootScope"]}(),function(){"use strict";angular.module("Lexus.Directives").directive("lxBuildPriceEnhancementPack",[function(){function n(n,t,i,r,u,f,e){function y(n,t){var r=u.findEngineVariantInVehicleData(n),i;r&&(i=r.grades.find(function(n){return n.uriName==t}),i&&i.id?(o.gradeObj=i,o.variants=[],u.getVariants(o.engineVariant,i.id,p)):console.error("buildPriceEnhancementPackController cannot load enhancement packs for EngineVariant: "+o.engineVariant+" + Grade: "+o.grade))}function p(t){o.variants=t;c();n.$emit(r.events.enhancementPacksReceived,o.enhancementPack);g()}function c(){if(o.postCode){for(var t=0;t<o.variants.length;t++)o.variants[t].showSpinner=!0;o.disableDiffPricing||r.waitFor.call(n,"bpEnPack.holdPricingCalls",r.waitCondition.ISSTRICTLYFALSE).then(function(){w().then(l,b)})}}function w(){function r(n){return f.setParam("enablePricingByZone",o.enablePricingByZone),f.driveAwayByEnhancementPack(o.gradeObj.id,n.mdmid,o.postCode,o.pricingZone)}for(var i=[],n=0;n<o.variants.length;n++)i.push(r(o.variants[n]));return t.all(i).then(function(n){var t,i;for(o.pricingSuccess=!0,t=0;t<n.length;t++)i=n[t],i.status!="Success"?o.pricingSuccess=!1:i.data&&i.data.driveAway&&(o.variants[t].driveAwayPrice=parseFloat(i.data.driveAway));d()},k)}function l(){var t=u.getVariantByName(o.engineVariant,o.gradeObj.id,o.enhancementPack),n;if(o.variants)for(n=0;n<o.variants.length;n++)o.variants[n].differentialPrice=!a(o.variants[n])&&t?o.variants[n].driveAwayPrice-t.driveAwayPrice:null,o.variants[n].showSpinner=!1}function b(t){console.error("BuildPrice AjaxFailure -> EnPack: ",t);n.$emit("open-modal-window",{content:"Oops, something went wrong while obtaining the details. If the problem persists, please contact your dealer directly.",wrapper:['<p class="lx-modal__paragraph">',"<\/p>"]})}function k(n){console.error("BuildPrice AjaxPriceFailure -> EnPack: ",n)}function d(){o.pricingSuccess?angular.element(".lx-build-price-enhancement-pack").removeClass("pricing-error"):(console.log("bpGrade pricingSuccess: ",o.pricingSuccess),angular.element(".lx-build-price-enhancement-pack").addClass("pricing-error"))}function g(){var i=!1,u,t,f;o.enhancementPack&&(o.variants.find(function(n){return n.uriName===o.enhancementPack})||o.variants.find(function(n){return n.enhancementPackName===o.enhancementPack}))&&(i=!0);u=o.enhancementPack!=null;o.variants.length>0&&!i&&(t=s(),u&&(f={controllerName:n.BuildPriceService.stepIds.ENHANCEMENT_PACK,$scope:n,defaultValue:t.uriName,invalidValue:o.enhancementPack},n.BuildPriceService.emitInvalidSelection(f)),o.enhancementPack=t.uriName);n.$emit(r.events.enhancementPackSelected,o.enhancementPack);o.currentPage=v(h(o.enhancementPack))}function s(){return o.variants.find(function(n){return n.isBaseVariant==!0})}function nt(t){var i=o.enhancementPack===t.uriName?s().uriName:t.uriName;return o.packIndex=h(i)?h(i):0,o.currentPage=v(o.packIndex,!0),o.enhancementPack!=i&&(n.$emit(r.events.userSelection,"Enhancement Pack selected"),ut(i,!0,!0,o.trim,o.colour)),!1}function a(n){return o.enhancementPack===n.uriName}function tt(n){var t=!1;return s()&&o.enhancementPack!=s().uriName&&o.enhancementPack!=n.uriName&&(t=!0),t}function h(n){for(var i=o.variants,t=0;t<i.length;t++)if(i[t].uriName===n)return t;e.error("Enhancement Pack "+n+" not found")}function v(n,t){var t=t!=null?t:!1,i=t?o.currentPage:0;return n!=0&&(i=n-2),i}function it(){o.currentPage>0&&o.currentPage--}function rt(){o.currentPage<=o.variants.length-2-o.currentPage&&o.currentPage++}function ut(t,i,u,f,e){var o={clearDownstream:i,selection:t,userInitiated:u,revertTrim:f,revertColour:e};n.$emit(r.events.enhancementPackSelected,o)}var o=this;o.variants=[];o.setSelection=nt;o.isSelected=a;o.isNotSelected=tt;o.previousPage=it;o.nextPage=rt;o.gradeObj=null;o.pricingSuccess=!0;o.holdPricingCalls=!0;n.BuildPriceService=r;n.$on(r.events.postcodeChanged,function(){c()});n.$on(r.events.holdPricingCallsRelay,function(n,t){o.holdPricingCalls=t});n.$watch("bpEnPack.specifics",n.BuildPriceService.watchDebounce(function(n){n!=null&&l()},50),!0);n.$watch("bpEnPack.grade",n.BuildPriceService.watchDebounce(function(n){n!=null&&(console.info("%c 2. buildPriceEnhancementPackController received GRADE: ","color: mediumvioletred;",n+" (with VARIANT: "+o.engineVariant+")",o),y(o.engineVariant,n))},50),!0);n.$on(r.events.pageNavigationBroadcast,function(n,t){var i=t.id=="enhancement";o.isCurrentStep=i;i&&h(o.enhancementPack)!=0&&window.matchMedia("(max-width: 767px)").matches&&setTimeout(function(){window.scrollTo(0,angular.element("."+o.enhancementPack.replace(/ /g,""))[0].offsetTop+250)})});n.$on(r.events.threeSixtyLoad,function(n,t){console.info("%c buildPriceEnhancementPackController received threeSixtyLoad: ","color: mediumvioletred;",t)});n.init=function(){}}return n.$inject=["$scope","$q","VehicleService","BuildPriceService","BuildPriceAPIService","PricingService","$log","$timeout"],{scope:{engineVariant:"<variant",grade:"<grade",enhancementPack:"<enhancement",trim:"<trim",colour:"<colour",paintId:"<paintId",specifics:"<specifics",postCode:"<postcode",pricingZone:"<pricingZone",vehicleImage:"<vehicleImage",disableDiffPricing:"<disableDiffPricing",enablePricingByZone:"<enablePricingZone"},restrict:"A",controller:n,controllerAs:"bpEnPack",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)});n.init()}}}])}(),function(){"use strict";angular.module("Lexus.Directives").directive("lxBuildPriceExterior",[function(){function n(n,t,i,r,u,f){function o(t,f,o,h){u.getExteriorImages(e.engineVariant,t,f,o,h,function(t){var u=$(i).find("img").first();s(u,t);n.$emit(r.events.threeSixtyLoaded)});n.$emit(r.events.holdPricingCalls,!1)}function s(i,u){console.log("is loading reel");var o=18;u=f.isDesktop()?u.threeSixtyImagesDesktop:u.threeSixtyImagesMobile;i.reel("backup")&&(i.reel("backup").attr.src=i.src);i.reel("frame")&&(o=i.reel("frame"));i.unreel();i.reel({opening:0,speed:0,images:u,frame:o,frames:u.length,laziness:1,scrollable:!0,wheelable:!1}).on("loaded",function(){n.loadingExterior&&n.$apply(function(){n.loadingExterior=!1})}).on("pan",function(){e.reelPanTimeout&&t.cancel(e.reelPanTimeout);e.reelPanTimeout=t(function(){n.$emit(r.events.gtmEvent,{source:"360"})},50)})}var e=this;e.loadExterior=function(t){n.loadingExterior=!0;n.$emit(r.events.threeSixtyLoad,t);o(t.gradeId,t.variantId,t.trimId,t.materialCode)};n.$on("bp-user-selection",function(n){console.info("%c 3. buildPriceExteriorController 'bp-user-selection': ","color: blue; ",n)})}return n.$inject=["$scope","$timeout","$element","BuildPriceService","BuildPriceAPIService","ViewportService"],{scope:{engineVariant:"<variant",trim:"<trim",colour:"<colour"},restrict:"A",controller:n,controllerAs:"bpExterior",template:"<div data-ng-transclude><\/div>",bindToController:!0,transclude:!0,require:"^lxBuildPricePaintTrim",link:function(n,t,i,r){n.loadingExterior=!0;r.registerExterior(n.bpExterior)}}}])}(),function(){"use strict";function n(){return{scope:{expression:"="},restrict:"E",replace:!1,template:'<span class="variant-feature" ng-bind-html="expression"><\/span><br />'}}angular.module("Lexus.Directives").directive("buildPriceGradeFeature",n)}(),function(n){"use strict";angular.module("Lexus.Directives").directive("lxBuildPriceGrade",[function(){function t(t,i,r,u,f,e){function a(){o.postCode&&f.waitFor.call(t,"bpGrade.holdPricingCalls",f.waitCondition.ISSTRICTLYFALSE).then(function(){console.info("holdPricingCalls cleared in bpGrade");p().then(y,v)})}function h(){return o.grades?o.grades[0]:n}function p(){function u(n){return i.setParam("enablePricingByZone",o.enablePricingByZone),i.driveAwayByGrade(n.id,o.postCode,o.pricingZone)}for(var t=[],n=0;n<o.grades.length;n++)t.push(u(o.grades[n])),c(o.grades[n])||(o.grades[n].showSpinner=!0);return r.all(t).then(function(n){var t,i;for(o.pricingSuccess=!0,t=0;t<n.length;t++)i=n[t],i.status!="Success"?o.pricingSuccess=!1:i.data&&i.data.driveAway?o.grades[t].driveAwayPrice=parseFloat(i.data.driveAway):o.pricingSuccess=!1;k()},b)}function w(){function i(n){return u.getVariants(n.id)}for(var t=[],n=0;n<o.grades.length;n++)t.push(i(o.grades[n]));return r.all(t).then(function(n){for(var t=0;t<n.length;t++)o.grades[t].features=angular.copy(n[t].data[0].features),Object.defineProperty(o.grades[t],"featureComparisonTitle",{enumerable:!0,configurable:!1,writable:!1,value:n[t].data[0].featureComparisonTitle})},v)}function v(n){console.error("BuildPrice AjaxFailure -> Grade: ",n);t.$emit("open-modal-window",{content:"Oops, something went wrong while obtaining the details. If the problem persists, please contact your dealer directly.",wrapper:['<p class="lx-modal__paragraph">',"<\/p>"]})}function b(n){console.error("BuildPrice AjaxPriceFailure -> Grade: ",n)}function k(){o.pricingSuccess?angular.element(".lx-build-price-grade").removeClass("pricing-error"):angular.element(".lx-build-price-grade").addClass("pricing-error")}function y(){var t=e.getGradeByName(o.engineVariant,o.grade)||h(),n;if(o.grades)for(n=0;n<o.grades.length;n++)o.grades[n].differentialPrice=!c(o.grades[n])&&t?o.grades[n].driveAwayPrice-t.driveAwayPrice:0,o.grades[n].showSpinner=!1}function c(n){return o.grade===n.uriName}function s(n){for(var i=o.grades,t=0;t<i.length;t++)if(i[t].name===n)return t;throw new Error("Grade "+n+" not found");}function d(n,t){var i=s(n)-1;return i=t?(i+o.grades.length)%o.grades.length:Math.max(i,0),o.grades[i]}function g(n,t){var i=s(n)+1;return i=t?i%o.grades.length:Math.min(i,o.grades.length-1),o.grades[i]}function l(n,i,r,u,e,o){var s={selection:n,clearDownstream:i,userInitiated:r,revertEnhancementPack:u,revertTrim:e,revertColour:o};t.$emit(f.events.gradeSelected,s)}var o=this;o.getPreviousGrade=d;o.getNextGrade=g;o.isSelected=c;o.pricingSuccess=!0;o.holdPricingCalls=!0;t.bpGrade.setSelection=function(n){return o.gradeIndex=s(n.name),t.$emit(f.events.onOfferText,n.onOfferText),o.grade!=n.uriName&&(t.$emit(f.events.userSelection,"Grade selected"),l(n.uriName,!0,!0,o.enhancementPack,o.trim,o.colour)),!1};t.$on(f.events.holdPricingCallsRelay,function(n,t){o.holdPricingCalls=t});t.$on(f.events.postcodeChanged,function(){a()});t.$watch("bpGrade.specifics",f.watchDebounce(function(n,t){n&&t&&n!=t&&(console.info("%c buildPriceGradeController received SPECIFICS: ","color: gold;",n),u.getVehicleImages(n.gradeId,n.variantId,n.trimId,n.materialCode).then(function(n){bpEnPack.image=n.data.threeSixtyImagesDesktop[2]}))},50),!0);t.$watch("bpGrade.grade",f.watchDebounce(function(n,t){t&&n!=t&&y()},50),!0);t.$watch("bpGrade.engineVariant",f.watchDebounce(function(n,i){if(n!=null){console.info("%c 1. buildPriceGradeController $watch ENGINE VARIANT: ","color: gold; ",n);var r=i==null,u=i!==n;t.getGradeSelectionInVariant(n,u&&!r,!0)}},50),!0);t.getGradeSelectionInVariant=function(n,i,r){var b=e.findEngineVariantInVehicleData(n),u,v,y,p,c;for(o.grades=b.grades,u=0;u<o.grades.length;u++)o.grades[u].showSpinner=!1,o.grades[u].driveAwayPrice=0;v=o.grade?o.grades.find(function(n){return n.uriName===o.grade})!=null:!1;y=o.grade!=null;o.grades.length>0&&!v?(y&&(p={controllerName:f.stepIds.GRADE,$scope:t,defaultValue:o.grades[0].uriName,invalidValue:o.grade,userInitiated:r,clearDownstreamFrom:r?2:null},f.emitInvalidSelection(p)),l(h().uriName,i||!v,!1),o.gradeIndex=s(h().name),t.$emit(f.events.onOfferText,h().onOfferText)):(c=e.getGradeByName(n,o.grade),c&&(l(c.uriName,i||!v,!1),o.gradeIndex=s(c.name),t.$emit(f.events.onOfferText,c.onOfferText)));w();a()};t.isOnOffer=function(n){return n.onOffer};t.init=function(){}}return t.$inject=["$scope","PricingService","$q","VehicleService","BuildPriceService","BuildPriceAPIService"],{scope:{},restrict:"A",controller:t,controllerAs:"bpGrade",bindToController:{engineVariant:"<variant",grade:"<grade",enhancementPack:"<enhancement",trim:"<trim",colour:"<colour",postCode:"<postcode",pricingZone:"<pricingZone",specifics:"<specifics",disableDiffPricing:"<disableDiffPricing",enablePricingByZone:"<enablePricingZone"},transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)});n.init()}}}])}(),function(){"use strict";angular.module("Lexus.Directives").directive("lxBuildPriceInterior",[function(){function n(n,t,i,r){function e(){u.pano&&(removepano(u.pano.id),u.pano.panoControl=null);u.pano=null}function o(n){f(n,!0)}function f(t,i){var s=window.location.search.match(/loadInterior\=false/)?!1:!0,f,o;if(t&&t.gradeId&&t.variantId&&t.trimId&&t.materialCode&&s&&u.isCurrentStep&&(n.loadingInterior=!0,f=r.getVehiclePanoXMLUrl(t.gradeId,t.variantId,t.trimId,t.materialCode),i)){if(u.pano&&u.pano.xml===f)return;e();console.info("%c buildPriceInteriorController loadPano: ","color: purple; ",f);u.pano=u.pano||{};u.pano.id="krpano_"+n.$id;u.pano.xml=f;o={};o["events.onviewchange"]=n.viewChange;u.hlookat&&u.vlookat&&(o["view.hlookat"]=u.hlookat,o["view.vlookat"]=u.vlookat);embedpano({id:u.pano.id,xml:f,target:"interiorPano",html5:"only",mobilescale:1,onready:function(){n.loadingInterior=!1},vars:o})}}var u=this;u.vlookat=null;u.hlookat=null;u.pano={id:null,panoControl:null};u.ensurePanoRemoved=e;n.$watch("bpInterior.trim",i.watchDebounce(function(n){n!=null&&console.info("%c 5. buildPriceInteriorController received Trim: ","color: purple; ",n+" (with VARIANT: "+u.engineVariant+")")},50));n.$watch("bpInterior.specifics",i.watchDebounce(function(n){u.tabExterior?f(n,!1):f(n,!0)},50),!0);this.loadInterior=o;n.$on(i.events.pageNavigationBroadcast,function(n,t){var i=t.id=="colour";u.isCurrentStep=i;u.specifics&&f(u.specifics,!0)});n.viewChange=function(){u.pano.panoControl||(u.pano.panoControl=document.getElementById(u.pano.id));u.pano.panoControl&&(u.hlookat=u.pano.panoControl.get("view.hlookat"),u.vlookat=u.pano.panoControl.get("view.vlookat"))}}return n.$inject=["$scope","$filter","BuildPriceService","VehicleService"],{scope:{engineVariant:"<variant",trim:"<trim",colour:"<colour",paintId:"<paintId",specifics:"<specifics",tab:"<tab"},restrict:"A",controller:n,controllerAs:"bpInterior",template:"<div data-ng-transclude><\/div>",bindToController:!0,transclude:!0,require:"^lxBuildPricePaintTrim",link:function(n,t,i,r){n.loadingInterior=!0;r.registerInterior(n.bpInterior)}}}])}(),function(){"use strict";angular.module("Lexus.Directives").directive("lxBuildPriceModel",[function(){function n(n,t,i,r,u){function e(n,t){var t=t!=null?t:!1,i=t?f.currentPage:0;return n!=0&&(i=n-2),i}function o(){f.currentPage>0&&f.currentPage--}function s(n){f.currentPage<=n-2-f.currentPage&&f.currentPage++}function h(){u.getModels().then(n.ReceiveModels)}var f=this;f.vehicleData=null;f.modelSelected=!1;f.previousPage=o;f.nextPage=s;n.setModelHeights=function(){t(function(){var f,i,o,n,r;if(window.innerWidth>767)for(f=angular.element(".lx-build-price-model-chooser__models"),i=0,o=f.length;i<o;i++){var u=f[i].querySelectorAll(".lx-build-price-model-chooser-model"),t=[],e=0;for(n=0,r=u.length;n<r;n++)t.push(u[n].clientHeight);if(t.sort(),e=t[t.length-1],t[0]!=e)for(n=0,r=u.length;n<r;n++)u[n].setAttribute("style","height:"+e+"px;")}},0,!1)};n.emitEngineVariantSelected=function(t,i,u){var f={selection:i===t.uriName?null:t.uriName,clearDownstream:t!=i&&i!=null,userInitiated:u};n.$emit(r.events.userSelection,"Model + Variant selected");n.$emit(r.events.engineVariantSelected,f)};n.variantHasOffer=function(t){var i=!1;return t.modelEngineVariants.forEach(function(t){n.isOnOffer(t)&&(i=!0)}),i};n.isOnOffer=function(n){return n.onOffer};n.emitModelSelected=function(t,i,u,e){var o,s;f.currentPage=0;u&&(o=e.replace(/\s+/g,""),setTimeout(function(){$("html, body").animate({scrollTop:$(o).offset().top-10},250)},500));n.$emit(r.events.onOfferText,null);s={selection:i===t.uriName?null:t.uriName,clearDownstream:t!=i&&i!=null,userInitiated:u};n.$emit(r.events.modelSelected,s)};n.ReceiveModels=function(){f.currentPage=e(0);f.vehicleData=u.data;console.info("%c 0. buildPriceModelController -> ReceiveModels: ","color: darkblue; ",u.data);n.$emit(r.events.overviewDataReceived,u.data);n.setModelHeights()};n.$on(r.events.pageNavigationBroadcast,function(n,t){var i=t.id=="model";f.isCurrentStep=i});n.$watch("bpModel.selectedModel",function(n){if(n!=null&&f.isCurrentStep&&!f.modelSelected){var t=".contains-model--"+n.replace(/\s+/g,"");setTimeout(function(){$("html, body").animate({scrollTop:$(t).offset().top-10},250)},500);f.modelSelected=!0}});h()}return n.$inject=["$scope","$timeout","VehicleService","BuildPriceService","BuildPriceAPIService"],{scope:{selectedModel:"<carmodel",selectedEngineVariant:"<variant"},restrict:"A",controller:n,controllerAs:"bpModel",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)});n.bpModel.currentPage=0}}}])}();angular.module("Lexus.Directives").directive("lxBuildPriceNavigation",[function(){function n(n,t,i,r,u){var f=this;f.activeStep=null;f.toggleSbp=!1;f.lastEngineVariant=null;n.isLastStep=function(){return n.bpNav.activeStepIdx+1<n.bpNav.steps.length};n.shiftMenu=function(n){var i=angular.element(".lx-c-nav__menu-group");i.scrollLeft(0);var u=t.innerWidth,r=angular.element(".lx-bp-nav__item-"+n+""),e=r.offset().left-r.width()/2,f=r.offset().left+r.width();i[0].scrollWidth>u&&f>u/3&&(f<u/2?i.scrollLeft(0):i.scrollLeft(e+10))};n.emitNavigation=function(t){if(console.log("emitNavigation: ",f),!f.vehicleLoading){if(typeof t=="number"){if(f.steps[t].disabled)return}else if(f.steps.find(function(n){return n.id===t}).disabled)return;n.$emit("bp-page-navigation",t)}};n.$watch(function(n){return n.bpNav.activeStepIdx},function(t){typeof t=="number"&&(f.activeStep=f.steps[t],n.shiftMenu(f.activeStep.id))});n.$watch(function(n){return n.bpNav.engineVariant},function(n,t){typeof t=="string"&&(f.lastEngineVariant=t);n!=null&&n!=t&&setTimeout(function(){var n=angular.element(".lx-footer-sticky")[0].clientHeight+40+"px";angular.element(".lx-footer").css({"padding-bottom":n})},100)});n.encodeUriFragment=function(n){return u.encodeUriFragment(n)};n.getUrl=function(n,t){return n+t};n.init=function(){};n.openNav=function(){f.toggleSbp?n.$emit(u.events.triggerCloseSaveBuildPriceDialog,{}):n.$emit(u.events.triggerSaveBuildPriceDialog,{})};n.openPostcodeModal=function(){n.$emit(u.events.openPostcodeDialog)};n.isStickyFooterVisible=function(){var t=f.model&&f.engineVariant||!f.hideSaveBuild;return n.$emit("sticky-footer-visible",t),t};n.openPostcodeSlideout=function(){n.$emit(u.events.openPostcodeSlideout)}}return n.$inject=["$scope","$window","$interpolate","$element","BuildPriceService"],{scope:{model:"<carmodel",engineVariant:"<variant",enhancementPack:"<enhancement",grade:"<grade",colour:"<colour",trim:"<trim",driveAwayPrice:"<price",driveAwayPriceLoading:"<priceLoading",vehicleLoading:"<vehicleLoading",steps:"<steps",activeStepIdx:"<activeIndex",paintResolved:"<paintresolved",paintId:"<paintId",onOfferText:"<onOfferText",toggleSbp:"<toggleSbp",hideSaveBuild:"<hideSaveBuild",postcode:"<postcode"},restrict:"A",controller:n,controllerAs:"bpNav",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)});n.init()}}}]),function(){"use strict";angular.module("Lexus.Directives").directive("lxBuildPricePaintTrim",[function(){function t(t,r,u){function l(n){f.selectedPaintCode=n.code;f.selectedPaintName=n.shortName;c(f.specifics.gradeId,f.specifics.variantId,f.specifics.trimId)}function a(n){f.selectedTrimName=n.name;f.trim!==n.uriName&&e(n.uriName,!0,!0,f.colour)}function v(n){return f.trim===n.uriName}function o(n,t,i){var e=u.findEngineVariantInVehicleData(n),r=u.getGradeByName(n,t);u.getVariants(n,r.id,function(){var t=u.getVariantByName(n,r.id,i);u.getTrims(n,r.id,t.mdmid,function(i,e,o){if(h(i,e,o,!1),f.allTrims=o,d(n,r.id,t.mdmid),f.trim){var s=u.getTrimByName(n,r.id,t.mdmid,f.trim);u.getPaints(n,r.id,t.mdmid,s.id,function(n,i){g(n,i);c(r.id,t.mdmid,s.id)})}})})}function y(n,i,u,o){for(var c,a,l={},h=0;h<i.length;h++)if(i[h].uriName==n){l=i[h];break}l?f.selectedTrimName=l.name:(c=s(),a={controllerName:r.stepIds.PAINT_TRIM,$scope:t,defaultValue:c.uriName,invalidValue:f.trim,userInitiated:o,clearDownstreamFrom:o?4:null},r.emitInvalidSelection(a),e(c.uriName,u,o))}function p(){return f.availableColours[0]}function s(){return f.availableTrims[0]}function w(n){t.$emit(r.events.paintSelected,n)}function b(n){t.$emit(r.events.paintsReceived,n)}function e(n,i,u,f){var e={clearDownstream:i,selection:n,userInitiated:u,revertColour:f};t.$emit(r.events.trimSelected,e)}function k(n){t.$emit(r.events.trimsReceived,n)}function h(n,t,i,r){f.availableTrims=n;f.unavailableTrims=t;k(f.availableTrims);f.showTrims=r}function d(n,t,i){var o,r;!f.trim&&f.availableTrims.length>0?(o=s(),f.selectedTrimName=o.name,e(o.uriName,!0,!1)):(r=u.getTrimByName(n,t,i,f.trim),r?(f.selectedTrimName=r.name,e(r.uriName,!0,!1)):(f.selectedTrimName=f.availableTrims[0].name,e(f.availableTrims[0].uriName,!0,!1)))}function g(n,t){var i;n&&t&&n.length+t.length>12&&(t=null);f.availableColours=n;f.unavailableColours=t;b(f.availableColours);!f.colour&&f.availableColours.length>0&&(i=p(),f.selectedPaintName=i.shortName);f.selectedPaintName||(f.selectedPaintName=f.colour);f.showColours=n.length>0?!0:!1}function c(n,t,r){var e=u.getPaintByName(f.engineVariant,n,t,r,f.selectedPaintName),o;e||(e=f.availableColours[0]);f.selectedPaintName=e.shortName;f.selectedPaintCode=e.code;o=u.getGradeByID(f.engineVariant,n);w(e,!0,!1);i.loadExterior({gradeId:n,gradeMDMId:o.gradeID,variantId:t,trimId:r,materialCode:e.materialCode,paintId:e.id});u.getTrims(f.engineVariant,n,t,function(i,e,o){var s=u.getUnavailableTrimsBasedOnPaint(f.engineVariant,n,t,r,f.selectedPaintName),c=u.GetUnAvailableCollection(o,s.availableTrims),l=u.FilterAvailableCollection(i,s.availableTrims);h(l,c,o,!0)})}var f=this,nt;f.selectedPaintName="";f.selectedPaintCode="";f.selectedTrimName="";f.setSelectedPaint=l;f.setSelectedTrim=a;f.isTrimSelected=v;f.registerInterior=function(t){n=t};f.registerExterior=function(n){i=n};r=r;nt=null;t.exterior=function(){t.tabExterior=!0;n&&n.ensurePanoRemoved()};t.interior=function(){t.tabExterior=!1;t.bpPaintTrim.specifics&&n.loadInterior(t.bpPaintTrim.specifics)};t.$watch("bpPaintTrim.specifics",r.watchDebounce(function(n){n&&console.info("%c 6. BuildPricePaintTrimController received SPECIFICS: ","color: teal; ",[n])},50),!0);t.$watch("bpPaintTrim.trim",r.watchDebounce(function(n,i){if(n){console.info("%c 3. buildPricePaintTrimController received TRIM: ","color: teal; ",n);var u=i==null,e=i!==n;o(f.engineVariant,f.grade,f.enhancementPack);r.waitFor.call(t,"bpPaintTrim.availableTrims",r.waitCondition.NOTNULL).then(function(t){y(n,t,e&&!u,!0)})}},50),!0);t.$watch("bpPaintTrim.grade",r.watchDebounce(function(){f.allTrims&&delete f.allTrims},50),!0);t.$watch("bpPaintTrim.enhancementPack",r.watchDebounce(function(n,t){n&&n!=t&&(console.info("%c 4. buildPricePaintTrimController received Enhancement Pack: ","color: teal; ",n),o(f.engineVariant,f.grade,n))},50),!0)}var n=null,i=null;return t.$inject=["$scope","BuildPriceService","BuildPriceAPIService","VehicleService","$timeout","$log"],{scope:{engineVariant:"<variant",grade:"<grade",trim:"<trim",enhancementPack:"<enhancement",colour:"<colour",paintId:"<paintId",specifics:"<specifics"},restrict:"A",controller:t,controllerAs:"bpPaintTrim",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)})}}}])}(),function(){"use strict";angular.module("Lexus.Directives").directive("lxBuildPriceSummary",[function(){function n(n,t,i,r,u,f,e){function s(){u.setParam("enablePricingByZone",o.enablePricingByZone);o.paintId&&o.postcode&&t.bpSummary.specifics&&f.waitFor.call(t,"bpSummary.holdPricingCalls",f.waitCondition.ISSTRICTLYFALSE).then(function(){u.detailPriceByPaint(t.bpSummary.specifics.gradeId,t.bpSummary.specifics.variantId,t.bpSummary.specifics.trimId,o.paintId,o.postcode,o.deposit,o.interestRate,o.loanTerm,o.balloonPayment,o.loanType,o.pricingZone).then(function(n){n.status==="Success"?n.data&&n.data.listPriceIncGST&&n.data.driveAway?(o.driveAwayPriceLoadingTimeout&&i.cancel(o.driveAwayPriceLoadingTimeout),o.pricingSuccess=!0,o.details=n.data,a(n.data)):o.pricingSuccess=!1:o.pricingSuccess=!1},function(n){v(n,"PricingService.detailPriceByPaint")}).finally(function(n){l(n);h();o.loadingData=!1});c();o.loadingData=!0;var n=e.getVariantByName(o.engineVariant,o.specifics.gradeId,o.enhancementPack),r=e.getTrimByName(o.engineVariant,o.specifics.gradeId,n.mdmid,o.trim),f=e.getPaintByName(o.engineVariant,o.specifics.gradeId,n.mdmid,r.id,o.colour);o.enhancementPackName=n.enhancementPackName;o.trimName=r.name;o.colourName=f.shortName})}function c(n){t.$emit(f.events.priceLoad,n);console.log("%c $$$$$$$$   priceLoad   $$$$$$$$","color: limegreen; font-weight: bold;")}function l(n){t.$emit(f.events.priceDone,n);console.log("%c $$$$$$$$   priceDone   $$$$$$$$","color: limegreen; font-weight: bold;")}function a(n){t.$emit(f.events.priceReceived,n);console.log("%c $$$$$$$$ priceReceived $$$$$$$$","color: limegreen; font-weight: bold;")}function v(n,i){o.pricingSuccess=!1;console.log("%c  ajaxPriceFailure  ","color: red; font-weight: bold;",i);h();t.$emit(f.events.priceError,{source:"bpSummary"})}function h(){console.log("bpSummary -> pricingReport: ",o.pricingSuccess);o.driveAwayPriceLoadingTimeout=i(function(){console.log("bpSummary -> pricingReport: timeout finished",o.pricingSuccess);o.pricingSuccess?(angular.element(".lx-build-price-summary").removeClass("pricing-error"),angular.element(".lx-footer-sticky").removeClass("pricing-error")):(angular.element(".lx-build-price-summary").addClass("pricing-error"),angular.element(".lx-footer-sticky").addClass("pricing-error"))},500)}function y(n){t.$emit("bp-page-navigation",n)}function p(){return{model:o.model,engineVariant:o.engineVariant,grade:o.grade,enhancementPack:o.enhancementPack,trim:o.trim,colour:o.colour}}var o=this;o.loadingData=!1;o.pricingSuccess=!0;o.holdPricingCalls=!0;t.$on(f.events.holdPricingCallsRelay,function(n,t){o.holdPricingCalls=t});t.$watch("bpSummary.paintId",f.watchDebounce(function(n){n!==null&&s()},50),!0);t.$watch("bpSummary.specifics",f.watchDebounce(function(t){t!==null&&(console.info("%c 7. BuildPriceSummaryController received SPECIFICS: ","color: green; ",t),n.$broadcast("refresh-gtm","Build and Price"))},50),!0);t.$watch("bpSummary.postcode",f.watchDebounce(function(n){n!==null&&(console.info("%c BuildPriceSummaryController received POSTCODE: ","color: green; ",n),s())},50),!0);o.navigate=y;t.$on(f.events.vehicleDataRelay,function(n,t){o.vehicleData=t});t.$on(f.events.threeSixtyLoad,function(n,t){console.info("%c BuildPriceSummaryController received threeSixtyLoad: ","color: green; ",t)});t.$on("hide-build-price-contact-dealer-form",function(){t.toggleContactDealerForm()});t.toggleContactDealerForm=function(){t.$broadcast("toggle-build-price-contact-dealer-form",p());o.showContactDealer=!(o.showContactDealer||!1)};t.getGradeNameFromId=f.getGradeNameFromId;t.openPostcodeModal=function(){t.$emit(f.events.openPostcodeDialog)};o.deposit=15e3;o.interestRate=5;o.loanTerm=3;o.balloonPayment=0;o.loanType="Personal"}return n.$inject=["$rootScope","$scope","$timeout","$httpParamSerializer","PricingService","BuildPriceService","BuildPriceAPIService","VehicleService"],{scope:{},restrict:"A",controller:n,controllerAs:"bpSummary",bindToController:{emailDeeplinkUrlParameters:"<emailDeeplinkUrlParameters",model:"<model",engineVariant:"<variant",grade:"<grade",enhancementPack:"<enhancement",trim:"<trim",colour:"<colour",postcode:"<postcode",pricingZone:"<pricingZone",paintId:"<paintId",specifics:"<specifics",vehicleImage:"<vehicleImage",enablePricingByZone:"<enablePricingZone",hostOrigin:"<hostOrigin"},transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)});n.showContactDealer=!1}}}])}();angular.module("Lexus.Directives").directive("lxFormsBuildPriceContactDealer",[function(){function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){var w=this;n.ffc.urlParameters=e.search();n.ffc.formInitialized=!1;n.$watch("bpSummary.showContactDealer",function(t){t&&(n.ffc.formInitialized=!0,n.init(n.initVars.forceDealerId,n.initVars.dealerCompositeId,n.initVars.isDealerSite==="true",n.initVars.isMultiBranchDealership==="true"))});n.init=function(t,i,r,u){c.getLexusVisitorSession().then(function(i){var u=c.getLexusVehicle(n.ffc.urlParameters),f=c.getLexusDealer(n.ffc.urlParameters),r=c.getLexusVisitor(n.ffc.urlParameters);n.ffc.form={submitting:!1,completed:!1,errors:!1,dealers:null,data:{postcodes:[],carmodel:u.model,grade:u.grade,enginevariant:u.engineVariant,subscribe:!1,postcode:"",suburb:"",additionalcomments:"",email:i.Data.email,firstname:i.Data.name,lastname:i.Data.surname,phone:i.Data.phone,captcha:"",dealerId:f.dealerID,dealerName:f.dealerName,contextDealerSiteId:t}};r.suburb&&r.postCode&&r.state&&(n.ffc.form.data.postcodes.push(c.getAutocompleteTagFromVisitor(r)),n.ffc.form.data.postcode=r.postCode,n.ffc.form.data.suburb=r.suburb,n.ffc.form.data.state=r.state)},function(){n.ffc.form={submitting:!1,completed:!1,errors:!1,dealers:null,data:{postcodes:[],carmodel:null,grade:null,subscribe:!1,postcode:"",additionalcomments:"",email:null,firstname:null,lastname:null,phone:null,captcha:"",dealerId:null,dealerName:null}}}).finally(function(){n.ffc.form.data.carmodel&&o.$broadcast("field-car-model-engine-variant-update-selected");n.ffc.form.data.postcodes&&n.ffc.form.data.postcodes.length>0&&!r&&n.searchNow();r&&u&&(n.ffc.form.data.dealerId=null,n.ffc.form.data.dealerName=null,n.loadBranches(t));r&&!u&&(n.ffc.form.data.dealerId=i,n.ffc.form.data.dealerName=null)})};n.loadTags=function(n){return h.setParam("term",n),h.GetResults()};n.deselectDealer=function(){n.ffc.form.data.dealerId=n.ffc.form.data.dealerName=null};n.selectDealer=function(n){var i=$(document).scrollTop(),t=$("#"+n).parents(".lx-form__find-dealer-js").offset().top;i>t&&TweenLite.to(window,.5,{scrollTo:{y:t},ease:Power2.easeOut})};n.loadBranches=function(t){n.ffc.form.dealersLoading=!0;s.setParam("dealerID",t);s.setParam("type","Sales");s.GetDealerBranches()};n.searchNow=function(){n.ffc.form.dealersLoading=!0;o.$broadcast("visitor-details-change-autocomplete",{postCode:n.ffc.form.data.postcode,suburb:n.ffc.form.data.suburb,state:n.ffc.form.data.state});s.setParam("postCode",n.ffc.form.data.postcode);s.setParam("suburb",n.ffc.form.data.suburb);s.setParam("type","Sales");s.GetResults()};n.getData=function(){var i=c.splitAutoCompleteResult(n.ffc.form.data.postcodes[0].text),t={vehicle:{url:window.location.toString(),model:n.bpSummary.model,engineVariant:n.bpSummary.engineVariant,grade:n.bpSummary.grade,enhancementPack:n.bpSummary.enhancementPack,trim:n.bpSummary.trim,paint:n.bpSummary.colour,materialCode:n.bpSummary.paintId},pricingEstimate:{driveAway:n.bpSummary.details.driveAway,ctpInsuranceAmount:n.bpSummary.details.ctpInsuranceAmount,dealerDelivery:n.bpSummary.details.dealerDelivery,enhancementPackValue:n.bpSummary.details.enhancementPackValue,listPriceIncGST:n.bpSummary.details.listPriceIncGST,luxuryCarTax:n.bpSummary.details.luxuryCarTax,onRoadCosts:n.bpSummary.details.onRoadCosts,paintPrice:n.bpSummary.details.paintPrice,registrationAmount:n.bpSummary.details.registrationAmount,stampDuty:n.bpSummary.details.stampDuty,finance:{deposit:n.bpSummary.deposit,interestRate:n.bpSummary.interestRate,loanTerm:n.bpSummary.loanTerm,loanType:n.bpSummary.loanType,installmentPerMonth:n.bpSummary.details.installmentPerMonth,balloonPayment:n.bpSummary.balloonPayment}},dealerId:n.ffc.form.data.dealerId,firstName:n.ffc.form.data.firstname,lastName:n.ffc.form.data.lastname,email:n.ffc.form.data.email,additionalComments:n.ffc.form.data.additionalcomments,phone:n.ffc.form.data.phone,suburb:n.ffc.form.data.suburb,state:n.ffc.form.data.state,postcode:n.ffc.form.data.postcode,captcha:n.ffc.form.data.captcha,subscribe:n.ffc.form.data.subscribe,contextDealerSiteId:n.ffc.form.data.contextDealerSiteId};return p.attachEloquaFields(t),t};n.resetForm=function(){n.init();n.hideContactDealerForm()};o.$on("submit-build-price-contact-dealer-form",function(r,u){var f=n.getData();t({method:"POST",url:i("formatArgs")(Lexus.API.FormSubmission.BuildPriceContactDealer,[Lexus.ID.Site]),data:f}).then(function(){n.ffc.form.completed=!0;n.ffc.form.failed=!1;n.ffc.form.submitting=!1;e.state("BuildPriceContactDealerForm=Pass");v.ShowResult(n.successContent[0]);o.$broadcast("visitor-details-session-change",n.getData());o.$broadcast("gtm-form-success","Build Price Contact Dealer")},function(){n.ffc.form.failed=!0;n.ffc.form.errors=u.Data;n.ffc.form.submitting=!1;n.ffc.form.completed=!0;e.state("BuildPriceContactDealerForm=Fail");v.ShowResult(n.failureContent[0])}).finally(function(){o.$broadcast("form-result")})});n.$on("dealer-search-results-received",function(t,i){n.ffc.form.dealersLoading=!1;n.ffc.form.dealers=i.Data;n.checkDealersLoaded()});n.checkDealersLoaded=function(){var t=n.ffc.form.dealers.find(function(t){return t.dealerCode==n.ffc.form.data.dealerId});t||(n.ffc.form.data.dealerId=null)};n.$on("toggle-build-price-contact-dealer-form",function(t,i){var r=$("#contact-dealer-btn").offset().top;TweenLite.to(window,1,{scrollTo:{y:r,x:0},ease:Power4.easeOut});n.updatePreferenceDetails(i)});n.hideContactDealerForm=function(){n.$emit("hide-build-price-contact-dealer-form");var t=$("[lx-build-price-summary]").offset().top;TweenLite.to(window,1,{scrollTo:{y:t-20,x:0},ease:Power4.easeOut})};n.$on("postcode-changed",function(){if(!(n.initVars.isDealerSite==="true")){var t=c.getLexusVisitor();t&&t.postCode&&t.suburb&&n.ffc.form&&(n.ffc.form.data.postcodes=[],n.ffc.form.data.postcodes.push({text:t.suburb+" "+t.postCode}),n.ffc.form.data.postcode=t.postCode,n.ffc.form.data.suburb=t.suburb,n.ffc.form.data.state=t.state,n.deselectDealer(),n.searchNow())}});n.updatePreferenceDetails=function(t){n.ffc.form&&n.ffc.form.data&&(n.ffc.form.data.vehicledetails=i("formatArgs")("Model: {0} \nGrade: {1} \nEngine Variant: {2} \nEnhancement Pack: {3}\nURL: {4}",[t.model,t.grade,t.enginevariant,t.enhancementPack,e.$$absUrl]))};n.openUpdatePostcodeDialog=function(){n.$emit("open-change-postcode")};n.closeUpdatePostcodeDialog=function(){n.$emit("close-change-postcode")}}return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$location","$rootScope","DealersService","AddressSuggestService","UserPreferencesService","VehicleService","vcRecaptchaService","FormsService","ngDialog","EloquaService"],{scope:!0,restrict:"A",controller:n,controllerAs:"ffc",bindToController:!0,link:function(n,t,i){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure");n.initVars={showForm:i.showForm,forceDealerId:i.forceDealerId,dealerCompositeId:i.dealerCompositeId,isDealerSite:i.isDealerSite,isMultiBranchDealership:i.isMultiBranchDealership}}}}]),function(){"use strict";angular.module("Lexus.Directives").config(["$rootScopeProvider",function(n){n.digestTtl(1e3)}]).directive("lxRangeBuildPrice",[function(){function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w){function k(){n.bp.showSlideOutTray=!1;$("body").removeClass("modal-open")}function d(){var t=n.bp.data.postcodes[0].data;g(t);n.$emit("visitor-details-cookie-change",{postCode:t.postcode,suburb:t.suburb,state:t.state,pricingZone:t.pricingZone});n.$broadcast(c.events.postcodeChanged)}function g(t){n.bp.data.vehicle.postcode=t.postcode;n.bp.data.vehicle.suburb=t.suburb;n.bp.data.vehicle.state=t.state;n.bp.data.vehicle.pricingZone=t.pricingZone}var b=this;n.UserPreferencesService=e;n.BuildPriceService=c;n.init=function(){var i,u,f;n.navigateToPage(0);n.tagsLoading=!1;i=n.UserPreferencesService.getLexusVisitor();i&&i.postCode&&i.suburb&&i.state&&(u=e.getAutocompleteTagFromVisitor(i),n.bp.data.postcodes.push(u),f=u.data,g(f));(n.bp.settings.firstVisit=!e.isPageVisited(n.bp.settings.pageGuid))&&t.$broadcast("record-page-visit",n.bp.settings.pageGuid);n.bp.data.postcodes.length==0||n.bp.settings.firstVisit||n.$broadcast(c.events.gtmEvent,{source:"Postcode Roadblock",data:{dialogDisplayed:!1,firstVisit:n.bp.settings.firstVisit,postcode:n.bp.data.postcodes}});n.bp.data.hostOrigin=r.protocol()+"://"+r.host()};n.loadUserPreferences=function(){var i=n.UserPreferencesService.getLexusVehicle(),t=n.bp.data.vehicle;t.carmodel!=i.model&&(i.engineVariant=i.grade=i.enhancementPack=i.trim=i.colour=null);t.engineVariant!=i.engineVariant&&(i.grade=i.enhancementPack=i.trim=i.colour=null);t.grade!=i.grade&&(i.enhancementPack=i.trim=i.colour=null);t.enhancementPack!=i.enhancementPack&&(i.trim=i.colour=null);t.trim!=i.trim&&(i.colour=null);i&&(t.carmodel=t.carmodel?t.carmodel:i.model,t.engineVariant=t.engineVariant?t.engineVariant:t.carmodel?i.engineVariant:null,t.grade=t.grade?t.grade:t.engineVariant?i.grade:null,t.enhancementPack=t.enhancementPack?t.enhancementPack:t.grade?i.enhancementPack:null,t.trim=t.trim?t.trim:t.colour?i.trim:null,t.colour=t.colour?t.colour:t.enhancementPack?i.colour:null)};n.loadTags=function(t){return n.tagsLoading=!0,h.setParam("term",t),h.GetResults(n.tagsLoaded)};n.tagsLoaded=function(){n.tagsLoading=!1};n.autocompleteLoading=function(){return n.tagsLoading};n.updatePostcode=function(t,r){n.bp.data.postcodes=[t];r=r!=null&&r.length>0?r:".lx-postcode-dialog__choose";var u=angular.element(r)[0];i(function(){u.focus()},10,!1)};n.clearPostcode=function(){n.bp.data.postcodes=[]};n.navigateToPage=function(i){for(var u=arguments.length>1?arguments[1]:!0,r=0;r<n.bp.data.steps.length;r++)i===r||i===n.bp.data.steps[r].id?(n.bp.data.steps[r].visible=!0,n.bp.data.activeIndex=r,window.scrollTo(0,angular.element(".lx-range-build-price")[0].offsetTop),n.$broadcast(c.events.pageNavigationBroadcast,n.bp.data.steps[r])):n.bp.data.steps[r].visible=!1;t.$broadcast("refresh-gtm","Build and Price");(u&&i+1==n.bp.data.steps.length||i=="summary")&&n.$broadcast(c.events.gtmEvent,{source:"Summary",data:n.bp.data.vehicle})};n.clearDownstream=function(t,i){i.userInitiated&&p.cancelAll();t>=5&&(n.bp.data.vehicle.engineVariant=null);t>=4&&(n.bp.data.vehicle.grade=null);t>=3&&(n.bp.data.vehicle.enhancementPack=null);t>=3&&(n.bp.data.vehicleImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsYAAAGRCAQAAADMAr3sAAAEOUlEQVR42u3UIQEAAAzDsM+/6SsYHkkkFDQHwFwkADBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjCQDMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGoHq/RgGSYZc9owAAAABJRU5ErkJggg==");t>=2&&(n.bp.data.vehicle.colour=null);t>=2&&(n.bp.data.vehicle.trim=null);t>=2&&(n.bp.data.vehicleImageLoading=!0);t>=1&&(n.bp.data.vehicle.colourId=null);n.broadcastHoldPricingCalls(!0)};n.broadcastHoldPricingCalls=function(t){n.$broadcast(c.events.holdPricingCallsRelay,t)};n.$on("sticky-footer-visible",function(n,i){t.$broadcast("shift-promo-tiles-up",i)});n.closePostcodeSlideout=function(){k()};n.findLocation=function(){w().then(function(t){t.isSuccessfull&&(console.log("Postcode-"+t.data.postcode),console.log("Suburb-"+t.data.suburb),t.text=t.data.suburb+" "+t.data.postcode,n.bp.data.postcodes=[t],d(),k())},function(){console.log("Geo Location Failed")}).finally(function(){})};n.$on(c.events.holdPricingCalls,function(t,i){n.broadcastHoldPricingCalls(i)});n.$on(c.events.pageNavigation,function(t,i){n.navigateToPage(i)});n.$on(c.events.userInteraction,function(){n.bp.data.userInteraction=!0});n.$on(c.events.overviewDataReceived,function(){n.bp.data.overviewDataReceived=!0;n.loadUserPreferences()});n.$on(c.events.openPostcodeDialog,function(){n.$broadcast(c.events.gtmEvent,{source:"Postcode Roadblock",data:{dialogDisplayed:!0,firstVisit:n.bp.settings.firstVisit,postcode:n.bp.data.postcodes}});n.ngDialog=l;l.open({template:"updatePostcodeDialogTemplate",controller:"",className:"ngdialog-theme-default",scope:n,plain:!1,showClose:!1,closeByDocument:!0,disableAnimation:!0,closeByEscape:!0,appendTo:!1,preCloseCallback:function(t){return t==="$document"||t==="$closeButton"||t==="$escape"?!0:n.bp.data.postcodes.length>0&&n.setPageVisited()}})});n.$on(c.events.closePostcodeDialog,function(){console.log("BuildPriceService.events.closePostcodeDialog",arguments);l.close();n.$broadcast(c.events.postcodeChanged);d()});n.$on(c.events.openPostcodeSlideout,function(){n.$broadcast(c.events.gtmEvent,{source:"Postcode Roadblock",data:{dialogDisplayed:!0,firstVisit:n.bp.settings.firstVisit,postcode:n.bp.data.postcodes}});n.bp.showSlideOutTray=!0;$("body").addClass("modal-open")});n.$on(c.events.confirmPostcodeFromSlideout,function(){k();console.log("BuildPriceService.events.confirmPostcodeFromSlideout",arguments);d()});n.$on(c.events.onOfferText,function(t,i){n.bp.data.onOfferText=i});n.$on(c.events.gtmEvent,function(n,i){t.$broadcast("gtm-buildPrice",i)});n.errorText=function(){return"Postcode required"};n.openUpdatePostcodeDialog=function(t){if(t){n.$broadcast(c.events.openPostcodeDialog);return}w().then(function(t){t.isSuccessfull&&(console.log("Postcode-"+t.data.postcode),console.log("Suburb-"+t.data.suburb),t.text=t.data.suburb+" "+t.data.postcode,n.updatePostcode(t))},function(){console.log("Geo Location Failed");n.$broadcast(c.events.openPostcodeDialog)}).finally(function(){})};n.openPostcodeSlideout=function(){n.$emit(c.events.openPostcodeSlideout)};n.setPageVisited=function(){return n.bp.settings.firstVisit=!1,!0};n.closeUpdatePostcodeDialog=function(){console.log("BuildPriceService.events.closePostcodeDialog",arguments);angular.element("tags-input").addClass("is-submitted");n.$broadcast(c.events.closePostcodeDialog);n.sendRoadblockForm()};n.closeUpdatePostcodeSlideout=function(){console.log("BuildPriceService.events.confirmPostcodeFromSlideout",arguments);angular.element("tags-input").addClass("is-submitted");n.$broadcast(c.events.confirmPostcodeFromSlideout)};n.getRoadblockData=function(){var i=e.getLexusVehicle(),t;return n.bp.data.postcodes&&n.bp.data.postcodes.length>0&&n.bp.data.postcodes[0].data&&(t=n.bp.data.postcodes[0].data.postcode),y.attachEloquaFields({Email:n.bp.roadblockData.email,FirstName:n.bp.roadblockData.firstname,EngineVariant:n.bp.data.vehicle.engineVariant?n.bp.data.vehicle.engineVariant:i.engineVariant,Postcode:t})};n.setUserInteraction=function(t){t.userInitiated&&(n.bp.data.userInteraction=!0)};n.sendRoadblockForm=function(){n.bp.roadblockData.email&&u({method:"POST",url:f("formatArgs")(Lexus.API.FormSubmission.Roadblock,[Lexus.ID.Site]),data:n.getRoadblockData()}).then(function(){var n="Roadblock form sent.";console.info?console.info(n):console.log(n)},function(n){console.error?console.error(n):console.log("Roadblock form could not be sent.")})};n.hasLocation=function(){return b.data.vehicle.postcode&&b.data.vehicle.postcode.length>0};n.$on(c.events.triggerSaveBuildPriceDialog,function(){n.bp.data.openSaveBuildPriceDialog=!0;n.$broadcast(c.events.openSaveBuildPriceDialog,n.bp.data.vehicle)});n.$on(c.events.triggerCloseSaveBuildPriceDialog,function(){n.bp.data.openSaveBuildPriceDialog=!1});n.$on(c.events.modelSelected,function(t,i){i.clearDownstream&&n.clearDownstream(5,i);n.setUserInteraction(i);n.bp.data.vehicle.carmodel=i.selection;n.saveCurrentState()});n.$on(c.events.engineVariantSelected,function(t,i){i.clearDownstream&&n.clearDownstream(4,i);n.setUserInteraction(i);n.bp.data.vehicle.engineVariant=i.selection;n.saveCurrentState()});n.$on(c.events.gradeSelected,function(t,i){i.clearDownstream&&n.clearDownstream(3,i);n.setUserInteraction(i);n.bp.data.vehicle.grade=i.selection;n.saveCurrentState()});n.$on(c.events.enhancementPackSelected,function(t,i){i.clearDownstream&&n.clearDownstream(2,i);n.setUserInteraction(i);n.bp.data.vehicle.enhancementPack=i.selection?i.selection:i;n.saveCurrentState();n.setUserInteraction(i)});n.$on(c.events.trimSelected,function(t,i){i.clearDownstream&&n.clearDownstream(1,i);n.setUserInteraction(i);n.bp.data.vehicle.trim=i.selection});n.$on(c.events.paintSelected,function(t,i){n.clearDownstream(0,{userInitiated:!1});n.setUserInteraction(i);n.bp.data.vehicle.colour=i.uriName;n.bp.data.vehicle.colourId=i.materialCode;n.saveCurrentState()});n.$on(c.events.threeSixtyLoad,function(t,i){n.bp.data.vehicle.specifics=i;v.getExteriorImages(n.bp.data.vehicle.engineVariant,i.gradeId,i.variantId,i.trimId,i.materialCode,function(t){n.bp.data.vehicleImage=t.threeSixtyImagesDesktop[2]});n.bp.data.paintResolved=!1});n.$on(c.events.threeSixtyLoaded,function(){n.bp.data.paintResolved=!0});n.$on(c.events.userSelection,function(t,r){var u=250;n.bp.data.driveAwayPriceLoadingTimeout=i(function(){n.bp.data.driveAwayPriceLoading=!0},u);n.bp.data.vehicleLoadingTimeout=i(function(){n.bp.data.vehicleLoading=!0},u);console.log("BuildPriceService.events.userSelection: ",r,"\n driveAwayPriceLoading",n.bp.data.driveAwayPriceLoading,"\n vehicleLoading: ",n.bp.data.vehicleLoading)});n.$on(c.events.priceLoad,function(){n.bp.data.driveAwayPriceLoadingTimeout&&i.cancel(n.bp.data.driveAwayPriceLoadingTimeout);n.bp.data.driveAwayPriceLoadingTimeout=i(function(){n.bp.data.driveAwayPriceLoading=!0},100)});n.$on(c.events.priceDone,function(){n.bp.data.driveAwayPriceLoadingTimeout&&i.cancel(n.bp.data.driveAwayPriceLoadingTimeout);n.bp.data.driveAwayPriceLoading=!1});n.$on(c.events.priceReceived,function(t,i){n.bp.data.apiResults.price=i;n.bp.data.pricing.driveAway=i.driveAway;n.bp.data.pricing.driveAwayPerMonth=i.installmentPerMonth;n.bp.data.pricing.itemised.rrp=i.listPriceIncGST;n.bp.data.pricing.itemised.premiumPaint=i.paintPrice;n.bp.data.pricing.itemised.enhancementPack=i.enhancementPackValue;n.bp.data.pricing.itemised.dealerDelivery=i.dealerDelivery;n.bp.data.pricing.onroads.total=i.onRoadCosts;n.bp.data.pricing.onroads.registration=i.registrationAmount;n.bp.data.pricing.onroads.ctp=i.ctpInsuranceAmount;n.bp.data.pricing.onroads.stampDuty=i.stampDuty;n.bp.data.pricing.onroads.luxuryCarTax=i.luxuryCarTax});n.$on(c.events.priceError,function(t,i){console.log("priceError: ",i);n.bp.data.pricing.driveAway="n/a"});n.$on(c.events.vehicleDataReceived,function(t,i){c.vehicleData=i;n.$broadcast(c.events.vehicleDataRelay,b.data.apiResults.vehicleData)});n.$on(c.events.enhancementPacksReceived,function(n,t){b.data.apiResults.enhancementPacks=t});n.$on(c.events.trimsReceived,function(n,t){b.data.apiResults.trims=t});n.$on(c.events.paintsReceived,function(t,i){b.data.apiResults.colours=i;n.$broadcast(c.events.paintDataRelay,b.data.apiResults.colours)});n.$on(c.events.invalidSelectionError,function(t,i){var r=i.clearDownstreamTargets!=null?i.clearDownstreamTargets:[1,2,3,4,5],e=["carmodel","engineVariant","grade","enhancementPack","trim","colour"],u,f;if(n.bp.data.userInteraction||n.navigateToPage(0),n.bp.data.userInteraction)switch(i.controllerName){case c.stepIds.MODEL:console.warn("Reselection caused validation error downstream from "+i.controllerName);u="One or more of your preferences is unavailable for your current selection. Please reconfigure your vehicle.";r=n.bp.data.userInteraction?[1,2,3,4,5]:r;break;case c.stepIds.GRADE:console.warn("Reselection caused validation error downstream from "+i.controllerName);u="One or more of your preferences is unavailable for your current selection. Please reconfigure your vehicle.";r=n.bp.data.userInteraction?[2,3,4,5]:r;break;case c.stepIds.ENHANCEMENT_PACK:console.warn("Reselection caused validation error downstream from "+i.controllerName);u="One or more of your preferences is unavailable for your current selection. Please reconfigure your vehicle.";r=n.bp.data.userInteraction?[3,4,5]:r;break;case c.stepIds.PAINT_TRIM:console.warn("Reselection caused validation error downstream from "+i.controllerName);u="One or more of your preferences is unavailable for your current selection. Please reconfigure your vehicle.";r=n.bp.data.userInteraction?[4,5]:r}else console.warn("Deep link caused validation error downstream from "+i.controllerName),u="One or more of your preferences is unavailable for your current selection. Please reconfigure your vehicle.";for(f=0;f<r.length;f++)n.bp.data.vehicle[e[r[f]]]=null;n.saveCurrentState();n.$emit("open-modal-window",{content:u,wrapper:["<p style='padding: 20px 65px 0px 20px; text-align: left'>","<\/p>"]})});n.$watch("bp.data.vehicle",function(n){console.log("%c bp.data.vehicle changed:","color: blue;",n)});n.$watchGroup(["bp.data.vehicle.carmodel","bp.data.vehicle.engineVariant","bp.data.vehicle.specifics.paintId","bp.data.vehicle.colourId"],function(n,t,r){for(var u in n)if(!n[u])return;r.bp.data.activeIndex==0&&r.$broadcast(c.events.gtmEvent,{source:"Default",data:r.bp.data.vehicle});i.cancel(r.bp.data.vehicleLoadingTimeout);r.bp.data.vehicleLoading=!1},!0);n.saveCurrentState=function(){n.pushURI(n.bp.data.vehicle);n.$emit("vehicle-preference-change",{model:n.bp.data.vehicle.carmodel,grade:n.bp.data.vehicle.grade,engineVariant:n.bp.data.vehicle.engineVariant,enhancementPack:n.bp.data.vehicle.enhancementPack,trim:n.bp.data.vehicle.trim,colour:n.bp.data.vehicle.colour})};n.$watchGroup(["bp.data.vehicle.carmodel","bp.data.vehicle.engineVariant","bp.data.postcodes"],function(n,i,r){if(r.bp.data.vehicle.carmodel&&r.bp.data.vehicle.engineVariant?r.bp.data.steps.forEach(function(n){n.disabled=!1}):(r.bp.data.steps.forEach(function(n){n.disabled=!0}),r.bp.data.steps[0].disabled=!1),n[0]){if(typeof document!="undefined"){const t=new CustomEvent(c.events.modelSelectedUpdateMenu,{detail:n[0]});document.dispatchEvent(t)}t.$broadcast(c.events.modelSelectedUpdateMenu,n[0])}})}return n.$inject=["$scope","$rootScope","$timeout","$location","$http","$filter","UserPreferencesService","DealersService","PricingService","AddressSuggestService","BuildPriceService","ngDialog","$anchorScroll","BuildPriceAPIService","EloquaService","HttpPendingRequestsService","Geodecode"],{scope:!0,restrict:"A",controller:n,controllerAs:"bp",bindToController:!0,link:function(n,t,i){n.bp=n.bp||{};try{n.bp.settings=JSON.parse(i.bpSettings)}catch(r){console.error(r.message)}n.bp.settings=n.bp.settings||{};n.bp.settings.debug=n.bp.settings.debug==="true"?!0:!1;n.bp.settings.disableDiffPricing=n.bp.settings.disableDiffPricing==="true"?!0:!1;n.bp.settings.hideSaveBuild=n.bp.settings.hideSaveBuild==="true"?!0:!1;n.bp.settings.enablePricingByZone=n.bp.settings.enablePricingByZone==="true"?!0:!1;n.bp.roadblockData={};n.bp.data={steps:$.makeArray(t.find(".lx-range-build-price__section-js").map(function(n,t){var i=$(t);return{id:i.attr("data-id"),label:i.attr("data-label"),disabled:(i.attr("data-disabled")||"").toLowerCase()=="true",route:i.attr("data-route"),nextLabel:i.attr("data-label-next")||"Next",element:i}})),userInteraction:!1,activeIndex:0,paintResolved:!1,vehicleLoading:!1,overviewDataReceived:!1,driveAwayPriceLoading:!1,pricingErrors:[],openSaveBuildPriceDialog:!1,onOfferText:null,vehicle:{carmodel:n.bp&&n.bp.data&&n.bp.data.vehicle&&n.bp.data.vehicle.carmodel?n.bp.data.vehicle.carmodel:null,engineVariant:n.bp&&n.bp.data&&n.bp.data.vehicle&&n.bp.data.vehicle.engineVariant?n.bp.data.vehicle.engineVariant:null,grade:n.bp&&n.bp.data&&n.bp.data.vehicle&&n.bp.data.vehicle.grade?n.bp.data.vehicle.grade:null,postcode:"",enhancementPack:n.bp&&n.bp.data&&n.bp.data.vehicle&&n.bp.data.vehicle.enhancementPack?n.bp.data.vehicle.enhancementPack:null,colour:n.bp&&n.bp.data&&n.bp.data.vehicle&&n.bp.data.vehicle.colour?n.bp.data.vehicle.colour:null,trim:n.bp&&n.bp.data&&n.bp.data.vehicle&&n.bp.data.vehicle.trim?n.bp.data.vehicle.trim:null,colourId:n.bp&&n.bp.data&&n.bp.data.vehicle&&n.bp.data.vehicle.colourId?n.bp.data.vehicle.colourId:null,pricingZone:""},vehicleImage:"",apiResults:{vehicleData:{},enhancementPacks:{},colours:{},trims:{}},postcodes:[],pricing:{driveAway:"",driveAwayPerMonth:"",itemised:{rrp:"",premiumPaint:"",enhancementPack:"",dealerDelivery:""},onroads:{total:"",registration:"",ctp:"",stampDuty:"",luxuryCarTax:""}},hostOrigin:""};n.init();n.bp.showSlideOutTray=!1}}}]).controller("lxBuildPriceRouteController",["$scope","$location","BuildPriceService",function(n,t,i){function r(n,t){return t+(t[t.length-1]===n?"":n)}function u(){var f=n.getArgPath(),r,t,u;if(f!=""){for(n.bp.routing.currentUri=i.encodeUriFragment(f),r=f.split("/"),((n.bp=n.bp||{}).data=n.bp.data||{}).vehicle=n.bp.data.vehicle||{},t=0;t<r.length;t++)n.bp.data.vehicle[n.bp.routing.argIdx[t]]=i.decodeUriFragment(r[t]);for(t=t;t<n.bp.routing.argIdx.length;t++)n.bp.data.vehicle[n.bp.routing.argIdx[t]]=null;r.length>n.bp.routing.argIdx.length&&(u=parseInt(r[n.bp.routing.argIdx.length]),isNaN(u)||(u--,i.waitFor.call(n,"bp.data.steps",i.waitCondition.NOTNULL).then(function(t){t.length>u&&n.navigateToPage(u,!1)})));n.$broadcast(i.events.gtmEvent,{source:"Initial",data:n.bp.data.vehicle})}}n.bp=n.bp||{};n.bp.routing=i.routingSettings;n.routeInit=function(t){t&&t.baseUrl&&(n.bp.routing.baseUrl=t.baseUrl)};n.getArgPath=function(){var i=r("/",n.bp.routing.baseUrl);return r("/",t.$$path).replace(i,"")};n.pushURI=function(){for(var u,f="",e=!0,r=0;r<n.bp.routing.argIdx.length;r++){if(!n.bp.data.vehicle[n.bp.routing.argIdx[r]]){e=!1;break}f+="/"+i.encodeUriFragment(n.bp.data.vehicle[n.bp.routing.argIdx[r]])}e&&(f+="/"+n.bp.data.steps.length);u=i.encodeUriPath(f);n.bp.routing.currentUri=u;history.pushState&&t.path(n.bp.routing.baseUrl+u)};n.$on(i.events.overviewDataReceived,function(){u()})}])}(),function(){"use strict";angular.module("Lexus.Directives").config(["$rootScopeProvider",function(n){n.digestTtl(1e3)}]).directive("lxRangePreLaunch",[function(){function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v){function p(n){var t=n.data;for(var i in t)y.data.vehicle[i]=t[i];n.data=y.data.vehicle}var y=this;n.UserPreferencesService=e;n.init=function(){n.loadUserPreferences();var t=n.UserPreferencesService.getPersonalizationState();n.pl.data.lifestyle=t;v.getModels().then(n.ReceiveModels)};n.loadUserPreferences=function(){var i=n.UserPreferencesService.getLexusVehicle(),t=n.pl.data.vehicle;i&&(t.carmodel=t.carmodel?t.carmodel:i.model,t.engineVariant=t.engineVariant?t.engineVariant:t.carmodel?i.engineVariant:null)};n.ReceiveModels=function(){y.vehicleData=v.data;y.data.overviewDataReceived=!0;console.info("%c 0. lxRangePreLaunch -> ReceivedOverviewData: ","color: darkblue; ",v.data)};t.$on("personalization-change",function(t,i){i&&i.lifestyle&&(n.pl.data.lifestyle=i)});t.$on("vehicle-preference-change",function(t,i){i&&i.engineVariant&&(n.pl.data.vehicle.engineVariant=i.engineVariant)});n.$on("pre-launch-gtm-event",function(n,i){p(i);t.$broadcast("gtm-preLaunch",angular.copy(i))})}return n.$inject=["$scope","$rootScope","$timeout","$location","$http","$filter","UserPreferencesService","DealersService","PricingService","AddressSuggestService","BuildPriceService","ngDialog","$anchorScroll","PreLaunchAPIService","EloquaService","HttpPendingRequestsService","Geodecode"],{scope:!0,restrict:"A",controller:n,controllerAs:"pl",bindToController:!0,link:function(n,t,i){n.pl=n.pl||{};try{n.pl.settings=JSON.parse(i.plSettings)}catch(r){console.error(r.message)}n.pl.settings=n.pl.settings||{};n.pl.data={vehicle:{carmodel:null,engineVariant:null,grade:null,postcode:"",enhancementPack:null,colour:null,trim:null,colourId:null},lifestyle:null,overviewDataReceived:!1};n.init()}}}]).controller("lxPreLaunchRouteController",["$scope","$location","BuildPriceService",function(n){n.pl=n.pl||{};n.routeInit=function(){}}])}(),function(){"use strict";angular.module("Lexus.Directives").directive("lxPreLaunchInterior",[function(){function n(n,t,i,r){function e(){}function f(t,i){n.filterKey=t;u.trims=r.getInteriorsByGradeName(u.selectedEngineVariant,t)||[];u.activeTrim=u.trims[0];u.trims.length>0&&n.$emit("pre-launch-gtm-event",{source:i==!0?"Initial":"interior",data:{grade:t,trim:u.activeTrim.name}})}var u=this;u.vehicleData=null;u.gradesList=null;u.trims=null;u.currentGradeIndex=0;n.$watch("plInterior.overviewDataReceived",function(t){t!=null&&t===!0&&(u.gradesList=r.getGradesList(u.selectedEngineVariant),n.gradeChange(u.gradesList[0],!0))});n.$watch("plInterior.selectedEngineVariant",function(t){t!=null&&u.overviewDataReceived&&(u.gradesList=r.getGradesList(t),n.gradeChange(u.gradesList[0]))});n.activeTab=function(t){return t==n.filterKey};n.gradeChange=function(n,t){var i=u.gradesList.indexOf(n);u.currentGradeIndex=i>0?i:0;f(n,t)};n.nextGrade=function(){u.currentGradeIndex+1<u.gradesList.length&&(u.currentGradeIndex++,f(u.gradesList[u.currentGradeIndex]))};n.prevGrade=function(){u.currentGradeIndex-1>=0&&(u.currentGradeIndex--,f(u.gradesList[u.currentGradeIndex]))};e()}return n.$inject=["$scope","$timeout","PreLaunchVehicleService","PreLaunchAPIService"],{scope:{selectedModel:"<carmodel",selectedEngineVariant:"<variant",overviewDataReceived:"<overview"},restrict:"A",controller:n,controllerAs:"plInterior",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)})}}}])}(),function(){"use strict";angular.module("Lexus.Directives").directive("lxPreLaunchExterior",[function(){function n(n,t,i,r){function e(){}function f(t,i){n.filterKey=t;u.paints=r.getExteriorsByGradeName(u.selectedEngineVariant,t)||[];u.activePaint=u.paints[0];u.paints.length>0&&n.$emit("pre-launch-gtm-event",{source:i==!0?"Initial":"exterior",data:{grade:t,colour:u.activePaint.name}})}var u=this;u.gradesList=null;u.paints=null;u.lifestyleImg=null;u.currentGradeIndex=0;n.$watch("plExterior.overviewDataReceived",function(t){t!=null&&t===!0&&(u.gradesList=r.getGradesList(u.selectedEngineVariant),n.gradeChange(u.gradesList[0],!0))});n.$watch("plExterior.selectedEngineVariant",function(t){t!=null&&u.overviewDataReceived&&(u.gradesList=r.getGradesList(t),n.gradeChange(u.gradesList[0]))});n.$watch("plExterior.lifestyle",function(n){n!=null&&n.lifestyle&&(u.lifestyleImg=n.lifestyle.image)});n.activeTab=function(t){return t==n.filterKey};n.nextGrade=function(){u.currentGradeIndex+1<u.gradesList.length&&(u.currentGradeIndex++,f(u.gradesList[u.currentGradeIndex]))};n.prevGrade=function(){u.currentGradeIndex-1>=0&&(u.currentGradeIndex--,f(u.gradesList[u.currentGradeIndex]))};n.gradeChange=function(n,t){var i=u.gradesList.indexOf(n);u.currentGradeIndex=i>0?i:0;f(n,t)};e()}return n.$inject=["$scope","$timeout","PreLaunchVehicleService","PreLaunchAPIService"],{scope:{selectedModel:"<carmodel",selectedEngineVariant:"<variant",overviewDataReceived:"<overview",lifestyle:"<lifestyle"},restrict:"A",controller:n,controllerAs:"plExterior",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)})}}}])}(),function(){"use strict";var n="EVENT_CAROUSEL_ITEMS_FINISHED_RENDERING";angular.module("Lexus.Directives").directive("lxGradeSelector",[function(){function t(t,i,r,u,f){var o=this,e,s;o.gradesList=null;s={responsive:{0:{items:1,autoWidth:!1,dots:!0,stagePadding:20},768:{items:2},992:{items:3,dots:!1}},margin:10,startPosition:t.startPosition||0};t.$watch("gi.overviewDataReceived",function(n){n!==null&&n===!0&&(o.gradesList=f.getGradesByEngineVariant("UX 200"))});t.$watch("gi.selectedEngineVariant",function(n){n!==null&&o.overviewDataReceived&&(typeof e!="undefined"&&(e.trigger("destroy.owl.carousel"),e.find(".owl-stage-outer").children().unwrap()),o.gradesList=f.getGradesByEngineVariant(n))});t.$on(n,function(){typeof e=="undefined"&&(e=$(i).find(".js-owl-carousel"));r(function(){e.owlCarousel(s)})})}return t.$inject=["$scope","$element","$timeout","PreLaunchVehicleService","PreLaunchAPIService"],{scope:{selectedModel:"<carmodel",selectedEngineVariant:"<variant",overviewDataReceived:"<overview",startPosition:"=?startPosition"},restrict:"A",controller:t,controllerAs:"gi",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)})}}}]).directive("lxGradeSelectorCarouselItems",[function(){return{restrict:"A",link:function(t){t.$last&&t.$emit(n)}}}])}(),function(){"use strict";function n(){function n(n){var t=this;t.selectedSwatch=n.selectedSwatch}return n.$inject=["$scope","$window"],{scope:{swatchChooserModel:"=swatchChooserModel",selectedSwatch:"=selectedSwatch"},controller:n,controllerAs:"$ctrl",restrict:"A",transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)})}}}angular.module("Lexus.Directives").directive("lxSwatchChooser",[n])}(),function(){"use strict";angular.module("Lexus.Directives").directive("lxCompareVehiclesModel",[function(){function n(n,t,i,r,u){function e(){u.getModels().then(n.ReceiveModels)}var f=this;f.vehicleData=null;f.modelSelected=!1;n.setModelHeights=function(){t(function(){var f,i,o,n,r;if(window.innerWidth>767)for(f=angular.element(".lx-range-compare-model-chooser__models"),i=0,o=f.length;i<o;i++){var u=f[i].querySelectorAll(".lx-range-compare-model-chooser-model"),t=[],e=0;for(n=0,r=u.length;n<r;n++)t.push(u[n].clientHeight);if(t.sort(),e=t[t.length-1],t[0]!=e)for(n=0,r=u.length;n<r;n++)u[n].setAttribute("style","height:"+e+"px;")}},0,!1)};n.emitEngineVariantSelected=function(t,i,u,f){var e={selection:t.uriName,clearDownstream:t!=i&&i!=null,userInitiated:u,carModel:{name:f.name,imageSrc:f.imageSrc,imageAlt:f.imageAlt}};n.$emit(r.events.engineVariantSelected,e)};n.variantHasOffer=function(t){var i=!1;return t.modelEngineVariants.forEach(function(t){n.isOnOffer(t)&&(i=!0)}),i};n.isOnOffer=function(n){return n.onOffer};n.emitModelSelected=function(t,i,u,f,e){var o,s;u&&(o=f.replace(/\s+/g,""),setTimeout(function(){$("html, body").animate({scrollTop:$(o).offset().top-10},250)},500));n.$emit(r.events.onOfferText,null);s={selection:i===t.uriName?null:t.uriName,clearDownstream:t!=i&&i!=null,userInitiated:u,modelTouched:t.uriName,bodyType:e};n.$emit(r.events.modelSelected,s)};n.ReceiveModels=function(){f.vehicleData=u.data;console.info("%c 0. buildPriceModelController -> ReceiveModels: ","color: darkblue; ",u.data);n.$emit(r.events.overviewDataReceived,u.data);n.setModelHeights()};n.$on(r.events.pageNavigationBroadcast,function(n,t){var i=t.id=="model";f.isCurrentStep=i});n.$watch("cvModel.selectedModel",function(n){if(n!=null&&!f.modelSelected){var t=".contains-model--"+n.replace(/\s+/g,"");setTimeout(function(){$("html, body").animate({scrollTop:$(t).offset().top-10},250)},600);f.modelSelected=!0}});e()}return n.$inject=["$scope","$timeout","VehicleService","BuildPriceService","BuildPriceAPIService"],{scope:{selectedModel:"<carmodel",selectedEngineVariant:"<variant",modelsBrowsed:"<modelsbrowsed",compareVariantsSelected:"<variantsselected",compareVehiclesCount:"<compareVehiclesCount",compareModelsSelected:"<modelsselected",compareVehicleTriggered:"<comparecomplete"},restrict:"A",controller:n,controllerAs:"cvModel",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)})}}}])}();angular.module("Lexus.Directives").directive("lxCompareVehiclesFooter",[function(){function n(n,t,i,r){var u=this;n.init=function(){};n.compareVehicles=function(){n.$emit(r.events.onCompareVehicles,{})};n.getImageSource=function(n){return u.compareVariantsSelected?(u.compareVariantsSelected.length>n&&u.compareVariantsSelected[n]!=""&&u.vehicleData[u.compareVariantsSelected[n]]!="undefined"?u.vehicleData[u.compareVariantsSelected[n]].imageSrc:Lexus.Paths.RangeCompareSilhouette)+"?w=600":Lexus.Paths.RangeCompareSilhouette+"?w=600"};n.getImageAlt=function(n){return u.compareVariantsSelected?u.compareVariantsSelected.length>n&&u.compareVariantsSelected[n]!=""?u.vehicleData[u.compareVariantsSelected[n]].imageAlt:"":""}}return n.$inject=["$scope","$window","$element","BuildPriceService"],{scope:{compareVariantsSelected:"<variantsselected",compareVehiclesCount:"<compareVehiclesCount",vehicleData:"<vehicleData",removeVariant:"&removeSelectedVariant",hideFooter:"<hideFooter"},restrict:"A",controller:n,controllerAs:"cvFtr",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)});n.init()}}}]);angular.module("Lexus.Directives").directive("lxCompareVehiclesVehicle",[function(){function n(n,t,i,r,u,f,e,o){function c(){n.ffc.gradeId&&n.ffc.postcode&&(n.ffc.driveAwayPriceLoading=!0,o.driveAwayByGrade(n.ffc.gradeId,n.ffc.postcode).then(function(t){t.status==="Success"?t.data&&t.data.driveAway?(n.ffc.driveAwayPrice=t.data.driveAway,n.ffc.pricingSuccess=!0):(n.ffc.driveAwayPrice="n/a",n.ffc.pricingSuccess=!1):(n.ffc.driveAwayPrice="n/a",n.ffc.pricingSuccess=!1)},function(){n.ffc.driveAwayPrice="n/a";n.ffc.pricingSuccess=!1}).finally(function(){n.ffc.driveAwayPriceLoading=!1;l()}))}function l(){n.ffc.pricingSuccess?r.removeClass("pricing-error"):r.addClass("pricing-error")}function a(n){return s.compareVariantsSelected?(s.compareVariantsSelected.length>n&&s.compareVariantsSelected[n]!=""&&s.vehicleData[s.compareVariantsSelected[n]]!="undefined"?s.vehicleData[s.compareVariantsSelected[n]].imageSrc:Lexus.Paths.RangeCompareSilhouette)+"?w=600":Lexus.Paths.RangeCompareSilhouette+"?w=600"}function v(){n.ffc.imageTransitionInProgress=!0;u(function(){n.ffc.vehicleImageSource=n.ffc.carModelObject.imageSrc+"?w=600"},250);u(function(){n.ffc.imageTransitionInProgress=!1},500)}function y(){if(n.ffc.variantInit)if(n.ffc.form.data.engineVariantAndGrade==null)n.ffc.engineVariant=n.ffc.carModelObject&&n.ffc.carModelObject.modelEngineVariants&&n.ffc.carModelObject.modelEngineVariants.length>0?n.ffc.carModelObject.modelEngineVariants[0]:null;else{n.ffc.engineVariant=f.findEngineVariantInVehicleData(n.ffc.form.data.engineVariant);n.ffc.grade=h(n.ffc.form.data.grade);n.ffc.gradeId=n.ffc.grade.gradeID;return}else n.ffc.compareVariantsSelected&&n.ffc.compareVariantsSelected.length>0&&(n.ffc.variantInit=!0,n.ffc.engineVariant=f.findEngineVariantInVehicleData(n.ffc.compareVariantsSelected[n.ffc.vehicleIndex]));n.ffc.form.data.engineVariantAndGrade=w();n.ffc.grade=h(null);n.ffc.gradeId=n.ffc.grade.gradeID}function h(t){if(n.ffc.engineVariant&&n.ffc.engineVariant.grades&&n.ffc.engineVariant.grades.length>0){var i=n.ffc.engineVariant.grades.map(function(n){return{name:n.name,gradeID:n.id,gradeMDM:n.gradeID,paints:n.availablePaints,trims:n.availableTrims}});return t==null?i[0]:p(t,i)}return null}function p(n,t){return t.find(function(t){return t.name===n})}function w(){var t=h(null);return n.ffc.engineVariant.name+";"+(t?t.name:"")}function b(t){t&&t.length>0&&(n.ffc.form.data.enhancementPack=t[0].uriName,n.$emit(e.events.enhancementPackSelected,{enhancementPack:n.ffc.form.data.enhancementPack,vehicleIndex:n.ffc.vehicleIndex}))}var s=this;n.$watch("ffc.postcode",e.watchDebounce(function(n){n!=null&&(console.info("%c compareVehiclesVehicleController received POSTCODE: ","color: green; ",n),c())},50),!0);n.$watch("ffc.gradeId",e.watchDebounce(function(n){n!=null&&(console.info("%c compareVehiclesVehicleController gradeID Changed: ","color: blue; ",n),c())},50),!0);t.$on("vehicle-preference-change",function(t,i){i.vehicleIndex==n.ffc.vehicleIndex&&(n.ffc.carModelObject=f.findModelInVehicleData(i.model),v(n),y(),f.getVariants(n.ffc.engineVariant.name,n.ffc.gradeId,b),n.$emit(e.events.gradeSelected,{carmodel:n.ffc.carModelObject.name,engineVariant:n.ffc.engineVariant.name,grade:n.ffc.grade.name,enhancementPack:n.ffc.form.data.enhancementPack,trim:n.ffc.grade.trims[0].shortName,colour:n.ffc.grade.paints[0].shortName,gradeId:n.ffc.grade.gradeMDM,vehicleIndex:n.ffc.vehicleIndex}))});n.init=function(){n.ffc.vehicleImageSource=a(n.ffc.vehicleIndex);n.ffc.form.data.carmodel=n.ffc.compareModelsSelected&&n.ffc.compareModelsSelected.length>0?n.ffc.compareModelsSelected[n.ffc.vehicleIndex]:"";n.ffc.carModelObject=f.findModelInVehicleData(n.ffc.form.data.carmodel);n.ffc.engineVariant=f.findEngineVariantInVehicleData(n.ffc.compareVariantsSelected[n.ffc.vehicleIndex]);t.$broadcast("field-car-model-engine-variant-update-selected",{vehicleIndex:n.ffc.vehicleIndex});setTimeout(function(){window.scrollTo(0,angular.element(".lx-range-compare-vehicles")[0].offsetTop)},600)};n.getImageAlt=function(n){return s.compareVariantsSelected?s.compareVariantsSelected.length>n&&s.compareVariantsSelected[n]!=""?s.vehicleData[s.compareVariantsSelected[n]].imageAlt:"":""};n.onVehicleSectionClick=function(){n.$emit(e.events.compareVehicleActiveSelection,n.ffc.vehicleIndex)};n.updatePostCode=function(){n.$emit(e.events.openPostcodeDialog)};n.headerLink=function(t,i){return t?t:i+"/"+n.getBuildPriceLink()};n.getBuildPriceLink=function(){if(n.ffc.form&&n.ffc.form.data&&n.ffc.form.data.enhancementPack){var t={carmodel:n.ffc.carModelObject.name,engineVariant:n.ffc.engineVariant.name,grade:n.ffc.grade.name,enhancementPack:n.ffc.form.data.enhancementPack,colour:n.ffc.grade.paints.length>0?n.ffc.grade.paints[0].shortName:"",trim:n.ffc.grade.trims.length>0?n.ffc.grade.trims[0].shortName:""};return e.getBuildPriceLink(t,3)}return""}}return n.$inject=["$scope","$rootScope","$window","$element","$timeout","BuildPriceAPIService","BuildPriceService","PricingService"],{scope:{compareModelsSelected:"<modelsselected",compareVariantsSelected:"<variantsselected",compareVehiclesCount:"<compareVehiclesCount",vehicleData:"<vehicleData",removeVariant:"&removeSelectedVariant",activeVehicleIndex:"<activeVehicleIndex",postcode:"<postcode",vehicleSelected:"&onVehicleSelected"},restrict:"A",controller:n,controllerAs:"ffc",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)});n.ffc=n.ffc||{};n.ffc.vehicleIndex=i.vehicleIndex||"0";n.ffc.engineVariant=null;n.ffc.carModelObject=null;n.ffc.variantInit=!1;n.ffc.imageTransitionInProgress=!1;n.ffc.grade=null;n.ffc.gradeId=null;n.ffc.driveAwayPrice=null;n.ffc.driveAwayPriceLoading=!1;n.ffc.pricingSuccess=!0;n.ffc.form={data:{carmodel:null,grade:null,engineVariant:null,engineVariantAndGrade:null,enhancementPack:null,trim:null,colour:null},settings:{hideDefaultSelectOption:!0}};n.init()}}}]);angular.module("Lexus.Directives").directive("lxCompareRangeSpec",[function(){function n(n,t,i,r,u,f,e,o,s,h,c){function a(){if(!(n.rtd.compareGradesSelected.length<2)){n.rtd.featuresByCategoryLoading=!0;n.rtd.comparingSameVehicle=n.rtd.compareGradesSelected[0]==n.rtd.compareGradesSelected[1];var t=n.rtd.comparingSameVehicle?o.get(i("formatArgs")(Lexus.API.Lookup.RangeTechDataByGrade,[Lexus.ID.Site,n.rtd.compareGradesSelected[0]])):o.get(i("formatArgs")(Lexus.API.Lookup.RangeTechDataByGrade,[Lexus.ID.Site,n.rtd.compareGradesSelected[0],n.rtd.compareGradesSelected[1]]));t.then(function(t){t&&(n.rtd.featuresByCategoryRendering=!0,r(function(){n.rtd.data.featuresByCategory=t.data;var i=t.data.map(function(n){return angular.copy(n,{})});n.rtd.rawCustomizedFeatures=y(i,"id",n.rtd.mdmIds);n.filterFeatures(!n.rtd.allFilter);n.rtd.featuresByCategoryRendering=!1},1),n.rtd.featuresByCategoryLoading=!1)},function(t){h.error(t);n.rtd.featuresByCategoryLoading=!1})}}function y(t,i,r){if(!r)return n.rtd.comparingSameVehicle&&v(t),t;var u=[];return t.map(function(t){var e=[],f=!1;t.features.map(function(n){if(n.hasOwnProperty(i)){var t=new RegExp("(?:^|\\b)("+n[i]+")(?=\\b|$)");r.match(t)!=null&&(e.push(n),f=!0)}});f&&(t.features=e,n.rtd.comparingSameVehicle&&v([t]),u.push(t),f=!1)}),u}function v(n){return n.map(function(n){var t=Object.keys(n.grades);t.length==1&&(n.grades[t[0]+l]=n.grades[t[0]])}),n}var p=this,l="_V2";n.rtd.urlParameters=f.search();n.$watch("rtd.compareGradesSelected",c.watchDebounce(function(n){n!=null&&(console.info("%c compareGradesSelected grade updated: ","color: green; ",n.join("+")),a())},50),!0);p.apiService=o;n.init=function(){n.rtd=n.rtd||{};n.rtd.data={featuresData:null,featuresByCategory:[]};n.rtd.filteredFeatures=[];n.rtd.rawCustomizedFeatures=[];n.rtd.data.engineVariants=[];n.rtd.comparingSameVehicle=!1;n.rtd.allFilter=!0;n.rtd.featuresByCategoryRendering=!1;n.rtd.compareGradesSelected.length>=2&&a()};n.findValueByKey=function(n,t){if(t.specs)return n.indexOf(l)>-1?t.specs[n.replace(l,"")]:t.specs[n]};n.filterFeatures=function(t){if(t){n.rtd.allFilter=!1;var i=[];n.rtd.rawCustomizedFeatures.map(function(t){var u=[],f=angular.copy(t,{}),r=!1,e=Object.keys(t.grades),u=[];t.features.map(function(t){t.specs&&(r=n.findValueByKey(e[0],t)==n.findValueByKey(e[1],t));r||(u.push(t),r=!1)});f.features=u;i.push(f)});n.rtd.filteredFeatures=i;return}n.rtd.allFilter=!0;n.rtd.filteredFeatures=n.rtd.rawCustomizedFeatures.map(function(n){return angular.copy(n,{})})}}return n.$inject=["$scope","$http","$filter","$timeout","$interval","$location","$rootScope","API","$sce","$log","BuildPriceService"],{scope:{compareGradesSelected:"<gradesselected"},restrict:"A",controller:n,controllerAs:"rtd",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)});n.init();n.rtd.mdmIds=i.mdmList||""}}}]);angular.module("Lexus.Directives").directive("lxCompareVehiclesCta",[function(){function n(n,t,i,r,u,f,e){var o=this;n.headerLink=function(t,i,r){return t?t:i+"/"+n.getBuildPriceLink(r)};n.getBuildPriceLink=function(t){var i={carmodel:n.cvcta.compareModelsSelected[t],engineVariant:n.cvcta.compareVariantsSelected[t],grade:n.cvcta.compareGradesSelected[t],enhancementPack:n.cvcta.compareEpacksSelected[t],colour:n.cvcta.comparePaintsSelected[t],trim:n.cvcta.compareTrimsSelected[t]};return e.getBuildPriceLink(i,3)}}return n.$inject=["$scope","$rootScope","$window","$element","$timeout","BuildPriceAPIService","BuildPriceService","PricingService"],{scope:{compareModelsSelected:"<modelsselected",compareVariantsSelected:"<variantsselected",compareGradesSelected:"<gradesselected",compareEpacksSelected:"<epacksselected",comparePaintsSelected:"<paintsselected",compareTrimsSelected:"<trimsselected",vehicleSelected:"&onVehicleSelected"},restrict:"A",controller:n,controllerAs:"cvcta",bindToController:!0,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)});n.cvcta=n.cvcta||{}}}}]),function(){"use strict";angular.module("Lexus.Directives").config(["$rootScopeProvider",function(n){n.digestTtl(1e3)}]).directive("lxRangeCompareVehicles",[function(){function n(n,t,i,r,u,f,e,o,s,h,c,l,a){function v(n,t){var u="",i,r;if(!n)return u;for(i=0;i<t.length;i++)if(r=t[i].models.map(function(t){return t.uriName==n}),r.length>0&&r.indexOf(!0)>-1)return t[i].uriName;return u}function y(t){var r,i;t.selection?n.cv.data.compareVehicles.modelsBrowsed.indexOf(t.modelTouched+":"+t.bodyType)<0?(r=[],angular.forEach(n.cv.data.compareVehicles.modelsBrowsed,function(n){var i=n.split(":")[1];i==t.bodyType&&r.push(n)}),angular.forEach(r,function(t){var i=n.cv.data.compareVehicles.modelsBrowsed.indexOf(t);i>-1&&n.cv.data.compareVehicles.modelsBrowsed.splice(i,1)}),n.cv.data.compareVehicles.modelsBrowsed.push(t.modelTouched+":"+t.bodyType)):(i=n.cv.data.compareVehicles.modelsBrowsed.indexOf(t.modelTouched+":"+t.bodyType),i>-1&&n.cv.data.compareVehicles.modelsBrowsed.splice(i,1)):(i=n.cv.data.compareVehicles.modelsBrowsed.indexOf(t.modelTouched+":"+t.bodyType),i>-1&&n.cv.data.compareVehicles.modelsBrowsed.splice(i,1))}function p(t){n.cv.data.compareVehicles.selectedCount>=2?(n.cv.data.compareVehicles.variantsAdded.splice(1,1),n.cv.data.compareVehicles.modelsAdded.splice(1,1),n.cv.data.compareVehicles.selectedCount--):(n.cv.data.compareVehicles.variantsAdded.splice(n.cv.data.activeIndex,1,t.selection),n.cv.data.compareVehicles.modelsAdded.splice(n.cv.data.activeIndex,1,t.carModel.name),n.cv.data.activeIndex++,n.cv.data.compareVehicles.vehiclesData[t.selection]=t.carModel,n.cv.data.compareVehicles.selectedCount++)}function w(t){n.cv.data.compareVehicles.modelsAdded.splice(+t.vehicleIndex,1,t.carmodel);n.cv.data.compareVehicles.variantsAdded.splice(+t.vehicleIndex,1,t.engineVariant);n.cv.data.compareVehicles.gradesAdded.splice(+t.vehicleIndex,1,t.grade);n.cv.data.compareVehicles.paintsAdded.splice(+t.vehicleIndex,1,t.colour);n.cv.data.compareVehicles.trimsAdded.splice(+t.vehicleIndex,1,t.trim);n.cv.data.compareVehicles.gradeIdsAdded.splice(+t.vehicleIndex,1,t.gradeId)}function b(t){if(n.cv.data.compareVehicles.variantsAdded.join("")==""){n.cv.data.activeIndex=0;return}n.cv.data.activeIndex=t}var k=this;n.UserPreferencesService=e;n.BuildPriceService=o;n.init=function(){var t=n.UserPreferencesService.getLexusVisitor(),i;n.tagsLoading=!1;t&&t.postCode&&t.suburb&&t.state&&(i=e.getAutocompleteTagFromVisitor(t),n.cv.data.postcodes.push(i),n.cv.data.vehicle.postcode=t.postCode)};n.loadUserPreferences=function(t){var i=n.cv.data.vehicle,r=n.UserPreferencesService.getLexusVehicle(),f=r.model?{model:r.model}:null,u=n.UserPreferencesService.getCompareVehiclesState(f);u&&(i.carmodel=i.carmodel?i.carmodel:u.model);i.bodyType||(i.bodyType=v(i.carmodel,t));n.cv.data.compareVehicles.modelsBrowsed.push(i.carmodel+":"+i.bodyType)};n.loadTags=function(t){return n.tagsLoading=!0,a.setParam("term",t),a.GetResults(n.tagsLoaded)};n.tagsLoaded=function(){n.tagsLoading=!1};n.autocompleteLoading=function(){return n.tagsLoading};n.updatePostcode=function(t){n.cv.data.postcodes=[t];n.cv.data.vehicle.postcode=t.data.postcode;n.$emit("visitor-details-cookie-change",{postCode:t.data.postcode,suburb:t.data.suburb,state:t.data.state});i(function(){l.close()},300)};n.clearPostcode=function(){n.cv.data.postcodes=[];n.cv.data.vehicle.postcode=""};n.clearDownstream=function(t,i){i.userInitiated&&c.cancelAll();t>=5&&(n.cv.data.vehicle.engineVariant=null);t>=4&&(n.cv.data.vehicle.grade=null);t>=3&&(n.cv.data.vehicle.enhancementPack=null);t>=3&&(n.cv.data.vehicleImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsYAAAGRCAQAAADMAr3sAAAEOUlEQVR42u3UIQEAAAzDsM+/6SsYHkkkFDQHwFwkADBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjCQDMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAHMGAAzBjBjAMwYwIwBMGMAMwbAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwAzBsCMAcwYADMGMGMAzBjAjAEwYwDMGMCMATBjADMGwIwBzBgAMwYwYwDMGMCMATBjADMGoHq/RgGSYZc9owAAAABJRU5ErkJggg==");t>=2&&(n.cv.data.vehicle.colour=null);t>=2&&(n.cv.data.vehicle.trim=null);t>=2&&(n.cv.data.vehicleImageLoading=!0);t>=1&&(n.cv.data.vehicle.colourId=null)};n.$on(o.events.userInteraction,function(){n.cv.data.userInteraction=!0});n.$on(o.events.overviewDataReceived,function(t,i){n.loadUserPreferences(i)});n.$on(o.events.onOfferText,function(t,i){n.cv.data.onOfferText=i});n.$on(o.events.openPostcodeDialog,function(){n.ngDialog=l;l.open({template:"cvPostcodeDialogTemplate",controller:"",className:"ngdialog-theme-default",scope:n,plain:!1,showClose:!0,closeByDocument:!0,closeByEscape:!0,appendTo:!1,preCloseCallback:function(){}})});n.setPageVisited=function(){return n.cv.settings.firstVisit=!1,!0};n.setUserInteraction=function(t){t.userInitiated&&(n.cv.data.userInteraction=!0)};n.$on(o.events.modelSelected,function(t,i){i.clearDownstream&&n.clearDownstream(5,i);n.setUserInteraction(i);n.cv.data.vehicle.carmodel=i.selection;n.cv.data.vehicle.bodyType=i.bodyType;y(i);n.saveCurrentState()});n.$on(o.events.engineVariantSelected,function(t,i){i.clearDownstream&&n.clearDownstream(4,i);n.setUserInteraction(i);n.cv.data.vehicle.engineVariant=i.selection;p(i);n.saveCurrentState()});n.$on(o.events.gradeSelected,function(t,i){i.clearDownstream&&n.clearDownstream(3,i);n.setUserInteraction(i);n.cv.data.vehicle.grade=i.grade;w(i);n.saveCurrentState()});n.$on(o.events.enhancementPackSelected,function(t,i){n.cv.data.vehicle.enhancementPack=i.grade;n.cv.data.compareVehicles.ePacksAdded.splice(+i.vehicleIndex,1,i.enhancementPack);n.saveCurrentState()});n.$on(o.events.onCompareVehicles,function(){n.cv.data.compareVehiclesTriggered=!0});n.$on(o.events.compareVehicleActiveSelection,function(t,i){n.cv.data.activeVehicleIndex=i});n.$watch("cv.data.vehicle",function(n){console.log("%c cv.data.vehicle changed:","color: blue;",n)});n.saveCurrentState=function(){n.$emit("compare-vehicle-change",{model:n.cv.data.vehicle.carmodel,bodyType:n.cv.data.vehicle.bodyType,modelsBrowsed:n.cv.data.compareVehicles.modelsBrowsed.join("|"),variantsSelected:n.cv.data.compareVehicles.variantsAdded.join("|")})};n.removeSelectedVariant=function(t){t<0||(n.cv.data.compareVehicles.variantsAdded.splice(t,1,""),n.cv.data.compareVehicles.modelsAdded.splice(t,1,""),n.cv.data.compareVehicles.selectedCount--,b(t),n.saveCurrentState())};n.onVehicleSelected=function(t){n.$emit("vehicle-preference-change",{model:n.cv.data.compareVehicles.modelsAdded[t],engineVariant:n.cv.data.compareVehicles.variantsAdded[t],grade:n.cv.data.compareVehicles.gradesAdded[t]})}}return n.$inject=["$scope","$rootScope","$timeout","$location","$http","$filter","UserPreferencesService","BuildPriceService","$anchorScroll","BuildPriceAPIService","HttpPendingRequestsService","ngDialog","AddressSuggestService"],{scope:!0,restrict:"A",controller:n,controllerAs:"cv",bindToController:!0,link:function(n,t,i){n.cv=n.cv||{};try{n.cv.settings=JSON.parse(i.bpSettings)}catch(r){console.error(r.message)}n.cv.settings=n.cv.settings||{};n.cv.settings.debug=n.cv.settings.debug==="true"?!0:!1;n.cv.settings.disableDiffPricing=n.cv.settings.disableDiffPricing==="true"?!0:!1;n.cv.data={userInteraction:!1,activeIndex:0,activeVehicleIndex:0,compareVehiclesTriggered:!1,vehicleLoading:!1,onOfferText:null,compareVehicles:{selectedCount:0,variantsAdded:[],modelsBrowsed:[],modelsAdded:[],gradesAdded:[],trimsAdded:[],paintsAdded:[],ePacksAdded:[],gradeIdsAdded:[],vehiclesData:{}},vehicle:{carmodel:n.cv&&n.cv.data&&n.cv.data.vehicle&&n.cv.data.vehicle.carmodel?n.cv.data.vehicle.carmodel:null,engineVariant:n.cv&&n.cv.data&&n.cv.data.vehicle&&n.cv.data.vehicle.engineVariant?n.cv.data.vehicle.engineVariant:null,grade:n.cv&&n.cv.data&&n.cv.data.vehicle&&n.cv.data.vehicle.grade?n.cv.data.vehicle.grade:null,postcode:"",enhancementPack:n.cv&&n.cv.data&&n.cv.data.vehicle&&n.cv.data.vehicle.enhancementPack?n.cv.data.vehicle.enhancementPack:null,colour:n.cv&&n.cv.data&&n.cv.data.vehicle&&n.cv.data.vehicle.colour?n.cv.data.vehicle.colour:null,trim:n.cv&&n.cv.data&&n.cv.data.vehicle&&n.cv.data.vehicle.trim?n.cv.data.vehicle.trim:null,colourId:n.cv&&n.cv.data&&n.cv.data.vehicle&&n.cv.data.vehicle.colourId?n.cv.data.vehicle.colourId:null,bodyType:n.cv&&n.cv.data&&n.cv.data.vehicle&&n.cv.data.vehicle.bodyType?n.cv.data.vehicle.bodyType:null},vehicleImage:"",postcodes:[]};n.init()}}}])}();angular.module("Lexus.Directives").directive("lxSaveBuildPrice",[function(){function n(n,t,i,r,u,f,e){function s(){return{name:"Configure",imgSrc:"Assets/Lexus/MainSite/images/placeholders/save-build/placeholder.png",buildPriceLink:n.sbp.buildPriceUri,id:null}}function o(t){n.sbp.status=n.sbp.loggedIn?t&&t.length>0?"Saved Vehicle(S)":"No Saved Vehicle(S)":"Retrieve Saved Vehicles"}function a(n){var t=[];return n?(n.map(function(n){t.push(h(n,n.id))}),t):t}function h(t,i){try{return n.sbp.data.engineVariantObj=e.findEngineVariantInVehicleData(t.engineVariant),{name:t.engineVariant,imgSrc:t.carImageSource,buildPriceLink:n.sbp.buildPriceUri+"/"+f.getBuildPriceLink(t,5),id:i}}catch(r){return s()}return null}function p(){console.info("%c 9. Exterior Images  Resolved","color: blue; ","Complete");n.sbp.data.savedVehicles=a(n.virtualSavedStates);n.sbp.loadingVehicles=!1}function v(){n.sbp.loadingVehicles=!0;p();return}function w(){if(n.sbp.data.vehicleToSave.id=b(),n.sbp.data.vehicleToSave.timeStamp=(new Date).getTime(),n.sbp.data.vehicleToSave)return JSON.stringify(n.sbp.data.vehicleToSave);var t=r.getLexusVehicle()||{model:""},i=n.sbp.data.vehicleToSave;return t&&(t.model&&(i.carmodel=t.model),t.engineVariant&&(i.engineVariant=t.engineVariant),t.grade&&(i.grade=t.grade),t.enhancementPack&&(i.enhancementPack=t.enhancementPack),t.trim&&(i.trim=t.trim),t.colour&&(i.colour=t.colour)),JSON.stringify(i)}function b(){return n.sbp.activeModel?n.sbp.activeModel:null}function c(){return n.sbp.activeModel?n.sbp.activeModel:n.sbp.data.savedVehicles.length>=n.sbp.vehicleMaxLimitToSave?(n.sbp.activeModel=n.sbp.data.savedVehicles[0].id,n.sbp.activeModel):null}function y(t,i){var f=!1,r=0,u;n.sbp.data.savedVehicles.map(function(n,u){n.id==i&&(f=!0,n=t,r=u)});f?t?n.sbp.data.savedVehicles.splice(r,1,t):n.sbp.data.savedVehicles.splice(r,1):(u=n.sbp.data.savedVehicles.length,t?n.sbp.data.savedVehicles.splice(u,1,t):n.sbp.data.savedVehicles.splice(u,1))}function k(t){var u,i,r;if(n.sbp.changeEmail=!1,t&&t.Data&&t.Data.Vehicles.length==0){n.virtualSavedStates=[];n.sbp.data.savedVehicles=[];n.sbp.activeModel=null;o(n.sbp.data.savedVehicles);return}for(n.vehicleState=t.Data.Vehicles[0].DeepLink,n.virtualSavedStates=[],u=t.Data.Vehicles.length,i=0;i<u;i++)r=JSON.parse(t.Data.Vehicles[i].DeepLink),r&&!r.id&&(r.id=t.Data.Vehicles[i].VehicleId),n.virtualSavedStates.push(r);n.sbp.activeModel=u>=n.sbp.vehicleMaxLimitToSave?n.virtualSavedStates[0].id:null;v(JSON.parse(t.Data.Vehicles[0].DeepLink),t.Data.Vehicles[0].VehicleId);o(n.sbp.data.savedVehicles)}function d(n){$("#slide-out-tray").addClass("show");$("body").removeClass("save-modal-open").addClass("save-modal-open");g(n)}function g(n){l(n)}function l(t){if(t){var i=n.sbp.data.vehicleToSave;i.carmodel=t.carmodel;i.engineVariant=t.engineVariant;i.grade=t.grade;i.enhancementPack=t.enhancementPack;i.trim=t.trim;i.colour=t.colour;i.id=n.sbp.activeModel;i.carImageSource=n.sbp.data.currentVehicle.imgSrc;n.sbp.data.currentVehicle=t.carmodel&&t.engineVariant?h(i):s();n.sbp.imageTransitionInProgress=!1;n.sbp.initState||n.sbp.loadingVehicles||(n.sbp.data.savedVehicles=a(n.virtualSavedStates),c(),n.sbp.initState=!0)}}var nt=this;n.init=function(t){var f,e,u,i;if(n.virtualSavedStates=[],f=r.getAnalyticsCookie(),f&&(n.userEmail=f.identifier,n.sbp.loggedIn=f.identifier!=null&&f.identifier!="",console.info("%c Logged in  ","color: green; ",n.userEmail)),t){if(n.vehicleState=t.vehicleState,n.sbp.vehicleMaxLimitToSave=+t.vehicleMaxLimit||n.sbp.vehicleMaxLimitToSave,e=t.vehicleIds?t.vehicleIds.split("|"):null,u=t.vehicleState?t.vehicleState.split("|"):null,u&&u.length>0)for(i=0;i<u.length;i++)u[i]&&(n.virtualSavedStates.push(JSON.parse(u[i]?u[i]:null)),n.virtualSavedStates[i].id=e[i]);o(n.virtualSavedStates)}};n.$watch(function(n){return n.sbp.vehicleData},function(t){t&&n.sbp.loggedIn&&v()});n.$watch(function(n){return n.sbp.vehicleImage},function(t){if(t){if(t.indexOf("data:image")>-1)return;n.sbp.showCurrentVehicle=!0;n.sbp.loadingVehicles=!1;n.sbp.imageTransitionInProgress=!1;n.sbp.data.currentVehicle={name:n.sbp.vehicle.engineVariant,imgSrc:t.indexOf("data:image")>-1?null:t.replace(/jpg/g,"png")};l(n.sbp.vehicle)}});n.$watch(function(n){return n.sbp.model},function(t){t?n.sbp.vehicle.engineVariant||(n.sbp.showCurrentVehicle=!1,n.sbp.data.currentVehicle=s(),n.sbp.imageTransitionInProgress=!0):(n.sbp.showCurrentVehicle=!1,n.sbp.data.currentVehicle=s())});n.$watch(function(n){return n.sbp.engineVariant},function(t){t?(n.sbp.imageTransitionInProgress=!1,n.sbp.loadingVehicles=!0):(l(n.sbp.vehicle),n.sbp.showCurrentVehicle=!1)});n.$on(f.events.openSaveBuildPriceDialog,function(n,t){d(t)});n.$watch(function(n){return n.sbp.openSbp},function(t){t===!1&&n.closeNav()});n.$on(f.events.closeSaveBuildPriceDialog,function(){n.closeNav()});n.saveBuildAndPrice=function(t,i){if(t&&n.sbp.data.currentVehicle.name!="Configure"){n.sbp.showCurrentVehicle=!1;r.setAnalyticsCookie({identifier:t});var f={VehicleId:c(),EmailId:t,DeepLink:w()},e=u.post(Lexus.API.Analytics.PostSavedVehicles,f);e.then(function(r){r.Data&&(console.log("save B&P"+r.Data),n.sbp.loggedIn=!0,n.userEmail=t,y(h(JSON.parse(r.Data.DeepLink),r.Data.VehicleId),r.Data.VehicleId),o(n.sbp.data.savedVehicles),c(),i&&n.closeNav())},function(n){$log.error(n)}).finally(function(){n.sbp.showCurrentVehicle=!0})}};n.deleteSaveBuildEntry=function(t){var r={VehicleId:t,EmailId:n.userEmail,DeepLink:null},f=u.del(i("formatArgs")(Lexus.API.Analytics.DeleteSavedVehicle,[t,n.userEmail]));n.sbp.showCurrentVehicle=!1;f.then(function(){y(null,r.VehicleId);o(n.sbp.data.savedVehicles);n.sbp.activeModel=null},function(n){$log.error(n)}).finally(function(){n.sbp.showCurrentVehicle=!0})};n.getVehicleInfo=function(t){if(t){n.sbp.showCurrentVehicle=!1;var f=u.get(i("formatArgs")(Lexus.API.Analytics.GetSavedVehicles,["1",t]));f.then(function(i){n.sbp.loggedIn=!0;n.userEmail=t;r.setAnalyticsCookie({identifier:t});k(i)},function(t){n.sbp.loggedIn=!1;o(n.sbp.data.savedVehicles);$log.error(t)}).finally(function(){n.sbp.showCurrentVehicle=!0})}};n.closeNav=function(){n.$emit(f.events.triggerCloseSaveBuildPriceDialog,{});$("#slide-out-tray").removeClass("show");$("body").removeClass("save-modal-open")}}return n.$inject=["$scope","$rootScope","$filter","UserPreferencesService","API","BuildPriceService","BuildPriceAPIService"],{scope:{model:"<carmodel",engineVariant:"<variant",enhancementPack:"<enhancement",grade:"<grade",colour:"<colour",trim:"<trim",vehicle:"<vehicle",buildPriceUri:"<baseUri",vehicleData:"<overviewData",vehicleImage:"<vehicleImage",openSbp:"<openSbp"},restrict:"A",controllerAs:"sbp",bindToController:!0,controller:n,transclude:!0,link:function(n,t,i,r,u){u(n,function(n){t.append(n)});n.sbp=n.sbp||{};n.sbp.loggedIn=!1;n.sbp.status="Retrieve Saved Vehicles";n.sbp.initState=!1;n.sbp.loadingVehicles=!1;n.sbp.imageTransitionInProgress=!1;n.sbp.showCurrentVehicle=!0;n.sbp.vehicleMaxSavedId=0;n.sbp.vehicleMaxLimitToSave=3;n.sbp.data={vehicleToSave:{carmodel:null,engineVariant:null,grade:null,postcode:null,enhancementPack:null,colour:null,trim:null,colourId:null,carImageSource:null,id:null,timeStamp:null},currentVehicle:{name:null,imgSrc:null},savedVehicles:[],engineVariantObj:null};n.init(i)}}}]);angular.module("Lexus.Directives").directive("lxOwnersPortal",[function(){function n(n,t,i,r,u,f){var e=this;n.init=function(){n.ffc.form={submitting:!1,completed:!1,errors:!1,data:{email:"",password:""}};f.url().indexOf(n.ownersLogin)<0&&u.post(Lexus.API.Owners.Logout).then(function(t){t.data&&(window.location.href=n.ownersLogin)})};t.$on("submit-owners-portal-form",function(){n.ffc.form.submitting=!0;u.post(i("formatArgs")(Lexus.API.Owners.Login,[Lexus.ID.Site]),n.getData()).then(function(t){if(t.data.status=="loginOK"){var i=f.search();window.location.href=i&&i.returnUrl?i.returnUrl:n.ownersLoggedin;n.submissionPass(t.data)}else n.submissionFail(t.data)},function(t){n.submissionFail(t)}).finally(function(){t.$broadcast("form-result")})});n.getData=function(){return{Email:n.ffc.form.data.email,Password:n.ffc.form.data.password}};n.loginValidation=function(r,f){var e=u.get(i("formatArgs")(Lexus.API.Owners.ValidateLogin,[Lexus.ID.Site,r,f]));e.then(function(t){t.data.valid&&t.data.valid=="True"?n.submissionPass(t.data):n.submissionFail(t.data)},function(t){n.submissionFail(t)}).finally(function(){t.$broadcast("form-result")})};n.submissionPass=function(t){n.ffc.form.completed=!0;n.ffc.form.failed=!1;n.ffc.form.submitting=!1;n.ffc.form.loginData=JSON.stringify(t)};n.submissionFail=function(i){n.ffc.form.failed=!0;n.ffc.form.errors="Error in Login";n.ffc.form.submitting=!1;n.ffc.form.completed=!0;t.$broadcast("form-result");n.ffc.form.loginData=JSON.stringify(i);console.error(i.ErrorMessage)}}return n.$inject=["$scope","$rootScope","$filter","UserPreferencesService","API","$location"],{scope:!0,restrict:"A",controller:n,controllerAs:"ffc",bindToController:!0,link:function(n,t,i){n.successContent=t.find(".lx-form-success");n.failureContent=t.find(".lx-form-failure");i&&(n.ownersLogin=i.ownersPortalLogin,n.ownersLoggedin=i.ownersPortalLogged);n.init()}}}]);angular.module("Lexus.Directives").directive("lxTranslate",function(){function n(n,t,i,r,u,f,e){function c(){var r=i.pageYOffset;t.scrollOffset<r&&(e.setLanguagePref({translate:!1},o),n.showToast=!1)}var l=t.translateUrl,o=t.pageGuid,a=angular.element(i),h,s;n.showToast=!1;s=e.getLanguagePref(o);(s==null||s.translate==null)&&(n.showToast=!0);n.translate=function(t){n.showToast=!1;t?(e.setLanguagePref({translate:!0},o),i.location.href=l+"?translate=true"):(e.setLanguagePref({translate:!1},o),r.$broadcast("show-confirmation"))};a.bind("scroll",function(){clearTimeout(h);n.showToast==!0&&(h=f(c,100))})}return n.$inject=["$scope","$attrs","$window","$rootScope","$cookies","$timeout","UserPreferencesService","TranslationService"],{scope:!0,restrict:"C",controller:n,controllerAs:"ltt",bindToController:!0}});angular.module("Lexus.Services").service("TranslationService",[function(){var n=this;return n.isBrowserLanguageSupported=function(n,t){var f=t.split(","),i,u,r;if(n&&n.length>0)for(i=0;i<n.length;i++)if(u=n[i],r=u.split(";"),r&&f.indexOf(r[0].toLowerCase())>=0)return!0;return!1},n}]);angular.module("Lexus.Directives").directive("lxLanguageCheck",["TranslationService",function(n){return{scope:!0,restrict:"A",link:function(t,i,r){var u=!0,f=r.lxLanguageCheck,e;f.length>0&&(e=angular.fromJson(r.browserLanguages),u=n.isBrowserLanguageSupported(e,f));u&&i.addClass("visible")}}}]);angular.module("Lexus.Directives").directive("lxTranslateConfirm",function(){function n(n,t,i,r,u,f,e){function s(){var i=r.pageYOffset;t.scrollOffset<i&&(n.showToast=!1)}n.showToast=!1;var h=angular.element(r),o,c=e.search().translate;c=="true"&&(n.showToast=!0);h.bind("scroll",function(){clearTimeout(o);n.showToast==!0&&(o=f(s,100))});i.$on("show-confirmation",function(){f(function(){n.showToast=!0},100)})}return n.$inject=["$scope","$attrs","$rootScope","$window","$cookies","$timeout","$location","UserPreferencesService","TranslationService"],{scope:!0,restrict:"C",controller:n,controllerAs:"ltt",bindToController:!0}});angular.module("Lexus.Directives").directive("lxOpeningHours",["$window","$timeout","$filter","$http",function(){function n(n){var t=this;n.init=function(n,i,r){var f,e;if(t.IsOpenNow=!1,t.OpenNowText="Open now:",f=n.split(":"),e=i.split(":"),!r==!0&&f.length===2&&e.length===2){var u=new Date,o=u.getFullYear(),s=u.getMonth(),h=u.getDate(),c=new Date(o,s,h,f[0],f[1]),l=new Date(o,s,h,e[0],e[1]);t.IsOpenNow=c.getTime()<u.getTime()&&l.getTime()>u.getTime()}t.OpenNowText=t.IsOpenNow?"Open now:":"Closed"};t.simplifyTime=function(n){var i=n,t=n.split(":"),r;return t.length===2&&(r=t[0],i=r-12>=0?r-12+":"+t[1]+"pm":r+":"+t[1]+"am",t[1].indexOf("00")>=0&&(i=i.replace(":00",""))),i}}return n.$inject=["$scope","$http","$filter","$timeout","$window","$interval","$rootScope"],{scope:!0,restrict:"A",controller:n,controllerAs:"oh",bindToController:!0,link:function(){}}}]);angular.module("Lexus.Components").component("threeDotToggleButton",{bindings:{isActive:"<",screenReaderText:"@",cssClass:"@"},template:'<button class="lx-three-dot-toggle-button {{$ctrl.cssClass}}" ng-class="{\'is-active\' : $ctrl.isActive}"><span class="lx-three-dot-toggle-button__screen-reader-text">{{$ctrl.screenReaderText}}<\/span><span class="lx-three-dot-toggle-button__dots"><span class="lx-three-dot-toggle-button__dot"><\/span><\/span><\/button>'});angular.module("Lexus.Components").component("welcomeMessage",{bindings:{hoursOfDay:"@hours",cssClass:"@cssClass"},controller:["API","$filter",function(n,t){var i=this;this.$onInit=function(){n.get(t("formatArgs")(Lexus.API.Lookup.GetWelcomeMessage,[Lexus.ID.Site,i.hoursOfDay])).then(function(n){n&&n.Data&&(i.message=n.Data.Message)},function(){i.message=null})}}],template:'<span class="{{$ctrl.cssClass}}">{{$ctrl.message}}<\/span>'}),function(){"use strict";angular.module("Lexus").config(["$locationProvider",function(n){n.html5Mode({enabled:!0,rewriteLinks:"data-route",requireBase:!1})}]).config(["tagsInputConfigProvider",function(n){n.setDefaults("tagsInput",{placeholder:"",addOnPaste:!0,addOnBlur:!0,maxTags:1,replaceSpacesWithDashes:!1,selectOnBackspace:!1,addFromAutocompleteOnly:!0,allowLeftoverText:!0,debounceDelay:500});n.setDefaults("autoComplete",{minLength:2});n.setActiveInterpolation("tagsInput",{placeholder:!0})}])}(),function(){"use strict";angular.module("Lexus")}()