KBB.define("KBB.SimpleCarousel",function(n){"use strict";var i={increment:1,visibleSlides:4,currentIndex:0,totalSlides:0,slideWidth:160,leftLink:null,rightLink:null,carousel:null,container:null},t=this;t.next=function(){t.navigate(t.increment)};t.prev=function(){t.navigate(-t.increment)};t.navigate=function(n){t.currentIndex+=n;DomUtils.setTransform([t.carousel],-t.currentIndex*t.slideWidth+"px",0,0);t.onUpdateButton()};t.onUpdateButton=function(){t.currentIndex===0?t.leftLink.classList.add("disabled"):t.leftLink.classList.remove("disabled");t.currentIndex+4>=t.totalSlides?t.rightLink.classList.add("disabled"):t.rightLink.classList.remove("disabled")};t.bindElements=function(){t.leftLink=t.container.querySelector(".js-carousel-left");t.rightLink=t.container.querySelector(".js-carousel-right");t.carousel=t.container.querySelector(".js-carousel")};t.setupListeners=function(){t.leftLink.addEventListener("click",t.prev);t.rightLink.addEventListener("click",t.next)};t.init=function(){Utils.extend(t,i,n);t.bindElements();t.setupListeners();t.totalSlides=t.carousel.children.length;DomUtils.setTransform(t.carousel,0,0,0);t.onUpdateButton()};t.init()});KBB.createAndInit("KBB.Modules.MyKbb.Gigya",function(){"use strict";var n={},t={GigyaUpdateBehaviorReplace:"replace",GigyaUpdateBehaviorPush:"arrayPush",GigyaSuccessStatus:"OK",GigyaServerErrorCodes:5e5,GigyaValidationErrorCode:400006,GigyaDataNotFoundErrorCode:404e3,GigyaPermissionsErrorCode:403007,GigyaSuccessErrorCode:0};return n.DataType={SavedVehicle:"savedVehicle",SavedLeads:"savedLeads",FollowThisCar:"followThisCar",SavedCompare:"savedCompare"},n.user=null,n.loggedIn=!1,n.getUser=function(n){return{profile:n.profile,data:n.data}},n.onLoggedIn=function(t){n.user=t;n.loggedIn=!0;KBB.storage.set("mykbbloggedin","true");KBB.Page.trigger(KBB.Page.Events.MyKbbUserChanged,n.user)},n.onLoggedOut=function(){n.user=null;n.loggedIn=!1;KBB.storage.set("mykbbloggedin","false");KBB.Page.trigger(KBB.Page.Events.MyKbbUserChanged,null)},n.register=function(t,i,r){gigya.accounts.initRegistration({callback:function(u){gigya.accounts.register({regToken:u.regToken,email:t.email,password:t.password,data:{brands:{KBB:!0},kbb:{emailOptIn:t.emailOptIn,finalized:!1}},finalizeRegistration:!0,callback:function(u){var f,e;if(u.errorCode===0){$.ajax({type:"POST",url:KBB.GigyaUrls.finalizeRegistration,data:{email:t.email}});n.onLoggedIn(n.getUser(u));return i()}if(u.errorCode===400006)return r("Please enter a valid email address.");for(f=0;f<u.validationErrors.length;f++)if(e=u.validationErrors[f],e.errorCode===400003)return r("The "+e.fieldName+" "+u.requestParams[e.fieldName]+" already exists.");return r("An unexpected error has occurred please try again later")}})}})},n.login=function(t,i,r){gigya.accounts.login({loginID:t.email,password:t.password,sessionExpiration:t.rememberMe?-2:0,callback:function(t){if(t.errorCode===0){n.onLoggedIn(n.getUser(t));i()}else r("The email address or password you’ve entered is not valid")}})},n.logout=function(){gigya.accounts.logout({callback:function(t){t.errorCode===0&&n.onLoggedOut()}})},n.forgotPassword=function(n,t,i){gigya.accounts.resetPassword({loginID:n.email,callback:function(r){r.errorCode>0?i("There is no user with that email."):t(n)}})},n.getUpdatedUserData=function(n){var t=Utils.extend(!0,{},n);return delete t.kbb.finalized,t},n.updateAccount=function(i,r,u,f,e){var o={profile:i.profile,data:n.getUpdatedUserData(i.data),callback:function(i){if(i.errorCode===t.GigyaSuccessErrorCode)r&&r();else if(u){var f="There was an error in processing your request. Please wait a while and try again.";i.errorCode>=t.GigyaServerErrorCodes?f="There was an error in processing your request. Please wait a while and try again.":i.errorCode===t.GigyaValidationErrorCode?f="New password is invalid. Please try a different password.":i.errorCode===t.GigyaPermissionsErrorCode&&(f="Your session has ended and you have been logged out. Please sign in again.",n.logout());u(f)}}};f&&f!==""&&(o.password=f);e&&e!==""&&(o.newPassword=e);gigya.accounts.setAccountInfo(o)},n.loadData=function(n,i,r){gigya.ds.get({oid:n,type:"kbb_"+n,callback:function(n){n.errorCode===t.GigyaSuccessErrorCode?i&&i(n.data.list):n.errorCode===t.GigyaDataNotFoundErrorCode?i([]):r&&(console.log("Gigya Error Code:",n.errorCode),r("There was an error in processing your request. Please wait a while and try again."))}})},n.saveData=function(n,i,r,u,f){var e=f?t.GigyaUpdateBehaviorPush:t.GigyaUpdateBehaviorReplace;gigya.ds.store({oid:n,type:"kbb_"+n,data:{list:i},updateBehavior:e,callback:function(n){n.errorCode===t.GigyaSuccessErrorCode?r&&r(i):u&&u(n)}})},n.setSavedVehicleCount=function(t){var i=JSON.parse(JSON.stringify(n.user));delete i.data.kbb.finalized;i.data.kbb.savedVehicles=t;n.user.data.kbb.savedVehicles=t;n.updateAccount(i,function(){n.onLoggedIn(n.user)})},n.getCurrentUser=function(){n.loggedIn=KBB.storage.get("mykbbloggedin")==="true";n.loggedIn?gigya.accounts.getAccountInfo({callback:function(i){if(i.errorCode===t.GigyaSuccessErrorCode)n.onLoggedIn(n.getUser(i));else n.onLoggedOut()}}):n.onLoggedOut()},n.init=function(){n.getCurrentUser()},n});KBB.define("KBB.Modules.MyKbb.Login",function(n){"use strict";var t=this,i=KBB.Modules.MyKbb.Gigya;t.getFormData=function(n){for(var f=n.querySelectorAll("input"),r={},u,t,i=0;i<f.length;i++){t=f[i];u=t.getAttribute("name");switch(t.type){case"checkbox":r[u]=t.checked;break;default:r[u]=t.value}}return r};t.showMessage=function(n,t){return t.innerHTML=n,t.style.display="block",!1};t.hideMessage=function(n){return n.style.display="none",!0};t.getSubmitHandler=function(n,i,r){return function(u){var s=u.target,f=t.getFormData(s),e=s.querySelector(".js-form-error"),o;u.preventDefault();o=i(f);o?t.showMessage(o,e):n(f,function(){t.hideMessage(e);r&&r(f)},function(n){t.showMessage(n,e)})}};t.validateProfile=function(n){return!n.email||!n.emailConfirm||!n.password||!n.passwordConfirm?"Please enter all required information":KBB.Constants.Regex.Email.exec(n.email)?n.email!==n.emailConfirm?"The Email and Confirm Email fields must match.":n.password.length<6?"Passwords must be at least 6 characters in length.":n.password!==n.passwordConfirm?"The Password and Confirm Password fields must match.":n.acknowledge?null:"You must accept the Terms of Service.":"Please enter a valid email address."};t.validateLogin=function(n){return!n.email||!n.password?"Please enter all required information":null};t.validateForgotPassword=function(n){return KBB.Constants.Regex.Email.exec(n.email)?null:"Please enter a valid email address."};t.onRegisterComplete=function(){n.registerComplete&&n.registerComplete.classList.remove("hidden")};t.onForgotPasswordComplete=function(t){var i=n.forgotPassword.querySelector(".js-form-success");i.classList.remove("hidden");i.innerHTML="An email has been sent to "+t.email+" with your new password."};t.onLoginComplete=function(){t.login.password.value=""};t.clearForgotPassword=function(){var t=n.forgotPassword.querySelector(".js-form-success");t.classList.add("hidden")};t.init=function(){n.login&&n.login.addEventListener("submit",t.getSubmitHandler(i.login,t.validateLogin,t.onLoginComplete));n.register&&n.register.addEventListener("submit",t.getSubmitHandler(i.register,t.validateProfile,t.onRegisterComplete));n.forgotPassword&&n.forgotPassword.addEventListener("submit",t.getSubmitHandler(i.forgotPassword,t.validateForgotPassword,t.onForgotPasswordComplete))};t.init()});KBB.createAndInit("KBB.Modules.MyKbb.Header",function(){"use strict";var n={};return n.header=document.getElementById("headerSignin"),n.loginForm=document.getElementById("loginForm"),n.registerForm=document.getElementById("myKbbRegister"),n.passwordForm=document.getElementById("forgotPasswordForm"),n.passwordComplete=document.getElementById("mykbbPwdSuccess"),n.closeScreens=function(){var i=document.querySelectorAll(".js-mykbb-screen"),t;if(i){for(t=0;t<i.length;t++)i[t].classList.add("hidden");n.passwordForm.classList.add("hidden");n.loginForm.classList.remove("hidden");n.passwordComplete.classList.add("hidden")}},n.onUserChanged=function(t){var r=document.querySelectorAll(".js-mykbb-user"),i;if(n.header.classList.remove("hidden"),t)for(n.header.classList.add("mykbb-loggedin"),n.header.classList.remove("mykbb-loggedout"),i=0;i<r.length;i++)r[i].innerHTML=t.profile.firstName&&t.profile.lastName?t.profile.firstName+" "+t.profile.lastName:t.profile.email;else n.header.classList.remove("mykbb-loggedin"),n.header.classList.add("mykbb-loggedout");n.closeScreens()},n.showForgotPassword=function(){n.passwordForm.classList.remove("hidden");n.loginForm.classList.add("hidden")},n.openScreen=function(t){var i=DomUtils.matchingParent(document.body,t.target,"[data-mykbb-screen]"),u=DomUtils.matchingParent(document.body,t.target,".js-mykbb-screen"),r=null;(!u||i)&&n.closeScreens();i&&(r=document.getElementById(i.getAttribute("data-mykbb-screen")),r.classList.remove("hidden"))},n.openLoginScreen=function(){n.closeScreens();var t=document.getElementById("myKbbLogin");t&&t.classList.remove("hidden")},n.init=function(){var r,i,t;KBB.Page.on(KBB.Page.Events.MyKbbUserChanged,n.onUserChanged,!0);if(document.body.addEventListener("click",n.openScreen),document.getElementById("mykbbLogout").addEventListener("click",KBB.Modules.MyKbb.Gigya.logout),document.getElementById("viewForgotPwd").addEventListener("click",n.showForgotPassword),n.login=new KBB.Modules.MyKbb.Login({login:document.getElementById("loginForm"),register:document.getElementById("myKbbRegister"),forgotPassword:document.getElementById("forgotPasswordForm"),registerComplete:document.getElementById("myKbbRegisterComplete")}),r=KBB.storage.get("RecentlyViewedVehicles"),!r)for(i=document.querySelectorAll(".js-need-recently-viewed"),t=0;t<i.length;t++)i[t].classList.add("disabled")},n});KBB.createAndInit("KBB.Modules.MyKbb.ZipCode",function(){"use strict";var n=$("#zipcodeInputHeader"),t=$("#zipcodeUpdateBtn");$("#zipCodePop .validation-error").hide();$("#zipCodePop .cookie-error").hide();KBB.cookies.enabled()||($("#zipCodePop .section-title").hide(),$("#zipCodePop .cookie-error").show(),n.prop("disabled",!0));$(window).on("zipUpdated.headerShare",function(){window.location.reload(!0)});return{init:function(){KBB.cookies.enabled()&&(t.click(this.updateZip),n.keypress(this.updateZip),$("#zipCodeHeader").html("ZIP CODE: "+(KBB.zip.get()||"")),n.val(KBB.zip.get()||""),$("#changeZipCode").html(KBB.zip.get()||""))},updateZip:function(t){if(t.target!==n[0]||t.keyCode===13){var i=n.val();if(!KBB.zip.set(i)){document.getElementById("zipcodeError").style.display="block";return}$(window).trigger("zipUpdated.headerShare",i,t)}}}}),function(){"use strict";KBB.Page.addLegacyAnalyticsTags([{type:"click",selector:"#zipCodeHeader",tag:function(){return"zip_"+s.prop2+"_header"}},{type:"click",selector:"#savedVehiclesOption",tag:function(){return"mysavedcars_"+s.prop2+"_header_drpdn"}},{type:"click",selector:"#savedCompareOption",tag:function(){return"mysavedcomp_"+s.prop2+"_header_drpdn"}},{type:"click",selector:"#mayAlsoLike",tag:function(){return"alsolike_"+s.prop2+"_header_drpdn"}},{type:"click",selector:"#mostViewed",tag:function(){return"mostviewed_"+s.prop2+"_header_drpdn"}},{type:"click",selector:"#mySavedQuotes",tag:function(){return"mysavedquote_"+s.prop2+"_header_drpdn"}},{type:"click",selector:"#changeZipCode",tag:function(){return"zip_"+s.prop2+"_header_drpdn"}},{type:"click",selector:"#mykbbAccount",tag:function(){return"myacct_"+s.prop2+"_header_drpdn"}},{type:"click",selector:"#mykbbLogout",tag:function(){return"mylogout_"+s.prop2+"_header_drpdn"}},{type:"click",selector:"#mykbbLogin",tag:function(){return"mylogin_"+s.prop2+"_header_ovrly"}},{type:"click",selector:"#mykbbRegister",tag:function(){return"mysignup_"+s.prop2+"_header_ovrly"}},{type:"click",selector:"#zipcodeUpdateBtn",tag:function(){return"zip_"+s.prop2+"_header_ovrly"}},{type:"click",selector:"#tbRecentlyViewedLink",tag:function(){return"myviewed_"+s.prop2+"_toolbar"}},{type:"click",selector:"#tbSavedVehiclesLink",tag:function(){return"mysaved_"+s.prop2+"_toolbar"}},{type:"click",selector:"#tbSaveCarBtn",tag:function(){return"savecar_"+s.prop2+"_toolbar"}}])}();KBB.createAndInit("KBB.Modules.MyKbb.SavedVehicles",function(){"use strict";var n={},t=KBB.Modules.MyKbb.Gigya;return n.savedVehicles=null,n.savedVehiclesFull=null,n.onUserChanged=function(t){t||(n.savedVehicles=null,n.savedVehiclesFull=null)},n.getFullVehicles=function(t,i){n.savedVehiclesFull?t(n.savedVehiclesFull.concat()):n.getVehicles(function(r){n.getFullData(r,function(i){n.savedVehiclesFull=i;t(i.concat())},i)},i)},n.getFullData=function(n,t,i){$.ajax({type:"POST",url:KBB.GigyaUrls.SavedVehicles,data:{vehicleData:JSON.stringify(n)}}).done(t).error(i)},n.getVehicles=function(i,r){n.savedVehicles?i(n.savedVehicles.concat()):t.loadData(t.DataType.SavedVehicle,function(t){n.savedVehicles=t;i(n.savedVehicles.concat())},r)},n.saveList=function(i,r,u){t.setSavedVehicleCount(i.length);t.saveData(t.DataType.SavedVehicle,i,function(){n.savedVehicles=i;r()},u)},n.addVehicles=function(t,i,r){n.getVehicles(function(u){for(var e=[],f=0;f<t.length;f++)n.addVehicleToList(u,t[f])&&e.push(t[f]);e.length>0?n.saveList(u,function(){n.savedVehiclesFull=null;i()},r):r("You have already saved the selected vehicle(s).")})},n.removeVehicles=function(t,i,r){n.getVehicles(function(u){var f=u.filter(function(i){return!n.containsVehicle(i.vehicleId,t)});u.length>f.length&&n.saveList(f,function(){n.savedVehiclesFull=n.savedVehiclesFull.filter(function(i){return!n.containsVehicle(i.VehicleId,t)});i()},r)})},n.containsVehicle=function(n,t){for(var i=0;i<t.length;i++)if(n===t[i].vehicleId)return!0;return!1},n.addVehicleToList=function(t,i){return n.containsVehicle(i.vehicleId,t)?!1:(t.push(i),!0)},n.removeVehicleFromList=function(n,t){for(var i=0;i<n.length;i++)if(t.vehicleId===parseInt(n[i].vehicleId))return n.splice(i,1),!0;return!1},n.init=function(){KBB.Page.on(KBB.Page.Events.MyKbbUserChanged,n.onUserChanged)},{init:n.init,addVehicles:n.addVehicles,removeVehicles:n.removeVehicles,getVehicles:n.getVehicles,getFullVehicles:n.getFullVehicles}});KBB.createAndInit("KBB.Modules.MyKbb.SocialToolbar",function(){"use strict";var n={},i=KBB.Modules.MyKbb.Gigya,t={RecentlyViewedCookie:"RecentlyViewedVehicles",RecentlyViewed:{Type:"recentlyviewed",DisplayName:"recently viewed cars",NoVehiclesText:"You haven't viewed any cars yet. As you view cars on our site, we'll save the most recent ones here.",panelClass:"show-recently-viewed"},SavedVehicles:{Type:"savedvehicles",DisplayName:"saved cars",NoVehiclesText:"You haven't saved cars while logged into your my kbb account. Once you save any of your favorites, you can find them here.",panelClass:"show-saved-vehicles"},ToolBarCompareId:"toolbarCompare"};return n.carouselTemplate=(document.getElementById("vehicleListToolbarTemplate")||{}).innerHTML,n.toolbar=document.getElementById("socialToolbar"),n.socialPopup=document.getElementById("socialPopup"),n.savedVehiclesLink=document.getElementById("tbSavedVehiclesLink"),n.recentlyViewedLink=document.getElementById("tbRecentlyViewedLink"),n.saveButton=document.getElementById("tbSaveCarBtn"),n.savedVehicleCounts=document.querySelectorAll(".js-saved-vehicle-count"),n.recentlyViewedCount=document.getElementById("recentlyViewedCount"),n.onUserChanged=function(i){var r,u,e,f,o;if(n.savedVehicleCounts.length)for(r=0;r<n.savedVehicleCounts.length;r++)u=n.savedVehicleCounts[r],i?(u.classList.remove("hidden"),e=i.data.kbb.savedVehicles?i.data.kbb.savedVehicles:0,u.innerHTML="("+e+")"):u.classList.add("hidden");n.recentlyViewedCount&&(f=KBB.storage.getFromCookie(t.RecentlyViewedCookie),o=f?f.split("$").length:0,n.recentlyViewedCount.innerHTML="("+o+")")},n.onOpenCompare=function(t){if(t.preventDefault(),!t.target.classList.contains("disabled")){var i=n.getSelectedVehicles(),r=i.map(function(n){return n.vehicleId});t.preventDefault();setTimeout(function(){window.location.assign(t.target.getAttribute("href")+"/"+r.join("-vs-"))})}},n.onOpenRecentlyViewed=function(){n.recentlyViewedLink.classList.contains("disabled")&&document.querySelector("."+t.RecentlyViewed.panelClass)||(n.resetToolbarState(),n.recentlyViewedLink.classList.add("disabled"),$.ajax({type:"GET",url:KBB.GigyaUrls.RecentlyViewed,cache:!1}).done(function(i){n.render(t.RecentlyViewed,i)}))},n.onOpenSavedVehicles=function(r){n.savedVehiclesLink.classList.contains("disabled")&&document.querySelector("."+t.SavedVehicles.panelClass)||(n.resetToolbarState(),i.loggedIn?(n.savedVehiclesLink.classList.add("disabled"),KBB.Modules.MyKbb.SavedVehicles.getFullVehicles(function(i){n.render(t.SavedVehicles,i.concat().reverse())})):(KBB.Modules.MyKbb.Header.openLoginScreen(),r.stopPropagation()))},n.resetToolbarState=function(){n.socialPopup.className=n.panelInitialClasses;n.socialPopup.innerHTML="";n.recentlyViewedLink.classList.remove("disabled");n.savedVehiclesLink.classList.remove("disabled")},n.render=function(t,i){n.currentData=Utils.extend({},t,{vehicles:i,index:function(){return i.indexOf(this)},isNewCar:function(){return this.VehicleClass.toLowerCase()==="newcar"}});n.socialPopup.classList.remove("collapsed");n.socialPopup.classList.add(t.panelClass);n.socialPopup.innerHTML=Mustache.render(n.carouselTemplate,n.currentData);n.carousel=new KBB.SimpleCarousel({container:n.socialPopup});n.onSelectionChange()},n.getSelectedIndecies=function(){return Array.prototype.map.call(document.querySelectorAll(".js-vehicle-checkbox:checked"),function(n){return parseInt(n.getAttribute("data-index"))})},n.getSelectedVehicles=function(){var t=n.getSelectedIndecies(),i=n.currentData.vehicles.filter(function(n,i){return t.indexOf(i)!==-1});return n.getGigyaObject(i)},n.getGigyaObject=function(n){return n.map(function(n){return{vehicleId:n.VehicleId,mileage:n.Mileage,selectionHistory:n.SelectionHistory}})},n.onAddToSavedCars=function(t){t.target.classList.contains("disabled")||(i.loggedIn?KBB.Modules.MyKbb.SavedVehicles.addVehicles(n.getSelectedVehicles(),n.highlightSavedCarLink,n.highlightSavedCarLink):(KBB.Modules.MyKbb.Header.openLoginScreen(),t.stopPropagation()))},n.highlightSavedCarLink=function(){n.saveArrow&&n.saveArrow.parentNode&&n.saveArrow.parentNode.removeChild(n.saveArrow);n.saveArrow=document.createElement("span");n.saveArrow.className="saved-arrow";n.saveArrow.style.left=n.savedVehiclesLink.offsetLeft+38;n.savedVehiclesLink.parentNode.appendChild(n.saveArrow)},n.onSaveVehicle=function(t){i.loggedIn?KBB.Modules.MyKbb.SavedVehicles.addVehicles([{vehicleId:parseInt(t.target.getAttribute("data-vid")),mileage:parseInt(t.target.getAttribute("data-mileage")),selectionHistory:t.target.getAttribute("data-options")}],n.highlightSavedCarLink,n.highlightSavedCarLink):(KBB.Modules.MyKbb.Header.openLoginScreen(),t.stopPropagation())},n.onSelectionChange=function(){var i=n.socialPopup.querySelector(".js-toolbar-addtosave")||document.createElement("span"),r=n.socialPopup.querySelector(".js-toolbar-compare")||document.createElement("span"),t=n.getSelectedIndecies();t.length===0?i.classList.add("disabled"):i.classList.remove("disabled");t.length>=2&&t.length<=4?r.classList.remove("disabled"):r.classList.add("disabled")},n.init=function(){KBB.Page.on(KBB.Page.Events.MyKbbUserChanged,n.onUserChanged,!0);n.saveButton&&(n.saveButton.classList.remove("hidden"),n.socialPopup.classList.add("has-save-btn"),n.saveButton.addEventListener("click",n.onSaveVehicle));n.savedVehiclesLink&&n.savedVehiclesLink.addEventListener("click",n.onOpenSavedVehicles);n.recentlyViewedLink&&n.recentlyViewedLink.addEventListener("click",n.onOpenRecentlyViewed);n.socialPopup&&(DomUtils.addEventListener(n.socialPopup,".js-vehicle-checkbox","click",n.onSelectionChange),DomUtils.addEventListener(n.socialPopup,".js-toolbar-addtosave","click",n.onAddToSavedCars),DomUtils.addEventListener(n.socialPopup,".js-toolbar-compare","click",n.onOpenCompare),DomUtils.addEventListener(n.socialPopup,".js-toolbar-close","click",n.resetToolbarState),n.panelInitialClasses=n.socialPopup.className)},n})