(function(){"use strict";angular.module("main",["ngAnimate","ngSanitize","ngTouch","ui.router","common","ui.bootstrap","vcRecaptcha","ngAria"])})(),function(){"use strict";function t(n,t,r){return function(u,f){if(n(u,f),u){if(u.message&&(u.beKind?r.info(u.message):r.error(u.message),u.showAlert)){r.dialog("Oops",u.message);return}if(_.isString(u)&&u.indexOf("Possibly unhandled rejection:")===0)return;!u.cause&&f&&(u.cause=f);window.navigator&&(u.navigator=window.navigator);t.get("$http").post("api/Log",JSON.stringify(u,i))}}}function i(n,t){var r,i;return t instanceof Error?(r={},Object.getOwnPropertyNames(t).forEach(function(n){r[n]=t[n]}),r):t instanceof Navigator?(i={},i.vendor=t.vendor,i.appVersion=t.appVersion,i.deviceMemory=t.deviceMemory,i.userAgent=t.userAgent,i.language=t.language,i.platform=t.platform,i.product=t.product,i.oscpu=t.oscpu,i):t}var n=angular.module("main");n.config(["$provide",function(n){n.decorator("$exceptionHandler",["$delegate","$injector","notify",t])}])}(),function(){"use strict";function t(){return{request:function(n){return n.url.indexOf("app/")===0&&n.url.indexOf(".html",n.url.length-5)!==-1&&(n.url+="?_=20220927-1121",n.headers["Cache-Control"]="public, max-age=2592000"),n}}}function i(n,t,i,r,u,f){return{requestError:function(t){return r.spinnerHide(),i.error("An unexpected error occurred.","requestError",t),n.reject(t)},responseError:function(e){if(r.spinnerHide(),e.config.url.startsWith(togoorder.apiUrl)){var o="";e.status===401?(o="Please Sign In to use this feature.",i.error(o,"responseError",e),t.get("$http").post("api/Log",e),t.get("$uibModal").open({templateUrl:"app/security/userFeatureAlert.html",controller:"userFeatureAlert as vm",size:"md",resolve:{}}).result.then(function(){u.broadcast(f.securityAuthorizationRequired,{})})):e&&e.xhrStatus==="abort"?console.log("rejection",e):(o=e&&e.data&&(e.data.Message||e.data.message||e.data.error_description)||"An unexpected error occurred",i.error(o,"responseError",e))}return n.reject(e)}}}var n=angular.module("main");n.factory("templateCacheHandler",[t]);n.factory("httpErrorHandler",["$q","$injector","notify","spinner","common","events",i]);n.config(["$httpProvider",function(n){n.interceptors.push("httpErrorHandler");n.interceptors.push("templateCacheHandler")}])}(),function(){"use strict";var n=angular.module("main");n.config(["commonProvider","events",function(n,t){toastr.options.timeOut=5e3;toastr.options.showDuration=0;toastr.options.extendedTimeOut=3e3;toastr.options.positionClass="toast-bottom-right";toastr.options.onclick=function(){var r=$(event.target).closest(".toast-success"),i;r.length&&(i=n.$get(),i.broadcast(t.presentCart))}}]);n.config(["$logProvider",function(n){n.debugEnabled&&n.debugEnabled(!1)}]);n.config(["$locationProvider",function(n){n.hashPrefix("")}]);n.config(["$rootScopeProvider",function(n){n.digestTtl(20)}])}(),function(n,t){"use strict";function i(n,i,e){function k(){var n=togoorder||{};return!!n.locationWebsite}function d(){var n=togoorder||{};return n.merchantLocation.MerchantLocationCount>1}function h(){var n=togoorder||{};return!!n.locationId}function g(n){return!h(n)}function s(n,t){try{return t.isAuthenticated()}catch(i){return!1}}function nt(n,t,i){return!i.IsOnlyGuestCheckout}function tt(n,t){return!s(n,t)}function c(n,t,i){return!!i.LoyaltyProfile}function it(){return!0}function rt(n,t,i){return!!i.MealPlanProfile}function y(n,t,i){return!!i.GiftCardProfile}function ut(n,t,i){try{return i.GiftCardProfile&&i.GiftCardProfile.IsCampusCardEnabled}catch(r){return!1}}function ft(n,t,i){return!!i.MerchantSignUpWithLoyalty}function et(n,t,i){return!i.MerchantSignUpWithLoyalty}function p(n,t,i){return!!i.MerchantSignUpWithLoyalty||i.LoyaltyProfile&&i.LoyaltyProfile.LoyaltyProviderType}function o(){var n=t.toArray(arguments);return function(i,r,u){return t.every(n,function(n){return n(i,r,u)})}}function w(){var n=["app/menu/itemIncludedItemsRepeater.html","app/menu/itemIncludedItems.html","app/menu/itemIncludedItems.controls.html","app/menu/itemIncludedItems.expanded.html","app/menu/itemIncludedGroupHeader.html"];return togoorder&&togoorder.merchantLocation&&togoorder.merchantLocation.MenuItemUiType===1&&n.push("app/menu/itemIncludedItems.collapsed.html"),n}function b(){var n={0:"app/menu/menu.sections.html",1:"app/menu/menu.sections.expanded.html",2:"app/menu/menu.sections.horizontal.html",3:"app/menu/menu.sections.expandedWithHorizontalNav.html"};return n[togoorder&&togoorder.merchantLocation&&togoorder.merchantLocation.MenuSectionUiType]||n[0]}i.otherwise("/");var l=!togoorder.merchantLocation.MerchantSignUpWithLoyalty,a={title:"Account",icon:"glyphicon-user"},v={title:togoorder.merchantName,icon:"glyphicon-home"},ot=[{name:"setTableNumber",url:"/setTable/:tableNumber",controller:"setTableNumber",templateUrl:"app/tableNumber/setTableNumber.html",data:{title:"Got your table...",showInMenu:!1}},{name:"showLogin",url:"/showLogin/:returnStateName",controller:"showLogin",data:{title:"Sign In...",showInMenu:!1}},{name:"samlLogin",url:"/samlLogin/:returnUrlHash",controller:"samlLogin",data:{showInMenu:!1}},{name:"locationHome",url:"/",templateUrl:l?"app/chooseOrderType/chooseOrderType.html":"app/loyalty/loyaltyHome.html",data:{title:l?"Choose Order Type":"Welcome",linkText:l?"Start New Order":"Main Menu",isOrderAccessControlled:!0,showInMenu:o(h),parentMenuItem:v,isLoyaltyControlled:!0,onBeforeNavigate:["$uibModal","cartService",function(n,t){t.loadCurrent().then(function(i){i&&i.hasOrderItems()&&n.open({templateUrl:"shared/common/alert.html",controller:"alert as vm",size:"md",resolve:{alertOptions:function(){return{dialogTitle:"Start a New Order?",dialogMessage:"You have items in your cart. Do you want to continue your order or start a new order?",closeButtonText:"New Order",dismissButtonText:"Continue"}}}}).result.then(function(){t.destroy()})})}]}},{name:"merchantHome",data:{title:"Find Another Location",justRaiseEvent:e.navigateToMerchantHome,showInMenu:d,parentMenuItem:v}},{name:"merchantWebsite",data:{title:"Go To "+togoorder.merchantName+" Home",justRaiseEvent:e.navigateToMerchantWebsite,showInMenu:o(k),parentMenuItem:v}},{name:"chooseUnlistedMenu",url:"/o/:orderType/f/:fulfillmentType/menus/:unlistedOnly",templateUrl:"app/chooseMenu/chooseMenu.html",data:{validateOrderTypeRuleMenu:!1,requiresOrderTypeWorkflow:!0,isOrderAccessControlled:!1,title:"Choose Unlisted Menu"}},{name:"chooseMenu",url:"/o/:orderType/f/:fulfillmentType/menus",templateUrl:"app/chooseMenu/chooseMenu.html",data:{requiresOrderTypeWorkflow:!0,validateOrderTypeRule:!0,isOrderAccessControlled:!0,title:"Choose Menu"}},{name:"getTableNumber",url:"/o/:orderType/f/:fulfillmentType/table/:menuId",templateUrl:"app/tableNumber/getTableNumber.html",params:{menuId:null},data:{validateOrderTypeRule:!0,isOrderAccessControlled:!0,title:"Enter Table Number"}},{name:"getDeliveryAddress",url:"/o/:orderType/f/:fulfillmentType/address/:menuId",templateUrl:"app/deliveryAddress/getDeliveryAddress.html",params:{menuId:null},data:{validateOrderTypeRule:!0,isOrderAccessControlled:!0,title:"Enter Delivery Address"}},{name:"days",url:"/o/:orderType/f/:fulfillmentType/days",templateUrl:"app/chooseDay/days.html",data:{requiresOrderTypeWorkflow:!0,validateOrderTypeRule:!0,isOrderAccessControlled:!0,title:"Daily Menu - Select Day"}},{name:"days.menus",url:"/:day/menus",views:{daysMenusView:{templateUrl:"app/chooseDay/days.menus.html"}},data:{title:"Daily Menu - Select Menu"}},{name:"days.menus.menu",abstract:!0,url:"/m/:menuId/:isPreview",views:{daysMenusMenuView:{templateUrl:"app/menu/menu.html"}},data:{preload:["app/cart/cartItem.html","shared/common/alert.html"],isOrderAccessControlled:!0,title:"Menu"}},{name:"days.menus.menu.sections",url:"/s",views:{menuView:{templateUrl:b}},data:{title:"Menu"}},{name:"days.menus.menu.sections.items",url:"/:sectionId/items",views:{menuSectionView:{templateUrl:"app/menu/menu.sections.items.html"}},data:{requiresActivation:!1,title:"Menu"}},{name:"days.menus.menu.itemDetail",url:"/item",views:{menuView:{templateUrl:"app/menu/menu.itemDetail.html"}},data:{preload:w(),requiresActivation:!1,title:"Menu"}},{name:"menu",abstract:!0,url:"/o/:orderType/f/:fulfillmentType/m/:menuId/:isPreview",templateUrl:"app/menu/menu.html",data:{preload:["app/cart/cartItem.html","shared/common/alert.html"],isOrderAccessControlled:!0,title:"Menu"}},{name:"menu.sections",url:"/s",views:{menuView:{templateUrl:b}},data:{title:"Menu"}},{name:"menu.sections.items",url:"/:sectionId/items",views:{menuSectionView:{templateUrl:"app/menu/menu.sections.items.html"}},data:{requiresActivation:!1,title:"Menu"}},{name:"menu.itemDetail",url:"/item",views:{menuView:{templateUrl:"app/menu/menu.itemDetail.html"}},data:{preload:w(),requiresActivation:!1,title:"Menu"}},{name:"loyaltyAdmin",url:"/rewards/:updating",templateUrl:"app/admin/loyaltyAdmin.html",data:{showInMenu:o(s,c,it),title:"Rewards",requiresMerchantLoyalty:!0,linkClass:"rewards",isLoyaltyControlled:!0}},{name:"mealPlanAdmin",url:"/mealPlan",templateUrl:"app/admin/mealPlanAdmin.html",data:{showInMenu:o(s,rt),title:"Meal Plan",linkClass:"mealPlan",isLoyaltyControlled:!0}},{name:"giftCardAdmin",url:"/giftCard",templateUrl:"app/admin/giftCardAdmin.html",data:{showInMenu:o(s,y),title:"Gift Cards",linkClass:"giftCard",isLoyaltyControlled:!0}},{name:"campusCardAdmin",url:"/campusCard",templateUrl:"app/admin/campusCardAdmin.html",data:{showInMenu:o(s,y,ut),title:"Campus Card",linkClass:"campusCard",isLoyaltyControlled:!0}},{name:"offers",url:"/offers/:offerType",templateUrl:"app/admin/offers.html",data:{showInMenu:o(s,c,p),title:"Offers",requiresMerchantLoyalty:!0,linkClass:"offers",isLoyaltyControlled:!0}},{name:"punchCards",url:"/punchCards",templateUrl:"app/admin/punchCards.html",data:{showInMenu:o(s,c,p),title:"Punch Cards",requiresMerchantLoyalty:!0,linkClass:"punchCards",isLoyaltyControlled:!0}},{name:"personalInfo",url:"/personalInfo",templateUrl:"app/admin/personalInfo.html",data:{parentMenuItem:a,title:"My Account",showInMenu:o(h,s),isLoyaltyControlled:!0}},{name:"orderHistory",data:{parentMenuItem:a,title:"Order History",showInMenu:o(s,et),justRaiseEvent:e.orderHistoryRequested}},{name:"login",data:{preload:["app/security/securityDialog.html","app/security/signin.html","app/security/signup.html","app/security/resetPassword.html"],title:"Sign In / Sign Up",showInMenu:o(nt,tt),justShowLogin:!0}},{name:"logout",controller:"logout",url:"/location/logout",data:{title:"Log Out",showInMenu:o(g,s)}},{name:"locationLogout",controller:"logout",url:"/logout",data:{parentMenuItem:a,title:"Log Out",showInMenu:o(h,s)}},{name:"changePassword",url:"/changePassword",templateUrl:"app/admin/changePassword.html",data:{title:"Change Password",showInMenu:!1}},{name:"changeName",url:"/changeName",templateUrl:"app/admin/changeName.html",data:{title:"Change Name",showInMenu:!1}},{name:"changeEmail",url:"/changeEmail",templateUrl:"app/admin/changeEmail.html",data:{title:"Change Email",showInMenu:!1}},{name:"changeBirthdate",url:"/changeBirthdate",templateUrl:"app/admin/changeBirthdate.html",data:{title:"Change Birthdate",showInMenu:!1}},{name:"changeCallbackNumber",url:"/changeCallbackNumber",templateUrl:"app/admin/changeCallbackNumber.html",data:{title:"Change Callback Number",showInMenu:!1}},{name:"changeEmailOptIn",url:"/changeEmailOptIn",templateUrl:"app/admin/changeEmailOptIn.html",data:{title:"Change Email Opt-In",showInMenu:!1}},{name:"deleteUser",url:"/deleteUser",templateUrl:"app/admin/deleteUser.html",data:{title:"Are you Sure?",showInMenu:!1}},{name:"checkout",url:"/checkout",templateUrl:"app/checkout/checkout.html",data:{preload:["app/cart/cartItem.html"],requiresOrderTypeWorkflow:!0,title:"Checkout",requiresAuthorization:!0,isOrderAccessControlled:!0,validateOrder:!0,allowGuestCheckout:!0,requiresActiveLocation:!0,isLoyaltyControlled:!0}},{name:"thankYou",url:"/complete",templateUrl:"app/checkout/thankYou.html",data:{title:"Thank You",requiresAuthorization:!0,allowGuestCheckout:!0}},{name:"waitForOrderProgress",url:"/ordering",templateUrl:"app/checkout/waitForOrderProgress.html",data:{title:"Ordering...",requiresAuthorization:!0,allowGuestCheckout:!0}},{name:"orderProgressFail",url:"/orderingoops",templateUrl:"app/checkout/orderProgressFail.html",data:{title:"Oh No",requiresAuthorization:!0,allowGuestCheckout:!0}},{name:"customerArrival",url:"/arrival/:urlId",templateUrl:"app/customerArrival/customerArrival.html",data:{title:"Thank You"}},{name:"repeatOrder",url:"/repeatOrder/:orderId",onEnter:["$stateParams","orderHistoryService",function(n,t){t.getOrderById(n.orderId)}],data:{requiresActivation:!1,isOrderAccessControlled:!0}},{name:"loading",url:"/loading",templateUrl:"app/loading/loadingPage.html",data:{title:"Loading",showInMenu:!1}},{name:"signup",url:"/signup",templateUrl:"app/security/signupStandAlone.html",data:{title:"Sign Up",showInMenu:!1}},{name:"achEnrollment",url:"/achEnrollment",templateUrl:"app/achEnrollment/achEnrollment.html",data:{title:"Rofo Pay",showInMenu:o(s,c,ft)}}];t.each(ot,function(t){t.data.requiresAuthorization&&(t.resolve=t.resolve||{},t.resolve.authenticationRequired=["userService",function(n){try{return n.isAuthenticated()}catch(i){if(!n.isAGuest()){i.allowGuestCheckout=t.data.allowGuestCheckout;throw i;}}}]);t.data.requiresOrderTypeWorkflow&&(t.resolve=t.resolve||{},t.resolve.checkOrderTypeWorkflow=["$stateParams","$q","orderTypeWorkflowService","cartService",function(n,t,i,r){function u(){return r.loadCurrent().then(function(n){return{orderType:n.order.OrderType,fulfillmentType:n.order.FulfillmentType}})}function f(n){return t.when({orderType:n.orderType,fulfillmentType:n.fulfillmentType})}var e=n.orderType&&n.fulfillmentType?f(n):u();return e.then(function(n){return i.meetsRequirementsForOrderType(n.orderType,n.fulfillmentType)})}]);t.data.validateOrder&&(t.resolve=t.resolve||{},t.resolve.validateOrder=["cartService",function(n){return n.checkForValidations()}]);t.data.requiresMerchantLoyalty&&(t.resolve=t.resolve||{},t.resolve.validateMerchantLoyalty=["loyaltyService",function(n){return n.assertMerchantHasLoyalty()}]);t.data.validateOrderTypeRule&&(t.resolve=t.resolve||{},t.resolve.validateOrderTypeRule=["$stateParams","orderTypeRuleService",function(n,t){return t.validateOrderTypeRule(n.orderType,n.fulfillmentType)}]);t.data.validateOrderTypeRuleMenu&&(t.resolve=t.resolve||{},t.resolve.validateOrderTypeRuleMenu=["$stateParams","orderTypeRuleService",function(n,t){return t.validateOrderTypeRuleMenu(n.orderType,n.fulfillmentType,n.menuId)}]);t.data.requiresActiveLocation&&(t.resolve=t.resolve||{},t.resolve.validateIsActive=["merchantLocationService",function(n){return n.validateLocationIsActive()}]);t.data.isOrderAccessControlled&&(t.resolve=t.resolve||{},t.resolve.ensureOrderable=["$stateParams","merchantLocationService",function(n,t){return n.isPreview?!0:t.validateCanOrder()}]);t.data.isLoyaltyControlled&&(t.resolve=t.resolve||{},t.resolve.ensureLoyaltyUserHasBirthdate=["$stateParams","userService","merchantLocationService",function(n,t,i){return t.checkIsAuthenticated()?i.requiresBirthdate().then(function(n){return n?t.getUser(togoorder.merchantId).then(function(n){if(!n.DateOfBirth)throw new u;return!0}):!0}):!0}],t.resolve.ensureLoyaltyUserHasCallbackNumber=["$stateParams","userService","merchantLocationService",function(n,t,i){return t.checkIsAuthenticated()?i.requiresCallbackNumber().then(function(n){return n?t.getUser(togoorder.merchantId).then(function(n){if(!n.CallbackNumber)throw new f;return!0}):!0}):!0}],t.resolve.ensureLoyaltyUserHasEmail=["$stateParams","userService","merchantLocationService",function(n,t,i){return t.checkIsAuthenticated()?i.requiresEmail().then(function(n){return n?t.getUser(togoorder.merchantId).then(function(n){if(!n.Email)throw new r;return!0}):!0}):!0}]);n.state(t.name,t)})}function r(){this.name="LoyaltyUserWithNoEmail";this.message="Our app works best when we know your Email!"}function u(){this.name="LoyaltyUserWithNoBirthdate";this.message="Our app works best when we know your Birthdate!"}function f(){this.name="LoyaltyUserWithNoCallbackNumber";this.message="Our app works best when we know your Phone Number!"}n.module("main").config(["$stateProvider","$urlRouterProvider","events",i])}(angular,_),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g,nt,tt){function bt(){var n=!1;try{n=v.isAuthenticated()}catch(t){}n&&(nt.showMessages(),togoorder.callInjectedStrategy("setAuthToken",togoorder.getSavedUserData()));ht()}function kt(){d.spinnerShow();k.getSurvey(togoorder.merchantLocation.MerchantId).then(function(n){var t=u.open({templateUrl:"app/feedback/feedbackSurvey.html",controller:"feedbackSurvey as vm",backdrop:"static",resolve:{survey:function(){return n}}})},function(){l.info("Sorry, survey is no longer available")})}function dt(){togoorder.callInjectedStrategy("cancelOrder")}function vt(n){n?$("#view-container").show():$("#view-container").hide();it.showView=n}function et(n,t){e.cancel(at);t===0?vt(n):at=e(function(){vt(n)},t)}function rt(n,t){e.cancel(lt);t==0?it.showSpinner=n:lt=e(function(){it.showSpinner=n},t)}function ht(){var i=_.filter(wt,function(n){return n.data&&n.data.showInMenu?typeof n.data.showInMenu=="function"?n.data.showInMenu(t,v,togoorder.merchantLocation):!0:!1}),n=_.groupBy(i,function(n){return n.data&&n.data.parentMenuItem&&n.data.parentMenuItem&&angular.toJson(n.data.parentMenuItem)||"top"}),r=_.filter(_.keys(n),function(n){return n!=="top"}),u=_.map(r,function(t){var i=angular.fromJson(t);return{data:{title:i.title,icon:i.icon},items:n[t]}});it.mainMenuStates=n.top;it.itemsWithSubMenus=u}function ft(n,t,r){n.items||(n.data&&n.data.onBeforeNavigate&&i.invoke(n.data.onBeforeNavigate),s.go(n,t,r))}function gt(){return g.openLinkInNewWindow("Home/TermsOfService?merchantId="+togoorder.merchantId,"tos"),!1}function ni(){rt(!0,100);f.location.href="Home/InactiveLocation/"+togoorder.locationId}function ti(){rt(!0,100);f.location.href="?id="+togoorder.merchantId+"#!/"+(togoorder.isUnlistedOrderType?"unlisted":"")}function yt(){var t=h,n;if(!t.orderType){if(n=y.getCart(),!n||!n.order)throw new Error("Can't get the OrderType");t={menuId:n.order.MenuId,orderType:n.order.OrderType,fulfillmentType:n.order.FulfillmentType}}return t}function ct(n,t){var i=u.open({templateUrl:"app/security/securityDialog.html",controller:"securityDialog as vm",backdrop:"static",resolve:{allowGuestCheckout:function(){return t.allowGuestCheckout},mode:function(){return n},goSignUp:function(){return t.goSignUp}}});i.result.then(function(n){n.isAuthenticated&&(tt.login(n),l.success("You are now signed in!"),nt.showMessages(),t.callback&&t.callback())},function(){s&&s.current&&s.current.name?et(!0,0):ft("locationHome",{},{reload:!0})})}function ii(){function n(){ut.start().done(function(){console.log("$.connection.hub.start().done(): "+ut.id,ut)})}if(!ut){ut=$.connection.hub;ut.logging=!0;ut.connectionSlow(function(){console.log("$.connection.hub.connectionSlow")});ut.reconnecting(function(){console.log("$.connection.hub.reconnecting")});ut.reconnected(function(){console.log("$.connection.hub.reconnected")});ut.stateChanged(function(){});ut.disconnected(function(){(console.log("$.connection.hub.disconnected"),ut.lastError&&console.log("$.connection.hub.lastError",ut.lastError),ot)&&setTimeout(function(){console.log("Restart connection...");n()},1e3)})}return ut.qs="urlId="+st,n(),ut}function ri(n){if(st!==n.orderUrlId||!ot){ot=!0;st=n.orderUrlId;var t=$.connection.orderHub;t.client.updateProgress=function(n){p.broadcast(a.orderHubProgress,n)};ii()}}function pt(n){var t=togoorder.callInjectedStrategy("authenticateUser");t?t.result&&r.when(t.result).then(function(){p.log("authenticateUser handled")},function(){p.log("authenticateUser not handled");ct("logIn",n)}):ct("logIn",n)}var it=this,lt,at,wt=s.get(),ot,st,ut;it.showView=!1;it.showSpinner="default";it.activeStateName="";it.isMenuForcedClosed=!0;it.goToState=ft;it.showTerms=gt;it.mainMenuStates=[];it.cancelOrder=dt;it.isOrderFlow=!togoorder.merchantLocation.MerchantSignUpWithLoyalty;it.showFeedbackSurvey=kt;Object.defineProperty(it,"bodyClass",{get:function(){return togoorder&&togoorder.userData&&togoorder.userData.isWebLogin?"web-login":"no-web-login"}});bt();t.$on("$stateChangeSuccess",function(n,i){ht();it.activeStateName=i.name;let r=i.data&&i.data.title||"Order ahead, and skip the line";t.title=`${r} - ${togoorder.merchantLocation.LocationName} - ToGoOrder.com`;f.scrollTo(0,0)});t.$on("$locationChangeSuccess",function(){t.actualLocation=o.path()});t.$watch(function(){return o.path()},function(n){t.actualLocation===n&&n.indexOf("/item")===n.length-5&&f.history.back()});t.$on("$stateChangeError",function(n,t,i,r,u,f){var e,o;f=f||{};switch(f.name){case"AuthenticationRequired":et(!0,0);rt(!1,0);v.setNextState(t.name,i,"You must sign in to access the "+(t.data&&t.data.title||"requested")+" page");v.login(null,f.allowGuestCheckout);break;case"RedirectRequired":e=angular.extend(h,i,f.nextState.params);ft(f.nextState.name,e,{reload:!0});break;case"CartOrderItemInvalid":et(!0,0);rt(!1,0);break;case"OrderTypeRuleMissing":et(!0,0);rt(!1,0);ft("locationHome",{},{reload:!0});break;case"OrderTypeRuleMenuMismatch":et(!0,0);rt(!1,0);b.goToFirstState({orderType:h.orderType,fulfillmentType:h.fulfillmentType},{reload:!0});break;case"OrderingNotAllowed":et(!0,0);rt(!1,0);ni();break;case"LoyaltyUserWithNoBirthdate":et(!0,0);rt(!1,0);l.info(f.message,f,arguments);ft("changeBirthdate",{},{});break;case"LoyaltyUserWithNoCallbackNumber":et(!0,0);rt(!1,0);l.info(f.message,f,arguments);ft("changeCallbackNumber",{},{});break;case"LoyaltyUserWithNoEmail":et(!0,0);rt(!1,0);l.info(f.message,f,arguments);ft("changeEmail",{},{});break;default:o="We can't seem to make the "+(t&&t.data&&t.data.title||"")+" page work for you. Let's try again.";l.error(o,f,arguments);t.name!=="locationHome"&&ft("locationHome",{},{reload:!0})}});t.$on("$stateChangeStart",function(n,t){$("#navbarCollapse").collapse("hide");t.data&&t.data.justShowLogin?(v.login(function(){rt(!0,0);s.reload();ht()}),n.preventDefault()):t.data&&t.data.justRaiseEvent?(n.preventDefault(),p.broadcast(t.data.justRaiseEvent,t.data)):t.data&&t.data.requiresActivation!==!1&&(et(!1,0),rt(!0,100))});n.$on(a.controllerActivateSuccess,function(){rt(!1,4,"controllerActivateSuccess");et(!0,100)});n.$on(a.controllerActivateFail,function(n,t){t&&t.name!=="NormalException"&&l.error("Something went wrong. (Computers. Right?) Let's try that again.",n);ft("locationHome",{},{reload:!0})});t.$on(a.spinnerToggle,function(n,t){rt(t.show,100,t.s)});t.$on(a.changeDeliveryAddressRequest,function(){ft("getDeliveryAddress",yt())});t.$on(a.changeTableNumberRequest,function(){ft("getTableNumber",yt())});t.$on(a.orderHistoryRequested,function(){rt(!0,100);w.showOrderHistory(togoorder.merchantLocation).then(function(){rt(!1,100)})});t.$on(a.navigateToMerchantWebsite,function(){rt(!0,100);f.location.href=togoorder.locationWebsite});t.$on(a.navigateToMerchantHome,ti);t.$on(a.signUpRequested,function(n,t){togoorder.callInjectedStrategy("signUp")||ct("signUp",t)});t.$on(a.securityAuthorizationRequired,function(n,t){var r,i;togoorder.spendgo&&t.allowGuestCheckout?(r=l.dialog({dialogTitle:"Sign in options",dialogMessage:"Would you like to sign in normally or check out as a guest?",dismissButtonText:"Checkout as Guest",closeButtonText:"Sign in / Sign up"}),r.then(function(){pt(t)},function(){v.setUserAsGuest().then(function(){ft("checkout",{},{})})})):togoorder.merchantLocation.IsOnlyGuestCheckout?(i=v.getNextState(),v.setUserAsGuest().then(function(){s.go(i.name,i.params)})):pt(t)});t.$on(a.orderPlaced,function(n,t){window.dataLayer=window.dataLayer||[];window.dataLayer.push({event:"transaction",ecommerce:{purchase:{actionField:{id:`${t.orderId}`,affiliation:"ToGo_Technologies",dimension1:`${togoorder.merchantLocation.Id}`},products:_.map(t.items,function(n){return{id:`${n.ItemId}`,name:n.ItemName,price:`${n.ItemPrice}`,quantity:n.Quantity}})}}})});ot=!1;t.$on(a.orderHubProgressDone,function(n){ot=!1;try{$.connection.hub.stop()}catch(n){console.log(n)}try{var t=$.connection.orderHub;t.connection.stop()}catch(n){console.log(n)}});st=null;ut=null;t.$on(a.readyForOrderProgress,function(n,t){togoorder.merchantLocation.IsPosIntegrationFailToCustomer&&ri(t)})}angular.module("main").controller("rootController",["$scope","$rootScope","$injector","$q","$uibModal","$window","$timeout","$location","$state","$stateParams","browserInfo","notify","events","userService","cartService","common","orderHistoryService","menuWorkflowService","feedbackService","spinner","linkService","merchantMessageService","crmService",n])}(),function(){"use strict";function n(n,t,i){var u=i.get(),r=[];_.each(u,function(n){n&&n.data&&n.data.preload&&(n.data.preload===!0&&n.templateUrl&&r.push(n.templateUrl),_.isArray(n.data.preload)&&_.each(n.data.preload,function(n){r.push(n)}))});_.each(r,function(i){t.get(i,{cache:n})})}angular.module("main").run(["$templateCache","$http","$state",n])}(),function(){"use strict";function n(){FastClick.attach(document.body)}angular.module("main").run(["$state",n])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w){function nt(){p.loadCurrent().then(function(){var n=p.getCart();n.order&&n.order.OrderType?w.continueOrdering(n):u.go("locationHome")},function(){u.go("locationHome")})}function tt(n){if(!n){s.dialog("Almost!","All fields are required");return}c.spinnerShow();b.existingCard.merchantId=b.merchantLocation.MerchantId;y.addCard(b.existingCard)["finally"](function(){return k()["finally"](function(){return b.isAddingExistingCard=!1,c.spinnerHide(),d()})})}function it(){b.isAddingExistingCard=!0}function rt(){b.isAddingExistingCard=!1}function ut(){h.activateController([ft().then(k).then(d)],n).then(function(){})}function ft(){return a.getById(g).then(function(n){return b.merchantLocation=n,b.loyaltyProfileType=b.merchantLocation.LoyaltyProfile&&b.merchantLocation.LoyaltyProfile.LoyaltyProviderType,b.existingCard.merchantId=b.merchantLocation.MerchantId,n})}function k(){return v.getUserWithLoyalty(b.merchantLocation.MerchantId).then(function(n){b.user=n})}function d(){return _.each(b.user.GiftCards,function(n){if(n.IsPrimary===!0)return y.getBalance({MerchantId:b.merchantLocation.MerchantId,CardNumber:n.AccountNumber}).then(function(t){n.Balance=t.Balance;b.campusCard=n})}),!0}var b=this,g=togoorder.locationId;b.user=undefined;b.merchantLocation={};b.beginAddExistingGiftCard=it;b.isAddingExistingCard=!1;b.addExistingGiftCard=tt;b.cancelAddGiftCard=rt;b.goToMenu=nt;b.existingCard={merchantId:0,cardNumber:"",isPrimary:!0};b.campusCard={};ut()}var n="campusCardAdmin";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","notify","common","spinner","events","merchantLocationService","userService","giftCardService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){function k(){u.go("personalInfo")}function d(n){n.preventDefault();n.stopPropagation();w.isCalendarVisible=!0}function g(n){if(w.errors=[],!n){w.isValidationVisible=!0;s.warning("Please correct any errors.");w.errors=["Please correct any errors."];return}c.spinnerShow();v.changeBirthdate(w.birthdate).then(nt,tt)["finally"](function(){c.spinnerHide()})}function nt(){s.dialog("Success","Your Birthdate has been changed.").then(function(){u.go("personalInfo")})}function tt(){var n=arguments.length&&arguments[0]&&arguments[0].data&&arguments[0].data.message||"An unexpected error occurred.";w.errors=[n]}function it(){y.loadCurrent().then(function(){var n=y.getCart();n.order&&n.order.OrderType?p.continueOrdering(n):u.go("locationHome")},function(){u.go("locationHome")})}function rt(){h.activateController([ut()],n).then(function(){})}function ut(){return v.getUser(b).then(function(n){w.user=n;w.birthdate=n.DateOfBirth&&moment(n.DateOfBirth).toDate();w.email=n.Email})}var w=this,b=togoorder.merchantId;w.user=undefined;w.isValidationVisible=!1;w.goToMenu=it;w.cancel=k;w.changeBirthdate=g;w.errors=[];w.birthdate=undefined;w.email=undefined;w.isCalendarVisible=!1;w.showCalendar=d;w.dateOptions={initDate:new Date("1980/01/01"),formatYear:"yyyy",startingDay:1,altInputFormats:["M!/d!/yyyy","M!-d!-yyyy","M!.d!.yyyy","M!d!yyyy","MM!/dd!/yyyy","MM!-dd!-yyyy","MM!.dd!.yyyy","MM!dd!yyyy","MM/dd/yyyy","M!/d!/yy","M!-d!-yy","M!.d!.yy","M!d!yy","MM!/dd!/yy","MM!-dd!-yy","MM!.dd!.yy","MM!dd!yy","MM/dd/yy"]};Object.defineProperty(w,"birthdateVm",{get:function(){return this.birthdate},set:function(n){for(var t=n&&moment(n);t&&t.isAfter(moment().add(-10,"year"));)t=t.add(-100,"year");this.birthdate=t&&t.toDate()}});rt()}var n="changeBirthdate";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","notify","common","spinner","events","merchantLocationService","userService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){function k(){u.go("personalInfo")}function d(n){if(w.errors=[],!n){w.isValidationVisible=!0;s.warning("Please correct any errors.");w.errors=["Please correct any errors."];return}c.spinnerShow();v.changeCallbackNumber(w.callbackNumber).then(g,nt)["finally"](function(){c.spinnerHide()})}function g(){s.dialog("Success","Your callback number has been changed.").then(function(){u.go("personalInfo")})}function nt(){var n=arguments.length&&arguments[0]&&arguments[0].data&&arguments[0].data.Message||"An unexpected error occurred.";w.errors=[n]}function tt(){y.loadCurrent().then(function(){var n=y.getCart();n.order&&n.order.OrderType?p.continueOrdering(n):u.go("locationHome")},function(){u.go("locationHome")})}function it(){h.activateController([rt()],n).then(function(){})}function rt(){return v.getUser(b).then(function(n){w.user=n;w.callbackNumber=n.CallbackNumber;w.email=n.Email})}var w=this,b=togoorder.merchantId;w.user=undefined;w.isValidationVisible=!1;w.goToMenu=tt;w.cancel=k;w.changeCallbackNumber=d;w.errors=[];w.callbackNumber=undefined;w.email=undefined;it()}var n="changeCallbackNumber";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","notify","common","spinner","events","merchantLocationService","userService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w){function d(){u.go("personalInfo")}function g(n){if(b.errors=[],!n){b.isValidationVisible=!0;s.warning("Please correct any errors.");b.errors=["Please correct any errors."];return}c.spinnerShow();v.changeEmail(b.email).then(nt,tt)["finally"](function(){c.spinnerHide()})}function nt(){s.dialog("Success","Your email has been changed.").then(function(){u.go("personalInfo");w.changeEmail(b.email)})}function tt(){var n=arguments.length&&arguments[0]&&arguments[0].data&&arguments[0].data.message||"An unexpected error occurred.";b.errors=[n]}function it(){y.loadCurrent().then(function(){var n=y.getCart();n.order&&n.order.OrderType?p.continueOrdering(n):u.go("locationHome")},function(){u.go("locationHome")})}function rt(){h.activateController([ut()],n).then(function(){})}function ut(){return v.getUser(k).then(function(n){b.user=n;b.firstName=n.FirstName;b.lastName=n.LastName;b.email=n.Email})}var b=this,k=togoorder.merchantId;b.user=undefined;b.isValidationVisible=!1;b.goToMenu=it;b.cancel=d;b.changeEmail=g;b.errors=[];b.firstName=undefined;b.lastName=undefined;b.email=undefined;rt()}var n="changeEmail";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","notify","common","spinner","events","merchantLocationService","userService","cartService","menuWorkflowService","crmService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o){function c(){t.go("personalInfo")}function l(){s.errors=[];u.spinnerShow();f.changeEmailOptIn(s.emailOptIn).then(a,v)["finally"](function(){u.spinnerHide()})}function a(){i.dialog("Success","Your email opt-in setting has been changed.").then(function(){t.go("personalInfo")})}function v(){var n=arguments.length&&arguments[0]&&arguments[0].data&&arguments[0].data.Message||"An unexpected error occurred.";s.errors=[n]}function y(){e.loadCurrent().then(function(){var n=e.getCart();n.order&&n.order.OrderType?o.continueOrdering(n):t.go("locationHome")},function(){t.go("locationHome")})}function p(){r.activateController([w()],n).then(function(){})}function w(){return f.getUser(h).then(function(n){s.user=n;s.emailOptIn=n.EmailOptIn;s.email=n.Email})}var s=this,h=togoorder.merchantId;s.user=undefined;s.isValidationVisible=!1;s.goToMenu=y;s.cancel=c;s.changeEmailOptIn=l;s.errors=[];s.emailOptIn=undefined;s.email=undefined;p()}var n="changeEmailOptIn";angular.module("main").controller(n,["$state","notify","common","spinner","userService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){function k(){u.go("personalInfo")}function d(n){if(w.errors=[],!n){w.isValidationVisible=!0;s.warning("Please correct any errors.");w.errors=["Please correct any errors."];return}c.spinnerShow();v.changeName(w.firstName,w.lastName).then(g,nt)["finally"](function(){c.spinnerHide()})}function g(){s.dialog("Success","Your name has been changed.").then(function(){u.go("personalInfo")})}function nt(){var n=arguments.length&&arguments[0]&&arguments[0].data&&arguments[0].data.message||"An unexpected error occurred.";w.errors=[n]}function tt(){y.loadCurrent().then(function(){var n=y.getCart();n.order&&n.order.OrderType?p.continueOrdering(n):u.go("locationHome")},function(){u.go("locationHome")})}function it(){h.activateController([rt()],n).then(function(){})}function rt(){return v.getUser(b).then(function(n){w.user=n;w.firstName=n.FirstName;w.lastName=n.LastName;w.email=n.Email})}var w=this,b=togoorder.merchantId;w.user=undefined;w.isValidationVisible=!1;w.goToMenu=tt;w.cancel=k;w.changeName=d;w.errors=[];w.firstName=undefined;w.lastName=undefined;w.email=undefined;it()}var n="changeName";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","notify","common","spinner","events","merchantLocationService","userService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){function k(){u.go("personalInfo")}function d(n){if(w.errors=[],!n){w.isValidationVisible=!0;s.warning("Please correct any errors.");w.errors=["Please correct any errors."];return}c.spinnerShow();v.changePassword(w.currentPassword,w.password,w.confirmPassword).then(g,nt)["finally"](function(){c.spinnerHide()})}function g(){s.dialog("Success","Your password has been changed.").then(function(){u.go("personalInfo")})}function nt(){var n=arguments.length&&arguments[0]&&arguments[0].data&&arguments[0].data.message||"An unexpected error occurred.";w.errors=[n]}function tt(){y.loadCurrent().then(function(){var n=y.getCart();n.order&&n.order.OrderType?p.continueOrdering(n):u.go("locationHome")},function(){u.go("locationHome")})}function it(){h.activateController([rt()],n).then(function(){})}function rt(){return v.getUser(b).then(function(n){w.user=n;w.email=n.Email})}var w=this,b=togoorder.merchantId;w.user=undefined;w.currentPassword="";w.password="";w.confirmPassword="";w.isValidationVisible=!1;w.goToMenu=tt;w.cancelChangePassword=k;w.changePassword=d;w.errors=[];w.email=undefined;w.passwordMinLength=7;it()}var n="changePassword";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","notify","common","spinner","events","merchantLocationService","userService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v){function w(){u.go("personalInfo")}function b(n){if(y.errors=[],!n){y.isValidationVisible=!0;s.warning("Please correct any errors.");y.errors=["Please correct any errors."];return}c.spinnerShow();v.deleteUser().then(k,d)["finally"](function(){c.spinnerHide()})}function k(){s.dialog("Success","Your account has been deleted").then(function(){u.go("logout")})}function d(){var n=arguments.length&&arguments[0]&&arguments[0].data&&arguments[0].data.message||"An unexpected error occurred.";y.errors=[n]}function g(){h.activateController([nt(),tt()],n).then(function(){})}function nt(){return v.getUser(p).then(function(n){y.user=n;y.firstName=n.FirstName;y.lastName=n.LastName;y.email=n.Email})}function tt(){return console.log("getting user merchants"),v.getUserMerchants().then(function(n){y.merchantList=n})}var y=this,p=togoorder.merchantId;y.user=undefined;y.isValidationVisible=!1;y.cancel=w;y.deleteUser=b;y.errors=[];y.firstName=undefined;y.lastName=undefined;y.email=undefined;y.merchantList=undefined;g()}var n="deleteUser";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","notify","common","spinner","events","merchantLocationService","userService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d){function ut(){g.existingCard.cardNumber=(g.existingCard.cardNumber||"").replaceAll(" ","")}function ft(n){return n.IsPinOnFile===!1&&g.merchantLocation.GiftCardProfile.RequirePin}function et(n){o.open({templateUrl:"app/checkout/giftCardPinPrompt.html",controller:"giftCardPinPrompt as vm",size:"sm",resolve:{}}).result.then(function(t){return a.spinnerShow(),w.updatePin({merchantId:g.merchantLocation.MerchantId,cardNumber:n.AccountNumber,cardPin:t}).then(function(n){return n},function(){u.error("An error occurred while updating the PIN.");c.dialog("Sorry :/","An error occurred while updating the PIN.");throw new Error;})},function(){return r.reject()}).then(function(t){return t.Success?nt().then(function(){var t=_.findWhere(g.availableGiftCards,{AccountNumber:n.AccountNumber});t&&t.Balance>0&&c.dialog("Woo Hoo!","You've got "+s("currency")(t.Balance)+" on this card! Awe Yeah!")}):(u.error(t.Message||"An error occurred while retrieving the gift card."),c.dialog("Sorry :/","An error occurred while retrieving the gift card."))})["finally"](function(){a.spinnerHide()})}function ot(){b.loadCurrent().then(function(){var n=b.getCart();n.order&&n.order.OrderType?k.continueOrdering(n):f.go("locationHome")},function(){f.go("locationHome")})}function st(n){if(!n){c.dialog("Almost!","All fields are required");return}a.spinnerShow();g.existingCard.merchantId=g.merchantLocation.MerchantId;w.addCard(g.existingCard).then(function(){it();g.existingCard.cardNumber="";g.existingCard.cardPin="";g.existingCard.recaptchaToken=""})["finally"](function(){return nt()["finally"](function(){g.showCaptcha&&d.reload(g.recaptchaId);a.spinnerHide()})})}function ht(){g.user.GiftCards&&g.user.GiftCards.length&&(g.availableGiftCards=_.where(g.user.GiftCards,{IsPrimary:!1}))}function tt(){g.isAddingExistingCard=!0}function it(){g.isAddingExistingCard=!1}function ct(){l.activateController([lt().then(nt)],n).then(function(){g.availableGiftCards.length||tt()})}function lt(){return y.getById(rt).then(function(n){return g.merchantLocation=n,g.loyaltyProfileType=g.merchantLocation.LoyaltyProfile&&g.merchantLocation.LoyaltyProfile.LoyaltyProviderType,g.existingCard.merchantId=g.merchantLocation.MerchantId,g.merchantLocation.GiftCardProfile&&(g.giftCardProviderType=g.merchantLocation.GiftCardProfile.GiftCardProviderType,g.showPin=g.merchantLocation.GiftCardProfile.RequirePin,g.showCaptcha=g.giftCardProviderType===2,g.isInputMasked=g.giftCardProviderType===2),n})}function nt(){return p.getUserWithLoyalty(g.merchantLocation.MerchantId).then(function(n){g.user=n;ht()})}function at(n){g.recaptchaId=n;u.debug(`recaptcha widget created with id ${n}`)}var g=this,rt=togoorder.locationId;g.user=undefined;g.merchantLocation={};g.beginAddExistingGiftCard=tt;g.isAddingExistingCard=!1;g.addExistingGiftCard=st;g.cancelAddGiftCard=it;g.goToMenu=ot;g.availableGiftCards=[];g.existingCard={merchantId:0,cardNumber:"",isPrimary:!1,cardPin:"",recaptchaToken:""};g.giftCardProviderType=null;g.showCaptcha=!1;g.showPin=!1;g.recaptchaKey=togoorder.recaptchaKey;g.recaptchaId=undefined;g.onRecaptchaCreate=at;g.isInputMasked=!1;g.stripSpaces=ut;g.needsPin=ft;g.promptForPin=et;Object.defineProperty(g,"showExistingGiftCards",{get:function(){return g.user&&g.availableGiftCards.length&&!g.isAddingExistingCard}});Object.defineProperty(g,"showAddExistingGiftCardButton",{get:function(){return!g.isAddingExistingCard}});ct()}var n="giftCardAdmin";angular.module("main").controller(n,["$rootScope","$scope","$q","$log","$state","$stateParams","$uibModal","$filter","$timeout","notify","common","spinner","events","merchantLocationService","userService","giftCardService","cartService","menuWorkflowService","vcRecaptchaService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w){function nt(){p.loadCurrent().then(function(){var n=p.getCart();n.order&&n.order.OrderType?w.continueOrdering(n):u.go("locationHome")},function(){u.go("locationHome")})}function tt(n){if(!n){s.dialog("Almost!","All fields are required");return}c.spinnerShow();y.createCard(b.newCard)["finally"](function(){return k(!0)["finally"](function(){c.spinnerHide()})})}function it(n){if(!n){s.dialog("Almost!","All fields are required");return}c.spinnerShow();b.existingCard.merchantId=b.merchantLocation.MerchantId;y.addCard(b.existingCard).then(function(){b.isAddingExistingCard=!1})["finally"](function(){return k(!0)["finally"](function(){c.spinnerHide()})})}function rt(n){if(b.updateCard.oldAccountNumber=b.availableLoyalties[0].AccountNumber,b.loyaltyProfileType===2&&b.updateCard.confirmNewAccountNumber!=b.updateCard.newAccountNumber){s.dialog("Almost!","The card number you entered does not match!");return}if(b.loyaltyProfileType===2&&(b.loyaltyPrefix+b.updateCard.newAccountNumber).length!=b.loyaltyLength){s.dialog("Almost!","The card number you entered is the wrong length!");return}if(b.loyaltyProfileType===2&&(b.updateCard.newAccountNumber=b.loyaltyPrefix+b.updateCard.newAccountNumber),!n){s.dialog("Almost!","All fields are required");return}c.spinnerShow();y.updateCard(b.updateCard).then(function(){b.isAddingExistingCard=!1})["finally"](function(){return k(!0)["finally"](function(){c.spinnerHide();b.signUpWithLoyalty&&b.availableLoyalties.length&&b.availableLoyalties[0].AchStatus==null?e.open({templateUrl:"app/security/enrollAfterSignupModal.html",controller:"enrollAfterSignupModal as vm",size:"md",resolve:{isFromSignup:!1}}).result.then(function(n){n?u.go("achEnrollment"):u.go("locationHome")}):s.dialog("Success","Your card has been updated.").then(function(){u.go("locationHome")})})})}function ut(){b.isAddingExistingCard=!0}function ft(){b.isAddingExistingCard=!1;d&&u.go("locationHome")}function et(){h.activateController([ot().then(st).then(k)],n).then(function(){})}function ot(){return a.getById(g).then(function(n){return b.merchantLocation=n,b.loyaltyProfileType=b.merchantLocation.LoyaltyProfile&&b.merchantLocation.LoyaltyProfile.LoyaltyProviderType,b.newCard.merchantId=b.merchantLocation.MerchantId,b.showAccountNumber=b.loyaltyProfileType!==9&&b.loyaltyProfileType!==6,b.showUserPhoneNumber=b.loyaltyProfileType===9||b.loyaltyProfileType===6,n})}function k(n){return v.getUserWithLoyalty(b.merchantLocation.MerchantId,n===!0).then(function(n){b.user=n;b.availableLoyalties=b.user.Loyalties||[]})}function st(){if(b.loyaltyProfileType===6)return y.wipeOffers().then(_.noop,function(n){alertError(n);throw n;})}var b=this,d=!!f.updating,g=togoorder.locationId;b.user=undefined;b.showAccountNumber=undefined;b.showUserPhoneNumber=undefined;b.addNewLoyaltyCard=tt;b.updateLoyaltyCard=rt;b.beginAddExistingLoyaltyCard=ut;b.addExistingLoyaltyCard=it;b.showAddNewLoyaltyCard=!1;b.showExistingRewardCards=!1;b.isAddingExistingCard=d;b.cancelAddLoyaltyCard=ft;b.goToMenu=nt;b.loyaltyProfileType=undefined;b.signUpWithLoyalty=togoorder.merchantLocation.MerchantSignUpWithLoyalty;b.updateCard={oldAccountNumber:"",newAccountNumber:""};b.existingCard={cardNumber:"",pin:""};b.newCard={phoneNumber:"",merchantId:null};b.loyaltyPrefix=togoorder.merchantLocation.LoyaltyProfile!=null?togoorder.merchantLocation.LoyaltyProfile.AccountPrefix:"";b.loyaltyLength=togoorder.merchantLocation.LoyaltyProfile!=null?togoorder.merchantLocation.LoyaltyProfile.AccountLength:0;Object.defineProperty(b,"showAddNewLoyaltyCard",{get:function(){return(!b.user||!b.availableLoyalties.length)&&!b.isAddingExistingCard}});Object.defineProperty(b,"showExistingRewardCards",{get:function(){return b.user&&b.availableLoyalties.length&&!b.isAddingExistingCard}});Object.defineProperty(b,"showAddExistingLoyaltyCardButton",{get:function(){return!b.isAddingExistingCard}});et()}var n="loyaltyAdmin";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","notify","common","spinner","events","merchantLocationService","userService","loyaltyService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b){function it(){w.loadCurrent().then(function(){var n=w.getCart();n.order&&n.order.OrderType?b.continueOrdering(n):u.go("locationHome")},function(){u.go("locationHome")})}function rt(n){if(!n){h.dialog("Almost!","All fields are required");return}l.spinnerShow();k.existingCard.merchantId=k.merchantLocation.MerchantId;p.addCard(k.existingCard).then(function(){g()})["finally"](function(){return nt()["finally"](function(){l.spinnerHide()})})}function d(){k.isAddingExistingCard=!0}function g(){k.isAddingExistingCard=!1}function ut(){c.activateController([ft().then(nt)],n).then(function(){})}function ft(){return v.getById(tt).then(function(n){return k.merchantLocation=n,k.loyaltyProfileType=k.merchantLocation.LoyaltyProfile&&k.merchantLocation.LoyaltyProfile.LoyaltyProviderType,k.existingCard.merchantId=k.merchantLocation.MerchantId,n})}function nt(){return y.getUserWithLoyalty(k.merchantLocation.MerchantId).then(function(n){k.user=n;k.user.MealPlans&&k.user.MealPlans.length&&(k.availableMealPlans=_.where(k.user.MealPlans,{IsPrimary:!1}),s(function(){_.each(k.availableMealPlans,function(n){return p.getBalance({MerchantId:k.merchantLocation.MerchantId,CardNumber:n.AccountNumber}).then(function(t){n.Balance=t.Balance})})},1e3));k.availableMealPlans.length||d()})}var k=this,tt=togoorder.locationId;k.user=undefined;k.merchantLocation={};k.beginAddExistingMealPlan=d;k.isAddingExistingCard=!1;k.addExistingMealPlan=rt;k.cancelAddMealPlan=g;k.goToMenu=it;k.availableMealPlans=[];k.existingCard={merchantId:0,cardNumber:"",isPrimary:!1};Object.defineProperty(k,"showExistingMealPlans",{get:function(){return k.user&&k.availableMealPlans.length&&!k.isAddingExistingCard}});ut()}var n="mealPlanAdmin";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","$timeout","notify","common","spinner","events","merchantLocationService","userService","mealPlanService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d){function ut(){k.loadCurrent().then(function(){var n=k.getCart();n.order&&n.order.OrderType?d.continueOrdering(n):f.go("locationHome")},function(){f.go("locationHome")})}function ft(n){return g.loyaltyProfileType!==3?!0:g.user.Loyalties[0].RewardPointsSummary.Points>=n.PointsCost?!0:!1}function nt(){if(!g.user||!g.user.Loyalties||!g.user.Loyalties.length)return it([]),r.when([]);var n={CardNumber:g.user.Loyalties[0].AccountNumber,MerchantId:g.merchantLocation.MerchantId,OfferType:e.offerType?e.offerType:7};return b.getOffers(n).then(function(n){it(n.Offers)})}function it(n){g.offerList=n;var t=_.filter(g.offerList,function(n){return n.Optable&&n.OfferType!==3&&n.OfferType!==5}),i=_.filter(g.offerList,function(n){return!n.Optable&&n.OfferType!==3&&n.OfferType!==5}),r=_.filter(g.offerList,function(n){return n.OfferType===3});g.hasStandardOffers=t&&t.length;g.hasAutomaticOffers=i&&i.length;g.hasPunchCards=r&&r.length;g.hasOffers=g.offerList&&g.offerList.length;g.standardOffers=t;g.automaticOffers=i;g.punchCards=r;_.each(g.punchCards,function(n){n.Punches=g.getPunches(n.MaxPunches,n.Balance);n.PunchMessage=n.Punches.length?"":"0 punches earned"})}function et(n){return n.Graphic&&n.Graphic||"https://storage.googleapis.com/content.togoorder.com/merchant-content/ToGoTech/togo_logo_card2.png"}function ot(n,t){for(var r,u=[],i=1;i<=n;i++)r={},r.Image=i<=t?"PunchCheck.png":"PunchUnchecked.png",u.push(r);return u}function st(n){return(n.OptedIn||n.pendingOptIn)&&!n.pendingOptOut?"OfferChecked.png":!n.OptedIn||n.pendingOptOut?"OfferUnchecked.png":void 0}function ht(n){var t;return n.pendingOptIn||n.pendingOptOut?!1:(v.spinnerShow(),n.OptedIn===!0?(n.pendingOptOut=!0,t=function(){n.pendingOptOut=undefined;v.spinnerHide()},b.optOutOfOffer({CardNumber:g.user.Loyalties[0].AccountNumber,OfferId:n.OfferId,MerchantId:g.merchantLocation.MerchantId}).then(function(){nt()["finally"](t)},t)["finally"](function(){$("#zoomModal").modal("hide")})):(n.pendingOptIn=!0,t=function(){n.pendingOptIn=undefined;v.spinnerHide()},b.optInToOffer({CardNumber:g.user.Loyalties[0].AccountNumber,OfferId:n.OfferId,MerchantId:g.merchantLocation.MerchantId}).then(function(){nt()["finally"](t)},t)["finally"](function(){$("#zoomModal").modal("hide")})),nt(),!1)}function tt(n){return a.safeClassName(n.OfferId+n.ExternalId+n.RedemptionCode)}function ct(n){var t=$("#zoomModal"),r;if(t.hasClass("in"))t.modal("hide");else{r=$("#offer_"+tt(n));t.html("");var i=h.innerWidth*.4,u=i*.3,f={position:"absolute",width:i+"px",height:u+"px",left:(h.innerWidth-i)/2+"px",top:"3%"};r.clone(!0).addClass("offerZoomDiv").css(f).prepend("<a class='close' style='margin-right:10px;text-decoration:none' data-dismiss='modal' title='Close' data-ng-click=' $(\"#qrcode_"+tt(n)+"\").hide();dismiss()'>×<\/a>").appendTo(t).find(".optButtonDiv").css("z-index","10000");$(".modal #qrcode_"+tt(n)).show();t.modal("show")}}function lt(){a.activateController([at().then(vt).then(nt)],n).then(function(){})}function at(){return p.getById(rt).then(function(n){return g.merchantLocation=n,g.loyaltyProfileType=g.merchantLocation.LoyaltyProfile&&g.merchantLocation.LoyaltyProfile.LoyaltyProviderType,g.merchantId=g.merchantLocation.MerchantId,n})}function vt(){return w.getUserWithLoyalty(g.merchantLocation.MerchantId).then(function(n){g.user=n})}var g=this,rt=togoorder.locationId;g.user=undefined;g.offerList=undefined;g.loyaltyProfileType=undefined;g.optOffer=ht;g.zoomOffer=ct;g.getOfferUiId=tt;g.getPunches=ot;g.getImageName=st;g.goToMenu=ut;g.hasStandardOffers=undefined;g.hasAutomaticOffers=undefined;g.hasPunchCards=undefined;g.hasOffers=undefined;g.standardOffers=[];g.automaticOffers=[];g.punchCards=[];g.getCardImageUrl=et;g.canAfford=ft;g.offerSpinnerOptions={lines:9,length:28,width:14,radius:25,scale:.25,corners:1,color:"#000",opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"50%",left:"50%",shadow:!1,hwaccel:!1,position:"absolute"};lt()}var n="offers";angular.module("main").controller(n,["$rootScope","$scope","$q","$log","$state","$stateParams","$uibModal","$filter","$window","$timeout","notify","common","spinner","events","merchantLocationService","userService","loyaltyService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){function k(){u.go("changeName")}function d(){u.go("changeEmail")}function g(){u.go("changeCallbackNumber")}function nt(){u.go("changeBirthdate")}function tt(){u.go("changePassword")}function it(){u.go("changeEmailOptIn")}function rt(){u.go("deleteUser")}function ut(){y.loadCurrent().then(function(){var n=y.getCart();n.order&&n.order.OrderType?p.continueOrdering(n):u.go("locationHome")},function(){u.go("locationHome")})}function ft(){h.activateController([et()],n).then(function(){})}function et(){return v.getUser(b).then(function(n){w.user=n;w.email=n.Email})}var w=this,b=togoorder.merchantId;w.user=undefined;w.goToMenu=ut;w.email=undefined;w.editName=k;w.editCallbackNumber=g;w.editBirthdate=nt;w.editPassword=tt;w.editEmail=d;w.editEmailOptIn=it;w.deleteUserAccount=rt;ft()}var n="personalInfo";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","notify","common","spinner","events","merchantLocationService","userService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k){function tt(){b.loadCurrent().then(function(){var n=b.getCart();n.order&&n.order.OrderType?k.continueOrdering(n):f.go("locationHome")},function(){f.go("locationHome")})}function it(){if(!d.user||!d.user.Loyalties||!d.user.Loyalties.length)return g([]),u.when([]);var n={CardNumber:d.user.Loyalties[0].AccountNumber,MerchantId:d.merchantLocation.MerchantId};return w.getPunchCards(n).then(function(n){g(n.Cards)})}function g(n){d.offerList=n;_.each(d.offerList,function(n){n.Punches=d.getPunches(n.Threshold,n.Balance);n.PunchMessage=n.Punches.length?"":"0 punches earned"})}function rt(n,t){for(var r,u=[],i=1;i<=n;i++)r={},r.Image=i<=t?"PunchCheck.png":"PunchUnchecked.png",u.push(r);return u}function ut(){l.activateController([ft().then(et).then(it)],n)}function ft(){return y.getById(nt).then(function(n){return d.merchantLocation=n,d.loyaltyProfileType=d.merchantLocation.LoyaltyProfile&&d.merchantLocation.LoyaltyProfile.LoyaltyProviderType,d.merchantId=d.merchantLocation.MerchantId,n})}function et(){return p.getUserWithLoyalty(d.merchantLocation.MerchantId).then(function(n){d.user=n})}function ot(n){var t=$("#zoomModal"),i;if(t.hasClass("in"))t.modal("hide");else{i=$("#offer_"+n.OfferId);t.html("");var r=h.innerWidth*.8,u=r*.6,f={position:"absolute",width:r+"px",height:u+"px",left:h.innerWidth*.1+"px",top:"3%"};i.clone(!0).css(f).appendTo(t).find(".optButtonDiv").css("z-index","10000");t.modal("show")}}function st(n){return n.Graphic&&n.Graphic||"https://storage.googleapis.com/content.togoorder.com/merchant-content/RoyalFarms/I/BackgroundOffer.png"}var d=this,nt=togoorder.locationId;d.user=undefined;d.offerList=undefined;d.loyaltyProfileType=undefined;d.getPunches=rt;d.zoomOffer=ot;d.getCardImageUrl=st;d.goToMenu=tt;ut()}var n="punchCards";angular.module("main").controller(n,["$rootScope","$scope","$log","$q","$state","$stateParams","$uibModal","$filter","$window","notify","common","spinner","events","merchantLocationService","userService","loyaltyService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v){function w(){h.activateController([k().then(b)],n).then(function(){return!y.showMessage&&y.user.Loyalties[0].AccountNumber[9]!=9&&!y.changeIframe?setTimeout(function(){$("#zippyForm").submit()},500):(y.user.Loyalties[0].AccountNumber[9]==9&&(y.message="You must have a plastic card to enroll for RoFo Pay. Please pick up a plastic card at your local Royal Farms.",y.showMessage=!0,y.showUpdateLink=!0),!1)})}function b(){return v.getUserWithLoyalty(y.merchantLocation.MerchantId).then(function(n){if(y.user=n,y.user.Loyalties.length){var t=y.user.Loyalties[0];y.iframeType=t.AchStatus==2?"verifyIframe":"enrollIframe";y.message=t.AchStatusMessage;t.AchStatus==null||t.AchStatus==3||t.AchStatus==2||(y.showMessage=!0,y.supportMessage+="Please contact customer service about your card at: 1-844-830-4792");t.AchStatus==3&&($("#ZipLforms").attr("src","https://secure.paymentcard.com/secure/userlogin.php"),y.changeIframe=!0)}})}function k(){return a.getById(p).then(function(n){return y.merchantLocation=n,n})}function d(){u.go("loyaltyAdmin",{updating:!0})}var y=this,p=togoorder.locationId;y.user=undefined;y.iframeType="enroll";y.showMessage=!1;y.changeIframe=!1;y.showUpdateLink=!1;y.goLoyaltyAdmin=d;y.message="";y.supportMessage="";w()}var n="achEnrollment";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","notify","common","spinner","events","merchantLocationService","userService","loyaltyService","cartService","menuWorkflowService",t])}(),function(){"use strict";angular.module("common",[])}(),function(){"use strict";function n(){function n(){this.StreetNumber="";this.AddressLine1="";this.AddressLine2="";this.City="";this.State="";this.Zipcode="";this.Country="";this.Lat=0;this.Lng=0;this.SpecialInstructions="";this.ExtraInstructions=""}return n.prototype.parseGooglePlace=function(t){var f="",h,i,u,e,r,o,s;if(t.address_components&&(f=[t.address_components[0]&&t.address_components[0].short_name||"",t.address_components[1]&&t.address_components[1].short_name||"",t.address_components[2]&&t.address_components[2].short_name||""].join(" ")),h={street_number:"short_name",route:"long_name",locality:"long_name",sublocality_level_1:"long_name",sublocality:"long_name",neighborhood:"long_name",administrative_area_level_1:"short_name",postal_code:"short_name",country:"long_name"},f){for(i={},u=0;u<t.address_components.length;u++)e=t.address_components[u].types[0],h[e]&&(i[e]=t.address_components[u][h[e]]);return i.street_number?(r=new n,r.displayString=f,r.AddressLine1=i.street_number+" "+i.route,r.City=i.locality||i.sublocality||i.sublocality_level_1||i.neighborhood,r.State=i.administrative_area_level_1,r.Zipcode=i.postal_code,r.Country=i.country,o=t.geometry.location.lat,r.Lat=_.isFunction(o)?o():o,s=t.geometry.location.lng,r.Lng=_.isFunction(s)?s():s,r):{displayString:f}}},n.prototype.getGoogleAddress=function(){return this.City?this.AddressLine1+", "+this.City+", "+this.State+", "+this.Country:""},n.prototype.parseMapBoxFeature=function(t){var f,e,r,u,o,i;return t.context&&$.each(t.context,function(n,t){t.id.indexOf("region")>=0&&(f=t.text);t.id.indexOf("country")>=0&&(e=t.text);t.id.indexOf("place")>=0&&(r=t.text);t.id.indexOf("postcode")>=0&&(o=t.text);t.id.indexOf("neighborhood")>=0&&(u=t.text)}),t.place_name?t.address?(i=new n,i.StreetNumber=t.address,i.displayString=t.address+" "+t.text+" "+(r||u),i.AddressLine1=t.address+" "+t.text,i.City=r||u,i.State=f,i.Zipcode=o,i.Country=e,i.Lng=t.geometry.coordinates[0],i.Lat=t.geometry.coordinates[1],i):{displayString:t.place_name}:void 0},n.prototype.getMapBoxAddress=function(){return this.City?this.AddressLine1+", "+this.City+", "+this.State+" "+this.Zipcode+", "+this.Country:""},n}angular.module("common").factory("Address",[n])}(),function(){"use strict";function n(n,t){var i=this;i.dialogTitle=t.dialogTitle||"";i.dialogMessage=t.dialogMessage||"";i.dismissButtonText=t.dismissButtonText;i.closeButtonText=t.closeButtonText||"OK";i.buttonActions=t.buttonActions||[];i.close=n.close;i.dismiss=n.dismiss}angular.module("common").controller("alert",["$uibModalInstance","alertOptions",n])}(),function(){"use strict";function n(){function n(n){return $("#is-"+n).is(":visible")}return{isSize:n}}angular.module("common").factory("browserInfo",["$log",n])}(),function(){"use strict";function t(n,t,i,r,u){function c(n,t,i,r){var s=3959,u=e(i-n),f=e(r-t),o=Math.sin(u/2)*Math.sin(u/2)+Math.cos(e(n))*Math.cos(e(i))*Math.sin(f/2)*Math.sin(f/2),h=2*Math.atan2(Math.sqrt(o),Math.sqrt(1-o));return s*h}function e(n){return n*Math.PI/180}function l(n){return n&&n.replace(/ /g,"-").replace(/[^a-zA-Z0-9_]+/g,"-").replace(/\-$/,"").replace(/^\-/,"")}function a(t){var i=n.defer(),r=0;return _.each(t,function(n){r++;n.then(function(n){i.resolve(n)})["finally"](function(n){r--;r===0&&i.reject(n)})}),i.promise}function h(n,t){return+(Math.round(+(n+"e"+t))+"e"+-t)||0}function v(n,t){return t===undefined&&(t=2),parseFloat(h(h(n,t+1),t))}function y(t,i){o++;return n.all(t).then(function(){var n={controllerId:i};return f.push(function(){s(r.config.controllerActivateSuccessEvent,n)}),n},function(n){n&&f.push(function(){s(r.config.controllerActivateFailEvent,n)});throw n;})["finally"](function(){o--;o===0&&(_.each(f,function(n){n()}),f=[])})}function s(){return t.$broadcast.apply(t,arguments)}function p(n,t){this.name="RedirectRequired";this.message=n;this.beKind=!0;this.nextState=t}function w(n){this.name="NormalException";this.message=n}var o=0,f=[];return{activateController:y,broadcast:s,exceptions:{RedirectRequiredException:p,NormalException:w},monetize:v,any:a,safeClassName:l,messages:u,getDistanceInMiles:c,log:i.log}}var n=angular.module("common");n.provider("commonConfig",function(){this.config={};this.$get=function(){return{config:this.config}}});n.factory("common",["$q","$rootScope","$log","commonConfig","messages",t])}(),function(){"use strict";var n=angular.module("common");n.config(["commonConfigProvider","events",function(n,t){n.config.controllerActivateSuccessEvent=t.controllerActivateSuccess;n.config.controllerActivateFailEvent=t.controllerActivateFail;n.config.spinnerToggleEvent=t.spinnerToggle;n.config.cartItemSelectedEvent=t.cartItemSelected;n.config.cartItemIsValidChangedEvent=t.cartItemIsValidChanged;n.config.securityAuthorizationRequiredEvent=t.securityAuthorizationRequired;n.config.signUpRequested=t.signUpRequested;n.config.includedItemsChanged=t.includedItemsChanged;n.config.presentCart=t.presentCart;n.config.changeDeliveryAddressRequest=t.changeDeliveryAddressRequest;n.config.changeTableNumberRequest=t.changeTableNumberRequest;n.config.orderHistoryRequested=t.orderHistoryRequested;n.config.navigateToMerchantHome=t.navigateToMerchantHome;n.config.navigateToMerchantWebsite=t.navigateToMerchantWebsite;n.config.navigateToMerchantWebsite=t.navigateToMerchantWebsite;n.config.addItemToNextCart=t.addItemToNextCart;n.config.newPaymentMethodAdded=t.newPaymentMethodAdded;n.config.promoCodeRemoved=t.promoCodeRemoved}])}(),function(){"use strict";var n=angular.module("common");n.constant("events",{controllerActivateSuccess:"controller.activateSuccess",controllerActivateFail:"controller.activateFail",spinnerToggle:"spinner.toggle",cartItemSelected:"cart.itemSelected",cartItemIsValidChanged:"cart.itemIsValidChanged",securityAuthorizationRequired:"security.authorizationRequired",signUpRequested:"security.signUpRequested",includedItemsChanged:"orderItem.includedItemsChanged",presentCart:"cart.presentCart",changeDeliveryAddressRequest:"order.changeDeliveryAddressRequest",changeTableNumberRequest:"order.changeTableNumberRequest",orderHistoryRequested:"user.orderHistoryRequested",addItemToNextCart:"cart.addItemToNext",navigateToMerchantHome:"navigation.merchantHome",navigateToMerchantWebsite:"navigation.merchantWebsite",newPaymentMethodAdded:"checkout.newPaymentMethodAdded",promoCodeRemoved:"checkout.promoCodeRemoved",itemQuantityChanged:"order.itemQuantityChanged",orderPlaced:"order.placed",orderHubProgress:"order.hubProgress",orderHubProgressDone:"order.hubProgressDone",readyForOrderProgress:"order.readyForOrderProgress"});n.constant("messages",{totalEstimation:"The tax listed on this site is an estimate. Also, product prices are occasionally different on the site than in the restaurant. Once your order is submitted, the final product prices and tax will be calculated. If the total is different, the corrected amount will be charged to your card. Please check your email receipt for the final total."})}(),function(){"use strict";function n(n,t,i,r){function u(r,u){try{i.set("table-"+u,r)}catch(f){n.error("Error while saving data.")}return t.when(1)}function f(r){var u=angular.toJson(r);try{i.set("deliveryAddress",u)}catch(f){n.error("Error while saving data.")}return t.when(1)}function e(n){var r=i.get("table-"+n);return r?t.when(r):t.reject("We need your table number, please.")}function o(){var u=i.get("deliveryAddress"),f,n;return u?(f=angular.fromJson(u),n=angular.extend(new r,f),n.SpecialInstructions=(n.ExtraInstructions||"")+(n.SpecialInstructions||""),t.when(n)):t.reject("We need your delivery address, please.")}return{cacheTableNumber:u,getTableNumber:e,cacheDeliveryAddress:f,getDeliveryAddress:o}}angular.module("common").factory("deliveryCacheService",["$log","$q","storageService","Address",n])}(),function(){function n(n){return function(t,i){var f=[],u=null,r=!1,e="groupBy_CHANGED";return angular.forEach(t,function(t){if(r=!1,u!==null){i=angular.isArray(i)?i:[i];for(var o=0,s=i.length;o<s;o++)if(n(i[o])(u)!==n(i[o])(t)){r=!0;break}}else r=!0;t[e]=r?!0:!1;f.push(t);u=t}),f}}angular.module("common").filter("groupBy",["$parse",n])}(),function(){"use strict";function n(n,t){function r(t){n.info.apply(n,arguments);toastr.info(t)}function i(t){n.warn.apply(n,arguments);toastr.warning(t)}function u(t){n.info.apply(n,arguments);toastr.success(t)}function f(t){_.each(arguments,function(t){n.error.call(n,t)});toastr.error(t,"Hmm")}function e(t){n.error.apply(n,arguments);toastr.error(t,"Hmm",{timeOut:0,extendedTimeOut:0})}function o(n,i){var r=arguments[0],u;return _.isString(n)&&(r={dialogTitle:n,dialogMessage:i,dismissButtonText:"",closeButtonText:"",cssClass:""}),u=t.get("$uibModal"),u.open({templateUrl:"shared/common/alert.html",controller:"alert as vm",size:"md",windowClass:r.cssClass||undefined,resolve:{alertOptions:function(){return r}}}).result}return{info:r,error:f,errorMessage:e,success:u,warning:i,warn:i,dialog:o}}angular.module("common").factory("notify",["$log","$injector",n])}(),function(){"use strict";function n(n,t){function r(n){i(!1,n)}function u(){i(!0)}function i(i,r){n.broadcast(t.config.spinnerToggleEvent,{show:i,s:r})}return{spinnerHide:r,spinnerShow:u}}function t(){return{replace:!0,template:'<div role="status" aria-live="polite" class="lds-wrapper"><div class="lds-ellipsis"><div><\/div><div><\/div><div><\/div><div><\/div><\/div><\/div>',restrict:"A"}}function i(n){function t(t,i,r){var u=null;t.$watch(r.elSpinner,function(t){u&&u.stop();var r={lines:13,length:11,width:5,radius:15,corners:1,rotate:0,trail:60,speed:1,direction:1,position:"relative"};angular.extend(r,t);u=new n.Spinner(r);u.spin(i[0])},!0)}return{link:t,restrict:"A"}}function r(n){function t(t,i,r){t.spinner=null;t.$watch(r.pageWaitSpinner,function(r){t.spinner&&t.spinner.stop();r={lines:13,length:11,width:5,radius:15,corners:1,rotate:0,trail:60,speed:1,direction:1,top:"40%",position:"fixed"};t.spinner=new n.Spinner(r);t.spinner.spin(i[0])},!0)}return{link:t,template:'<div class="modal-backdrop fade in cover-all"><\/div>',restrict:"A"}}angular.module("common").factory("spinner",["common","commonConfig",n]);angular.module("common").directive("elSpinnerSmall",["$window",t]);angular.module("common").directive("elSpinner",["$window",i]);angular.module("common").directive("pageWaitSpinner",["$window",r])}(),function(){"use strict";function n(n,t,i){function r(t,r){try{n.localStorage[t]=r}catch(u){i.error("Error writing to localStorage",u);throw new Error("Error saving cart. This application will likely not function properly.");}}function u(t){return n.localStorage[t]}function f(){n.localStorage.clear()}return{clear:f,get:u,set:r}}angular.module("common").factory("storageService",["$window","$q","$log",n])}(),function(){"use strict";function n(){function n(){this.weekdayParts=[];this.rangeParts=[]}function t(n,t){this.day=n;this.hours=t}function r(t){var i=new n;return i.parse(t),i}var i={getHoursOfOperationDisplay:r};return n.prototype.toString=function(){return this.weekdayParts&&this.weekdayParts.length?"Available "+this.weekdayParts.join(" and ")+"\n"+this.rangeParts.join(" "):"Not available"},n.prototype.addWeekday=function(n){this.weekdayParts.push(n)},n.prototype.addRange=function(n){this.rangeParts.push(n)},n.prototype.parse=function(n){var i=this;_.each(n.WeekdayHours,function(n){i.addWeekday(new t(n.WeekDay,n.Start+" - "+n.Stop))});var r=moment(n.StartDate),u=moment(n.EndDate),f=u.add(-1,"days");n.StartDate&&n.EndDate?r.isAfter(togoorder.utcNow)&&u.isAfter(togoorder.utcNow)?i.addRange("Available from "+r.format("dddd, MMMM D")+" through "+f.format("dddd, MMMM D")):u.isAfter(togoorder.utcNow)&&i.addRange("Available through "+f.format("dddd, MMMM D")):(n.StartDate&&r.isAfter(togoorder.utcNow)&&i.addRange("Available starting on "+r.format("dddd, MMMM D")),n.EndDate&&u.isAfter(togoorder.utcNow)&&i.addRange("Available through "+f.format("dddd, MMMM D")))},t.prototype.toString=function(){return this.day+": "+this.hours},i}angular.module("main").factory("hoursOfOperationService",["$http","$q","$log",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o){function s(){function b(t,i){t.IsCurbsideOffered&&(t.IsVehicleInformationRequired?angular.extend(n,u):i?angular.extend(n,u):i===undefined&&angular.extend(n,v))}function k(n){n.IsVehicleInformationRequired&&angular.extend(r,l)}function d(n){let t=h(n.OrderType,n.FulfillmentType);t.extendForVehicleInformation&&t.extendForVehicleInformation(n)}function g(n,t){var r=sessionStorage.getItem("is_unlistedOnly"),i;return(window.location.href.includes("unlistedOnly")||$.cookie("is_unlistedOnly"))&&(sessionStorage.setItem("is_unlistedOnly","true"),$.cookie("is_unlistedOnly",!0,{expires:.01}),window.location.href.includes("unlistedOnly")&&$.cookie("unlisted_url",window.location.href,{expires:.01}),r="true"),i=_.filter(n.OrderTypeViewModels,function(n){return!!(n.MenuIds&&n.MenuIds.length)}),i=_.filter(i,function(n){return r==="true"?!0:n.IsUnlisted===!!t}),_.each(i,d),i=_.map(i,function(n){return{OrderType:n.OrderType,FulfillmentType:n.FulfillmentType,HoursOfOperationDisplay:o.getHoursOfOperationDisplay(n.HoursOfOperation)}}),i=_.map(i,function(n){var t=h(n.OrderType,n.FulfillmentType);return n.Description=t.orderTypeDescription,n.NormalizedDescription=e.safeClassName(n.Description),n}),_.sortBy(i,"OrderType")}function h(n,t){if(!n)throw new Error("orderType required");if(!t)throw new Error("fulfillmentType required");var i=s[t]||s.otherwise;return i.orderTypeDescription?i:i[n]||i.otherwise}var t="Take Out",c="Curbside Pickup",w="Curbside",i={orderTypeDescription:"Order From The Table"},r={orderTypeDescription:"Drive-Thru",extendForVehicleInformation:k},l={orderTypeDescription:"Drive-Thru"},u={orderTypeDescription:c},a={orderTypeDescription:w},v={orderTypeDescription:t+" / Curbside"},f={orderTypeDescription:"Delivery"},n={orderTypeDescription:t,extendForVehicleInformation:b},y={orderTypeDescription:"Catering for Pickup"},p={orderTypeDescription:"Catering for Delivery"},s={2:{1:i,10:p,otherwise:f},otherwise:{1:i,4:f,7:r,8:a,10:y,otherwise:n}};return{takeoutDescription:t,curbsideDescription:c,getOrderTypeViewModels:g,tableNumberData:i,deliveryAddressData:f,normalData:n,driveThruData:r,driveThruWithVehicleInfoData:l,takeoutCurbsideData:v,curbsideData:u,carsideData:a,cateringForPickupData:y,cateringForDeliveryData:p,fulfillmentTypeMap:s,getOrderTypeData:h}}return{getLocationInstance:s}}angular.module("main").factory("orderTypeViewModelServiceFactory",["$http","$q","$state","$timeout","$log","$location","common","hoursOfOperationService",n])}(),function(){function r(){var n=angular.element(document.querySelector("[data-ng-controller]"));return n.injector()}function u(){$.removeCookie("auth_data");$.removeCookie("auth_data",{path:t})}var n=window.togoorder=window.togoorder||{},t="/",i;n.userData={isAuthenticated:!1,username:"",bearerToken:"",expirationDate:null,merchantId:0};n.getSavedUserData=function(){var i=$.cookie("auth_data"),t;return i?(t=angular.fromJson(i),t.merchantId!==n.merchantId)?null:n.userData=t:null};n.clearUserData=function(){n.userData.isAuthenticated=!1;n.userData.username="";n.userData.bearerToken="";n.userData.expirationDate=null;n.userData.merchantId=0;u()};n.getInjector=function(){return r()};n.goToNextState=function(){var i=n.getInjector(),u=i.get("userService"),f=i.get("$state"),t;try{t=u.getNextState();f.go(t.name,t.params)}catch(r){if(r.name==="NextStateUndefined")window.location.reload();else throw r;}};i=$.Deferred();n.setAuthCookiePromise=i.promise();n.setAuthCookie=function(r,f,e,o,s){u();n.userData.isAuthenticated=!0;n.userData.username=r;n.userData.bearerToken=f;n.userData.expirationDate=e;n.userData.merchantId=n.merchantId;n.userData.isWebLogin=!!s;var h=angular.toJson(n.userData);o?$.cookie("auth_data",h,{expires:7,path:t}):$.cookie("auth_data",h,{path:t});i.resolve(h)};n.mobileStrategy=n.mobileStrategy||{};n.authStrategy=n.authStrategy||{};n.callInjectedStrategy=function(t){var i,r,u;return(n.setMobileStrategy&&n.setMobileStrategy(),i=n.authStrategy[t]||n.mobileStrategy[t],i)?(r=_.toArray(arguments),r.shift(),u=i.apply(n.mobileStrategy,r),{result:u}):undefined};n.newPaymentMethodAdded=function(n){var t=r(),i=t.get("common"),u=t.get("events");i.broadcast(u.newPaymentMethodAdded,{paymentMethodId:n})};n.squareSettings={squareLocationId:"",squareApplicationId:"",squarePaymentAdded:!1};n.squareCardData={billingPostalCode:"",cardBrand:"",digitalWalletType:"",expMonth:0,expYear:0,lastFour:"",Id:0,CardId:"",UserId:0}}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a){function y(){a.activateController([p()],n)}function p(){return togoorder.setAuthCookiePromise.then(function(){h.path(v.forwardUrl)})}var w=this,v=h.search();y();s.togoorder.setAuthCookie(v.userName,v.token,"",!0)}var n="loadingPage";angular.module("main").controller(n,["$rootScope","$scope","$log","$state","$stateParams","$uibModal","$filter","$window","$location","$timeout","notify","common","spinner",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g,nt,tt,it,rt,ut,ft,et,ot,st,ht,ct,lt,at,vt,yt,pt,wt,bt,kt,dt,gt,ni,ti,ii){function tr(){ti.isAddressRequiredAtCheckout({locationId:togoorder.locationId}).then(function(n){ri.isAddressRequiredAtCheckout=n},function(){f.error("An error occurred while updating the PIN.");v.dialog("Sorry :/","An error occurred while updating the PIN.");throw new Error;})}function ir(n){n===undefined&&(n=!0);ri.isGiftCardFormShown=n}function ru(){return ri.isGiftCardFormShown&&ri.giftCardProviderType===2}function uu(){return ri.order.TotalForCreditCard&&ri.isCreditCardPaymentAllowed}function fu(n){return new vt(n,he)}function eu(){return ri.merchantLocation.PromotionAvailability===0||ri.merchantLocation.PromotionAvailability===2&&ri.paymentTime==="now"}function ou(){return ri.order.isPayable&&!ri.order.Payment.GiftCardPayment&&!ri.order.Payment.MealPlanPayment}function su(n){ri.paymentTime=n;ri.order.Gratuity=null}function rr(n){ri.order.Payment.ExistingCreditCard.PaymentMethodId=n.Id}function hu(){togoorder.callInjectedStrategy("scanCard")}function cu(n){var t=lr(n.date,ri.merchantLocation.TimeZoneOffset);return!ri.hoursServiceInstance.isDateSelectable(t,n.mode)}function lu(n){ri.order.invalidatePricedOrderLoyalty();ri.order.Payment.LoyaltyPayment=n;ri.order.LoyaltyPaymentAmount+ri.order.OfferPaymentAmount>=ri.order.Total&&!ri.order.Payment.GiftCardPayment?si(null):ri.order.LoyaltyPaymentAmount+ri.order.OfferPaymentAmount>=ri.order.Total&&!ri.order.Payment.MealPlanPayment?ur(null):ui()}function ur(n){ri.order.Payment.MealPlanPayment=n;ui()}function si(n){n&&n.IsPinOnFile===!1&&ri.merchantLocation.GiftCardProfile.RequirePin?c.open({templateUrl:"app/checkout/giftCardPinPrompt.html",controller:"giftCardPinPrompt as vm",size:"sm",resolve:{}}).result.then(function(t){return g.spinnerShow(),dt.updatePin({merchantId:ri.merchantLocation.MerchantId,cardNumber:n.AccountNumber,cardPin:t}).then(function(n){return n},function(){f.error("An error occurred while updating the PIN.");v.dialog("Sorry :/","An error occurred while updating the PIN.");throw new Error;})},function(){return e.reject()}).then(function(t){return t.Success?ki().then(function(){var t=_.findWhere(ri.user.GiftCards,{AccountNumber:n.AccountNumber});if(t)return si(t)}):(f.error(t.Message||"An error occurred while retrieving the gift card."),v.dialog("Sorry :/","An error occurred while retrieving the gift card."))}).then()["finally"](function(){g.spinnerHide()}):(ri.order.Payment.GiftCardPayment=n,ui())}function au(n){return ri.order.Payment.ExistingCreditCard.IsSelected&&ri.order.Payment.ExistingCreditCard.PaymentMethodId===n.Id&&n.IsCardVerificationValueRequired}function vu(){return(ri.order.isPayable||ri.order.LoyaltyDiscount!==0)&&ri.order.TotalForLoyalty+ri.order.LoyaltyDiscount}function yu(n){return ri.order.Payment.ExistingCreditCard.IsSelected&&ri.order.Payment.ExistingCreditCard.PaymentMethodId===n.Id&&(er(n)||fr(n)||sr(n)||or(n))}function fr(n){return ri.order.Payment.ExistingCreditCard.IsSelected&&n.IsCardVerificationValueRequired}function er(n){return ri.isAddressRequiredAtCheckout=="false"?!1:ri.order.Payment.ExistingCreditCard.IsSelected&&!n.PostalCode&&ri.order.Payment.ExistingCreditCard.PaymentMethodId===n.Id}function or(n){return ri.posIntegrationType==="Square"?!1:ri.isAddressRequiredAtCheckout=="false"?!1:ri.order.Payment.ExistingCreditCard.IsSelected&&!n.AddressLine1&&ri.order.Payment.ExistingCreditCard.PaymentMethodId===n.Id}function sr(n){return ri.posIntegrationType==="Square"?!1:ri.isAddressRequiredAtCheckout=="false"?!1:ri.order.Payment.ExistingCreditCard.IsSelected&&(!n.LastName||!n.AddressLine1)&&ri.order.Payment.ExistingCreditCard.PaymentMethodId===n.Id}function pu(n,t){return t.stopPropagation(),g.spinnerShow(),k.deletePaymentMethod(n).then(function(){return togoorder.callInjectedStrategy("cardDeleted",n.Id),bi()})["finally"](function(){g.spinnerHide()})}function wu(n){return ri.order.Payment.ExistingCreditCard.PaymentMethodId===n.Id}function bu(n){ri.order.invalidatePricedOrderLoyalty();ri.order.LoyaltyOverrideAmount=isNaN(+n)?ri.order.MaxLoyaltyPaymentAmount+ri.order.MaxLoyaltyDiscountAmount:n;ri.loyaltyDifferentAmount=l("currency")(hr(),"");ri.showLoyaltyDifferentAmount=!1;ui()}function hr(){return ri.order.LoyaltyPaymentAmount||-ri.order.LoyaltyDiscount}function ku(n){ri.order.GiftCardOverrideAmount=isNaN(+n)?ri.order.MaxGiftCardPaymentAmount:n;ri.giftCardDifferentAmount=l("currency")(cr(),"");ri.showGiftCardDifferentAmount=!1}function du(){return ri.order.MealPlanPaymentAmount||0}function cr(){return ri.order.GiftCardPaymentAmount||0}function gu(){if(!ri.newGiftCard){v.dialog("Missing something","Gift card number is required");return}if(ri.merchantLocation.GiftCardProfile.RequirePin&&!ri.newGiftCardPin){v.dialog("Missing something","Gift card PIN is required");return}g.spinnerShow();var n={merchantId:ri.merchantLocation.MerchantId,cardNumber:ri.newGiftCard,isPrimary:!1,cardPin:ri.newGiftCardPin,recaptchaToken:ri.recaptchaToken};return ri.isAGuest?dt.getBalance(n).then(function(t){if(t.Success){ri.user.GiftCards==undefined&&(ri.user.GiftCards=[]);let i={Balance:t.Balance,AccountNumber:n.cardNumber,IsPrimary:!1,PinNumber:ri.newGiftCardPin};ri.user.GiftCards.push(i);si(i);ri.showGiftCards=ri.user.GiftCards.length>0;ir(!1)}else{var i=new Error("There was an issue trying to retrieve that gift card.");i.showAlert=!0}ri.newGiftCard=null;ri.newGiftCardPin=null;ri.showCaptcha()&&ni.reload(ri.recaptchaId);g.spinnerHide()},()=>{ri.showCaptcha()&&ni.reload(ri.recaptchaId)}):dt.addCard(n).then(function(){return ki().then(function(){ri.newGiftCard=null;ri.newGiftCardPin=null;ri.isGiftCardFormShown=!1;ri.showCaptcha()&&ni.reload(ri.recaptchaId);g.spinnerHide()})})}function nf(){ri.newGiftCard=ri.newGiftCard.replaceAll(" ","")}function lr(n,t){var i=moment.utc({year:n.getFullYear(),month:n.getMonth(),day:n.getDate()}).utcOffset(t);return i.minutes(-t),i}function ar(n,i){g.spinnerShow();t(function(){bi().then(function(){g.spinnerHide();pi();t(function(){var n=_.find(ri.paymentMethods,function(n){return n.Id.toLowerCase()===i.paymentMethodId.toLowerCase()});rr(n);ri.order.Payment.CardHolder.FirstName=n.FirstName;ri.order.Payment.CardHolder.LastName=n.LastName;gi=_.once(ar)},1e3)})},1e3)}function vr(n){ri.pickupCalendarDate=n.toDate()}function tf(n,t){if(!n)return e.when();var i={promoCode:n,pickupDateTimeUtc:t.PickupDateTime?moment(t.PickupDateTime).toDate():"",orderTotal:t.Subtotal,cartOrder:t};return st.getPromotion(i).then(function(n){return ri.promotion=n,ri.promotion.showDiscountPercentage=n.DiscountPercentage>0&&!(n.DiscountPercentage===100&&ri.promotion.DiscountAmount>0),ri.promotion.hasMax=n.DiscountPercentage>0&&n.DiscountAmount>0,ri.promotion.showDiscountAmount=ri.promotion.DiscountAmount>0&&!ri.promotion.showDiscountPercentage,ri.order.Payment.ExternalPromotion=n.ExternalPromotionResponse,ri.promotion})}function rf(){a.openLinkInNewWindow("http://www.cvvnumber.com/cvv.html")}function uf(){ri.isPromoApplicable&&(g.spinnerShow(),tf(ri.promoCode,ri.order).then(function(){ri.promotion.IsValid&&(ri.order.Promotion=ri.promotion,ii.applyPromo(ri.promoCode),ui())},function(n){ri.promotion={IsValid:!1,message:n.data.message,Code:ri.promoCode}})["finally"](function(){g.spinnerHide()}).then(function(){}))}function ff(n,t){return c.open({templateUrl:"app/itemPrompt/excludedItemsDialog.html",controller:"excludedItemsDialog as vm",size:"md",resolve:{excludedItems:function(){return n},pickupDate:function(){return ri.pickupDate},dayOfWeek:function(){return t}}}).result}function ef(n){return c.open({templateUrl:"app/itemPrompt/unavailableItemDialog.html",controller:"unavailableItemDialog as vm",size:"md",resolve:{unavailableItems:function(){return n}}}).result}function fi(n){return n&&n.data&&n.data.unavailableItems&&n.data.unavailableItems.length?ef(n.data.unavailableItems):n&&n.data&&n.data.excludedItems&&n.data.excludedItems.length?ff(n.data.excludedItems,n.data.dayOfWeek):(f.error(n),v.dialog("An Error Occured",sf(n)||"Oops"))}function of(n){return n&&n.data&&(n.data.status||n.data.Status)}function sf(n){return n&&n.data&&(n.data.message||n.data.Message)}function hf(){togoorder.locationWebsite?s.location.href=togoorder.locationWebsite:wi()}function ui(n){return it.rePriceOrder(ri.order,ri.merchantLocation,n).then(function(n){if(n){ri.offerDiscountTotal=n.Order.OfferDiscount;var t=_.filter(ri.eligibleOffers,function(n){return n.OptedIn});t&&(t.RewardValue=n.Order.OfferDiscount)}return n},function(n){var t=of(n);t===3||t===2?fi(n).then(hf,function(){var t=n&&n.data&&n.data.unavailableItems||[];_.each(t,function(n){ri.order.deleteItemById(n.id)});ct.clearMenuCache();li()}):fi(n);throw n;})}function cf(){return ui(!0).then(function(n){var r,i,t;n&&n.ItemPrompts&&n.ItemPrompts.length&&(r=e.when(),_.each(n.ItemPrompts,function(n){r=r.then(function(){return lf(n).then(af,vf)},angular.noop)}));n&&n.RequiredItems&&n.RequiredItems.length&&(ri.requiredItems=[n.RequiredItems[0]],i=ri.requiredItems[0],t=w.findItemInCart(i.Id),t||(t=new at(i),t.SortIndex=32767,t._isRequiredItem=!0,w.addOrderItem(t)),t._shouldShow=!0,ri.item.setCurrentItem(t,i),w.saveCart(),w.loadCurrent(),ui());vi=!1},function(n){if(vi=!0,n.data.redirectOnError)throw n;})}function lf(n){return c.open({templateUrl:"app/itemPrompt/itemPromptDialog.html",controller:"itemPromptDialog as vm",size:"md",resolve:{itemPrompts:function(){return[n]}}}).result}function af(n){if(n.HasModifiers)return w.addItemToNextCart({id:n.Id,sectionId:n.SectionId}),li(),e.reject();var t=ct.getItemById(oi,n.Id);return w.addOrderItem(new at(t)),w.saveCart(),v.success(n.Name+" added to cart!"),ui()}function vf(){}function yf(){return yt.getPendingRequestCount()!==0}function pf(n,t){let i=y.monetize(ri.getGiftCardAppliedAmount()+ri.getMealPlanAppliedAmount());if(!ri.isCreditCardPaymentAllowed&&ri.order.Total>i){v.dialog("Insufficient Funds!","You do not have sufficient funds to place this order.");v.warning("Insufficient Funds! You do not have sufficient funds to place this order.");return}console.log("isValid");console.log(n);n?ri.posIntegrationType==="Square"&&t?(console.log(squareCard),handleSquarePaymentMethodSubmission(t,squareCard)):ri.checkout():ri.showValidation()}function wf(){for(var i,n={},r=ri.now.year(),t=0;t<20;t++)i=r+t,n[""+i]=i;return ri.years=n,n}function bf(){for(var t,r,i=[],n=0;n<12;n++)t=n+1,r=t<10?"0"+t:""+t,i[n]={display:r+" ("+tu[n]+")",val:t};return i}function kf(){et.initialize();y.activateController([ne()],n).then(function(){ri.order.DeliveryAddress=ri.deliveryAddress;ri.order.TableNumber=ri.tableNumber;ri.gratuityChoices=ie();re();yr();r.$watch(function(){ri.order.TotalForCreditCard?ri.order.Payment.ExistingCreditCard.IsSelected||ri.order.Payment.NewCreditCard.IsSelected||yr():(ri.order.Payment.ExistingCreditCard.IsSelected=!1,ri.order.Payment.NewCreditCard.IsSelected=!1)});ri.loyaltyProviderType===3&&t(function(){ri.order.Payment.GiftCardPayment=ri.campusCard},100);gf();r.$on(p.includedItemsChanged,function(){ri.order.pricedOrder&&(ri.order.pricedOrder.isInvalidated=!0)})})}function yr(){ri.paymentMethods&&ri.paymentMethods.length?pi():pr()}function df(){s.setTimeout(function(){$(".ui.sidebar").sidebar({overlay:!0}).show();ri.isCartInPage?$(".cart-tab").hide():$(".cart-tab").show()},750)}function gf(){var n=function(){ri.isCartInPage=ot.isSize("md")||ot.isSize("lg");df()},i=_.debounce(function(){t(function(){ri.isCartInPage=!0})},333,!0),r=_.debounce(function(){t(n)},333,!1);$(s).resize(function(){i();r()});n()}function ne(){return e.all([oe().then(function(){return e.all([fe(),te()])})]).then(ye).then(wr)}function te(){return ct.getMenu(ri.order.MenuId).then(function(n){return oi=n,ri.minimumAge=oi.MinimumAge,ri.showMinimumAgeSection=!!ri.minimumAge,ri.isAgeConfirmed=!ri.showMinimumAgeSection,n})}function ie(){return _.map(iu,function(n){var t=y.monetize(n/100*ri.order.Subtotal);return{value:t,percent:n}})}function re(){var n=lt.getOrderTypeRule(ri.order.OrderType,ri.order.FulfillmentType,ri.merchantLocation);switch(n.DeliveryService){case 1:ri.selectedGratuityChoice=_.find(ri.gratuityChoices,function(n){return n.percent===15})}}function ue(){var n=lt.getOrderTypeRule(ri.order.OrderType,ri.order.FulfillmentType,ri.merchantLocation);return ri.order.FulfillmentType===2&&n.DeliveryService===1?!0:ri.merchantLocation.IsTipAllowed}function pr(){ri.isCardScanSupported=window.togoorder.isCardScanSupported;ri.order.Payment.ExistingCreditCard.IsSelected=!1;ri.order.Payment.NewCreditCard.IsSelected=!0;ri.cardTypes||(g.spinnerShow(),d.getCreditCardTypes().then(function(n){ri.cardTypes=n;g.spinnerHide()}));ri.posIntegrationType==="Square"&&(ri.sqFormCnt++,ri.sqFormCnt<=1)}function fe(){return ut.isDelivery(ri.order.OrderType,ri.order.FulfillmentType)?ft.getDeliveryAddress().then(function(n){ri.deliveryAddress=n},function(){}):e.when()}function ee(){ri.order.Payment.CardHolder.Address=angular.copy(ri.deliveryAddress);ri.deliveryAddress=null}function pi(){ri.order.Payment.ExistingCreditCard.IsSelected=!0;ri.order.Payment.NewCreditCard.IsSelected=!1}function oe(){return w.loadCurrent().then(function(){var n=w.getCart();if(n.order)ri.hasCurrentOrder=n.order.Items.length?!0:!1;else return ri.hasCurrentOrder=!1,e.reject("No Order");return ri.order=n.order,ri.order.Gratuity=null,ri.order.Payment=new nt,n.order})}function se(){if(ri.loyaltyProviderType===6)return wt.wipeOffers().then(_.noop,function(n){fi(n);throw n;})}function wr(){return(ri.hasOffers=[4,3,6,7,8,9].indexOf(ri.loyaltyProviderType)>-1,ri.hasOffers&&ri.user&&ri.bestLoyalty&&ri.bestLoyalty.AccountNumber)?(g.spinnerShow(),wt.getOffersEligibleForRedemption({merchantId:ri.merchantLocation.MerchantId,cardNumber:ri.bestLoyalty.AccountNumber,cartOrder:ri.order}).then(function(n){return _.each(n.Offers,function(n){ri.loyaltyProviderType===3&&(n.OfferId="cart"+n.OfferId);n.OptedIn=n.Optable||ri.limitOneOffer?n.OptedIn:!0}),ri.eligibleOffers=_.filter(n.Offers,function(n){return ri.loyaltyProviderType===3||ri.loyaltyProviderType===2||ri.loyaltyProviderType==7?ri.order.Subtotal+ri.order.PromoSavings-ri.order.OfferDiscount>=n.Threshold&&ri.order.Subtotal>=n.RewardValue:!0}),ci(),ui().then(function(){ri.loyaltyProviderType!=7&&ci()})})["finally"](function(){g.spinnerHide()})):!1}function ci(){ri.offerDiscountTotal=0;_.each(ri.eligibleOffers,function(n){(n.Optable||ri.limitOneOffer)&&n.OptedIn!==!0||(ri.loyaltyProviderType==7&&n.OfferRewardType==2&&(n.RewardValue=ri.order.Subtotal*n.RewardValue),ri.offerDiscountTotal+=n.RewardValue)});ri.order.SelectedOfferAmount=ri.offerDiscountTotal;ri.order.Payment.OfferPayment=ri.order.SelectedOfferAmount?{AccountNumber:ri.bestLoyalty.AccountNumber}:null}function he(n){return ri.order.invalidatePricedOrderOffers(),ce(n)}function ce(n){return br(n).then(function(){return wr()})}function br(n){if(n.Optable||ri.limitOneOffer===!0){if(g.spinnerShow(),n.OptedIn){var t=ri.order.Payment,i=t.LoyaltyPayment?{LoyaltyAccountNumber:t.LoyaltyPayment.AccountNumber,LoyaltyPaymentAmount:ri.order.LoyaltyPaymentAmount}:null,r=t.OfferPayment?{LoyaltyAccountNumber:t.OfferPayment.AccountNumber,OfferPaymentAmount:ri.order.OfferPaymentAmount}:null,u={CardNumber:ri.bestLoyalty.AccountNumber,OfferId:n.OfferId,MerchantId:ri.merchantLocation.MerchantId,Order:ri.order,CartPromotion:ri.order.Promotion,LoyaltyPayment:i,OfferPayment:r};return wt.optInToOffer(u).then(function(){return ci(),!0},function(n){return f.error("opt-in error: "+n.data),v.dialog("Offer not eligible","Please add eligible item(s) to redeem this offer")})["finally"](function(){g.spinnerHide(16)})}return wt.optOutOfOffer({CardNumber:ri.bestLoyalty.AccountNumber,OfferId:n.OfferId,MerchantId:ri.merchantLocation.MerchantId}).then(function(){return ci(),!0})["finally"](function(){g.spinnerHide(17)})}return e.when(1)}function wi(){u.go("locationHome")}function le(){ae(togoorder.locationId,"./app/Square/sqpaymentform-basic.js")}function ae(n,t){yt.post("api/Square/GetSquareLocationInfo",{locationId:n}).then(function(n){togoorder.squareSettings.squareApplicationId=n.data.SquareApplicationId;togoorder.squareSettings.squareLocationId=n.data.SquareLocationId;ve(t)},function(){console.log("Error occured")})}function ve(n){var i=document.getElementsByTagName("head")[0],t=document.createElement("script");t.type="text/javascript";t.src=n;i.appendChild(t)}function li(){h.merchantLocationId=ri.order.LocationId;h.orderType=ri.order.OrderType;h.fulfillmentType=ri.order.FulfillmentType;h.menuId=ri.order.MenuId;var n=w.getCart();h.day=n.day;ht.goToSections(h)}function ye(){return e.all([to().then(we).then(function(){return e.all([ri.isAGuest?e.when():ki().then(se),dr().then(wf).then(pe).then(ke).then(cf)])},function(){wi()}),ri.isAGuest?e.when():bi()]).then(function(){ri.isFutureDayOrderingAllowed||gr(ri.now)},function(){li()})}function pe(){ut.getDisplayData(ri.order.OrderType,ri.order.FulfillmentType,ri);ri.payLaterText=ut.getPayLaterText(ri.order.OrderType,ri.order.FulfillmentType);ri.deliveryTemplate=ut.getDisplayTemplate(ri.order.OrderType,ri.order.FulfillmentType);ri.pickupDateTimePrefix=ut.getPickupDateTimePrefix(ri.order.OrderType,ri.order.FulfillmentType);ri.isPickupDateSelectable=ut.isPickupDateSelectable(ri.order.OrderType,ri.order.FulfillmentType);ri.useCalendar=ut.isCalendarRequired(ri.order.OrderType,ri.order.FulfillmentType);ri.orderTypePrompt=ut.getPromptTemplate(ri.order.OrderType,ri.order.FulfillmentType);ri.orderTypeDisplay=ut.getOrderTypeDescription(ri.order.OrderType,ri.order.FulfillmentType);yi="The selected "+(ri.pickupDateTimePrefix||"").toLowerCase()+" time is no longer available. Please select a later time.";ri.noPickupTimesAvailableText=ri.isFutureDayOrderingAllowed?"Sorry. There are no available "+(ri.pickupDateTimePrefix||"").toLowerCase()+" times for the selected day.":"Sorry. There are no available "+(ri.pickupDateTimePrefix||"").toLowerCase()+" times remaining for today for "+ri.orderTypeDisplay+"."}function we(){var n=lt.getOrderTypeRule(ri.order.OrderType,ri.order.FulfillmentType,ri.merchantLocation),i,t;return ut.setOrderTypeRule(n),i=n.IsDeferredPaymentAllowed,t=n.IsPayNowAllowed,ri.showPaymentTimeAllowed=i&&t,ri.paymentTime=t?"now":"later",ri.isFutureDayOrderingAllowed=n.IsFutureDayOrderingAllowed,ri.isCreditCardPaymentAllowed=n.IsCreditCardPaymentAllowed,e.when()}function be(){return!kr()}function kr(){var n=!!(ri.pickupDate&&ri.pickupDate.retrieveTimeChoices);return n&&ri.pickupDate.retrieveTimeChoices().length}function dr(){return et.getNowForTimeZoneId(ri.merchantLocation.TimeZoneId).then(function(n){ri.now=n.localNow;ri.localCalendarDate=n.localCalendarDate})}function ke(){var n=_.find(ri.merchantLocation.OrderTypeViewModels,function(n){return n.OrderType==ri.order.OrderType&&n.FulfillmentType==ri.order.FulfillmentType}),r=function(n,t,i){return rt.getInstance(ri.merchantLocation.Id,ri.waitTimeInMinutes,ri.order.MenuId,ri.merchantLocation.TimeZoneOffset,n,t,i).then(function(n){return ri.hoursServiceInstance=n,ri.hoursServiceInstance.setNow(ri.now),ai(),ri.hoursServiceInstance})},i=e.defer(),t;if(ri.waitTimeInMinutes=n.WaitTimeInMinutes,ri.order.Total>=n.LargeOrderThreshold&&n.LargeOrderThreshold>0&&(ri.waitTimeInMinutes=n.LargeOrderWaitTimeInMinutes),n.DeliveryService){let u=ri.order.Total>=n.LargeOrderThreshold&&n.LargeOrderThreshold>0?n.LargeOrderWaitTimeInMinutes:n.WaitTimeInMinutes;ri.orderTypeRuleWaitTimeInMinutes=u;t=moment().utc().add(u,"minutes");r().then(function(){var r=ri.pickupDate?ri.pickupDate.getNextAvailableTime():t,f;ri.pickupDate=null;r.add(u,"minutes");t.utcOffset(r._offset);t=t<=r?r:t;f=ri.deliveryAddress||ri.order.Payment.CardHolder.Address;ft.getDeliveryServiceEstimate(n,f,ri.order.Total,null,t).then(function(n){var t=moment.utc(n.deliveryTimeUtc),r=moment.utc(n.pickupTimeUtc),u=moment.duration(t.diff(r)).asMinutes();ri.deliveryServiceTimeToDeliver=Math.ceil(u);ri.deliveryServicePickupTimeUtc=n.pickupTimeUtc;ri.deliveryServiceDeliveryTime=n.deliveryTimeUtc;i.resolve()},function(){fi({message:"delivery service area now unavailable - this should not happen"});i.reject()})})}else i.resolve();return i.promise.then(function(){return ut.isDelivery(n.OrderType,n.FulfillmentType)?ft.getCurrentDeliveryZoneInfo(n).then(function(t){t&&t.zone&&!n.DeliveryService&&(ri.waitTimeInMinutes+=t.zone.MinimumDeliveryTimeInMinutes||0);var i=n.OrderType==4&&n.DeliveryService==1;return r(i,ri.deliveryServiceDeliveryTime,ri.deliveryServiceTimeToDeliver)}):r(!1)})}function ai(){var i=ri.hoursServiceInstance.getAvailablePickupDateTimesForMenu(ri.now),n,t;if(ri.useCalendar)vr(togoorder.utcNow);else if(ri.dayChoices=i,ri.dayChoices.length)ri.pickupDate?(n=_.find(ri.dayChoices,function(n){return n.date.isSame(ri.pickupDate.date)}),ri.pickupDate=n||null):(n=_.find(ri.dayChoices,function(n){return ri.localCalendarDate.isSame(n.date,"day")}),ri.pickupDate=n||null),ri.pickupDate&&(t=ri.pickupDate.retrieveTimeChoices(),t.length?ri.order.PickupDateTime=t[0].value:ri.pickupDate=null),ri.dayChoices.length>2&&ri.dayChoices.push({getDisplayDay:function(){return"(See More Dates...)"},showCalendar:!0,date:togoorder.utcNow}),ri.dayChoices=so(ri.dayChoices);else{ri.useCalendar=!0;ai();return}if(!ri.isFutureDayOrderingAllowed&&!ri.pickupDate){v.dialog("So Sorry...",ri.noPickupTimesAvailableText);throw new y.exceptions.NormalException(ri.noPickupTimesAvailableText);}}function gr(n){return e.all([n||dr()]).then(function(){if(ri.hoursServiceInstance)ri.hoursServiceInstance.setNow(ri.now);else return;if(ri.isPickupDateSelectable){if(!nr||!ri.hoursServiceInstance.isPickupDateAvailable(ri.order.PickupDateTime,ri.pickupDate,ri.now)){ai();var n=new Error(yi);n.showAlert=!0;throw n;}}else return e.when(1);return ri.hoursServiceInstance.validatePickupTime(ri.order.PickupDateTime).then(function(){return!0}).then(function(){return ge()}).catch(function(n){n.name==="TimeSlotNotAvailable"?(v.dialog("Choose a Different Pickup Time","Wow. That is apparently a popular pickup time and is no longer available. Please choose another time"),ai()):n.name==="OffersInvalid"?v.dialog("Please add eligible item(s) to redeem the offers",n.message):fi(n);throw n;})})}function de(n){this.name="OffersInvalid";this.message=n}function ge(){var t=[];if(_.each(ri.eligibleOffers,function(n){(!n.Optable||n.OptedIn)&&t.push(n.OfferId)}),!t.length||ri.loyaltyProviderType!==9)return e.when(!0);var n=ri.order.Payment,i=n.LoyaltyPayment?{LoyaltyAccountNumber:n.LoyaltyPayment.AccountNumber,LoyaltyPaymentAmount:ri.order.LoyaltyPaymentAmount}:null,r=n.OfferPayment?{LoyaltyAccountNumber:n.OfferPayment.AccountNumber,OfferPaymentAmount:ri.order.OfferPaymentAmount}:null,u={AccountNumber:ri.bestLoyalty.AccountNumber,OfferIds:t,Order:ri.order,CartPromotion:ri.order.Promotion,LoyaltyPayment:i,OfferPayment:r};return wt.validateOffers(u).then(function(){return!0},function(n){f.error("offer validation error: "+n.data);throw new de(n.data);})}function nu(){ri.isPickupDateSelectable||(ri.order.PickupDateTime=ri.now.clone().add(ri.waitTimeInMinutes,"minutes"));let t=y.monetize(ri.getGiftCardAppliedAmount()+ri.getMealPlanAppliedAmount());if(!ri.isCreditCardPaymentAllowed&&ri.order.Total>t)return v.dialog("Insufficient Funds!","You have insufficient funds for this order."),v.warning("Insufficient Funds! You have insufficient funds for this order."),e.when();var n=[];return _.each(ri.eligibleOffers,function(t){(!t.Optable||t.OptedIn)&&n.push(t.OfferId)}),it.placeOrder(ri.order,ri.order.Payment,ri.merchantLocation,ri.paymentTime!=="now",ri.pickupDate,n,ri.deliveryServicePickupTimeUtc).then(function(n){f.info(n);ri.merchantLocation.IsPosIntegrationFailToCustomer?u.go("waitForOrderProgress"):u.go("thankYou")},function(n){fi(n);throw n;})}function no(){ri.checkingOut=!0;g.spinnerShow();var n=function(n){n.data&&n.data.status>=1&&n.data.status<=5&&ri.order.Payment.NewCreditCard&&ri.order.Payment.NewCreditCard.CreditCard&&(ri.order.Payment.NewCreditCard.CreditCard={},ri.order.Payment.CardHolder={});g.spinnerHide(18);di=_.once(nu);ri.checkingOut=!1;throw n;};gr().then(function(){return!ri.order.pricedOrder||ri.order.pricedOrder.isInvalidated?ui():!0}).then(function(){di().then(_.noop,n)},n)}function bi(){return k.getPaymentMethods(ri.order.LocationId).then(function(n){return ri.paymentMethods=n,console.log("Payment Methods"),console.log(n),n})}function ki(){return k.getUserWithLoyalty(ri.merchantLocation.MerchantId).then(function(n){ri.user=n;ri.order.Customer.PhoneNumber.Number=n.CallbackNumber;ri.order.Customer.VehicleColor=n.VehicleColor;ri.order.Customer.VehicleModel=n.VehicleModel;ri.order.Customer.EmailAddress=n.Email;ri.order.Customer.LastName=n.LastName;ri.order.Customer.FirstName=n.FirstName;ri.order.Customer.GuestEmailOptIn=null;ri.order.Customer.Id=n.Id;ri.showMealPlans=oi.AllowMealPlan&&ri.user.MealPlans&&ri.user.MealPlans.length;ri.showMealPlans&&ri.setMealPlanPayment(ri.user.MealPlans[0]);ri.campusCard=ri.user.GiftCards&&ri.user.GiftCards.length&&ri.user.GiftCards[0].IsPrimary?ri.user.GiftCards[0]:null;ri.showGiftCards=ri.campusCard?ri.user.GiftCards.length>1:ri.user.GiftCards&&ri.user.GiftCards.length;ri.bestLoyalty=ri.user.Loyalties&&ri.user.Loyalties.length&&ri.user.Loyalties[0]})}function to(){return b.getById(ri.order.LocationId).then(function(n){return ri.merchantLocation=n,ri.loyaltyProviderType=ri.merchantLocation.LoyaltyProfile&&ri.merchantLocation.LoyaltyProfile.LoyaltyProviderType,ri.mealPlanProviderType=ri.merchantLocation.MealPlanProfile&&ri.merchantLocation.MealPlanProfile.MealPlanProviderType,ri.merchantLocation.GiftCardProfile&&(ri.giftCardProviderType=ri.merchantLocation.GiftCardProfile.GiftCardProviderType,ri.order.giftCardProviderType=ri.giftCardProviderType,ri.canApplyDifferentGiftCardAmount=ri.merchantLocation.GiftCardProfile.IsCustomAmountAllowed,ri.mustApplyGiftCard=ri.merchantLocation.GiftCardProfile.IsMustUse,ri.showAddGiftCardPin=ri.merchantLocation.GiftCardProfile.RequirePin),ri.isEmailRequired=ri.merchantLocation.IsGuestEmailRequired,ri.isNameRequired=ri.merchantLocation.IsGuestNameRequired,ri.isPhoneRequired=ri.merchantLocation.IsGuestPhoneRequired,ri.limitOneOffer=ri.loyaltyProviderType===3||ri.loyaltyProviderType===6||ri.loyaltyProviderType===8||ri.loyaltyProviderType===9,ri.showAddGiftCard=ri.giftCardProviderType===5||ri.giftCardProviderType===6||ri.giftCardProviderType===7||ri.giftCardProviderType===1||ri.giftCardProviderType===2,ri.isGiftCardInputMasked=ri.giftCardProviderType===2,n})}function io(n){ri.recaptchaId=n;f.debug(`recaptcha widget created with id ${n}`)}function ro(){$(".ui.sidebar").sidebar("show");ri.isSidebarVisible=!0}function uo(){$(".ui.sidebar").sidebar("hide");ri.isSidebarVisible=!1}function fo(){ri.isValidationVisible=!0;v.dialog("Almost Perfect!","Please review the sections marked with a star.");v.warning("Almost Perfect! Please review the sections marked with a star.")}function eo(){return!ri.orderTypeDisplay||!ri.order?undefined:[ri.orderTypeDisplay&&ri.safeClassName(ri.orderTypeDisplay+"-Checkout"),"menu-"+ri.order.MenuId]}function oo(){var n=w.getCart();return(w.getItems(n.order)||[]).length}function so(n){return n.reduce((n,t)=>{var i=n.find(n=>n.getDisplayDay()===t.getDisplayDay());return i?n:n.concat([t])},[])}function ho(n){var t=_.find(ri.merchantLocation.OrderTypeViewModels,function(n){return n.OrderType==ri.order.OrderType&&n.FulfillmentType==ri.order.FulfillmentType}),i;return t||f.error("no OrderTypeViewModel found for OrderType: "+ri.order.OrderType),i=e.defer(),t.DeliveryService?ft.getDeliveryServiceEstimate(t,ri.deliveryAddress||ri.order.Payment.CardHolder.Address,ri.order.Total,n).then(function(n){var e=ri.order.Total>=t.LargeOrderThreshold&&t.LargeOrderThreshold>0?t.LargeOrderWaitTimeInMinutes:t.WaitTimeInMinutes,r=moment.utc(n.pickupTimeUtc),u=moment.utc().add(e,"minutes");f.debug(`delivery service estimated pickup time: ${r}, earliest merchant pickup time: ${u}`);u.isSameOrBefore(r)?(f.debug(`setting new delivery service estimated pickup time: ${n.pickupTimeUtc}`),ri.deliveryServicePickupTimeUtc=n.pickupTimeUtc,i.resolve(!0)):i.resolve(!1)},function(){fi({message:"delivery service area now unavailable during a new time selection - this should not happen"});i.reject("delivery service area now unavailable during a new time selection - this should not happen")}):i.resolve(!0),i.promise}var ri=this,tu=["Jan","Feb","Mar","Apr","May","June","July","Aug","Sept","Oct","Nov","Dec"],iu=[0,10,15,20,25],di=_.once(nu),oi,gi=_.once(ar),co=undefined,lo=undefined,ao=undefined,vi=!0,yi,nr=!0,hi,ei;ri.squareCustomer=null;ri.safeClassName=y.safeClassName;ri.posIntegrationType=togoorder.PosIntegrationType;ri.merchantLocation={};ri.squareCardData=togoorder.squareCardData;ri.orderTypeDisplay=undefined;ri.showValidation=fo;ri.isValidationVisible=!1;ri.showCartSidebar=ro;ri.isCartInPage=!0;ri.hideCartSidebar=uo;ri.payWithNewCreditCard=pr;ri.payWithDifferentCreditCard=pi;ri.isSidebarVisible=!1;ri.pickupDate=null;ri.dayChoices=undefined;ri.paymentMethods=undefined;ri.checkout=no;ri.hasCurrentOrder=undefined;ri.useDeliveryAddressForBillingAddress=ee;ri.goHome=wi;ri.goToMenu=li;ri.loyaltyDifferentAmount=undefined;ri.giftCardDifferentAmount=undefined;ri.checkingOut=!1;ri.order={};ri.user={};ri.cardTypes=null;ri.months=bf();ri.years=[];ri.states=tt.states;ri.deliveryTemplate=undefined;ri.deliveryAddress=null;ri.waitTimeInMinutes=0;ri.orderTypeRuleWaitTimeInMinutes=0;ri.tableNumber="";ri.now=null;ri.pickupDateTimePrefix="";ri.browserTimeZoneOffset=et.getBrowserTimeZoneOffset();ri.gratuityChoices=undefined;ri.isAGuest=k.isAGuest();ri.useCalendar=!1;ri.messages=y.messages;ri.isPickupDateSelectable=undefined;ri.showCalendar=function(n){n.preventDefault();n.stopPropagation();ri.isCalendarVisible=!0};ri.hoursServiceInstance=null;ri.isCalendarVisible=!1;ri.completeOrder=pf;ri.showLoyaltyDifferentAmount=!1;ri.showGiftCardDifferentAmount=!1;ri.showLoyaltySection=vu;ri.showSecuritySection=yu;ri.showPostalSection=er;ri.showNameSection=sr;ri.showCvvSection=fr;ri.showAddressSection=or;ri.deletePaymentMethod=pu;ri.isCvvRequired=au;ri.paymentTime="now";ri.promoCode=null;ri.promotion=null;ri.applyPromoCode=_.debounce(uf,300,!0);ri.showCvvHelp=rf;ri.bestLoyalty={};ri.changeLoyaltyAmount=bu;ri.changeGiftCardAmount=ku;ri.safeClassName=y.safeClassName;ri.isEmailRequired=undefined;ri.isNameRequired=undefined;ri.isPhoneRequired=undefined;ri.isSelectedCard=wu;ri.getLoyaltyAppliedAmount=hr;ri.getMealPlanAppliedAmount=du;ri.getGiftCardAppliedAmount=cr;ri.payLaterText=undefined;ri.minimumAge=undefined;ri.showMinimumAgeSection=undefined;ri.isAgeConfirmed=!0;ri.datepickerOptions={dateDisabled:cu,minDate:new Date,showWeeks:!1};ri.setLoyalty=lu;ri.showPaymentTimeAllowed=undefined;ri.setMealPlanPayment=ur;ri.setGiftCardPayment=si;ri.scanCard=hu;ri.hasOffers=!1;ri.orderTypePrompt=null;ri.isCardScanSupported=undefined;ri.selectPaymentMethod=rr;ri.eligibleOffers=undefined;ri.isBusy=yf;ri.optOffer=br;ri.offerDiscountTotal=0;ri.limitOneOffer=undefined;ri.canApplyDifferentGiftCardAmount=undefined;ri.mustApplyGiftCard=undefined;ri.setPaymentTime=su;ri.getPaymentTimeSelectionVisible=ou;ri.isPromoAllowed=eu;ri.requiredItems=undefined;ri.item=pt;ri.isFutureDayOrderingAllowed=undefined;ri.isCreditCardPaymentAllowed=undefined;ri.isNoTimesAvailable=be;ri.isTimesAvailable=kr;ri.gratuityChoiceOther={value:0,percent:0};ri.newOfferExt=fu;ri.showAddGiftCard=!1;ri.showAddGiftCardPin=!1;ri.newGiftCard=null;ri.newGiftCardPin=null;ri.recaptchaToken=null;ri.addGiftCard=gu;ri.showCreditCardFields=uu;ri.getTopCssClasses=eo;ri.sqFormCnt=0;ri.getItemCount=oo;ri.getItemIncludedItemsTemplate=ht.getItemIncludedItemsTemplate;ri.deliveryServicePickupTimeUtc=undefined;ri.isGiftCardFormShown=!1;ri.showGiftCardForm=ir;ri.isGiftCardInputMasked=!1;ri.showCaptcha=ru;ri.recaptchaKey=togoorder.recaptchaKey;ri.onRecaptchaCreate=io;ri.stripSpaces=nf;ri.deliveryServiceDeliveryTime=undefined;ri.deliveryServiceTimeToDeliver=undefined;ri.getPaymentGatewayProfileSettings=tr;ri.mandatoryText={name:"required input",url:"shared/mandatoryMsg.html"};ri.isDeliveryGratuityOverride=ue;ri.isAddressRequiredAtCheckout="true";tr();hi=new Date;Object.defineProperty(ri,"pickupCalendarDate",{get:function(){return hi},set:function(n){hi=n;var t=lr(hi,ri.merchantLocation.TimeZoneOffset);ri.pickupDate=ri.hoursServiceInstance.getPickupDateTimeForDate(t)}});Object.defineProperty(ri,"isPromoApplicable",{get:function(){return ri.promoCode?ri.promoCode.toUpperCase()===(ri.order.Promotion&&ri.order.Promotion.Code||"").toUpperCase()?!1:ri.promoCode.toUpperCase()===(ri.promotion&&ri.promotion.Code||"").toUpperCase()?!1:!0:!1}});Object.defineProperty(ri,"orderPickupDateTime",{get:function(){return ri.order.PickupDateTime},set:function(n){ri.order.PickupDateTime=n;vi&&ui();g.spinnerShow();ho(n).then(function(n){if(nr=n,!n){var t=new Error(yi);t.showAlert=!0;throw t;}})["finally"](function(){g.spinnerHide()})}});ei=null;Object.defineProperty(ri,"selectedGratuityChoice",{get:function(){return ei},set:function(n){ei=n;ri.order.Gratuity=y.monetize(ei.value);ei===ri.gratuityChoiceOther&&y.broadcast("otherGratuitySelected")}});kf();i.$on(p.newPaymentMethodAdded,gi);r.$on(p.promoCodeRemoved,function(){ri.promoCode="";ri.order.Payment.ExternalPromotion=null;ui()});r.$watch("vm.pickupDate",function(n,t){t&&(ri.order.PickupDateTime="");n&&n.showCalendar&&(ri.dayChoices&&ri.dayChoices.length&&vr(ri.dayChoices[0].date.add(6,"days")),ri.useCalendar=!0)});r.$watch("vm.promoCode",function(){ri.promotion={}});r.sqPaymentAdded=!0;r.sqPaymentAddedbtn=!0;r.loadSquarePaymentInfo=function(){r.sqPaymentAdded=!1;r.sqPaymentAddedbtn=!0;ri.order.Payment.NewCreditCard.isSelected=!0;ri.order.Payment.NewCreditCard.CreditCard.CardType=ri.squareCardData.cardBrand;ri.order.Payment.NewCreditCard.CreditCard.CardNumber=bt.get("Nonce");ri.order.Payment.NewCreditCard.CreditCard.LastFourDigits=ri.squareCardData.lastFour;ri.order.Payment.NewCreditCard.CreditCard.ExpirationMonth=ri.squareCardData.expMonth;ri.order.Payment.NewCreditCard.CreditCard.ExpirationYear=ri.squareCardData.expYear;ri.order.Payment.CardHolder.FirstName=ri.order.Customer.FirstName;ri.order.Payment.CardHolder.LastName=ri.order.Customer.LastName;ri.order.Payment.CardHolder.Address=new gt;ri.order.Payment.CardHolder.Address.Zipcode=ri.squareCardData.billingPostalCode;console.log("load SquarePaymentInfo - vm.order.payment");console.log(ri.order.Payment);r.$apply()};angular.element(document).ready(function(){togoorder.PosIntegrationType==="Square"&&ri.order.TotalForTenders!==0&&le()})}var n="checkout";angular.module("main").controller(n,["$timeout","$rootScope","$scope","$state","$log","$q","$http","$window","$stateParams","$uibModal","$filter","linkService","notify","common","events","cartService","merchantLocationService","userService","enumService","spinner","Payment","staticData","orderService","hoursService","orderTypeWorkflowService","deliveryService","timeService","browserInfo","promoCodeService","menuWorkflowService","menuService","orderTypeRuleService","OrderItem","OfferExt","api","menuItemDetailViewModel","loyaltyService","storageService","mealPlanService","giftCardService","Address","vcRecaptchaService","paymentGatewayProfileSettingsService","crmService",t])}(),function(){"use strict";function n(n){function i(){t.close(t.pin)}var t=this;t.pin="";t.returnPin=i;t.close=n.close;t.dismiss=n.dismiss}angular.module("common").controller("giftCardPinPrompt",["$uibModalInstance",n])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k){function nt(){return c.getOrderSummary().then(function(n){return d.orderConfirmation=n,d.tableNumber=d.orderConfirmation.tableNumber,d.vehicleColor=d.orderConfirmation.vehicleColor,d.vehicleModel=d.orderConfirmation.vehicleModel,d.address=d.orderConfirmation.deliveryAddress,n},function(){console.log("No order summary.");r.go("locationHome")})}function tt(){return h.getById(g).then(function(n){return d.merchantLocation=n,d.errorMessage=d.merchantLocation.PosIntegrationFailToCustomerMessage||"",d.merchantLocation.PosIntegrationFailToCustomerShowLocationPhone&&(d.locationPhone=d.merchantLocation.Phone||""),n})}function it(){f.sessionStorage.clear();o.clear()}function rt(){it();a.clear();k.spinnerShow();s.activateController([tt(),nt()],n).then(function(){d.activated=!0},function(){})}var d=this,g=togoorder.locationId;d.merchantLocation={};d.orderConfirmation={};d.deliveryTemplate="";d.tableNumber="?";d.address={};d.browserTimeZoneOffset=v.getBrowserTimeZoneOffset();d.pickupDate={};d.orderTypeDisplay=undefined;d.isAGuest=y.isAGuest();d.safeClassName=s.safeClassName;d.currentOrderProgressText="";d.currentOrderProgressSubtext="";d.errorMessage=undefined;d.locationPhone=undefined;d.success=undefined;d.activated=!1;rt()}var n="orderProgressFail";angular.module("main").controller(n,["$scope","$q","$state","$stateParams","$window","$timeout","storageService","common","merchantLocationService","orderService","orderTypeWorkflowService","cartService","timeService","userService","api","orderTypeRuleService","events","spinner",t])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b){function d(){u.sessionStorage.clear();e.clear()}function tt(){return s.getById(nt).then(function(n){return k.merchantLocation=n,n})}function it(){return h.getOrderSummary().then(function(n){return k.orderConfirmation=n,k.tableNumber=k.orderConfirmation.tableNumber,k.vehicleColor=k.orderConfirmation.vehicleColor,k.vehicleModel=k.orderConfirmation.vehicleModel,k.address=k.orderConfirmation.deliveryAddress,n})}function g(){($.cookie("is_unlistedOnly")?(d(),u.sessionStorage.setItem("is_unlistedOnly","true")):d(),togoorder.callInjectedStrategy("cancelOrder"))||(togoorder.locationWebsite?u.location.href=togoorder.locationWebsite:$.cookie("is_unlistedOnly")?u.location.href=$.cookie("unlisted_url"):i.go("locationHome"))}function rt(){u.location.href=`${togoorder.baseUrlToMainSite}/ArrivalMessage/${k.orderConfirmation.orderUrlId}`}function ut(){var n=togoorder.callInjectedStrategy("onOrderComplete",k.orderConfirmation,t,y);return n&&n.result||t.when(1)}function ft(){d();l.clear();b.success("Order Submitted!");o.activateController([tt(),it().then(ut)]).then(function(){var t=p.getOrderTypeRule(k.orderConfirmation.orderType,k.orderConfirmation.fulfillmentType,togoorder.merchantLocation),n,i;c.setOrderTypeRule(t,!!k.orderConfirmation.vehicleModel);k.deliveryTemplate=c.getDisplayTemplate(k.orderConfirmation.orderType,k.orderConfirmation.fulfillmentType);k.orderTypeDisplay=c.getOrderTypeDescription(k.orderConfirmation.orderType,k.orderConfirmation.fulfillmentType);n=c.getTakeoutCurbsideDescription(k.orderConfirmation.orderType,k.orderConfirmation.fulfillmentType,k.orderConfirmation.vehicleModel,k.orderConfirmation.vehicleColor);n&&(k.orderTypeDisplay=n);i=moment.utc(k.orderConfirmation.pickupDate);k.pickupDate=i.clone().utcOffset(k.merchantLocation.TimeZoneOffset);k.showImHere=(k.vehicleModel||t.IsAlwaysCustomerArrival)&&togoorder.merchantLocation.AcceptsImHereLink},function(){g()})}var k=this,nt=togoorder.locationId;k.merchantLocation={};k.orderConfirmation={};k.deliveryTemplate="";k.tableNumber="?";k.address={};k.done=g;k.browserTimeZoneOffset=a.getBrowserTimeZoneOffset();k.pickupDate={};k.orderTypeDisplay=undefined;k.isAGuest=v.isAGuest();k.safeClassName=o.safeClassName;k.showImHere=!1;k.imHere=rt;k.currentOrderProgressText="Thank You";ft()}angular.module("main").controller("thankYou",["$scope","$q","$state","$stateParams","$window","$timeout","storageService","common","merchantLocationService","orderService","orderTypeWorkflowService","cartService","timeService","userService","api","orderTypeRuleService","events","notify",n])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k){function nt(){return c.getOrderSummary().then(function(n){return d.orderConfirmation=n,d.tableNumber=d.orderConfirmation.tableNumber,d.vehicleColor=d.orderConfirmation.vehicleColor,d.vehicleModel=d.orderConfirmation.vehicleModel,d.address=d.orderConfirmation.deliveryAddress,n})}function tt(){return h.getById(g).then(function(n){return d.merchantLocation=n,n})}function it(){f.sessionStorage.clear();o.clear()}function rt(){ft();s.broadcast(b.readyForOrderProgress,d.orderConfirmation);et()}function ut(){it();a.clear();k.spinnerShow();s.activateController([tt(),nt()],n).then(function(){return k.spinnerShow(),d.activated=!0,rt()},function(n){console.log("error waiting for order progress...",n);r.go("locationHome")})}function ft(){e(function(){d.currentOrderProgressText="Placing Order..."},10);t.$on(b.orderHubProgress,function(n,t){try{var i=angular.fromJson(t);e(function(){switch(i.Progress){case"InitializingFutureOrder":d.currentOrderProgressText="Initializing Future Order...";d.currentOrderProgressSubtext="";break;case"FiringIntoThePos":d.currentOrderProgressText="Alerting the Cooks...";d.currentOrderProgressSubtext="";break;case"SendingOrderToPos":d.currentOrderProgressText="Sending your Order to the Kitchen...";d.currentOrderProgressSubtext="Looks delicious!";break;case"InitializingAPriceRequest":d.currentOrderProgressText="Calculating the Final Price...";d.currentOrderProgressSubtext="";break;case"SendingCustomerEmail":d.currentOrderProgressText="YES!";d.currentOrderProgressSubtext="";break;case"OrderStatusChange":switch(i.OrderStatus){case"New":d.currentOrderProgressText="Thinking...";d.currentOrderProgressSubtext="This is the best order we've had today!";break;case"Confirmed":case"Complete":d.currentOrderProgressText="YES!";d.currentOrderProgressSubtext="";break;case"Cancelled":d.currentOrderProgressText="Oh No... An Error Occurred.";d.currentOrderProgressSubtext="";break;default:d.currentOrderProgressText="??";d.currentOrderProgressSubtext=""}break;case"UpdatingPosIntegration":switch(i.IntegrationQueueStatus){case"New":case"PulledOrPublished":d.currentOrderProgressText="Initializing Communication with the Restaurant...";d.currentOrderProgressSubtext="This is the best order we've had today!";break;case"PullAcknowledged":case"IntegrationPendingRecheck":d.currentOrderProgressText="Communicating with the Restaurant...";d.currentOrderProgressSubtext="Looking good!";break;case"IntegrationAcknowledged":d.currentOrderProgressText="Almost there...";d.currentOrderProgressSubtext="The Store is Looking Over the Order...";break;case"PullFailed":case"IntegrationFailed":d.currentOrderProgressText="Oh No... An Error Occurred.";d.currentOrderProgressSubtext="";break;default:d.currentOrderProgressText="??";d.currentOrderProgressSubtext=""}break;default:d.currentOrderProgressText="??";d.currentOrderProgressSubtext=""}switch(i.IntegrationQueueStatus){case"IntegrationFailed":d.currentOrderProgressText="Oh No... An Error Occurred.";d.currentOrderProgressSubtext=""}var n=!1;i.IsSuccess===!0?(d.success=!0,n=!0):i.IsSuccess===!1&&(d.success=!1,n=!0);n&&(k.spinnerHide(),s.broadcast(b.orderHubProgressDone,i),d.success?r.go("thankYou",{},{}):r.go("orderProgressFail",{},{}))},10)}catch(n){console.log(n)}})}function et(){var i=w.getOrderTypeRule(d.orderConfirmation.orderType,d.orderConfirmation.fulfillmentType,togoorder.merchantLocation),n,t;l.setOrderTypeRule(i,!!d.orderConfirmation.vehicleModel);d.deliveryTemplate=l.getDisplayTemplate(d.orderConfirmation.orderType,d.orderConfirmation.fulfillmentType);d.orderTypeDisplay=l.getOrderTypeDescription(d.orderConfirmation.orderType,d.orderConfirmation.fulfillmentType);n=l.getTakeoutCurbsideDescription(d.orderConfirmation.orderType,d.orderConfirmation.fulfillmentType,d.orderConfirmation.vehicleModel,d.orderConfirmation.vehicleColor);n&&(d.orderTypeDisplay=n);t=moment.utc(d.orderConfirmation.pickupDate);d.pickupDate=t.clone().utcOffset(d.merchantLocation.TimeZoneOffset)}var d=this,g=togoorder.locationId;d.merchantLocation={};d.orderConfirmation={};d.deliveryTemplate="";d.tableNumber="?";d.address={};d.browserTimeZoneOffset=v.getBrowserTimeZoneOffset();d.pickupDate={};d.orderTypeDisplay=undefined;d.isAGuest=y.isAGuest();d.safeClassName=s.safeClassName;d.currentOrderProgressText="";d.currentOrderProgressSubtext="";d.success=undefined;d.activated=!1;ut()}var n="waitForOrderProgress";angular.module("main").controller(n,["$scope","$q","$state","$stateParams","$window","$timeout","storageService","common","merchantLocationService","orderService","orderTypeWorkflowService","cartService","timeService","userService","api","orderTypeRuleService","events","spinner",t])}(),function(){"use strict";function n(n,t,i,r,u,f){function e(){f.activateController([])}var o=this,s=togoorder.locationId;e()}angular.module("main").controller("customerArrival",["$scope","$q","$state","$stateParams","$window","common",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h){function v(){var n=h.getCart();c=n.order}function y(){l.isUseCurbside?(c.VehicleColor=c.Customer.VehicleColor,c.VehicleModel=c.Customer.VehicleModel):(c.VehicleColor="",c.VehicleModel="")}var l=this,a,c;v();Object.defineProperty(l,"isUseCurbside",{get:function(){return a},set:function(n){a=n;y()}})}angular.module("main").controller("curbsidePrompt",["$rootScope","$log","$state","$stateParams","$uibModal","$filter","notify","common","events","cartService",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h){function l(){var n=h.getCart();c=n.order}var a=this,c;l()}angular.module("main").controller("carsidePrompt",["$rootScope","$log","$state","$stateParams","$uibModal","$filter","notify","common","events","cartService",n])}(),function(){"use strict";function n(){function n(n,t){this.offer=n;this.onChanged=t}return Object.defineProperty(n.prototype,"isOptedIn",{get:function(){return this.offer.OptedIn},set:function(n){var t,i;if(this.offer.Optable&&(t=!!this.offer.OptedIn,n=!!n,i=t!==n,this.offer.OptedIn=n,i&&this.onChanged))this.onChanged(this.offer)}}),n}angular.module("main").factory("OfferExt",["$rootScope","$timeout","common","events",n])}(),function(){"use strict";function n(n){function t(n,t){this.SalesTaxRate=0;this.Gratuity=null;this.Items=[];this.LocationId=n;this.DeliveryZoneId=null;this.DeliveryFee=0;this.OrderType=null;this.FulfillmentType=null;this.MenuId=t;this.PickupDateTime=null;this.TableNumber=null;this.DeliveryAddress={};this.DeliveryDistance=0;this.PickupTimeZoneId=undefined;this.Promotion={};this.IsUsual=!1;this.SurchargePercentage=0;this.ConvenienceFee=0;this.Customer={EmailAddress:null,LastName:null,FirstName:null,GuestEmailOptIn:!1,PhoneNumber:{Number:null}};this.loyaltyOverrideAmount=undefined;this.mealPlanOverrideAmount=undefined;this.giftCardOverrideAmount=undefined;this.isOfferPreTax=!1;this.isLoyaltyPreTax=!1;this.loyaltyDoesNotCoverTip=!1;this.isMealPlanPreTax=!1;this.isGiftCardPreTax=!1;this.isConvenienceFeePreTax=!1;this.isSurchargePreTax=!1;this.isDeliveryFeePreTax=!1;this.giftCardProviderType=undefined;this.Payment=null;this.SelectedOfferAmount=0;this.LastValidated=new Date;var r,i=this;Object.defineProperty(this,"PickupDateTimeLocal",{get:function(){return i.PickupDateTime&&moment.isMoment(i.PickupDateTime)?i.PickupDateTime.locale("en").format("YYYY-MM-DD HH:mm"):null},set:function(){},enumerable:!0});Object.defineProperty(this,"pricedOrder",{get:function(){return r},set:function(n){r=n&&n.IsSuccess&&new c(i,n)},enumerable:!1})}function i(n,t){t.Items=_.reject(t.Items,function(t){return n===t.ItemId});_.each(t.Items,function(t){i(n,t)})}function f(n){var t=n.Subtotal+n.PreTaxTotalDiscount+n.PreTaxDeliveryFee+n.PreTaxConvenienceFee+n.PreTaxSurcharge;return Math.max(t,0)}function e(n){var t=n.Subtotal+n.PreTaxTotalDiscount+n.PreTaxDeliveryFee+n.PreTaxConvenienceFee+n.PreTaxSurcharge+n.OfferDiscount;return Math.max(t,0)}function r(n){return n.PreTaxTotalDiscount+n.PreTaxDeliveryFee+n.PreTaxConvenienceFee+n.PreTaxSurcharge+n.OfferDiscount+n.LoyaltyDiscount}function o(t){var i=t.Subtotal+r(t),u=Math.max(i,0);return n.monetize(u)}function u(n){return!n||!n.LoyaltyPayment||!n.LoyaltyPayment.RewardPointsSummary||n.LoyaltyPayment.RewardPointsSummary.MonetaryWorth===0?0:n.LoyaltyPayment.RewardPointsSummary.MonetaryWorth}function s(n){return!n||!n.MealPlanPayment||n.MealPlanPayment.Balance===0?0:n.MealPlanPayment.Balance}function h(n){return!n||!n.GiftCardPayment||n.GiftCardPayment.Balance===0?0:n.GiftCardPayment.Balance}function c(t,i){var r=this;angular.extend(this,i);Object.defineProperty(this,"TotalFinal",{get:function(){var i=r.Total+t.Gratuity;return n.monetize(i)}})}return t.prototype.setLocation=function(n){this.SalesTaxRate=n.SalesTaxRate;this.SalesTaxRoundingStrategy=n.SalesTaxRoundingStrategy;this.isOfferPreTax=!!(n.LoyaltyProfile&&n.LoyaltyProfile.IsOfferPreTax);this.isLoyaltyPreTax=!!(n.LoyaltyProfile&&n.LoyaltyProfile.IsPreTax);this.loyaltyDoesNotCoverTip=!!(n.LoyaltyProfile&&n.LoyaltyProfile.DoNotCoverTip);this.isMealPlanPreTax=!!(n.Merchant&&n.Merchant.MealPlanProfiles&&n.Merchant.MealPlanProfiles.length&&n.Merchant.MealPlanProfiles[0].IsPreTax);this.isGiftCardPreTax=!!(n.Merchant&&n.Merchant.GiftCardProfiles&&n.Merchant.GiftCardProfiles.length&&n.Merchant.GiftCardProfiles[0].IsPreTax)},t.prototype.setDeliveryZone=function(n,t,i){this.setOrderTypeRule(i);this.DeliveryZoneId=n.Id;this.DeliveryFee=0;this.DeliveryDistance=t;n.FlatFee&&(this.DeliveryFee+=n.FlatFee);n.PerMileFee&&(this.DeliveryFee+=t*n.PerMileFee);n.PercentageFee&&(this.SurchargePercentage=n.PercentageFee,this.isSurchargePreTax=this.isDeliveryFeePreTax)},t.prototype.setDeliveryService=function(n){this.DeliveryFee=n.DeliveryFeePaidByCustomer||0;n.DeliveryServiceChargePaidByCustomer&&(this.ConvenienceFee=n.DeliveryServiceChargePaidByCustomer)},t.prototype.setOrderTypeRule=function(n){this.OrderType=n.OrderType;this.FulfillmentType=n.FulfillmentType;this.SurchargePercentage=n.SurchargePercentage;this.ConvenienceFee=n.ConvenienceFee;this.isConvenienceFeePreTax=n.IsConvenienceFeePreTax;this.isSurchargePreTax=n.IsSurchargePreTax;this.isDeliveryFeePreTax=n.IsDeliveryFeePreTax},t.prototype.addItem=function(n){this.Items.push(n)},t.prototype.deleteItem=function(n){this.Items=_.reject(this.Items,function(t){return n===t});this.Items.length==0&&(this.Gratuity=0)},t.prototype.invalidatePricedOrderLoyalty=function(){this.pricedOrder.LoyaltyDiscount=undefined},t.prototype.invalidatePricedOrderOffers=function(){this.pricedOrder.OfferDiscount=undefined},t.prototype.deleteItemById=function(n){i(n,this)},Object.defineProperty(t.prototype,"PostTaxDeliveryFee",{get:function(){return this.isDeliveryFeePreTax?0:this.pricedOrder&&this.pricedOrder.DeliveryFee!==undefined?n.monetize(this.pricedOrder.DeliveryFee||0):n.monetize(this.DeliveryFee)}}),Object.defineProperty(t.prototype,"PreTaxDeliveryFee",{get:function(){return this.isDeliveryFeePreTax?this.pricedOrder&&this.pricedOrder.DeliveryFee!==undefined?n.monetize(this.pricedOrder.DeliveryFee||0):n.monetize(this.DeliveryFee):0}}),Object.defineProperty(t.prototype,"PostTaxSurcharge",{get:function(){if(this.isSurchargePreTax)return 0;if(this.pricedOrder&&this.pricedOrder.TotalSurcharge!==undefined)return n.monetize(this.pricedOrder.TotalSurcharge||0);var t=this.Subtotal*this.SurchargePercentage/100;return n.monetize(t)}}),Object.defineProperty(t.prototype,"PreTaxSurcharge",{get:function(){if(!this.isSurchargePreTax)return 0;if(this.pricedOrder&&this.pricedOrder.TotalSurcharge!==undefined)return n.monetize(this.pricedOrder.TotalSurcharge||0);var t=this.Subtotal*this.SurchargePercentage/100;return n.monetize(t)}}),Object.defineProperty(t.prototype,"PreTaxTotalDiscount",{get:function(){if(this.pricedOrder&&this.pricedOrder.PreTaxDiscountAmount!==undefined)return n.monetize(this.pricedOrder.PreTaxDiscountAmount||0);var t=0;return this.Promotion.DiscountPercentage||this.Promotion.DiscountPercentage>0?(t=this.Subtotal*this.Promotion.DiscountPercentage/100,(this.Promotion.DiscountAmount||this.Promotion.DiscountAmount>0)&&t>this.Promotion.DiscountAmount&&(t=this.Promotion.DiscountAmount)):(this.Promotion.DiscountAmount||this.Promotion.DiscountAmount>0)&&(t=this.Promotion.DiscountAmount),t=Math.min(t,this.Subtotal),0-n.monetize(t)}}),Object.defineProperty(t.prototype,"PostTaxTotalDiscount",{get:function(){return this.pricedOrder&&this.pricedOrder.PostTaxDiscountAmount!==undefined?n.monetize(this.pricedOrder.PostTaxDiscountAmount||0):0}}),Object.defineProperty(t.prototype,"TotalDiscount",{get:function(){return this.PreTaxTotalDiscount+this.PostTaxTotalDiscount}}),Object.defineProperty(t.prototype,"ItemPromotionDiscount",{get:function(){return this.PreItemPromotionSubtotal>0?this.Subtotal-this.PreItemPromotionSubtotal:0}}),Object.defineProperty(t.prototype,"isPayable",{get:function(){return this.Total>0}}),Object.defineProperty(t.prototype,"Subtotal",{get:function(){if(this.pricedOrder&&this.pricedOrder.Subtotal!==undefined)return n.monetize(this.pricedOrder.Subtotal||0);var t=_.reduce(this.Items,function(n,t){return n+t.TotalPrice},0);return n.monetize(t)}}),Object.defineProperty(t.prototype,"PreItemPromotionSubtotal",{get:function(){var t=_.reduce(this.Items,function(n,t){return n+t.PreItemPromotionTotalPrice},0);return n.monetize(t)}}),Object.defineProperty(t.prototype,"PromoSavings",{get:function(){var t=0-this.ItemPromotionDiscount-this.PreTaxTotalDiscount,i=t*(this.SalesTaxRate/100),r=t*(this.SurchargePercentage/100);return n.monetize(t+i+r-this.PostTaxTotalDiscount)}}),Object.defineProperty(t.prototype,"PreTaxConvenienceFee",{get:function(){return this.isConvenienceFeePreTax?this.pricedOrder&&this.pricedOrder.ConvenienceFee!==undefined?n.monetize(this.pricedOrder.ConvenienceFee||0):n.monetize(this.ConvenienceFee):0}}),Object.defineProperty(t.prototype,"PostTaxConvenienceFee",{get:function(){return this.isConvenienceFeePreTax?0:this.pricedOrder&&this.pricedOrder.ConvenienceFee!==undefined?n.monetize(this.pricedOrder.ConvenienceFee||0):n.monetize(this.ConvenienceFee)}}),Object.defineProperty(t.prototype,"ItemLevelTax",{get:function(){var f;if(this.pricedOrder&&this.pricedOrder.Tax!==undefined)return n.monetize(this.pricedOrder.Tax||0);var t=this,i=r(this),u=this.Subtotal;switch(t.SalesTaxRoundingStrategy){case 1:return f=_.reduce(this.Items,function(n,r){var f=r.ItemTaxRate,e,o;(f===null||f===undefined)&&(f=t.SalesTaxRate);e=r.TotalPrice/u;o=r.TotalPrice+i*e;let s=o*f/100;return n+s},0),n.monetize(f);default:{let r=_.groupBy(this.Items,function(n){var i=n.ItemTaxRate;return(i===null||i===undefined)&&(i=t.SalesTaxRate),i}),f=_.mapObject(r,function(t,r){return _.reduce(t,function(t,f){var e=f.TotalPrice/u,o=f.TotalPrice+i*e;let s=n.monetize(o*r/100,3);return t+s},0)}),e=_.values(f),o=_.reduce(e,function(t,i){return t+n.monetize(i,2)},0);return n.monetize(o)}}}}),Object.defineProperty(t.prototype,"TotalForTenders",{get:function(){return n.monetize(this.Total-this.LoyaltyPaymentAmount-this.OfferPaymentAmount)}}),Object.defineProperty(t.prototype,"Total",{get:function(){if(this.pricedOrder&&this.pricedOrder.TotalFinal!==undefined)return n.monetize(this.pricedOrder.TotalFinal||0);var t=o(this)+this.ItemLevelTax+(this.Gratuity||0)+this.PostTaxDeliveryFee+this.PostTaxConvenienceFee+this.PostTaxSurcharge;return n.monetize(t)}}),Object.defineProperty(t.prototype,"LoyaltyDiscount",{get:function(){function t(t){var i=t.MaxLoyaltyDiscountAmount;return t.loyaltyOverrideAmount!==undefined&&(i=Math.min(i,t.loyaltyOverrideAmount)),-n.monetize(i)}return this.isLoyaltyPreTax?(Object.defineProperty(this,"LoyaltyDiscount",{get:function(){return this.pricedOrder&&this.pricedOrder.LoyaltyDiscount!==undefined?this.pricedOrder.LoyaltyDiscount||0:t(this)},set:function(){},enumerable:!0}),t(this)):0},set:function(){}}),Object.defineProperty(t.prototype,"LoyaltyOverrideAmount",{get:function(){return this.loyaltyOverrideAmount},set:function(n){n=n||undefined;this.loyaltyOverrideAmount=n}}),Object.defineProperty(t.prototype,"LoyaltyPaymentAmount",{get:function(){function t(t){var i=t.MaxLoyaltyPaymentAmount;return t.loyaltyOverrideAmount!==undefined&&(i=Math.min(i,t.loyaltyOverrideAmount)),n.monetize(i)}return this.isLoyaltyPreTax?0:(Object.defineProperty(this,"LoyaltyPaymentAmount",{get:function(){return t(this)},set:function(){},enumerable:!0}),t(this))},set:function(){}}),Object.defineProperty(t.prototype,"MaxOfferDiscountAmount",{get:function(){if(!this.isOfferPreTax)return 0;var t=Math.min(f(this),this.SelectedOfferAmount);return n.monetize(t)}}),Object.defineProperty(t.prototype,"MaxOfferPaymentAmount",{get:function(){if(this.isOfferPreTax)return 0;var t=this.Total,i=Math.min(t-this.GiftCardPaymentAmount-this.MealPlanPaymentAmount,this.SelectedOfferAmount);return n.monetize(i)}}),Object.defineProperty(t.prototype,"MaxLoyaltyDiscountAmount",{get:function(){if(!this.isLoyaltyPreTax)return 0;var t=Math.min(e(this),u(this.Payment));return n.monetize(t)}}),Object.defineProperty(t.prototype,"MaxLoyaltyPaymentAmount",{get:function(){if(this.isLoyaltyPreTax)return 0;var t=this.TotalForLoyalty-(this.loyaltyDoesNotCoverTip?this.Gratuity:0),i=Math.min(t,u(this.Payment));return n.monetize(i)}}),Object.defineProperty(t.prototype,"TotalForLoyalty",{get:function(){var t=Math.max(0,this.Total-this.OfferPaymentAmount-this.GiftCardPaymentAmount-this.MealPlanPaymentAmount);return n.monetize(t)}}),Object.defineProperty(t.prototype,"TotalForCreditCard",{get:function(){var t=Math.max(0,this.Total-this.LoyaltyPaymentAmount-this.OfferPaymentAmount-this.GiftCardPaymentAmount-this.MealPlanPaymentAmount);return n.monetize(t)}}),Object.defineProperty(t.prototype,"MealPlanOverrideAmount",{get:function(){return this.mealPlanOverrideAmount},set:function(n){n=n||undefined;this.mealPlanOverrideAmount=n}}),Object.defineProperty(t.prototype,"MealPlanPaymentAmount",{get:function(){function t(t){var i=t.MaxMealPlanPaymentAmount;return t.mealPlanOverrideAmount!==undefined&&(i=Math.min(i,t.mealPlanOverrideAmount)),n.monetize(i)}return this.isMealPlanPreTax?0:(Object.defineProperty(this,"MealPlanPaymentAmount",{get:function(){return t(this)},set:function(){},enumerable:!0}),t(this))},set:function(){}}),Object.defineProperty(t.prototype,"GiftCardOverrideAmount",{get:function(){return this.giftCardOverrideAmount},set:function(n){n=n||undefined;this.giftCardOverrideAmount=n}}),Object.defineProperty(t.prototype,"GiftCardPaymentAmount",{get:function(){function t(t){var i=t.MaxGiftCardPaymentAmount;return t.giftCardOverrideAmount!==undefined&&(i=Math.min(i,t.giftCardOverrideAmount)),n.monetize(i)}return this.isGiftCardPreTax?0:(Object.defineProperty(this,"GiftCardPaymentAmount",{get:function(){return t(this)},set:function(){},enumerable:!0}),t(this))},set:function(){}}),Object.defineProperty(t.prototype,"OfferDiscount",{get:function(){function t(t){return-n.monetize(t.MaxOfferDiscountAmount)}return this.isOfferPreTax?(Object.defineProperty(this,"OfferDiscount",{get:function(){return t(this)},set:function(){},enumerable:!0}),t(this)):0},set:function(){}}),Object.defineProperty(t.prototype,"OfferPaymentAmount",{get:function(){return this.isOfferPreTax?0:n.monetize(this.MaxOfferPaymentAmount)},set:function(){}}),Object.defineProperty(t.prototype,"MaxMealPlanPaymentAmount",{get:function(){if(this.isMealPlanPreTax)return 0;var t=Math.min(this.Total,s(this.Payment));return n.monetize(t)}}),Object.defineProperty(t.prototype,"MaxGiftCardPaymentAmount",{get:function(){var t,i;return this.isGiftCardPreTax?0:(t=this.Total-this.MealPlanPaymentAmount,this.giftCardProviderType!=1&&(t-=this.Gratuity),i=Math.min(t,h(this.Payment)),n.monetize(i))}}),Object.defineProperty(t.prototype,"TotalLessMealPlan",{get:function(){if(this.isMealPlanPreTax)return this.Total;var t=Math.max(0,this.Total-this.MealPlanPaymentAmount);return n.monetize(t)}}),Object.defineProperty(t.prototype,"TotalLessGiftCard",{get:function(){if(this.isGiftCardPreTax)return this.Total;var t=Math.max(0,this.Total-this.GiftCardPaymentAmount);return n.monetize(t)}}),t}angular.module("main").factory("Order",["common",n])}(),function(){"use strict";function n(n,t){function i(i,r,u){var o=i.SortIndex||1,f,e,s;u&&(u.HasSizes?o=0:o+=u.SortIndex*1e6);this.countEquivalent=i.CountEquivalent;this.UniqueId=+new Date&4294967295;this.ItemId=i.Id;this.GroupInstanceId=i.GroupInstanceId;this.ItemName=i.Name;this.SpecialInstructions="";this.SortIndex=o;this.ItemPrice=i.Price;this.ItemTaxRate=i.ItemTaxRate;this.OriginalItemPrice=undefined;this.PrimaryImageUrl=i.PrimaryImageUrl;this.OverridePrice=undefined;this.Items=[];this.IsItemCountIndependent=i.IsItemCountIndependent;this.IsChildItem=!!r;this.MinimumCount=i.MinimumCount||1;this.SectionBrand=i.SectionBrand;this.clonedIncludedGroups=[];f=this;r?Object.defineProperty(this,"Quantity",{enumerable:!0,get:function(){return f.IsItemCountIndependent?1:r.Quantity},set:function(n){if(f.IsItemCountIndependent){if(1!==n)throw new Error("Error while hydrating an order. - Quantity mismatch");}else if(r.Quantity!==n)throw new Error("Error while hydrating an order. - Quantity mismatch");}}):(e=0,Object.defineProperty(this,"Quantity",{enumerable:!0,get:function(){return e},set:function(i){i=i?parseInt(i,10):0;i=isNaN(i)?e:i;e=Math.max(i||1,f.MinimumCount||1);n.broadcast(t.itemQuantityChanged,{itemId:f.ItemId,quantity:i,minimumCount:f.MinimumCount})}}),this.Quantity=this.MinimumCount);s="";Object.defineProperty(this,"ConsumerName",{enumerable:!0,get:function(){return s},set:function(n){s=n&&n.toUpperCase()}});this._shouldShow=i.IsShownInCart;this._sortedItems=[];this._isPriceVisible=i.IsPriceVisible}function r(n){return n.ItemPrice*n.Quantity+_.reduce(n.Items,function(n,t){return n+r(t)},0)}function u(n){return(n.OriginalItemPrice*n.Quantity||0)+_.reduce(n.Items,function(n,t){return n+u(t)},0)}function f(n){var t=angular.copy(n);return t.GroupInstanceId="0"+t.GroupInstanceId,t.Class="clone",_.each(t.MenuItems,function(n){n.GroupInstanceId=t.GroupInstanceId}),t}return Object.defineProperty(i.prototype,"ExtendedPrice",{get:function(){return this.ItemPrice*this.Quantity}}),Object.defineProperty(i.prototype,"shouldShow",{get:function(){return this._shouldShow||this._shouldShow===undefined}}),Object.defineProperty(i.prototype,"isPriceVisible",{get:function(){return this._isPriceVisible}}),Object.defineProperty(i.prototype,"TotalPrice",{get:function(){return r(this)}}),Object.defineProperty(i.prototype,"PreItemPromotionTotalPrice",{get:function(){return u(this)}}),Object.defineProperty(i.prototype,"SortedItems",{get:function(){return this.Items.isSortCached||(this.Items.isSortCached=!0,this._sortedItems=_.sortBy(this.Items,"SortIndex")),this._sortedItems}}),i.prototype.modifyPrice=function(n,t){this.OverridePrice={original:this.ItemPrice,override:n,pricingRule:t};this.ItemPrice=n},i.prototype.unModifyPrice=function(n){this.OverridePrice&&this.OverridePrice.pricingRule===n&&(this.ItemPrice=this.OverridePrice.original,this.OverridePrice=undefined)},i.prototype.removeChildItem=function(n,t){this.Items=_.reject(this.Items,function(i){return i.ItemId===n&&i.GroupInstanceId===t});this.Items.isSortCached=!1},i.prototype.deleteItem=function(n){this.Items=_.reject(this.Items,function(t){return t.ItemId===n.ItemId});this.Items.isSortCached=!1},i.prototype.addChildItem=function(n,t){return t&&(this.Items=_.reject(this.Items,function(t){return t.GroupInstanceId===n.GroupInstanceId})),this.Items.push(n),this.Items.isSortCached=!1,n},i.prototype.changeQuantity=function(n,t){var i=this.Quantity+n;i=Math.max(t.MinimumCount,i);t.MaximumCount&&(i=Math.min(t.MaximumCount,i));this.Quantity=i},i.prototype.addIncludedGroupClone=function(n){var t=f(n);this.clonedIncludedGroups.push(t)},i.prototype.removeIncludedGroupClone=function(){var n=this.clonedIncludedGroups.pop(),t=n.GroupInstanceId;this.Items=_.filter(this.Items,function(n){return n.GroupInstanceId!==t})},i}angular.module("main").factory("OrderItem",["common","events",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o){function h(n){this.potentialIncludedGroups={};this.orderItem=n;this.includedOrderItemExtCache={}}function s(n,t){this._potentialIncludedItems={};this.parentOrderItemExt=n;this.includedGroup=t;this.selectedOrderItems=[];this.ui={isDisplayed:!1,isStickyUi:t.DisplayStyle==="sticky-group"};this._exclusiveMenuItem=undefined;this._nonExclusiveMenuItemIds=undefined;this.selectedOrderItemsChanged(!1)}function c(n,t,i){this.parentOrderItemExt=n;this.menuItem=t;this.potentialIncludedGroup=i;this._isIncluded=!1;this.isIncludedChanged();t.IsDefaultSelection&&!i.selectedOrderItems.length&&(this.isIncluded=!0)}var l=_.debounce(function(){i.broadcast(r.includedItemsChanged,{})},100);return h.prototype.withIncludedGroup=function(n){return this.potentialIncludedGroups[n.GroupInstanceId]=this.potentialIncludedGroups[n.GroupInstanceId]||new s(this,n)},h.prototype.cacheIncludedOrderItemExt=function(n){var t=this.includedOrderItemExtCache[n.orderItem.GroupInstanceId]=this.includedOrderItemExtCache[n.orderItem.GroupInstanceId]||{};t[n.orderItem.ItemId]=n},h.prototype.getCachedIncludedOrderItemExt=function(n,t){return this.includedOrderItemExtCache[n]&&this.includedOrderItemExtCache[n][t]},h.prototype.getCachedIncludedOrderItem=function(n,t){var i=this.getCachedIncludedOrderItemExt(n,t);return i&&i.orderItem},s.prototype.withMenuItem=function(n){return this._potentialIncludedItems[n.Id]=this._potentialIncludedItems[n.Id]||new c(this.parentOrderItemExt,n,this)},s.prototype.selectedOrderItemsChanged=function(n){this.selectedOrderItems=_.where(this.parentOrderItemExt.orderItem.Items,{GroupInstanceId:this.includedGroup.GroupInstanceId});_.each(this._potentialIncludedItems,function(n){n.isIncludedChanged()});n&&l()},s.prototype.isValid=function(){return!_.size(this.validate())},s.prototype.validate=function(){return f.validate(this.includedGroup,this.selectedOrderItems)},s.prototype.exclusiveMenuItemChanged=function(n){var t=this.selectedOrderItems;t.length>1&&(this._exclusiveMenuItem=undefined);this._exclusiveMenuItem=t.length===0?undefined:_.findWhere(this.includedGroup.MenuItems,{Id:t[0].ItemId});n&&l()},Object.defineProperty(s.prototype,"nonExclusiveMenuItemIds",{get:function(){return this._nonExclusiveMenuItemIds||(this.selectedOrderItemsChanged(!1),this._nonExclusiveMenuItemIds=_.pluck(this.selectedOrderItems,"ItemId")),this._nonExclusiveMenuItemIds},set:function(n){var t=this;this._nonExclusiveMenuItemIds=n;_.each(t.selectedOrderItems,function(i){var r=function(n){return i.ItemId==n};_.some(n,r)||t.parentOrderItemExt.orderItem.removeChildItem(i.ItemId,i.GroupInstanceId)});_.each(n,function(n){if(!_.some(t.selectedOrderItems,function(t){return t.ItemId==n})){var i=t.parentOrderItemExt.getCachedIncludedOrderItem(t.includedGroup.GroupInstanceId,n)||new u(_.findWhere(t.includedGroup.MenuItems,{Id:n}),t.parentOrderItemExt.orderItem,t.includedGroup);t.parentOrderItemExt.orderItem.addChildItem(i,!1)}});t.selectedOrderItemsChanged(!0)}}),Object.defineProperty(s.prototype,"exclusiveMenuItem",{get:function(){return this._exclusiveMenuItem||this.exclusiveMenuItemChanged(!1),this._exclusiveMenuItem},set:function(n){var t=this,i=!1,r;if(t._exclusiveMenuItem&&t._exclusiveMenuItem.Id!=n.Id){if(t.parentOrderItemExt.orderItem.removeChildItem(n.Id,n.GroupInstanceId),window.location.href.includes("checkout")){let n=0;t.parentOrderItemExt.orderItem.ItemTaxRate!=null&&(n=t.parentOrderItemExt.orderItem.ItemTaxRate/100);let i=t.exclusiveMenuItem.Price,r=i*n;o.getCart().order.pricedOrder.Subtotal-=i;o.getCart().order.pricedOrder.Tax-=r;o.getCart().order.pricedOrder.Total=o.getCart().order.pricedOrder.Subtotal+o.getCart().order.pricedOrder.Tax}i=!0}if(!t._exclusiveMenuItem||t._exclusiveMenuItem.Id!=n.Id){if(r=t.parentOrderItemExt.getCachedIncludedOrderItem(n.GroupInstanceId,n.Id)||new u(n,t.parentOrderItemExt.orderItem,t.includedGroup),t.parentOrderItemExt.orderItem.addChildItem(r,!0),window.location.href.includes("checkout")){let n=0;t.parentOrderItemExt.orderItem.ItemTaxRate!=null&&(n=t.parentOrderItemExt.orderItem.ItemTaxRate/100);let i=r.TotalPrice,u=i*n;o.getCart().order.pricedOrder.Subtotal+=i;o.getCart().order.pricedOrder.Tax+=u;o.getCart().order.pricedOrder.Total=o.getCart().order.pricedOrder.Subtotal+o.getCart().order.pricedOrder.Tax}i=!0}i&&(t.selectedOrderItemsChanged(!1),t.exclusiveMenuItemChanged(!0))}}),Object.defineProperty(s.prototype,"selectionCount",{get:function(){return e.getSelectionCount(this.selectedOrderItems)},set:function(){}}),c.prototype.getOrderItemExt=function(){var n=this,i=_.findWhere(n.parentOrderItemExt.orderItem.Items,{ItemId:n.menuItem.Id,GroupInstanceId:n.menuItem.GroupInstanceId}),t;return i?(t=n.parentOrderItemExt.getCachedIncludedOrderItemExt(n.menuItem.GroupInstanceId,n.menuItem.Id),t)?t:(t=new h(i),n.parentOrderItemExt.cacheIncludedOrderItemExt(t),t):undefined},c.prototype.isIncludedChanged=function(){this._isIncluded=!!this.getOrderItemExt()},Object.defineProperty(c.prototype,"isIncluded",{get:function(){return this._isIncluded},set:function(n){var i=this;n?i._isIncluded||(i._isIncluded=!0,t(function(){let n;window.location.href.includes("checkout")&&(n=i.parentOrderItemExt.orderItem.TotalPrice);var t=i.parentOrderItemExt.getCachedIncludedOrderItem(i.menuItem.GroupInstanceId,i.menuItem.Id)||new u(i.menuItem,i.parentOrderItemExt.orderItem,i.potentialIncludedGroup.includedGroup);if(i.parentOrderItemExt.orderItem.addChildItem(t),i.potentialIncludedGroup._nonExclusiveMenuItemIds=undefined,i.potentialIncludedGroup.selectedOrderItemsChanged(!0),window.location.href.includes("checkout")){let r=i.menuItem.Price,t=0;i.parentOrderItemExt.orderItem.ItemTaxRate!=null&&(t=i.parentOrderItemExt.orderItem.ItemTaxRate/100);let u=i.parentOrderItemExt.orderItem.TotalPrice,f=u*t,e=n*t,s=Math.abs(e-f);o.getCart().order.pricedOrder.Subtotal+=r;o.getCart().order.pricedOrder.Tax+=s;o.getCart().order.pricedOrder.Total=o.getCart().order.pricedOrder.Subtotal+o.getCart().order.pricedOrder.Tax}},10)):n===!1&&(i._isIncluded=!1,t(function(){let n;if(window.location.href.includes("checkout")&&(n=i.parentOrderItemExt.orderItem.TotalPrice),i.parentOrderItemExt.orderItem.removeChildItem(i.menuItem.Id,i.menuItem.GroupInstanceId),i.potentialIncludedGroup._nonExclusiveMenuItemIds=undefined,i.potentialIncludedGroup.selectedOrderItemsChanged(!0),window.location.href.includes("checkout")){let t=0;i.parentOrderItemExt.orderItem.ItemTaxRate!=null&&(t=i.parentOrderItemExt.orderItem.ItemTaxRate/100);let r=i.menuItem.Price,u=i.parentOrderItemExt.orderItem.TotalPrice,f=n*t,e=u*t,s=Math.abs(f-e);o.getCart().order.pricedOrder.Subtotal-=r;o.getCart().order.pricedOrder.Tax-=s;o.getCart().order.pricedOrder.Total=o.getCart().order.pricedOrder.Subtotal+o.getCart().order.pricedOrder.Tax}},10))}}),h}angular.module("main").factory("OrderItemExt",["$rootScope","$timeout","common","events","OrderItem","includedGroupValidator","orderPricingService","cartService",n])}(),function(){"use strict";function n(n){function t(){this.ExistingCreditCard={IsSelected:!1,PaymentMethodId:null};this.NewCreditCard={CreditCard:{CardType:"",CardNumber:"",ExpirationMonth:"",ExpirationYear:"",CardVerificationValue:""},IsSaved:!1,IsSelected:!1};this.CardHolder={FirstName:"",LastName:"",PostalCode:"",Address:new n};this.LoyaltyPayment=null;this.OfferPayment=null;this.MealPlanPayment=null;this.GiftCardPayment=null}return t}angular.module("main").factory("Payment",["Address",n])}(),function(){"use strict";function n(){function n(n){_.extend(this,n);this.Email=this.Email.replace(/temp\d+@togoorder.com/g,"")}return n}angular.module("main").factory("User",[n])}(),function(){"use strict";angular.module("common").directive("flickityCarousel",["$timeout",function(n){return{scope:{flickityCarousel:"<",selectedIndex:"=",loaded:"&"},restrict:"A",transclude:!0,template:"",link:function(t,i){function r(n,i){var u=t._flickity,f,r;!u||n===undefined||n<0||(f=u.flickity("getCellElements"),r=$(f[n]),r.is(".is-unique-selected")||r.is(".is-nav-selected")||(u.flickity("select",n,undefined,i),$(f).removeClass("is-unique-selected"),r.addClass("is-unique-selected")))}function e(){t._flickity=i.flickity(u);t.loaded&&t.loaded();t._flickity.on("staticClick.flickity",function(n,t,i,u){r(u)});r(t.selectedIndex,!0)}function f(t){let r=i.find(u.cellSelector),o=(r[r.length-1]||{}).clientWidth;var s=o>0;!s&&t<2e4?n(function(){f(t+12)},12):e()}let u=t.flickityCarousel;t.$watch("selectedIndex",function(t){n(function(){r(t)})});n(function(){f(0)},0)}}}])}(),function(){"use strict";var n=angular.module("common");n.directive("input",["$timeout",function(n){return{restrict:"E",link:function(t,i){n(function(){i.placeholder()},0,!1)}}}]);n.directive("select",["$timeout",function(n){return{restrict:"E",link:function(t,i){n(function(){i.find("option[value='?']").text(i.data("placeholder")||"").addClass("non-option").prop("hidden",!0).prop("disabled",!0)},0,!1)}}}]);n.directive("focusClick",["$timeout",function(n){return{restrict:"A",link:function(t,i){var r=$(i),u=!1,f=function(){u=!0};r.bind("focus",f);r.click(function(){return r.unbind("focus",f),u||n(function(){r.focus()},0,!1),!1})}}}]);n.directive("focusOn",["$timeout",function(n){return function(t,i,r){t.$on(r.focusOn,function(){i.is(":focus")||n(function(){i[0].focus();i[0].select()},0,!1)})}}]);n.directive("keyboardActivate",[function(){return function(n,t){var i=$(t);i.bind("keypress",function(n){(n.keyCode===13||n.keyCode===32)&&i.click()})}}])}(),function(){"use strict";var n=angular.module("common"),i="^("+"(999)999-9999|(999) 999-9999|999-999-9999|999.999.9999|9999999999".replace(/([\(\)])/g,"\\$1").replace(/9/g,"\\d")+")$",r=new RegExp(i),t;n.directive("restrictValidate",["$parse",function(){return{restrict:"A",require:"ngModel",link:function(n,t,i,u){n.$watch(i.ngModel,function(n){var t,f;if(!n){u.$setValidity("format",!0);return}n=n+"";t=i.restrictValidate==="phone"?r:new RegExp(i.restrictValidate,"g");f=t.test(n);u.$setValidity("format",f)})}}}]);t=new RegExp("[^0-9\\.\\-\\(\\) ]|[ ]{2,}","g");n.directive("restrict",["$parse",function(n){return{restrict:"A",require:"ngModel",link:function(i,r,u){i.$watch(u.ngModel,function(r){var f,e;r&&(r=r+"",f=u.restrict==="phone"?t:new RegExp(u.restrict,"g"),e=r.toLowerCase().replace(f,""),n(u.ngModel).assign(i,e))})}}}]);n.directive("allowPattern",["$parse",function(n){return{restrict:"A",require:"ngModel",link:function(t,i,r){t.$watch(r.ngModel,function(i){if(i){i=i+"";var f=new RegExp(r.allowPattern,"g"),u=f.exec(i),e=u&&u.length&&u[0]||"";n(r.ngModel).assign(t,e)}})}}}])}(),function(){"use strict";angular.module("common").directive("passwordVerify",function(){return{require:"ngModel",scope:{passwordVerify:"="},link:function(n,t,i,r){function u(t){var i=n.passwordVerify||"",u=i===t;return r.$setValidity("passwordVerify",u),t}r.$parsers.unshift(u);n.$watch(function(){return n.passwordVerify},function(){u(r.$viewValue)})}}})}(),function(){"use strict";var n=angular.module("common");n.directive("qrcode",["$timeout",function(n){return{restrict:"A",link:function(t,i,r){n(function(){var n=$(i);new QRCode(n.attr("id"),{text:r.qrcode,width:100,height:100,colorDark:"#000000",colorLight:"#ffffff",correctLevel:QRCode.CorrectLevel.H})})}}}])}(),function(){"use strict";angular.module("common").directive("sAccordion",function(){return{restrict:"A",link:function(n,t,i){t.accordion(n.$eval(i.sAccordion))}}})}(),function(){"use strict";function n(n,t){var i=this;i.isFromSignup=t;i.close=function(){n.close(!1)};i.ok=function(){n.close(!0)}}angular.module("common").controller("enrollAfterSignupModal",["$uibModalInstance","isFromSignup",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h){function l(){c.locationId?c.locationWebsite?r.location.replace(c.locationWebsite):t.go("locationHome",{},{location:"replace"}):t.go("home",{},{location:"replace"})}var c=togoorder||{},a=togoorder.userData.username;o.removeAuthentication();s.destroy();h.logout();u(function(){var n=togoorder.callInjectedStrategy("logout",a);if(n){n.result&&i.when(n.result).then(function(){f.log("logout handled")},function(){f.log("logout not handled");l()});return}f.log("logout...");l()},4)}angular.module("main").controller("logout",["$rootScope","$state","$q","$window","$timeout","common","events","userService","cartService","crmService",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e){function s(){o.resetPasswordViewModel.errors=[];o.resetPasswordViewModel.isValidationVisible=!1}function c(n,t){if(s(),!n){o.resetPasswordViewModel.isValidationVisible=!0;f.warning("Please correct any errors before continuing.");return}e.spinnerShow();o.resetPasswordViewModel.emailAddress=h.userName;r.resetPassword(o.resetPasswordViewModel).then(function(n){s();var i="Be on the lookout for an email with a link to reset your password.";n&&n.data&&n.data.Message&&(i=n.data.Message);f.dialog("Success!",i);t()},l)["finally"](function(){e.spinnerHide()})}function l(n){n&&o.resetPasswordViewModel.errors.indexOf(n)===-1&&o.resetPasswordViewModel.errors.push(n)}var o=this,h=u.loginViewModel;o.initialize=s;o.resetPassword=c;o.resetPasswordViewModel={errors:[],isValidationVisible:!1}}angular.module("main").service("resetPasswordService",["$http","$q","api","userService","securityFormService","notify","spinner",n])}(),function(){"use strict";function n(n){var t=this;t.close=n.close}angular.module("common").controller("rofoTipModal",["$uibModalInstance",n])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h){function l(){o.activateController([],n);h.isAuthenticated()?i.go(c||"locationHome",{},{location:"replace"}):u.location.replace("https://"+u.location.host+"/Saml/?id="+togoorder.merchantId+"&locationId="+togoorder.locationId+"&returnUrlHash="+c)}var c=r.returnUrlHash;l()}var n="samlLogin";angular.module("main").controller(n,["$rootScope","$state","$stateParams","$window","$location","$timeout","common","events","userService",t])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b){function it(){try{d=h.getNextState()}catch(r){d=null}if(d!==null){var n=d.name+"",t=d.error+"",i=d.params||{};h.clearNextState();d={name:n,error:t,params:i}}k.goSignUp&&tt()}function rt(n){v.resetPassword(n,function(){g()})}function ut(n){l.signUp(n,function(){g()})}function ft(n){y.signIn(n,et)}function nt(){l.initialize();y.initialize();i.dismiss();i=null}function et(){i.close(h.getUserData());i=null;k.signUpViewModel.enrollAfterSignup?t.go("achEnrollment"):d&&d.name?t.go(d.name,d.params):t.reload()}function ot(){r.open({templateUrl:"app/security/rofoTipModal.html",controller:"rofoTipModal as vm",size:"md"})}function st(){h.setUserAsGuest().then(function(){o.spinnerHide();i.close({});i=null;d&&d.name&&t.go(d.name,d.params)})}function ht(){if(togoorder.callInjectedStrategy("forgotPassword")){o.spinnerShow();return}k.isLogin=!1;k.isSignup=!1;k.isResetPassword=!1;$(".security-dialog .accordion").accordion("open",2)}function tt(){k.isLogin=!1;k.isSignup=!0;k.isResetPassword=!1;k.signUpViewModel.signUpWithLoyalty=togoorder.merchantLocation.MerchantSignUpWithLoyalty;k.signUpViewModel.loyaltyPrefix=togoorder.merchantLocation.LoyaltyProfile!=null?togoorder.merchantLocation.LoyaltyProfile.AccountPrefix:"";k.signUpViewModel.loyaltyLength=togoorder.merchantLocation.LoyaltyProfile!=null?togoorder.merchantLocation.LoyaltyProfile.AccountLength:0;$(".security-dialog .accordion").accordion("open",1)}function g(){k.isLogin=!0;k.isSignup=!1;k.isResetPassword=!1;y.initialize();$(".security-dialog .accordion").accordion("open",0)}function ct(){k.signUpViewModel.physicalCard=!k.signUpViewModel.physicalCard;k.signUpViewModel.physicalCard?r.open({templateUrl:"app/security/enrollAfterSignupModal.html",controller:"enrollAfterSignupModal as vm",size:"md",resolve:{isFromSignup:!0}}).result.then(function(n){k.signUpViewModel.enrollAfterSignup=n}):($("#cardNumber").val(""),$("#confirmCardNumber").val(""),k.signUpViewModel.enrollAfterSignup=!1)}function lt(){k.signUpViewModel.enrollAfterSignup=!k.signUpViewModel.enrollAfterSignup}var k=this,d=null;k.signInViewModel=y.signInViewModel;k.signUpViewModel=l.signUpViewModel;k.loginViewModel=a.loginViewModel;k.resetPasswordViewModel=v.resetPasswordViewModel;k.login=ft;k.signUp=ut;k.resetPassword=rt;k.cancel=nt;k.showSignUp=tt;k.showResetPassword=ht;k.showSignIn=g;k.isLogin=w!=="signUp";k.isSignup=!k.isLogin;k.isResetPassword=!1;k.allowGuestCheckout=p;k.continueAsGuest=st;k.togglePhysical=ct;k.goSignUp=b;k.toggleEnrollNext=lt;k.showRofoTip=ot;k.mandatoryText={name:"required input",url:"shared/mandatoryMsg.html"};k.validEmailPattern=/^(([^<>()\[\]\\.,;:\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,}))$/;it();n.$on("$stateChangeStart",function(){i&&nt()})}angular.module("main").controller("securityDialog",["$rootScope","$state","$uibModalInstance","$uibModal","$window","common","events","spinner","notify","userService","linkService","signupService","securityFormService","resetPasswordService","signinService","allowGuestCheckout","mode","goSignUp",n])}(),function(){"use strict";function n(){var n=this,t=togoorder&&togoorder.merchantLocation&&togoorder.merchantLocation.LoyaltyProfile&&togoorder.merchantLocation.LoyaltyProfile.LoyaltyProviderType===11;n.loginViewModel={userName:"",password:"",passwordMinLength:7,isOptInRequired:t}}angular.module("main").service("securityFormService",["$http","$q","api","userService","notify","spinner",n])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s){function h(){e.activateController([],n);s.login(function(){i.go(r.returnStateName||"locationHome",{},{location:"replace"})})}h()}var n="showLogin";angular.module("main").controller(n,["$rootScope","$state","$stateParams","$location","$timeout","common","events","userService",t])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o){function h(n,t){if(s.initialize(),!n){s.signInViewModel.isValidationVisible=!0;e.warning("Please correct any errors marked with a star before signing in.");return}o.spinnerShow();u.authenticate(s.loginViewModel.userName,s.loginViewModel.password,s.signInViewModel.isPersisted).then(t,c)}function c(n){n&&s.signInViewModel.errors.indexOf(n)===-1&&(s.signInViewModel.errors.push(n),o.spinnerHide("signIn"))}function l(){s.signInViewModel.errors=[];s.signInViewModel.isValidationVisible=!1}var s=this;s.loginViewModel=f.loginViewModel;s.signInViewModel={isPersisted:!1,errors:[],isValidationVisible:!1};this.signIn=h;this.initialize=l}angular.module("main").service("signinService",["$http","$q","$state","api","userService","securityFormService","notify","spinner",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s){function l(){this.lastName="";this.firstName="";this.confirmPassword="";this.confirmEmailAddress="";this.agreedToTerms=!1;this.errors=[];this.isValidationVisible=!1;this.applicationId=togoorder.applicationId;this.opened=!1;this.dateOptions={initDate:new Date("1980/01/01"),formatYear:"yyyy",startingDay:1,altInputFormats:["M!/d!/yyyy","M!-d!-yyyy","M!.d!.yyyy","M!d!yyyy","MM!/dd!/yyyy","MM!-dd!-yyyy","MM!.dd!.yyyy","MM!dd!yyyy","MM/dd/yyyy","M!/d!/yy","M!-d!-yy","M!.d!.yy","M!d!yy","MM!/dd!/yy","MM!-dd!-yy","MM!.dd!.yy","MM!dd!yy","MM/dd/yy"]};this.open=v;this.showTerms=a;this.phone="";this.zipCode="";this.cardNumber="";this.confirmCardNumber="";this.birthdate=undefined;this.physicalCard=!1;this.enrollAfterSignup=null;this.signUpWithLoyalty=togoorder.merchantLocation.MerchantSignUpWithLoyalty;this.loyaltyProviderType=togoorder.merchantLocation.LoyaltyProfile&&togoorder.merchantLocation.LoyaltyProfile.LoyaltyProviderType;this.loyaltyPrefix=togoorder.merchantLocation.LoyaltyProfile!=null?togoorder.merchantLocation.LoyaltyProfile.AccountPrefix:"";this.loyaltyLength=togoorder.merchantLocation.LoyaltyProfile!=null?togoorder.merchantLocation.LoyaltyProfile.AccountLength:0;this.brandName=togoorder.merchantName;this.emailOptIn=!1;this.optInText=togoorder.merchantLocation.CustomOptIn||`Love ${this.brandName}? Sign up to receive the latest news.`;this.isPhoneRequired=this.signUpWithLoyalty||this.loyaltyProviderType==6||this.loyaltyProviderType==7||this.loyaltyProviderType==8||this.loyaltyProviderType==10||togoorder.authStrategy&&togoorder.authStrategy.isPhoneRequired;this.isZipRequired=this.signUpWithLoyalty||togoorder.authStrategy&&togoorder.authStrategy.isZipRequired}function a(){return f.openLinkInNewWindow("Home/TermsOfService?merchantId="+togoorder.merchantId,"tos"),!1}function v(n){h.signUpViewModel.opened?h.signUpViewModel.opened=!1:(n.preventDefault(),n.stopPropagation(),h.signUpViewModel.opened=!0)}function c(){h.signUpViewModel.errors=[];h.signUpViewModel.isValidationVisible=!1}function y(n,t){if(c(),h.signUpViewModel.cardNumber&&h.signUpViewModel.cardNumber.length>0&&h.signUpViewModel.cardNumber.length!==h.signUpViewModel.loyaltyLength-h.signUpViewModel.loyaltyPrefix.length){h.signUpViewModel.isValidationVisible=!0;o.warning("Please check your card number.");return}if(h.signUpViewModel.cardNumber=h.signUpViewModel.cardNumber||"",h.signUpViewModel.confirmCardNumber=h.signUpViewModel.confirmCardNumber||"",h.signUpViewModel.cardNumber!==h.signUpViewModel.confirmCardNumber){h.signUpViewModel.isValidationVisible=!0;o.warning("The card you entered does not match!");return}if(u.loginViewModel.userName!==h.signUpViewModel.confirmEmailAddress){h.signUpViewModel.isValidationVisible=!0;o.warning("The email you entered does not match!");return}if(!n){h.signUpViewModel.isValidationVisible=!0;o.warning("Please correct any errors marked with a star before signing up.");return}s.spinnerShow();h.signUpViewModel.emailAddress=u.loginViewModel.userName;h.signUpViewModel.password=u.loginViewModel.password;h.signUpViewModel.locationId=togoorder.locationId;h.signUpViewModel.merchantId=togoorder.merchantId;h.signUpViewModel.cardNumber=h.signUpViewModel.cardNumber===""?null:""+h.signUpViewModel.loyaltyPrefix+h.signUpViewModel.cardNumber;e.signUp(h.signUpViewModel).then(function(){p();t()},w)}function p(){s.spinnerHide("onSuccessfulSignUp");c()}function w(n){s.spinnerHide("onFailedSignUp");n&&h.signUpViewModel.errors.indexOf(n)===-1&&h.signUpViewModel.errors.push(n)}var h=this;h.signUp=y;h.initialize=c;Object.defineProperty(l.prototype,"birthdateVm",{get:function(){return this.birthdate},set:function(n){for(var t=n&&moment(n);t&&t.isAfter(moment().add(-10,"year"));)t=t.add(-100,"year");this.birthdate=t&&t.toDate()}});h.signUpViewModel=new l}angular.module("main").service("signupService",["$http","$q","$timeout","api","securityFormService","linkService","userService","notify","spinner",n])}(),function(){"use strict";function t(t,i,r,u,f,e){function s(){e.activateController([],n).then(function(){})}function h(n){u.signUp(n,function(){togoorder.callInjectedStrategy("signupSuccessful")})}var c=togoorder||{},o=this;o.signUp=h;o.signUpViewModel=u.signUpViewModel;o.loginViewModel=f.loginViewModel;s()}var n="signupStandAlone";angular.module("main").controller(n,["$rootScope","$state","$window","signupService","securityFormService","common","events","userService","cartService",t])}(),function(){"use strict";function n(n){function i(){n.close()}function r(){n.dismiss()}var t=this;t.close=i;t.dismiss=r}angular.module("common").controller("userFeatureAlert",["$uibModalInstance",n])}(),function(){"use strict";function n(n){function t(n){return togoorder.apiUrl+n}return{get:function(i,r,u){return n.get(t(i),r,u)},post:function(i,r,u){return n.post(t(i),r,u)},put:function(i,r,u){return n.put(t(i),r,u)},"delete":function(i,r,u){return n.delete(t(i),r,u)},http:function(i){return i.url=t(i.url),n(i)},getPendingRequestCount:function(){return n.pendingRequests.length}}}angular.module("main").factory("api",["$http","$q","$log",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b){function g(){this.order={};this.minimumOrder=0;this.orderTypeRule={}}function ut(n){return _.where(n.Items,{shouldShow:!0})}function yt(){return k}function pt(n){return _.findWhere(k.order.Items,{ItemId:n})}function wt(n){b.addItemToCart(n);k.order.addItem(n)}function bt(n){var t=it(),i;t.push(n);i=angular.toJson(t);c.set("itemsToAdd",i)}function kt(n){var t=it(),i;t=_.reject(t,function(t){return t.id===n.id});i=angular.toJson(t);c.set("itemsToAdd",i)}function it(){var n=c.get("itemsToAdd");return angular.fromJson(n||"[]")}function dt(n){this.name="CartOrderItemInvalid";this.message=n}function ft(n,t,i){return v.getOrderTypeRule(n,t,i)}function et(n,t){return _.some(n.MenuIds,function(n){return n==t})}function gt(){d.resolve(1)}function ot(t,r,u,f,o){var s=ft(r,u,f),h,c;return s?(h=et(s,t),!h)?(e.error("This menu is not valid with "+s.Description+" orders."),e.dialog("Not sure what happened","...but the selected menu is not valid with "+s.Description+" orders."),rt(),d.reject(),d.promise):(c=k&&!k.isEmpty&&k.order.OrderType===r&&k.order.FulfillmentType===u&&k.order.MenuId===t?i.when(k):fi(t,s).then(function(t){if(t.order.LocationId!=f.Id){n.warn("merchant location IDs do not match.");throw new Error("Something went wrong.");}return t.order.Items=t.order.Items.filter(n=>!n._isRequiredItem),nt(t,s,f,o)},function(){var n={order:new w(f.Id,t)};return nt(n,s,f,o)}),c.then(function(){return k.order.Payment=null,k.orderTypeRule=s,d.resolve(1),k})):(e.error("The Menu is no longer available"),e.dialog(":(","So Sorry. This menu is no longer available."),rt(),d.reject(),d.promise)}function ni(n){return k.order.setLocation(n),i.when(1)}function ti(n){return k.minimumOrder=n.MinimumOrder,k.maximumOrder=n.MaximumOrder,k.order.setOrderTypeRule(n),n.DeliveryService?(k.order.setDeliveryService(n),i.when(1)):y.getCurrentDeliveryZoneInfo(n).then(function(t){return k.order.setDeliveryZone(t.zone,t.distance,n),t})}function ii(){return ct().then(function(){var t=_.find(k.order.Items,function(t){var i=t.errors;return i&&n.debug(i),!!i});if(t){r(function(){f.broadcast(o.cartItemSelected,t)},300);throw new dt("One of the items in your cart is invalid.");}})}function nt(n,t,r,u){return tt(),k=angular.extend(k,n),k.isEmpty=!1,k.day=u||k.day,i.all(ti(t),ni(r)).then(function(){return at(angular.toJson(k)),k})}function ri(n,t){return ot(n.MenuId,n.OrderType,n.FulfillmentType,t).then(function(){var i=k.orderTypeRule;return s.hydrateOrder(n).then(function(n){let r={order:n,minimumOrder:i.MinimumOrder,maximumOrder:i.MaximumOrder};return nt(r,i,t).then(ht)})})}function rt(){c.clear();t.sessionStorage.clear();tt()}function tt(){k=new g;k.isEmpty=!0;var n=d;d=i.defer();d.promise.then(function(t){n.resolve(t+1)})}function ui(){return d.promise}function st(n){var t=angular.fromJson(n);return s.hydrateOrder(t.order).then(function(n){return t.order=n,t})}function fi(n){var t=c.get("cart-"+n);return t?st(t):i.reject("No cached cart found")}function ht(){var t=k.order,n;return t&&(n=angular.toJson(k),ei(t,n),at(n)),i.when(!0)}function ct(){if(!k||k.isEmpty){var n=c.get("currentCart");return n?st(n).then(function(n){var t=n.order;return!t.OrderType||!t.FulfillmentType?i.reject():t.LocationId!=togoorder.locationId?i.reject():l.getById(togoorder.locationId).then(function(i){var r=ft(t.OrderType,t.FulfillmentType,i);return nt(n,r,i)})}):i.reject("No current cart found")}return i.when(k)}function lt(n,t){c.set("cart-"+n.MenuId,t)}function ei(i,r){try{lt(i,r)}catch(u){t.sessionStorage.clear();try{lt(i,r)}catch(u){n.error("Error writing to sessionStorage",u)}}}function at(n){try{c.set("currentCart",n)}catch(i){t.sessionStorage.clear();c.set("currentCart",n)}}var vt={initializeCart:ot,saveCart:ht,clear:tt,waitForInitialization:ui,checkForValidations:ii,setOrder:ri,destroy:rt,getCart:yt,loadCurrent:ct,noCart:gt,addItemToNextCart:bt,getStoredItemsToAdd:it,removeStoredItemsToAdd:kt,addOrderItem:wt,findItemInCart:pt,getItems:ut},k=null,d=i.defer();return tt(),g.prototype.isValid=function(){return this.isAboveMinimumOrder()&&this.isBelowMaximumOrder()&&this.hasOrderItems},g.prototype.getMinimumOrderShortage=function(){return this.minimumOrder-this.order.Subtotal},g.prototype.isAboveMinimumOrder=function(){return this.getMinimumOrderShortage()<=0},g.prototype.getMaximumOrderOverage=function(){return this.maximumOrder===0?0:this.order.Subtotal-this.maximumOrder},g.prototype.isBelowMaximumOrder=function(){return this.getMaximumOrderOverage()<=0},g.prototype.hasOrderItems=function(){var n=this.order&&ut(this.order);return!!(n&&n.length)},vt}angular.module("main").factory("cartService",["$log","$window","$q","$timeout","$state","common","notify","events","orderService","orderPricingService","storageService","merchantLocationService","orderTypeWorkflowService","orderTypeRuleService","deliveryService","menuService","Order","crmService",n])}(),function(){"use strict";function n(){function r(t){if(console.log("crm service login"),n){const i={userIdentities:{email:t.username}};n.Identity.login(i)}}function u(){n&&n.Identity.logout({})}function f(t){if(n){const i={userIdentities:{email:t}};n.Identity.modify(i)}}function e(i){if(n){console.log(i);const r=t(i);console.log(r);r.forEach(t=>{n.eCommerce.logProductAction(n.ProductActionType.AddToCart,t)})}}function o(i){if(n){let r=[];i.Items.forEach(n=>{r=r.concat(t(n))});console.log(r);n.eCommerce.logProductAction(n.ProductActionType.Purchase,r)}}function s(t){n&&n.logEvent("Promo Applied",n.EventType.Transaction,{promoCode:t})}function t(i){let r=[];const u=n.eCommerce.createProduct(i.ItemName,i.ItemId.toString(),i.ItemPrice,i.Quantity);return r.push(u),i.Items&&i.Items.forEach(n=>{r=r.concat(t(n))}),r}function h(t){n&&t&&t.forEach(t=>{n.logEvent("Used Rewards",n.EventType.Transaction,{rewardId:t})})}function c(t){n&&n.logEvent("Create Account",window.mParticle.EventType.Other,{category:"Create Account",email:t})}var i={login:r,changeEmail:f,logout:u,addItemToCart:e,purchase:o,applyPromo:s,usedReward:h,signUp:c},n=window.mParticle;return i}angular.module("main").factory("crmService",["$log","$window","$q","$timeout","$state","common","notify","events",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s){function l(n,t){return o.getById(togoorder.locationId).then(function(i){var r=_(i.OrderTypeViewModels).find(function(i){return i.OrderType==n&&i.FulfillmentType==t});return h(r.DeliveryZones)})}function h(n){return n=_.sortBy(n,"FlatFee"),n=_.sortBy(n,"PerMileFee"),_.sortBy(n,"PercentageFee")}function w(n){return l(n.OrderType,n.FulfillmentType).then(function(n){return!n||!n.length?!1:v(n)}).then(function(n){return n.PerMileFee?a().then(function(t){return{zone:n,distance:t}}):r.when({zone:n,distance:0})})}function a(){return o.getById(togoorder.locationId).then(function(n){return e.getDeliveryAddress().then(function(n){return y(n)}).then(function(t){var i={lat:function(){return n.Latitude},lng:function(){return n.Longitude}};return u.getDistanceInMiles(n.Latitude,n.Longitude,t.lat(),t.lng())})})}function v(n){return e.getDeliveryAddress().then(function(t){var i=_.map(n,function(n){return c(t,n.Coordinates).then(function(){return n},function(){return null})});return r.all(i).then(function(n){var t=_.filter(n,function(n){return n});return t=h(t),t&&t.length&&t[0]})})}function b(n,t){var i=_.map(t,function(t){return c(n,t.Coordinates)});return u.any(i)}function y(n){if(n.Lat)return r.when(new google.maps.LatLng(n.Lat,n.Lng));var t=r.defer(),i=mapboxSdk({accessToken:togoorder.MapBoxApiKey});return i.geocoding.forwardGeocode({query:n.getGoogleAddress(),limit:1,autocomplete:!1,types:["address"]}).send().then(n=>{const i=n.body.features[0].geometry.coordinates;t.resolve(new google.maps.LatLng(i[1],i[0]))},n=>{console.error(`Error during geocode request: ${n.message}`),t.reject(n.statusCode)}),t.promise}function c(t,i){var u=_.map(i,function(n){return new google.maps.LatLng(n.Lat,n.Lng)}),f=new google.maps.Polygon({paths:u});return y(t).then(function(u){n.debug("address:",t);n.debug("coordinates.lat:",u.lat());n.debug("coordinates.lng:",u.lng());n.debug("deliveryAreaCoordinates:",i);var e=google.maps.geometry.poly.containsLocation(u,f);return e?r.when(!0):r.reject()})}function p(n,t,i,u,f){switch(n.DeliveryService){case 1:return s.getEstimate(t,f,u,i,n).then(function(n){var t={deliveryTimeUtc:n.DeliveryTimeUtc,pickupTimeUtc:n.PickupTimeUtc,fee:n.fee};return r.when(t)},function(){return r.reject()});default:return r.reject("unsupported delivery service")}}function k(n,t,i){return p(n,t,i,moment().utc()).then(function(n){return n?r.when(!0):r.reject()},function(){return r.reject()})}return{cacheTableNumber:e.cacheTableNumber,getTableNumber:e.getTableNumber,cacheDeliveryAddress:e.cacheDeliveryAddress,getDeliveryAddress:e.getDeliveryAddress,checkAddressIsInDeliveryArea:c,checkAddressIsInAnyDeliveryArea:b,getCheapestZoneForAddress:v,getDeliveryZones:l,sortDeliveryZones:h,getDeliveryDistance:a,getCurrentDeliveryZoneInfo:w,checkAddressIsInDeliveryServiceArea:k,getDeliveryServiceEstimate:p}}angular.module("main").factory("deliveryService",["$log","$http","$window","$q","common","storageService","deliveryCacheService","merchantLocationService","doorDashService","timeService",n])}(),function(){"use strict";function n(n,t,i){function r(n){return t.error(`door dash api error - status: ${n.status} details: ${angular.toJson(n.data)}`),i.reject(n.data)}function u(n){return t.debug("door dash api success"),i.when(n.data)}function f(t,f,e,o,s){if(f&&e)return i.reject("can only specify pickup time or delivery time, not both");var h={address:{city:t.City,state:t.State,addressLine1:t.AddressLine1,addressLine2:t.AddressLine2,zipcode:t.Zipcode},orderTotal:o,pickupTimeUtc:f,deliveryTimeUtc:e,locationId:togoorder.locationId,orderType:s.OrderType,orderFulfillmentType:s.FulfillmentType};return n.post("api/OrderService/DeliveryServiceEstimate",h).then(u,r)}return{getEstimate:f}}angular.module("main").factory("doorDashService",["api","$log","$q",n])}(),function(){"use strict";function n(n,t,i){function r(){var n="api/Enum/CardType";return i.get(n,{cache:!0}).then(function(n){return n.data})}return{getCreditCardTypes:r}}angular.module("main").factory("enumService",["$http","$q","api",n])}(),function(){"use strict";function n(n,t,i){function r(n){return i.get("api/Survey/"+n).then(function(n){return n.data})}function u(n){return i.post("api/Survey/",n).then(function(n){return n.data})}return{getSurvey:r,saveFeedback:u}}angular.module("main").factory("feedbackService",["$http","$q","api",n])}(),function(){"use strict";function n(n,t,i){function u(n){return n.LocationId=r,i.post("services/GiftCard/AddCard",n).then(function(n){return n.data})}function f(n){return n.LocationId=r,i.post("services/GiftCard/UpdatePin",n).then(function(n){return n.data})}function e(n){return n.LocationId=r,i.post("services/GiftCard/Balance",n).then(function(n){return n.data})}function o(n){return n.LocationId=r,i.post("services/GiftCard/Redeem",n).then(function(n){return n.data})}function s(n){return n.LocationId=r,i.post("services/GiftCard/Void",n).then(function(n){return n.data})}var r=togoorder.locationId;return{addCard:u,updatePin:f,getBalance:e,redeem:o,voidTransaction:s}}angular.module("main").factory("giftCardService",["$http","$q","api",n])}(),function(){"use strict";function n(n,t,i,r){function o(n,t){var i="api/Location/"+n+"/OrderPickupTimeExclusions/"+t;return r.get(i,{cache:!1}).then(function(n){return n.data})}function s(n,t){var i="api/Location/"+n+"/Menu/"+t+"/HourSpans";return r.get(i,{cache:!0}).then(function(n){return n.data})}function h(n,t,i){var r=function(){return o(n,i).then(function(n){return _.map(n,function(n){return moment.utc(n.PickupTime).utcOffset(t)})})};return r()}function c(n,i,r,u,f,e,o){var c=function(){return h(n,u,r)},l=s(n,r),v=c();return t.all([l,v]).then(function(t){return new a(n,i,r,t[0],t[1],c,u,f,e,o)})}function l(n){this.name="TimeSlotNotAvailable";this.message=n}function f(n,t){return n=n.utcOffset(t),n.minutes(-t),n}function a(n,t,i,r,e,o,s,h,c,a){function p(n){return _.some(tt,function(t){return n.isSame(t,"day")})}function rt(n){return k&&n.isBefore(k)?!1:y&&(n.isAfter(y)||n.isSame(y))?!1:!0}function g(n){return d.find(t=>n.isSame(t.Date,"day"))}function w(n,t){var i=null;if(t==="day"&&!_.contains(nt,n.day())&&(i=p(n),!i)||!rt(n))return!1;if(i==null&&(i=p(n)),i){let t=g(n);i=t.HourSpans.length==0}return!i}var v=null,h=h,c=c,b=r.HourSpanDays,k=r.MenuStartDate&&f(moment.utc(r.MenuStartDate),s),y=r.MenuEndDate&&f(moment.utc(r.MenuEndDate),s),nt=r.AvailableWeekdays,d=r.Holidays,tt=_.map(r.Holidays,function(n){return f(moment.utc(n.Date),s)}),it;_.each(d,function(n){n.Date=f(moment.utc(n.Date),s)});it=this;this.validatePickupTime=function(n){return o().then(function(t){e=t;var i=_.some(e,function(t){return t.isSame(n)});if(i)throw new l;return!0})};this.isPickupDateAvailable=function(n,t,i){var r=t.getTimeChoices(i),u=_.find(r,function(t){return t.value.isSame(n)});return!!u};this.getAvailablePickupDateTimesForMenu=_.memoize(function(n){v=n||v;var r=v.clone().add(1,"minutes"),i=_.map(b,function(n){var f=_.sortBy(n.HourSpans,"StartTimeOfDay"),i=moment.utc(n.Date).utcOffset(s);return h&&i.isSame(v,"days")?new u(i.clone(),f,t,e,r,h,c,a):new u(i.clone(),f,t,e,r,h,null,a)});i=_.filter(i,function(n){return w(n.date,"day")});i=_.sortBy(i,function(n){return n.date.valueOf()});let f=Math.min(i.length,6);return i.slice(0,f)});this.getPickupDateTimeForDate=function(n){var r=v.clone().add(1,"minutes"),i=n,f,o;if(!w(i,"day"))return new u(i.clone(),[],0,[],r,h);if(p(n)){let t=g(n);return new u(i.clone(),t.HourSpans,0,e,r,h)}return(f=_.findWhere(b,{StartDayOfWeek:i.day(),IsHoliday:!1}),!f)?new u(i.clone(),[],0,[],r,h):(o=_.sortBy(f.HourSpans,"StartTimeOfDay"),new u(i.clone(),o,t,e,r,h))};this.isDateSelectable=w;this.setNow=function(n){v=n}}function u(n,t,i,r,u,f,e,o){function p(t){var i=parseInt(t,10)/100,r=Math.floor(i),u=Math.round(i%1*100);return n.clone().hour(r).minute(u).second(0).millisecond(0)}function w(n){return n/6e8}function tt(){_.each(t,function(n){var i=p(n.StartTimeOfDay),r=w(n.DurationInTicks),t=i.clone().add(r,"minutes");(!c.closingTime||t.isAfter(c.closingTime))&&(c.closingTime=t)})}var c=this,l,s,k,y;if(this.date=n,this.description=t.length&&t[0].Description,this.siteAddress=t.length&&t[0].SiteAddress,this.timeChoices=null,this.genericOpenCloseTime=[],this.isDoorDashDelivery=f,this.deliveryServiceDeliveryTime=e,this.deliveryServiceTimeToDeliver=o,this.closingTime=null,tt(),this.getTimeChoices=function(n){var s,h;return u=n,s=[],_.each(t,function(n){var u=p(n.StartTimeOfDay),r=w(n.DurationInTicks),t,i;if(tt(u,r),t=[],r)for(t[0]=u,i=1;i<=r/5;i++)t[i]=t[i-1].clone().add(5,"minutes");Array.prototype.push.apply(s,_.map(t,function(t){return{value:t.clone(),display:t.format("h:mm A"),group:t.format("h A"),additionalWaitTimeInMinutes:n.AdditionalWaitTimeInMinutes}}))}),s=_.sortBy(s,function(n){return-n.additionalWaitTimeInMinutes}),s=_.sortBy(s,function(n){return n.value}),s=_.uniq(s,function(n){return n.display}),s=_.filter(s,function(n){var f=i+n.additionalWaitTimeInMinutes,e,t;return o!=null&&(f+=o),e=u.clone().add(f,"minutes"),t=n.value,t.isAfter(e)&&!_.some(r,function(n){return n.isSame(t)})}),s=_.filter(s,function(n){var u=i+n.additionalWaitTimeInMinutes,r,t;return o!=null&&(u+=o),r=!1,t=n.value,_.each(c.genericOpenCloseTime,function(n){var i=n.start.clone();f&&(i=n.start.clone().add(u,"minutes"));var e=n.close,o=t.isAfter(i,"minutes")||t.isSame(i,"minutes"),s=t.isBefore(e,"minutes")||t.isSame(e,"minutes"),h=o&&s||r;r=h}),r}),e!=null&&(h=moment.utc(e),s=_.filter(s,function(n){var t=n.value;return t.isAfter(h)})),s},this.retrieveTimeChoices=function(n){return u=n||u,(!c.timeChoices||n)&&(c.timeChoices=c.getTimeChoices(u)),c.timeChoices},this.getNextAvailableTime=function(n){u=n||u;var i=null;return _.each(t,function(n){var t=p(n.StartTimeOfDay),r=w(n.DurationInTicks),f=t.clone().add(r,"minutes");u.isBefore(f)&&(!i||t.isBefore(i))&&(i=t)}),i},t){l=[];_.each(t,function(n){var t=p(n.StartTimeOfDay),i=w(n.DurationInTicks);l.push({start:t,close:t.clone().add(i,"minutes")})});l=l.sort((n,t)=>n.start.isSame(t.start)?n.close.isBefore(t.close)?-1:1:n.start.isBefore(t.start)?-1:1);s=[];k=l.length;for(let n=0;n<k;n++){var a=l[n].start,h=l[n].close,v=null,d=null,g=n+1;g!=k&&(v=l[g].start,d=l[g].close);for(var it=s.some(n=>n.close.isAfter(a)),rt=s.some(n=>n.close.isAfter(h))||s.some(n=>n.close.isSame(h)),ut=s.some(n=>n.close.isBefore(h)),nt=-1,b=s.length-1;b>=0;b--)if(s[b].close.isBefore(h)){nt=b;break}if(it&&rt)continue;else if(it&&ut&&nt>-1){s[nt].close=h;continue}y=s.findIndex(n=>n.close.isSame(a));v==null?y==-1?s.push({start:a,close:h}):s[y].close=h:y!=-1?s[y].close=h:v.isAfter(h)?s.push({start:a,close:h}):v.isBefore(h)&&d.isBefore(h)?s.push({start:a,close:h}):(v.isBefore(h)||v.isSame(h))&&s.push({start:a,close:d})}c.genericOpenCloseTime=s}}var e={getInstance:c};return u.prototype.getDisplayDay=function(){var n=this.date.calendar();return this.description?n+" at "+this.description:n},e}angular.module("main").factory("hoursService",["$http","$q","$log","api",n])}(),function(){"use strict";function n(n,t){function r(n,r){if(!i(n)){var u=t.open("about:blank",r||"_blank","menubar=no,scrollbars=yes,toolbar=no,titlebar=no,height=500, width=750, status=no");u.opener=null;u.location=n}}function i(n){return togoorder.callInjectedStrategy("openLink",n)}var u=togoorder.locationId;return{openLinkInNewWindow:r,callOpenLink:i}}angular.module("main").factory("linkService",["$http","$window",n])}(),function(){"use strict";function n(n,t,i,r){function e(n){return i.post("api/Loyalty/",n).then(function(n){return n.data})}function o(n){return i.post("services/Loyalty/Update",n).then(function(n){return n.data})}function s(){return i.get("api/Loyalty/GetPointsBalance?locationId="+u+"&merchantId="+f).then(function(n){return n.data})}function h(n){return i.put("api/Loyalty/",n).then(function(n){return n.data})}function c(){return r.getById(u).then(function(n){if(!n.LoyaltyProfile)throw new Error("Loyalty is not supported for this Merchant");})}function l(n){return n.LocationId=u,i.post("api/Loyalty/GetOfferList",n).then(function(n){return n.data})}function a(n){return n.LocationId=u,i.post("api/Loyalty/GetOfferListEligibleForRedemption",n).then(function(n){return n.data})}function v(n){return n.LocationId=u,i.post("api/Loyalty/GetPunchCards",n).then(function(n){return n.data})}function y(n){return i.post("api/Loyalty/GetDishoutComPrefs",n).then(function(n){return n.data})}function p(n){return i.post("api/Loyalty/UpdateDishoutComPrefs",n).then(function(n){return n.data})}function w(n){return n.LocationId=u,i.post("api/Loyalty/OptIn",n).then(function(n){return n.data})}function b(n){return n.LocationId=u,i.post("api/Loyalty/OptOut",n).then(function(n){return n.data})}function k(){var n={merchantId:f,locationId:u};return i.post("api/Loyalty/WipeOffers",n).then(function(n){return n.data})}function d(n){return n.LocationId=u,n.MerchantId=f,i.post("api/Loyalty/ValidateOffers",n).then(function(n){return n.data})}var u=togoorder.locationId,f=togoorder.merchantId;return{assertMerchantHasLoyalty:c,createCard:h,updateCard:o,addCard:e,getOffers:l,getPointsBalance:s,getOffersEligibleForRedemption:a,optInToOffer:w,optOutOfOffer:b,getPunchCards:v,getDishoutComPrefs:y,updateDishoutComPrefs:p,wipeOffers:k,validateOffers:d}}angular.module("main").factory("loyaltyService",["$http","$q","api","merchantLocationService",n])}(),function(){"use strict";function n(n,t,i){function u(n){return n.LocationId=r,i.post("services/MealPlan/AddCard",n).then(function(n){return n.data})}function f(n){return n.LocationId=r,i.post("services/MealPlan/Balance",n).then(function(n){return n.data})}function e(n){return n.LocationId=r,i.post("services/MealPlan/Redeem",n).then(function(n){return n.data})}var r=togoorder.locationId;return{addCard:u,getBalance:f,redeem:e}}angular.module("main").factory("mealPlanService",["$http","$q","api",n])}(),function(){"use strict";function n(n,t,i,r,u){function s(n,t,i){var r="api/MenuItem/"+n+"?menuId="+t+"&locationId="+i;return u.get(r,{cache:!0}).then(function(n){return n.data})}function h(){var n=r.get("$http");_.each(f,function(t){n.remove(t)});f=[]}function c(n){var t="api/Menu/"+n;return u.get(t,{cache:!0}).then(function(n){return f.push(n.config.url),n.data})}function e(n){return _.reduceRight(n.MenuSections,function(n,t){return n.concat(t.MenuItems)},[])}function o(n,t){return _.each(n.IncludedGroups,function(n){t=t.concat(n.MenuItems);_.each(n.MenuItems,function(n){t=o(n,t)})}),t}function l(n){var t=[];return _.each(e(n),function(n){t.push(n);t=o(n,t)}),t}function a(n,t){return _.findWhere(e(n),{Id:t})}var f=[];return{getMenu:_.memoize(c),getTopLevelMenuItems:e,getAllMenuItems:l,getIncludedGroups:s,getItemById:a,clearMenuCache:h}}angular.module("main").factory("menuService",["$http","$log","$q","$cacheFactory","api","events",n])}(),function(){"use strict";function n(n,t,i,r){function o(n){return n.name==="menu.sections"||n.name==="days.menus.menu.sections"}function s(n){return n.name==="menu.sections.items"||n.name==="days.menus.menu.sections.items"}function h(n,t,r){return togoorder.merchantLocation.MenuWorkflow===1?(n.day=r.day,i.go("days.menus.menu.sections.items",n,t)):i.go("menu.sections.items",n,t)}function u(n,t){return togoorder.merchantLocation.MenuWorkflow===1?i.go("days.menus.menu.sections",n,t):i.go("menu.sections",n,t)}function c(n){i.is("menu.sections")||i.is("menu.sections.items")||i.is("days.menus.menu.sections")||i.is("days.menus.menu.sections.items")||(togoorder.merchantLocation.MenuWorkflow===1?i.go("days.menus.menu.sections",r,n):i.go("menu.sections",r,n))}function l(n){var t=n.order;u({merchantLocationId:e,menuId:t.MenuId,orderType:t.OrderType,fulfillmentType:t.FulfillmentType,day:n.day})}function a(){togoorder.merchantLocation.MenuWorkflow===1?i.go("days.menus.menu.itemDetail",r):i.go("menu.itemDetail",r)}function v(){return togoorder.merchantLocation.MenuSectionUiType===2?!1:togoorder.merchantLocation.MenuSectionUiType===3?!1:!i.is("menu.sections.items")&&!i.is("days.menus.menu.sections.items")}function f(){return togoorder.merchantLocation.MenuWorkflow===1?"days":"chooseMenu"}function y(n,t){i.go(f(),n,t)}function p(n){return _.some(n.MenuItems,function(n){return n.IncludedGroups&&n.IncludedGroups.length})}function w(n){if(!n.MenuItems)return undefined;const t={0:"app/menu/itemIncludedItems.expanded.html",1:"app/menu/itemIncludedItems.collapsed.html"};var i=!p(n);if(!i)return t[0];return t[togoorder.merchantLocation&&togoorder.merchantLocation.MenuItemUiType]||t[0]}var e=togoorder.locationId;return{goToFirstState:y,getFirstStateName:f,goToSections:u,initializeRouteState:c,mustNavigateToSection:v,showItemDetail:a,showSections:h,isSectionsState:o,isSectionItemsState:s,continueOrdering:l,getItemIncludedItemsTemplate:w}}angular.module("main").factory("menuWorkflowService",["$http","$q","$state","$stateParams","$timeout","$log","events","common","notify","merchantLocationService",n])}(),function(){"use strict";function n(n,t,i,r,u){function f(n){var r=togoorder||{},u;return!r.merchantLocation||r.merchantLocation.Id!==n?(i.warn("locationId "+n+" requested."),t.reject()):(u=t.defer(),u.resolve(r.merchantLocation),u.promise)}function a(){let n="Convenience Fee";return togoorder.merchantLocation.ConvenienceFeeLabel!=""&&togoorder.merchantLocation.ConvenienceFeeLabel!=null&&togoorder.merchantLocation.ConvenienceFeeLabel!="undefined"&&(n=togoorder.merchantLocation.ConvenienceFeeLabel),n}function v(){return f(togoorder.locationId).then(function(n){if(!n.IsActive)throw new Error("This Location Is Not Active");})}function y(){return f(togoorder.locationId).then(function(){return!1})}function p(){return f(togoorder.locationId).then(function(n){var i=!!(n.LoyaltyProfile||n.MealPlanProfile||n.GiftCardProfile);if(!i)return!1;var t=n.LoyaltyProfile&&n.LoyaltyProfile.LoyaltyProviderType,r=n.MealPlanProfile&&n.MealPlanProfile.MealPlanProviderType,u=n.GiftCardProfile&&n.GiftCardProfile.GiftCardProviderType;return r===l.Dishout||u===c.Dishout||t===e.Dishout||t===e.Square})}function w(){return f(togoorder.locationId).then(function(n){return!!(n.LoyaltyProfile||n.GiftCardProfile||n.MealPlanProfile)})}function b(){this.name="OrderingNotAllowed";this.message="So Sorry. We can't take your order right now."}function o(){return s(togoorder.locationId).then(function(n){var t=n.orderTypeViewModels.length;return!!t})}function k(){return o().then(function(n){if(!n)throw new b;})}function d(n){return f(n)}function s(n){return f(n).then(function(n){var t=u.getLocationInstance(),i=t.getOrderTypeViewModels(n);return{mobileMessage:n.MobileMessage,orderTypeViewModels:i}})}function h(n){return r.getHoursOfOperationDisplay(n)}function g(n,t){return f(n).then(function(n){return _.filter(n.OrderTypeViewModels,function(n){return!!(n.MenuIds&&n.MenuIds.length)&&n.OrderType==t})})}function nt(n,t,i){return f(n).then(function(n){var r=_(n.OrderTypeViewModels).find(function(n){return n.OrderType==t&&n.FulfillmentType==i});return r.EarliestDayOrderable})}function tt(n,t,i){return f(n).then(function(n){var r=_(n.OrderTypeViewModels).find(function(n){return n.OrderType==t&&n.FulfillmentType==i});return{menuSelections:r&&_.map(r.MenuIds,function(t){var i=n.Menus[t];return i.HoursOfOperationDisplay=h(i.HoursOfOperation),i})}})}function it(n,t,i){return f(n).then(function(n){var r=n.AvailableDays;return _.map(r,function(r){var u=r.OrderTypeMenuIds[t],f=u&&u[i],e=_.map(f||[],function(t){return n.Menus[t]});return{weekDay:r.WeekDay,dayOfWeek:r.DayOfWeek,hoursOfOperationDisplay:h(r.HoursOfOperation),menus:e}})})}var c={Dishout:0,Focus:1},l={Dishout:0},e={Heartland:0,Synergy:1,Logix:2,Dishout:3,Togo:4,Square:6};return{getOrderTypes:s,getOrderTypeRules:g,getMenus:tt,getDaysWithMenus:it,getById:d,validateLocationIsActive:v,validateCanOrder:k,getCanOrder:o,getEarliestDayOrderable:nt,requiresBirthdate:y,requiresEmail:w,requiresCallbackNumber:p,getConvenienceFeeLabel:a}}angular.module("main").factory("merchantLocationService",["$http","$q","$log","hoursOfOperationService","orderTypeViewModelServiceFactory",n])}(),function(){"use strict";function n(n,t,i,r,u,f){function o(){return h().then(function(){var n=t.when();return _.each(e.Messages,function(t){t.HasBeenSeen||togoorder.callInjectedStrategy("showMerchantMessage",t)||(n=n.then(function(){return f.dialog({dialogTitle:"",dialogMessage:t.Message,closeButtonText:"Got It"}).then(function(){s(t.MessageId)})}))}),n})}function s(n){u.put("api/MerchantMessage/",{MessageId:n})}function h(){return u.get("api/MerchantMessage/",{cache:!1,params:{locationId:togoorder.locationId}}).then(function(n){return e=n.data})}var e;return{showMessages:o}}angular.module("main").factory("merchantMessageService",["$http","$q","timeService","merchantLocationService","api","notify",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a){function v(n,i){var u=n.DeliveryAddress&&n.DeliveryAddress.AddressLine1?c.cacheDeliveryAddress(n.DeliveryAddress):t.when(1);return u.then(function(){return h.setOrder(n,i)}).then(function(){return r.go("locationHome")}).then(function(){return r.go("menu.sections",{orderType:n.OrderType,fulfillmentType:n.FulfillmentType,menuId:n.MenuId})}).then(function(){e.broadcast(o.presentCart)})}function y(n){return s.get("api/User/OrderHistory",{cache:!1,params:{merchantLocationId:n.Id}}).then(function(t){f.open({templateUrl:"app/orderHistory/orderHistoryList.html",controller:"orderHistoryList as vm",size:"md",resolve:{candidateOrders:function(){return t.data.CandidateOrders}}}).result.then(function(t){return v(t,n)})})}function p(){var n=t.defer(),i=function(){a.checkIsAuthenticated()?n.resolve():u.setTimeout(i,300)};return i(),n.promise}function w(n){return p().then(function(){var i=s.get("api/User/PastOrder",{cache:!1,params:{orderId:n}}),r=l.getById(togoorder.locationId);return t.all([i,r]).then(function(n){var t=n[0].data.Order;return v(t,n[1])})})}return{getOrderById:w,selectOrder:v,showOrderHistory:y}}angular.module("main").factory("orderHistoryService",["$http","$q","$log","$state","$window","$uibModal","common","events","api","cartService","deliveryService","merchantLocationService","userService",n])}(),function(){"use strict";function n(n,t,i,r,u,f){function c(n){return _.reduce(n,function(n,t){return t.Items.length?n+t.Items[0].countEquivalent:n+1},0)}function l(n,t){var i=f.getAllMenuItems(t),r=e(n);a(i,r)}function a(n,t){var i={};t=_.sortBy(t,function(n){return 0-(n.parentOrderItem&&n.parentOrderItem.ItemPrice||0)});_.each(t,function(t){var u=t.orderItem,r=_.findWhere(n,{Id:u.ItemId,GroupInstanceId:u.GroupInstanceId});r&&(t.parentOrderItem&&t.parentOrderItem.unModifyPrice(r.PricingRule),r.PricingRule==="PizzaToppingHalf"&&(i[t.grandParentOrderItem.UniqueId]?(t.parentOrderItem.modifyPrice(0,r.PricingRule),i[t.grandParentOrderItem.UniqueId]=!1):i[t.grandParentOrderItem.UniqueId]=!0))})}function e(n,t,i){var r=[];return _.each(n.Items,function(n){r.push({orderItem:n,parentOrderItem:t,grandParentOrderItem:i});_.each(e(n,n,t),function(n){r.push(n)})}),r}function o(n,t){var i=t.Items,u=n.Items;_.each(i,function(n){var t=_.where(u,{ItemId:n.ItemId});t.length>1&&(t=_.where(t,{UniqueId:n.UniqueId}));_.each(t,function(t){if(!t){r.debug("item "+n.ItemId+" not found. Size?");return}t.OriginalItemPrice===undefined&&(t.OriginalItemPrice=t.ItemPrice);t.ItemPrice=n.ItemPrice;o(t,n)})})}function v(){return angular.toJson(arguments)}function y(n,t){return n.isFetchingPrice=!0,h(n,t).then(function(t){var i=t.Order;return n.pricedOrder=i,o(n,i),t},function(t){n.pricedOrder=undefined;throw t;})["finally"](function(){n.isFetchingPrice=!1})}function p(n,i){var r=n.Payment,u=r.LoyaltyPayment?{LoyaltyAccountNumber:r.LoyaltyPayment.AccountNumber,LoyaltyPaymentAmount:n.LoyaltyPaymentAmount}:null,f=r.OfferPayment?{LoyaltyAccountNumber:r.OfferPayment.AccountNumber,OfferPaymentAmount:n.OfferPaymentAmount}:null,e=r.ExternalPromotion?{ExternalPromotionPaymentAmount:r.ExternalPromotion.ExternalPromotionPaymentAmount,PaymentAuthCode:r.ExternalPromotion.PaymentAuthCode,PromoCode:r.ExternalPromotion.PromoCode,PosOfferCode:r.ExternalPromotion.PosOfferCode,IsPreTax:r.ExternalPromotion.IsPreTax}:null,o={Order:n,IsUpsellItemsIncluded:i,CartPromotion:n.Promotion,ApplicationId:s,LoyaltyPayment:u,OfferPayment:f,ExternalPromotion:e};return t.post(togoorder.apiUrl+"api/OrderService/Price",o).then(function(n){return n&&n.data})}var s=togoorder.applicationId;let h=_.memoize(p,v);return{rePriceOrder:y,applyPricingRules:l,getSelectionCount:c}}angular.module("main").factory("orderPricingService",["$rootScope","$http","$q","$log","$window","menuService",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l){function d(n,t,i){return n.PickupTimeZoneId=t.TimeZoneId,n.MerchantId=t.MerchantId,f.rePriceOrder(n,i)}function g(n,i,r,u,f,e,h){n.PickupTimeZoneId=r.TimeZoneId;n.MerchantId=r.MerchantId;n.PricedOrder=n.pricedOrder;n.DeliveryServicePickupTimeUtc=h;var v=i.NewCreditCard.IsSelected?i.NewCreditCard:{},p=i.ExistingCreditCard.IsSelected?i.ExistingCreditCard:{},w=i.LoyaltyPayment?{LoyaltyAccountNumber:i.LoyaltyPayment.AccountNumber,LoyaltyPaymentAmount:n.LoyaltyPaymentAmount}:null,k=i.MealPlanPayment?{MealPlanAccountNumber:i.MealPlanPayment.AccountNumber,MealPlanPaymentAmount:n.MealPlanPaymentAmount}:null,d=i.GiftCardPayment?{GiftCardAccountNumber:i.GiftCardPayment.AccountNumber,GiftCardPaymentAmount:n.GiftCardPaymentAmount,GiftCardPinNumber:i.GiftCardPayment.PinNumber}:null,g=i.OfferPayment?{LoyaltyAccountNumber:i.OfferPayment.AccountNumber,OfferPaymentAmount:n.OfferPaymentAmount}:null,nt=i.ExternalPromotion?{ExternalPromotionPaymentAmount:i.ExternalPromotion.ExternalPromotionPaymentAmount,PaymentAuthCode:i.ExternalPromotion.PaymentAuthCode,PromoCode:i.ExternalPromotion.PromoCode,PosOfferCode:i.ExternalPromotion.PosOfferCode,ReferenceNumber:i.ExternalPromotion.ReferenceNumber,IsPreTax:i.ExternalPromotion.IsPreTax}:null,c={Order:n,CartPromotion:n.Promotion,CreditCardPayment:v,SavedCreditCardPayment:p,CardHolder:i.CardHolder,ApplicationId:b,LoyaltyPayment:w,MealPlanPayment:k,GiftCardPayment:d,IsDeferredPayment:u,EligibleOptedOffers:e,OfferPayment:g,ExternalPromotion:nt};return c.Order.Customer.FirstName==null&&c.Order.Customer.LastName==null&&(c.Order.Customer.FirstName="",c.Order.Customer.LastName=""),t.post(togoorder.apiUrl+"api/OrderService/Checkout",c).then(function(t){return a={locationId:y,orderId:t.data.OrderId,orderUrlId:t.data.UrlId,tableNumber:n.TableNumber,vehicleColor:n.VehicleColor,vehicleModel:n.VehicleModel,deliveryAddress:n.DeliveryAddress,pickupDate:n.PickupDateTime,orderType:n.OrderType,fulfillmentType:n.FulfillmentType,pickupLocation:f&&_.filter([f.description,f.siteAddress],angular.identity).join(" | ")||r.AddressSummary,items:n.Items},l.usedReward(c.EligibleOptedOffers),l.purchase(c.Order),o.broadcast(s.orderPlaced,a),t})}function nt(){return!a||!a.locationId||a.locationId!==y?i.reject():i.when(a)}function tt(n){if(!n)return null;var t=typeof n=="string"?angular.fromJson(n):n,i=t.MenuId;return e.getMenu(i).then(function(n){var i=angular.extend(new h(0,0),t);return w(n,i),i})}function w(n,t,i){_.each(t.Items,function(t,r,u){if(u[r]=angular.extend(new c({CountEquivalent:1},i),t),!i){var f=e.getItemById(n,u[r].ItemId);u[r].PrimaryImageUrl=f.PrimaryImageUrl}w(n,u[r],u[r])})}var b=togoorder.applicationId,y=togoorder.locationId,a={},p=function(){var n=angular.toJson(a);u.sessionStorage.orderSummary=n},v;u.addEventListener?u.addEventListener("beforeunload",p):u.onbeforeunload=p;try{v=u.sessionStorage.orderSummary;v&&(a=angular.fromJson(v))}catch(k){r.error("Local Storage error",k)}return{hydrateOrder:tt,getOrderSummary:nt,placeOrder:g,rePriceOrder:d}}angular.module("main").factory("orderService",["$rootScope","$http","$q","$log","$window","orderPricingService","menuService","common","events","Order","OrderItem","crmService",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o){function c(t,i,r){t=+t;i=+i;var u=_.find(r.OrderTypeViewModels,function(n){return n.OrderType===t&&n.FulfillmentType===i});return u||(n.error("No OrderTypeViewModel found for OrderType: "+t+", FulfillmentType: "+i),f.error("Invalid Order Type")),u}function l(n){return e.getOrderTypes(s).then(function(t){var i=t.orderTypeViewModels;return n&&(i=_.filter(i,n)),i})}function a(n,t,h){e.getMenus(s,n.OrderType,n.FulfillmentType).then(function(e){var l=e.menuSelections,a=_.some(l,{MenuId:t}),c;a?o.goToSections({merchantLocationId:s,menuId:t,orderType:n.OrderType,fulfillmentType:n.FulfillmentType},{location:"replace"}).then(function(){r.broadcast(u.presentCart)}):h?(c=f.dialog({dialogTitle:"Switch to "+n.Description+"?",dialogMessage:n.Description+" has a different menu. If you switch, you'll lose your cart.",dismissButtonText:"Cancel",closeButtonText:"Switch"}),c.then(function(){i.menuId=null;o.goToFirstState({orderType:n.OrderType,fulfillmentType:n.FulfillmentType})})):(i.menuId=null,o.goToFirstState({orderType:n.OrderType,fulfillmentType:n.FulfillmentType}))})}function v(n,t){return e.getById(s).then(function(i){h(i,n,t)})}function y(n,t,i){return e.getById(s).then(function(r){var u=h(r,n,t);p(u,i)})}function h(t,i,r){var u=_.find(t.OrderTypeViewModels,function(n){return n.OrderType==i&&n.FulfillmentType==r});if(!u){n.error("This Location does not support Order Type "+i+" with Fulfillment Type "+r);throw new w;}return u}function p(t,i){if(!_.some(t.MenuIds,function(n){return n==i})){n.error("Order Type "+t.OrderType+" and Fulfillment Type "+t.FulfillmentType+" are not compatible with Menu "+i);throw new b;}}function w(){this.name="OrderTypeRuleMissing"}function b(){this.name="OrderTypeRuleMenuMismatch"}var s=togoorder.locationId;return{validateOrderTypeRule:v,validateOrderTypeRuleMenu:y,getDisplayOrderTypes:l,switchToOrderTypeRule:a,getOrderTypeRule:c}}angular.module("main").factory("orderTypeRuleService",["$log","$state","$stateParams","common","events","notify","merchantLocationService","menuWorkflowService",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a){function g(n,t){let i=y(n.OrderType,n.FulfillmentType);i.extendForVehicleInformation&&i.extendForVehicleInformation(n,t)}function nt(n){return n.onChangeTableNumberRequest=function(){e.broadcast(f.changeTableNumberRequest)},s.getTableNumber(w).then(function(t){return n.tableNumber=t})}function tt(n){return s.getDeliveryAddress().then(function(t){return n.onChangeDeliveryAddressRequest=function(){e.broadcast(f.changeDeliveryAddressRequest)},n.address=t})}function y(n,t){if(!n)throw new Error("orderType required");if(!t)throw new Error("fulfillmentType required");var i=k[t]||k.otherwise;return i.state?i:i[n]||i.otherwise}function it(n,t,i){var r=y(n,t),f=r.getData;return f(i,w).then(null,function(){u.error("Display data not found for order type: "+r.orderTypeDescription,n,t)})}function rt(n,t){return y(n,t).promptTemplate}function ut(n,t){return y(n,t).payLaterText}function ft(n,t){return y(n,t).displayTemplate}function et(n,t){return y(n,t).pickupDateTimePrefix}function ot(n,t,u){var f=y(n,t).state;r(function(){i.go(f,{orderType:n,fulfillmentType:t},u)},10)}function st(n,t){return s.getTableNumber(w).then(null,function(i){var r=y(n,t).state;throw new e.exceptions.RedirectRequiredException(i,{name:r,params:{orderType:n,fulfillmentType:t}});})}function ht(n,i){return s.getDeliveryAddress().then(function(n){return b=n}).then(function(){var r=a.getOrderTypeRule(n,i,togoorder.merchantLocation);return r.DeliveryServiceHasOwnZones?t.reject("skip-zones-bro"):s.getDeliveryZones(n,i)}).then(function(n){return!n||!n.length?t.reject("We are currently having an issue with delivery. So sorry."):s.checkAddressIsInAnyDeliveryArea(b,n).then(function(){return t.when(!0)},function(){return t.reject("Your address is not in the delivery area")})}).then(null,function(r){if(r==="skip-zones-bro")return t.when(!0);var u=y(n,i).state;throw new e.exceptions.RedirectRequiredException(r,{name:u,params:{orderType:n,fulfillmentType:i}});})}function ct(n,t){var i=y(n,t);return!!i.isDelivery}function lt(n,t,i){var r=y(n,t);if(r.isDefault)return i?v.curbsideDescription:v.takeoutDescription}function at(n,t){var i=y(n,t);return i.orderTypeDescription}function vt(n,t){var i=y(n,t);return!!i.isPickupDateSelectable}function yt(n,t){var i=y(n,t);return!!i.useCalendar}function pt(){return t.when(1)}function wt(n,t){var i=y(n,t);return i.verify(n,t)}var w=togoorder.locationId,v=l.getLocationInstance(),b={},bt=angular.extend(v.tableNumberData,{state:"getTableNumber",verify:st,displayTemplate:"app/tableNumber/displayTemplate.html",getData:nt,pickupDateTimePrefix:"",isPickupDateSelectable:!1,payLaterText:"Pay at the register",deliveryZones:null,promptTemplate:null}),d=angular.extend(v.deliveryAddressData,{state:"getDeliveryAddress",verify:ht,displayTemplate:"app/deliveryAddress/displayTemplate.html",getData:tt,pickupDateTimePrefix:"Delivery",isDelivery:!0,isPickupDateSelectable:!0,payLaterText:"Pay at delivery",deliveryZones:null,promptTemplate:null}),p=angular.extend(v.normalData,{state:c.getFirstStateName(),verify:pt,displayTemplate:"",getData:function(){return t.when(!0)},pickupDateTimePrefix:"Pickup",isPickupDateSelectable:!0,payLaterText:"Pay at the register",deliveryZones:null,promptTemplate:null,isDefault:!0}),kt=angular.extend(v.cateringForPickupData,p,{useCalendar:!0,orderTypeDescription:v.cateringForPickupData.orderTypeDescription,isDefault:!1}),dt=angular.extend(v.cateringForDeliveryData,d,{useCalendar:!0,orderTypeDescription:v.cateringForDeliveryData.orderTypeDescription}),gt=angular.extend(v.takeoutCurbsideData,p,{orderTypeDescription:v.takeoutCurbsideData.orderTypeDescription,payLaterText:"Pay at the store",promptTemplate:"app/curbside/takeoutCurbsidePromptTemplate.html",displayTemplate:"",isDefault:!1}),ni=angular.extend(v.driveThruData,p,{orderTypeDescription:v.driveThruData.orderTypeDescription,extendForVehicleInformation:v.driveThruData.extendForVehicleInformation,payLaterText:"Pay at the drive-thru",displayTemplate:"app/driveThru/displayTemplate.html",isDefault:!1}),ti=angular.extend(v.driveThruWithVehicleInfoData,p,{orderTypeDescription:v.driveThruWithVehicleInfoData.orderTypeDescription,extendForVehicleInformation:v.driveThruData.extendForVehicleInformation,payLaterText:"Pay at the drive-thru",promptTemplate:"app/driveThru/vehiclePromptTemplate.html",displayTemplate:"app/driveThru/displayTemplate.html",isDefault:!1}),ii=angular.extend(v.curbsideData,p,{orderTypeDescription:v.curbsideData.orderTypeDescription,payLaterText:"Pay at the store",promptTemplate:"app/curbside/curbsidePromptTemplate.html",displayTemplate:"app/curbside/displayTemplate.html"}),ri=angular.extend(v.carsideData,p,{orderTypeDescription:v.carsideData.orderTypeDescription,payLaterText:"Pay at the store",promptTemplate:"app/carside/carsidePromptTemplate.html",displayTemplate:"app/carside/displayTemplate.html",isDefault:!1}),k=v.fulfillmentTypeMap;return{getPayLaterText:ut,goToNextState:ot,getDisplayTemplate:ft,getDisplayData:it,getPickupDateTimePrefix:et,meetsRequirementsForOrderType:wt,isDelivery:ct,isPickupDateSelectable:vt,isCalendarRequired:yt,getPromptTemplate:rt,getOrderTypeDescription:at,getTakeoutCurbsideDescription:lt,setOrderTypeRule:g}}angular.module("main").factory("orderTypeWorkflowService",["$http","$q","$state","$timeout","$log","events","common","notify","deliveryService","merchantLocationService","menuWorkflowService","orderTypeViewModelServiceFactory","orderTypeRuleService",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e){function l(n,t,i){function e(){_.each(n.Items,function(t){t.shouldShow&&(t.errors=null,h(n,u,t,t,n,"",r))})}var r=a(n,t,i),u;return r.fatals?r:(u=f.getTopLevelMenuItems(t),e(),r.warnings&&r.warnings.missing&&e(),n.LastValidated=new Date,r)}function h(n,i,r,u,f,o,l){var a=_.findWhere(i,{Id:u.ItemId}),b,k,w,p;a?(a.MaximumCount&&(b=_.where(f.Items,{ItemId:u.ItemId}),k=_.reduce(b,function(n,t){return n+t.Quantity},0),k>a.MaximumCount&&(t.info("removing item from order",u),f.deleteItem(u))),w=moment(n.LastValidated).isBefore(moment().subtract(12,"h")),a.Price<u.ItemPrice&&!u.OverridePrice?(w&&c(l,"newLowerPrice",u,a,o),u.ItemPrice=a.Price):a.Price>u.ItemPrice&&!u.OverridePrice&&(w&&c(l,"newHigherPrice",u,a,o),u.ItemPrice=a.Price),p=o,p&&(p+=" > "),p+=u.ItemName,_.each(a.IncludedGroups,function(t){var i=p;t.GroupDescription&&t.GroupDescription!==" "&&(i&&(i+=" > "),i+=t.GroupDescription);var c=u.Items,o=_.filter(c,function(n){return n.GroupInstanceId===t.GroupInstanceId}),f=e.getSelectionCount(o);t.MinChoices>1&&f<t.MinChoices?(r.errors=r.errors||{},r.errors.min=t,s(l,"min",{includedGroup:t,groupDescription:i})):t.IsRequired&&!f&&(r.errors=r.errors||{},r.errors.required=t,s(l,"required",{includedGroup:t,groupDescription:i}));t.MaxChoices<f&&(r.errors=r.errors||{},r.errors.max=t,s(l,"max",{includedGroup:t,groupDescription:i}));_.each(o,function(f){h(n,t.MenuItems,r,f,u,i,l)})}),_.each(u.Items,function(n){var i=n.GroupInstanceId,r=_.find(a.IncludedGroups,function(n){return parseInt(n.GroupInstanceId,10)===parseInt(i,10)});r||(y(l,n,p),t.info("removing item from order (missing group)",n),u.deleteItem(n))})):(v(l,u,o),t.info("removing item from order",u),f.deleteItem(u))}function a(n,t,i){var r=_.find(i.OrderTypeViewModels,function(t){return t.OrderType==n.OrderType&&t.FulfillmentType==n.FulfillmentType});return r?_.some(r.MenuIds,function(n){return n===t.Id})?{}:{fatals:{menuOrderTypeMismatch:[{menu:t,orderType:n.OrderType,fulfillmentType:n.FulfillmentType}]}}:{fatals:{missingOrderType:[{orderType:n.OrderType,fulfillmentType:n.FulfillmentType}]}}}function o(n,t,i){n.warnings=n.warnings||{};n.warnings[t]=n.warnings[t]||[];n.warnings[t].push(i)}function v(n,i,r){t.info("missing "+i.ItemName);o(n,"missing",{itemName:i.ItemName,parentItemName:r})}function y(n,i,r){t.info("missing group for "+i.ItemName);o(n,"missingGroup",{itemName:i.ItemName,parentItemName:r})}function c(n,i,r,u,f){t.info("price change for "+r.ItemName);o(n,i,{itemName:r.ItemName,oldPrice:r.ItemPrice,newPrice:u.Price,parentItemName:f})}function s(n,i,r){t.info("validation error: "+i,r);n.errors=n.errors||{};n.errors[i]=n.errors[i]||[];n.errors[i].push(r)}return{validateOrder:l}}angular.module("main").factory("orderValidationService",["$http","$log","$q","api","events","menuService","orderPricingService",n])}(),function(){"use strict";function n(n,t,i){function r(n){return i.post("services/PaymentGatewayProfileSettings/IsAddressRequiredAtCheckout/"+n.locationId).then(function(n){return n.data})}var u=togoorder.locationId;return{isAddressRequiredAtCheckout:r}}angular.module("main").factory("paymentGatewayProfileSettingsService",["$http","$q","api",n])}(),function(){"use strict";function n(n,t,i){function u(n){return n.locationId=r,i.post("services/Promotion/Lookup",n).then(function(n){return n.data})}var r=togoorder.locationId;return{getPromotion:u}}angular.module("main").factory("promoCodeService",["$http","$q","api","merchantLocationService",n])}(),function(){"use strict";function n(n){function i(){return _.some(t,function(t){return t.name!==n.current.name})}function r(){if(t.length){for(var i=t.pop();i&&i.name===n.current.name;)i=t.pop();i&&n.go(i.name,i.params)}}function u(){var n=_.toArray(arguments),i;return n.length?(i={name:n[0].current.name,params:n[0].params},t.push(i),this):t}var t=[];return{addState:u,goBack:r,hasAppBack:i}}angular.module("main").factory("routeStateService",["$state",n])}(),function(){"use strict";function n(){return{timeZones:["Central Standard Time","Eastern Standard Time","Mountain Standard Time","US Mountain Standard Time","Pacific Standard Time","Hawaiian Standard Time","Atlantic Standard Time","SA Western Standard Time","West Pacific Standard Time"],states:[{name:"Alabama",value:"AL"},{name:"Alaska",value:"AK"},{name:"Alberta",value:"AB"},{name:"American Samoa",value:"AS"},{name:"Arizona",value:"AZ"},{name:"Arkansas",value:"AR"},{name:"British Columbia",value:"BC"},{name:"California",value:"CA"},{name:"Colorado",value:"CO"},{name:"Connecticut",value:"CT"},{name:"Delaware",value:"DE"},{name:"District of Columbia",value:"DC"},{name:"Federated States of Micronesia",value:"FM"},{name:"Florida",value:"FL"},{name:"Georgia",value:"GA"},{name:"Guam",value:"GU"},{name:"Hawaii",value:"HI"},{name:"Idaho",value:"ID"},{name:"Illinois",value:"IL"},{name:"Indiana",value:"IN"},{name:"Iowa",value:"IA"},{name:"Kansas",value:"KS"},{name:"Kentucky",value:"KY"},{name:"Louisiana",value:"LA"},{name:"Maine",value:"ME"},{name:"Manitoba",value:"MB"},{name:"Marshall Islands",value:"MH"},{name:"Maryland",value:"MD"},{name:"Massachusetts",value:"MA"},{name:"Michigan",value:"MI"},{name:"Minnesota",value:"MN"},{name:"Mississippi",value:"MS"},{name:"Missouri",value:"MO"},{name:"Montana",value:"MT"},{name:"Nebraska",value:"NE"},{name:"Nevada",value:"NV"},{name:"New Brunswick",value:"NB"},{name:"New Hampshire",value:"NH"},{name:"New Jersey",value:"NJ"},{name:"New Mexico",value:"NM"},{name:"New York",value:"NY"},{name:"Newfoundland and Labrador",value:"NL"},{name:"North Carolina",value:"NC"},{name:"North Dakota",value:"ND"},{name:"Northern Mariana Islands",value:"MP"},{name:"Northwest Territories",value:"NT"},{name:"Nova Scotia",value:"NS"},{name:"Nunavut",value:"NU"},{name:"Ohio",value:"OH"},{name:"Oklahoma",value:"OK"},{name:"Ontario",value:"ON"},{name:"Oregon",value:"OR"},{name:"Palau",value:"PW"},{name:"Pennsylvania",value:"PA"},{name:"Prince Edward Island",value:"PE"},{name:"Puerto Rico",value:"PR"},{name:"Quebec",value:"QC"},{name:"Rhode Island",value:"RI"},{name:"Saskatchewan",value:"SK"},{name:"South Carolina",value:"SC"},{name:"South Dakota",value:"SD"},{name:"Tennessee",value:"TN"},{name:"Texas",value:"TX"},{name:"Utah",value:"UT"},{name:"Vermont",value:"VT"},{name:"Virgin Islands",value:"VI"},{name:"Virginia",value:"VA"},{name:"Washington",value:"WA"},{name:"West Virginia",value:"WV"},{name:"Wisconsin",value:"WI"},{name:"Wyoming",value:"WY"},{name:"Yukon",value:"YT"}]}}angular.module("main").value("staticData",n())}(),function(){"use strict";function n(n,t,i,r){function u(){moment.updateLocale("en",{calendar:{lastDay:"[Yesterday]",sameDay:"[Today]",nextDay:"[Tomorrow]",lastWeek:"[Last] dddd",nextWeek:"dddd",sameElse:"MMMM D"}})}function f(){return moment().utcOffset()}function e(n){return r.get("api/Time/Now",{cache:!1,params:{timeZoneId:n}}).then(function(n){const t=moment.utc(n.data.UtcNow),i=t.clone().utcOffset(n.data.Offset);return i.hour()<2&&moment.updateLocale("en",{calendar:{lastDay:"[This Morning]",sameDay:"[Later Today] (dddd)",nextDay:"dddd",lastWeek:"[Last] dddd",nextWeek:"dddd",sameElse:"MMMM D"}}),{utcNow:t,localNow:i,localCalendarDate:moment(n.data.LocalCalendarDate)}})}return{getNowForTimeZoneId:e,getBrowserTimeZoneOffset:f,initialize:u}}angular.module("main").factory("timeService",["$http","$q","$log","api",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h){function k(){n.defaults.headers.common.Authorization="Bearer "+l.userData.bearerToken;n.defaults.headers.common.MerchantId=l.merchantId}function a(){w=_.throttle(at,2e3,{trailing:!1});b=_.throttle(vt,6e4,{trailing:!1});y=undefined}function ut(){return l.userData}function ft(n){return o.post("api/User",n).then(function(){a();h.signUp(n.emailAddress);u.success("Successfully created new account!")},function(n){a();n=n||{};i.error(n);var r=n.data||{},u=r.Message||"An error occurred. Please try again or contact us for help.";return t.reject(u)})}function et(n){return o.get("api/User/PaymentMethods/"+n).then(function(n){return n.data})}function ot(n){var t="api/user/?userId="+n;return o.delete(t).then(function(n){return n.data})}function st(){return o.delete("api/User/delete/").then(function(n){return n.data})}function ht(){return y=o.get("api/UserMerchants").then(function(n){return n.data})}function ct(n,t){return(t||!w)&&a(),w(n)}function lt(n,t){return(t||!b)&&a(),b(n)}function at(n){return y=o.get("api/UserInfo/"+n+"/"+nt).then(function(n){var t=n.data;return new s(t)},function(){g();d("logout",undefined,undefined)})}function vt(n){return y?y:o.get("api/UserBasicInfo/"+n+"/"+nt).then(function(n){var t=n.data;return new s(t)},function(){g();d("logout",undefined,undefined)})}function yt(n){var t={birthdate:n,merchantId:l.merchantId};return o.put("api/User",t).then(function(n){return n.data})["finally"](a)}function pt(n,t){var i={firstName:n,lastName:t,merchantId:l.merchantId};return o.put("api/User",i).then(function(n){return n.data})["finally"](a)}function wt(n){var t={email:n,merchantId:l.merchantId};return o.put("api/User",t).then(function(t){return l.userData.username=n,t.data})["finally"](a)}function bt(n){var t={callbackNumber:n,merchantId:l.merchantId};return o.put("api/User",t).then(function(n){return n.data})["finally"](a)}function kt(n,t,i){var r={currentPassword:n,password:t,confirmPassword:i,merchantId:l.merchantId};return o.put("api/User",r).then(function(n){return n.data})["finally"](a)}function dt(n){var t={emailOptIn:n,merchantId:l.merchantId};return o.put("api/User",t).then(function(n){return n.data})["finally"](a)}function gt(n){return n.merchantId=l.merchantId,o.post("services/account/sendPasswordLink",n).then(function(n){return u.success("Email Sent!"),n},function(n){i.error(n);var r=n.data,u=r.Message||"An error occurred. Please try again or contact us for help.";return t.reject(u)})}function ni(n,r,u){var f={method:"POST",url:"token",headers:{"Content-Type":"application/x-www-form-urlencoded",LocationId:l.locationId},data:`grant_type=password&username=${encodeURIComponent(n)}&password=${encodeURIComponent(r)}&client_id=${l.merchantId}`};return o.http(f).then(function(n){var t=n.data;return ci(t.userName,t.access_token,new Date(t[".expires"]),u,!0),k(),p(),t},function(n){var r=n&&n.data,u;return i.error(n),u=r&&r.error_description||"Unable to contact server; please, try again later.",t.reject(u)})["finally"](a)}function ti(n){this.name="AuthenticationRequired";this.message=n}function ii(n){this.name="NextStateUndefined";this.message=n}function ri(n){this.name="AuthenticationExpired";this.message=n}function tt(n){this.name="AuthenticationRetrieval";this.message=n}function ui(){return l.merchantLocation.IsOnlyGuestCheckout||$.cookie("is_guest")}function fi(){return $.cookie("is_guest",!0,{expires:1}),t.when(1)}function it(){return l.userData.isAuthenticated&&l.merchantId===l.userData.merchantId&&!rt(l.userData.expirationDate)?(k(),!0):!1}function ei(){if(it())return!0;try{li()}catch(n){throw new ti("Authentication not found");}return k(),!0}function oi(){if(v.name==="")throw new ii("No state data was set");else return v}function d(n,t,i){v.name=n;v.params=t;v.error=i}function si(){v.name="";v.params={};v.error=""}function rt(n){var t=new Date;return n=new Date(n),n-t<=0}function hi(){l.clearUserData()}function g(){p();hi();a();n.defaults.headers.common.Authorization=null}function ci(n,t,i,r,u){p();l.setAuthCookie(n,t,i,r,u)}function p(){$.removeCookie("is_guest")}function li(){var n=l.getSavedUserData();if(n){if(n.merchantId!==l.merchantId)throw new tt("Authorized for another merchant.");else if(rt(n.expirationDate))throw new ri("Authentication token has already expired");}else throw new tt("No authentication data exists");}function ai(n,t){e.broadcast(f.securityAuthorizationRequired,{callback:function(){a();n&&n.apply(this,arguments)},allowGuestCheckout:t})}var v={name:"",params:{},error:""},w,b,y,nt=r.togoorder.locationId,l=r.togoorder,c=this;c.getUserData=ut;c.authenticate=ni;c.signUp=ft;c.removeAuthentication=g;c.isAuthenticated=ei;c.checkIsAuthenticated=it;c.isAGuest=ui;c.getNextState=oi;c.setNextState=d;c.clearNextState=si;c.getPaymentMethods=et;c.getUserWithLoyalty=ct;c.getUser=lt;c.deletePaymentMethod=ot;c.login=ai;c.setUserAsGuest=fi;c.resetPassword=gt;c.changePassword=kt;c.changeEmailOptIn=dt;c.changeName=pt;c.changeEmail=wt;c.changeBirthdate=yt;c.changeCallbackNumber=bt;c.clearGuest=p;c.deleteUser=st;c.getUserMerchants=ht}angular.module("main").service("userService",["$http","$q","$log","$window","notify","events","common","api","User","crmService",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o){function s(n,t){return o.selectOrder(n,t)}function h(n){return e.get("api/User/UsualOrder",{cache:!1,params:{merchantLocationId:n.Id}}).then(function(t){var i=t.data.Order;i?s(i,n):u.open({templateUrl:"app/orderHistory/usualOrderAlert.html",controller:"usualOrderAlert as vm",size:"md",resolve:{candidateOrders:function(){return t.data.CandidateOrders}}}).result.then(function(t){s(t,n)})})}return{begin:h}}angular.module("main").factory("usualOrderService",["$http","$q","$log","$state","$uibModal","events","api","orderHistoryService",n])}(),function(){"use strict";function n(n,t){function r(t){n.close(t)}function u(){n.dismiss()}var i=this;i.candidateOrders=t;i.selectOrder=r;i.dismiss=u}angular.module("common").controller("orderHistoryList",["$uibModalInstance","candidateOrders",n])}(),function(){"use strict";function n(n,t){function r(t){n.close(t)}function u(){n.dismiss()}var i=this;i.candidateOrders=t;i.selectOrder=r;i.dismiss=u}angular.module("common").controller("usualOrderAlert",["$uibModalInstance","candidateOrders",n])}(),function(){"use strict";function n(n,t,i,r){function f(){n.dismiss()}var u=this;u.excludedItems=t;u.dismiss=f;u.pickupDate=i.getDisplayDay();u.dayOfWeek=r}angular.module("common").controller("excludedItemsDialog",["$uibModalInstance","excludedItems","pickupDate","dayOfWeek",n])}(),function(){"use strict";function n(n,t){function r(n){return n.ImageUrl?"background-image: url('"+n.ImageUrl+"')":""}function u(t){n.close(t)}function f(){n.dismiss()}var i=this;i.itemPrompts=t;i.selectItem=u;i.dismiss=f;i.getItemImageStyle=r}angular.module("common").controller("itemPromptDialog",["$uibModalInstance","itemPrompts",n])}(),function(){"use strict";function n(n,t){function r(){n.dismiss()}var i=this;i.unavailableItems=t;i.dismiss=r}angular.module("common").controller("unavailableItemDialog",["$uibModalInstance","unavailableItems",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b){function st(){k.isAuthenticated||(k.checkoutButtonText=togoorder.mobileStrategy.unauthenticatedCheckoutButtonText||k.checkoutButtonText);n.all([vt(),at(),ct(),a.waitForInitialization()]);i.$on(l.cartItemIsValidChanged,function(n,t,i){k.isCartItemInvalid=!t;it=i});$(".cart-contents").on("scroll",function(){tt()?$(".cart-footer").addClass("cart-box-shadow-top"):$(".cart-footer").removeClass("cart-box-shadow-top");tt()&&$(".cart-contents").scrollTop()===0?$(".cart-header").removeClass("cart-box-shadow-bottom"):$(".cart-header").addClass("cart-box-shadow-bottom")})}function ht(){return _.where(k.cart.order.Items,{shouldShow:!0})}function ct(){y.getDisplayData(g,nt,k)}function lt(n){k.isOrderTypeChoicesOpen=!1;p.switchToOrderTypeRule(n,et,k.cart.hasOrderItems())}function at(){var n=function(n){return n.OrderType!=g||n.FulfillmentType!=nt};return p.getDisplayOrderTypes(n).then(function(n){k.orderTypes=n})}function vt(){return v.getById(ot).then(function(n){k.merchantLocation=n;var t=k.merchantLocation.LoyaltyProfile&&k.merchantLocation.LoyaltyProfile.LoyaltyProviderType;return k.hasOffers=[4,3,6].indexOf(t)>-1,n}).then(function(){return k.isAuthenticated?yt():!1})}function yt(){return k.hasOffers?w.getUserWithLoyalty(k.merchantLocation.MerchantId).then(function(n){return k.user=n,k.bestLoyalty=k.user.Loyalties&&k.user.Loyalties.length&&k.user.Loyalties[0],ut()}):w.getUser(k.merchantLocation.MerchantId).then(function(n){return k.user=n,n})}function pt(n,t){c.broadcast(l.cartItemSelected,n);t.preventDefault();t.stopPropagation()}function wt(n,t){k.cart.order.deleteItem(n);a.saveCart();var i=n.ItemName+" removed from cart!";h.success(i);t.preventDefault();t.stopPropagation()}function bt(){w.clearGuest();rt()}function rt(){var n="";k.isCartItemInvalid?it():k.cart.isAboveMinimumOrder()?k.cart.isBelowMaximumOrder()||(n=ft(!1)):n="There is a minimum order of "+e("currency")(k.cart.minimumOrder)+" for "+k.orderTypeDisplay+".";n?(h.dialog("Almost!",n),h.warning("Almost! "+n)):u.go("checkout",{merchantLocationId:k.cart.order.LocationId})}function kt(){w.setUserAsGuest().then(function(){rt()})}function ut(){if(k.cart.order.SelectedOfferAmount=0,k.hasOffers&&k.cart.order.Items&&k.isAuthenticated&&k.bestLoyalty.AccountNumber&&k.bestLoyalty.AccountNumber.length>0){var n={merchantId:k.merchantLocation.MerchantId,cardNumber:k.bestLoyalty.AccountNumber,cartOrder:k.cart.order};return d("cart.getOffersEligibleForRedemption request:"),d(n),b.getOffersEligibleForRedemption(n).then(function(n){d("cart.getOffersEligibleForRedemption data:");d(n);_.each(n.Offers,function(n){n.OptedIn=n.Optable?n.OptedIn:!0});k.eligibleOffers=_.filter(n.Offers,function(n){return k.cart.order.Total+k.cart.order.PromoSavings-k.cart.order.OfferDiscount>=n.Threshold})})}return d("cart.getOffersEligibleForRedemption returning false"),!1}function d(n){k.debugging&&console.log(n)}function dt(){c.broadcast(l.signUpRequested,{})}function tt(){var n=$(".cart-contents");return!n||!n.length?!1:Math.ceil(n.scrollTop()+n.innerHeight())<n[0].scrollHeight}function gt(n){return n.PrimaryImageUrl?"background-image: url('"+n.PrimaryImageUrl+"')":""}function ft(n){var t="";return k.cart.isBelowMaximumOrder()||(t="There is a maximum order of "+e("currency")(k.cart.maximumOrder)+" for "+k.orderTypeDisplay+".",t=k.merchantLocation.MaximumOrderExceededMsg?t+" "+k.merchantLocation.MaximumOrderExceededMsg:t+" Please call the restaurant directly to place this order",k.merchantLocation.IsMaximumOrderExceededPhone&&k.merchantLocation.Phone&&(t=t+" ("+k.merchantLocation.Phone+")."),n&&(h.dialog("Almost!",t),h.warning("Almost! "+t))),t}var k=this,et=parseInt(f.menuId,10),g=f.orderType,nt=f.fulfillmentType,ot=togoorder.locationId,it=function(){};k.editItem=pt;k.removeItem=wt;k.beginCheckOut=bt;k.orderTypeDisplay=y.getOrderTypeDescription(g,nt);k.deliveryTemplate=y.getDisplayTemplate(g,nt);k.merchantLocation={};k.checkoutButtonText="Check Out";k.isAuthenticated=togoorder.userData.isAuthenticated;k.signUp=dt;k.checkoutAsGuest=kt;k.orderTypes=[];k.eligibleOffers=[];k.hasOffers=!1;k.switchToOrderType=lt;k.isOrderTypeChoicesOpen=!1;Object.defineProperty(k,"cart",{get:function(){return a.getCart()}});k.safeClassName=c.safeClassName;k.messages=c.messages;k.user={};k.isScrollable=tt;k.bestLoyalty={};k.getItems=ht;k.getItemImageStyle=gt;k.isCartItemSelected=!1;k.convenienceFeeLabel=v.getConvenienceFeeLabel();st();i.$on("$stateChangeStart",function(){a.saveCart();ut()});i.$on("$stateChangeSuccess",function(){k.isCartItemSelected||ft(!0);k.isCartItemSelected=!1});i.$on(l.cartItemSelected,function(){k.isCartItemSelected=!0})}angular.module("main").controller("cart",["$q","$rootScope","$scope","$log","$state","$stateParams","$filter","$window","spinner","notify","common","events","cartService","merchantLocationService","orderTypeWorkflowService","orderTypeRuleService","userService","loyaltyService",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l){function y(){e.all([p()])}function p(){return l.getById(v).then(function(n){return a.merchantLocation=n,n})}function w(){return _.where(a.cart.order.Items,{shouldShow:!0})}function b(){a.cart.order.Promotion={};s.broadcast(h.promoCodeRemoved)}function k(){i.go("menu.sections",{merchantLocationId:a.cart.order.LocationId,orderType:a.cart.order.OrderType,fulfillmentType:a.cart.order.FulfillmentType,menuId:a.cart.order.MenuId})}function d(n){return n.PrimaryImageUrl?"background-image: url('"+n.PrimaryImageUrl+"')":""}var a=this,v=togoorder.locationId;a.goToMenu=k;a.removePromotion=b;a.messages=s.messages;a.getItems=w;a.getItemImageStyle=d;a.merchantLocation={};a.convenienceFeeLabel=l.getConvenienceFeeLabel();Object.defineProperty(a,"cart",{get:function(){return c.getCart()}});y()}angular.module("main").controller("staticCart",["$rootScope","$log","$state","$stateParams","$uibModal","$filter","$q","notify","common","events","cartService","merchantLocationService",n])}(),function(){"use strict";function n(n){function t(t,i){var r=n.getSelectionCount(i);return t.IsRequired&&t.MinChoices===1&&!r?{required:t}:r<t.MinChoices?{min:t}:t.MaxChoices<r?{max:t}:{}}return{validate:t}}angular.module("main").factory("includedGroupValidator",["orderPricingService",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){function bt(n){var t,i;return n?(t=n.IncludedGroups,n===k&&w.currentOrderItem&&w.currentOrderItem.clonedIncludedGroups&&t)?(i=t.concat(w.currentOrderItem.clonedIncludedGroups),_(i).chain().sortBy(function(n){return(n.GroupInstanceId+"").length}).sortBy(function(n){return n.SortIndex}).value()):t:[]}function ti(n){return{1:"One",2:"Two",3:"Three",4:"Four",5:"Five",6:"Six",7:"Seven",8:"Eight",9:"Nine",10:"Ten"}[n]||n}function ii(){var n=[];return w.cart&&w.cart.order&&_.each(w.cart.order.Items,function(t){var i=ut(t.ItemId),r;i&&(r=kt(i.Id).then(function(n){i.IncludedGroups=n&&n.IncludedGroups||[]}),n.push(r))}),r.all(n)}function ri(n){var t=ut(n);t&&dt(!1,t)}function ui(n,t,i){return d=n,b=t,w.merchantLocation=i,w.footnote=$("#menu-item-footnote").html(),d.$on(e.cartItemSelected,yi),ii()}function fi(n){let t=$(n.target);if(t.is("a")){var i=t.prop("href"),r=t.prop("target");if(r==="popup")return v.openLinkInNewWindow(i,t),n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation(),!1;if(v.callOpenLink(i))return n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation(),!1}}function nt(){return l.saveCart()}function ei(n){var t=n.Name;return n.Price&&!n.PriceIsExtra&&(t+=" "+f.monetize(n.Price).toFixed(2)),n.Price&&n.PriceIsExtra&&(t+=" ("+f.monetize(n.Price).toFixed(2)+" Extra)"),n.NutritionInfo&&(t+=" "+n.NutritionInfo),t}function tt(n){n?(l.addOrderItem(w.currentOrderItem),a.applyPricingRules(w.cart.order,b),c.validateOrder(w.cart.order,b,w.merchantLocation),nt(),it("added to cart!"),w.backToMenuSections()):(w.showValidation(),w.addItemToCart=_.once(tt))}function oi(){w.cart.order.deleteItem(w.currentOrderItem);nt();it("removed from cart!");w.backToMenuSections()}function si(n){n?(a.applyPricingRules(w.cart.order,b),c.validateOrder(w.cart.order,b,w.merchantLocation),nt(),it("edited!"),w.backToMenuSections()):w.showValidation()}function hi(){u.history.back()}function it(n){var i=w.currentOrderItem.Quantity>1,t=i?w.currentOrderItem.Quantity+"X ":"";t+=w.selectedMenuItem.Name+" "+n;o.success(t)}function ci(){u.history.back()}function li(t){d.$watch(function(){return t.$valid},_.debounce(function(i){n.$apply(function(){var n=!!t.quantity;w.currentOrderItem.errors=n?i?null:t.$error:w.currentOrderItem.errors||{};f.broadcast(e.cartItemIsValidChanged,i,function(){!i&&n&&w.showValidation()})})},100,!1))}function ai(){w.isValidationVisible=!0;o.dialog("Almost Perfect!","Please review the sections marked with a star.");o.warning("Almost Perfect! Please review the sections marked with a star.");vi()}function vi(){}function kt(n){return s.getIncludedGroups(n,b.Id,w.merchantLocation.Id)}function dt(n,t,u){var f,e;w.isFloatingButtons=!1;w.isMenuItemLoaded=!1;t.isInCart=n;f=t.IncludedGroups;t.IncludedGroups=undefined;e=r.defer();f?e.resolve():(f=[],w.remainingIncludedGroups=1,kt(t.Id).then(function(n){f=n.IncludedGroups;e.resolve()}));e.promise.then(function(){w.remainingIncludedGroups=f.length;i(function(){t.IncludedGroups=f;var n=r.when();_.each(t.IncludedGroups,function(t){var u=t.MenuItems;t.MenuItems=undefined;n=n.then(function(){var n=r.defer();return i(function(){t.MenuItems=u;w.remainingIncludedGroups--;n.resolve()},1),n.promise})});n.then(function(){i(pi,1)});u?rt(u,t):rt(new y(t),t);w.addItemToCart=_.once(tt)},150)});w.selectedMenuItem=t;w.isValidationVisible=!1;h.showItemDetail()}function rt(n,t){w.currentOrderItem=n;w.currentOrderItemExt=new p(w.currentOrderItem);t.hasClonableGroups=_.some(t.IncludedGroups,function(n){return n.ItemCountCloneAtMultipleOf>0})}function ut(n){return s.getItemById(b,n)}function yi(n,t){var i=ut(t.ItemId);i&&dt(!0,i,t)}function pi(){yt||(c.validateOrder(w.cart.order,b,w.merchantLocation),ft())}function wi(){ft()}function ft(n){var t=wt.scrollHeight>wt.clientHeight;n?w.isMenuItemLoaded=!0:i(function(){ft(1)},1);w.isFloatingButtons=t}function bi(n){return _.some(n.MenuItems,function(n){return n.IncludedGroups&&n.IncludedGroups.length})}function ki(n){return n.MenuItems?!w.useRadioButtons(n)&&!w.useSelectList(n)&&!w.useMultiSelectList(n):undefined}function gt(n){return n.MenuItems?n.IsRequired&&n.MaxChoices===1&&(n.MenuItems.length<=10||pt===1):undefined}function di(n){return n.MenuItems?n.IsRequired&&n.MaxChoices===1&&!gt(n):undefined}function gi(n){return Modernizr.touch?u.hasNiceMultiselectControlProbably()?n.MenuItems?w.useRadioButtons(n)||w.useSelectList(n)?!1:n.MenuItems.length<10?!1:pt===1?!1:bi(n)?!1:!0:undefined:!1:!1}function nr(n){if(!n||n.length<2)return"";var t=_.pluck(n,"ItemName");return t.length===2?t[0]+" and "+t[1]:t.length===3?t[0]+", "+t[1]+", and "+t[2]:t[0]+", "+t[1]+", and "+(t.length-2)+" others"}function tr(n){return _.isArray(n)&&!n.isDisabledItemPresent&&(n.isDisabledItemPresent=!0,n.unshift({Name:"",disabled:!0,Id:0})),n}function ir(n,t,i){return{"radio-buttons":n&&n.HasSizes,invalid:!(t&&t.isValid()),"included-group-scrollable-items":n&&n.MenuItems&&n.MenuItems.length>10&&!n.IsRequired,"included-group-expanded":i&&i.isDisplayed,"selection-required":n.IsRequired,"selection-optional":!n.IsRequired}}function rr(n,t,i){g=t;et(i);n.preventDefault();n.stopPropagation()}function ni(n){n.keyCode===27&&i(function(){et(!1)})}function et(n){if(g&&(g.ui.isDisplayed=n),n){$("body").addClass("included-group-open");t.on("keydown",ni)}else $("body").removeClass("included-group-open"),t.off("keydown",ni)}var k=null,ot={},st=null,ht=undefined,ct=undefined,lt=0,at=undefined,b={},vt={},d,yt=!1,g,pt=togoorder.merchantLocation&&togoorder.merchantLocation.MenuItemUiType,wt=document.compatMode==="BackCompat"?document.body:document.documentElement,w={initialize:ui,listenToValidChanged:li,addItemToCart:tt,showValidation:ai,backToSection:ci,selectNewMenuItem:ri,doneEditingItem:si,backToMenuSections:hi,deleteItemFromCart:oi,useCheckboxes:ki,useRadioButtons:gt,useSelectList:di,useMultiSelectList:gi,getItemDisplayName:ei,initializeUi:wi,getSelectedItemsSummary:nr,getSelectListItems:tr,setCurrentItem:rt,getIncludedGroups:bt,getNumberString:ti,showOptions:rr,toggleOptions:et,getIncludedGroupItemsClass:ir,footnoteClick:fi};return Object.defineProperty(w,"hasClonableGroups",{get:function(){return at},set:function(n){at=n}}),Object.defineProperty(w,"remainingIncludedGroups",{get:function(){return lt},set:function(n){lt=n}}),Object.defineProperty(w,"menu",{get:function(){return b},set:function(n){b=n}}),Object.defineProperty(w,"merchantLocation",{get:function(){return vt},set:function(n){vt=n}}),Object.defineProperty(w,"isFloatingButtons",{get:function(){return ht},set:function(n){ht=n}}),Object.defineProperty(w,"isMenuItemLoaded",{get:function(){return ct},set:function(n){ct=n}}),Object.defineProperty(w,"selectedMenuItem",{get:function(){return k},set:function(n){k=n}}),Object.defineProperty(w,"currentOrderItem",{get:function(){return ot},set:function(n){ot=n}}),Object.defineProperty(w,"isValidationVisible",{get:function(){return st},set:function(n){st=n}}),Object.defineProperty(w,"cart",{get:yt?function(){return{}}:function(){return l.getCart()}}),n.$on(e.itemQuantityChanged,function(n,t){var r=t.quantity,u=t.minimumCount||1;i(function(){var n=!1,t,i;do t=_.filter(bt(w.selectedMenuItem),function(n){return n.ItemCountCloneAtMultipleOf>0}),i=_.groupBy(t,function(n){return parseInt(n.GroupInstanceId,10)}),_.each(i,function(t){var i=t[t.length-1],s=i.ItemCountCloneAtMultipleOf,f=r-u,e,o;f=Math.max(0,f-i.ItemCountThresholdForClone+1+s);e=Math.max(1,Math.ceil(f/s));o=t.length;e>o?(w.currentOrderItem.addIncludedGroupClone(i),n=!0):e<o?(w.currentOrderItem.removeIncludedGroupClone(i),n=!0):n=!1});while(n)},100)}),w}angular.module("main").factory("menuItemDetailViewModel",["$rootScope","$document","$timeout","$q","$window","common","events","notify","menuService","menuWorkflowService","orderValidationService","cartService","orderPricingService","linkService","OrderItem","OrderItemExt",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g,nt){function ii(n){var t=tt.menuSections[n];rt(t.Id,tt.replaceOptions)}function ri(){g.set("lastSectionIndex",0);k.initializeRouteState(tt.replaceOptions);c.activateController([bi(),ki().then(ai)]).then(wi).then(vt).then(li).then(di);u.$on(s.cartItemSelected,function(){ht()});u.$on(s.presentCart,function(){et=!0;tt.isCartInPage||tt.showCartSidebar()})}function ui(){var n=_.memoize(ct);$(window).scroll(_.throttle(function(){if(!it){var r=$(self).scrollTop()+n()+50,u=$("h1.section-title"),i=0;_.forEach(u,function(n,t){if(n=$(n),n.offset){var u=$(n).offset().top-r;u<0&&(i=t)}});i!==tt.selectedSectionIndex&&t(function(){tt.selectedSectionIndex=i})}},250))}function fi(){ui();var n=+g.get("lastSectionIndex");n&&(tt.selectedSectionIndex=n,lt())}function ei(n,t,i,r){r!==undefined&&(tt.selectedSectionIndex=r,lt())}function ct(){let n=$("#expanded-section-nav-carousel");var t=parseInt(n.css("top")),i=n.height();return t+i}function lt(){if(!it){var n=st();n&&(it=!0,t(function(){var n,i;tt.selectedSectionIndex<0||(n=$($("h1.section-title")[tt.selectedSectionIndex]),n.offset&&n.offset())&&(i=n.offset().top-ct(),console.log("newScrollTop",i),tt.selectedSectionIndex===0&&(i=0),$("html,body").animate({scrollTop:i},1e3,"swing",function(){t(function(){it=!1},100)}))},4))}}function oi(n){return n?(n.Branding&&_.each(n.MenuItems,function(t){t.SectionBrand=n.Branding}),n.MenuItems):undefined}function si(n){return n&&n.MaximumCount&&tt.item.currentOrderItem.Quantity>=n.MaximumCount}function hi(n){return n&&tt.item.currentOrderItem.Quantity<=n.MinimumCount}function ci(n){return n.PrimaryImageUrl?"background-image: url('"+n.PrimaryImageUrl+"')":""}function li(){return d.initialize(u,tt.menu,tt.merchantLocation)}function ai(){return ft?v.noCart():v.initializeCart(ut,dt,ni,tt.merchantLocation,gt).then(null,function(){i.setTimeout(function(){e.go("locationHome",{},{location:"replace"})},0)})}function at(n){!n&&tt.menu.SectionBrands&&tt.menu.SectionBrands.length&&(n=tt.menu.SectionBrands[pt()]);tt.menuSections=_.filter(tt.menu.MenuSections,function(t){return t.IsHidden?!1:tt.merchantLocation.IsSectionBranding&&n?t.Branding===n:!0})}function vt(){return h.isSize("xs")&&(tt.sectionReplaceOptions=undefined),tt.alwaysFloatCart=tt.merchantLocation.CartUiBehavior===1,at(),tt.menuSections&&tt.menuSections.length&&(f.sectionId?tt.selectedSectionIndex=yt(f.sectionId):!h.isSize("xs")&&k.mustNavigateToSection()&&t(function(){rt(tt.menuSections[0].Id,tt.replaceOptions)},100),f.sectionId&&tt.menu.SectionBrands&&tt.menu.SectionBrands.length&&(tt.selectedSectionBrandIndex=pt())),pi(),!0}function yt(){return _.findIndex(tt.menuSections,function(n){return n.Id===f.sectionId})}function pt(){var i=0,n=st(),t;return n&&n.Branding&&tt.menu.SectionBrands&&tt.menu.SectionBrands.length&&(t=_.findIndex(tt.menu.SectionBrands,function(t){return t===n.Branding}),t>0&&(i=t)),i}function vi(){yi();d.initializeUi()}function yi(){tt.isCartInPage=!tt.alwaysFloatCart&&(h.isSize("md")||h.isSize("lg"));i.setTimeout(function(){$(".ui.sidebar").sidebar({overlay:!0}).show();tt.isCartInPage?$(".cart-tab").hide():($(".cart-tab").show(),et&&(et=!1,i.setTimeout(function(){kt()},4)))},750)}function pi(){var n=_.debounce(function(){t(function(){tt.isCartInPage=!tt.alwaysFloatCart})},333,!0),r=_.debounce(function(){t(tt.onResized)},334,!1);$(i).resize(function(){n();r()});tt.onResized()}function wi(){if(tt.menu.MerchantId!==tt.merchantLocation.MerchantId){tt.menu={};n.warn("Merchant Location ID mismatch");throw new Error("Something went wrong.");}return!0}function bi(){return a.getMenu(ut).then(function(n){return tt.menu=n,n})}function ki(){return y.getById(ti).then(function(n){return tt.merchantLocation=n,n})}function rt(n,t){f.sectionId=n;tt.showAppBackButton=!1;tt.selectedSectionIndex=yt(n);k.showSections(f,t,tt.cart)}function st(){if(!tt.menuSections||!tt.menuSections.length)return null;if(tt.selectedSectionIndex>=0)return tt.menuSections[tt.selectedSectionIndex];return _.find(tt.menuSections,function(n){return n.Id===+f.sectionId})}function wt(n){var i=v.getStoredItemsToAdd(),t;i&&i.length&&(t=i[0],n?(v.removeStoredItemsToAdd(t),bt(t.id)):rt(t.sectionId,tt.sectionReplaceOptions))}function bt(n){g.set("lastSectionIndex",tt.selectedSectionIndex);d.selectNewMenuItem(n);ht()}function kt(n){n&&togoorder.isCartOpenWithSwipeDisabled||($(".ui.sidebar").sidebar("show"),tt.isSidebarVisible=!0)}function ht(){$(".ui.sidebar").sidebar("hide");tt.isSidebarVisible=!1}function di(){var t=tt.cart.order,n;if(t&&t.constructor===nt){if(b.applyPricingRules(tt.cart.order,tt.menu),n=w.validateOrder(t,tt.menu,tt.merchantLocation),n.fatals){v.destroy();o.open({templateUrl:"app/menu/menuChangesAlert.html",controller:"menuChangesAlert as vm",size:"md",resolve:{validations:function(){return n}}}).result["finally"](function(){e.go("locationHome")});return}(n.errors||n.warnings)&&o.open({templateUrl:"app/menu/menuChangesAlert.html",controller:"menuChangesAlert as vm",size:"md",resolve:{validations:function(){return n}}})}}function gi(){return["menu-"+ut]}function nr(){return!tt.cart||!tt.cart.order?0:(v.getItems(tt.cart.order)||[]).length}var tt=this,ut=parseInt(f.menuId,10),dt=f.orderType,gt=f.day,ni=f.fulfillmentType,ft=!!f.isPreview,ti=togoorder.locationId,et=!1,it=!1,ot;tt.log=n.debug;tt.selectSection=rt;tt.alwaysFloatCart=!1;tt.appBack=p.goBack;tt.hasAppBack=p.hasAppBack;tt.showAppBackButton=!1;tt.isSectionsInFocus=!0;tt.showCartSidebar=kt;tt.isCartInPage=!0;tt.hideCartSidebar=ht;tt.selectNewMenuItem=bt;tt.isSidebarVisible=!1;tt.merchantLocation={};tt.menu={};tt.replaceOptions={location:"replace"};tt.sectionReplaceOptions=tt.replaceOptions;tt.isPreview=ft;Object.defineProperty(tt,"cart",{get:ft?function(){return{}}:function(){return v.getCart()}});tt.onResized=vi;tt.item=d;tt.getItemImageStyle=ci;tt.safeClassName=c.safeClassName;tt.getTopCssClasses=gi;tt.canIncreaseQuantity=si;tt.canDecreaseQuantity=hi;tt.getItemIncludedItemsTemplate=k.getItemIncludedItemsTemplate;tt.getItemCount=nr;tt.menuSections=undefined;tt.getSectionItems=oi;tt.getSelectedSection=st;tt.selectedSectionIndex=0;tt.expandedSectionCarouselLoaded=fi;tt.flickityExpandedSectionsOptions={cellSelector:".carousel-cell",cellAlign:"left",wrapAround:!1,percentPosition:!1,resize:!0,pageDots:!1,groupCells:"0%",accessibility:!0,on:{staticClick:ei}};tt.flickitySectionsOptions={cellSelector:".carousel-cell",cellAlign:"left",wrapAround:!1,percentPosition:!1,resize:!0,pageDots:!1,asNavFor:"#section-items",groupCells:"80%",accessibility:!0};tt.flickityItemsOptions={cellSelector:".selected-menu-section",groupCells:!1,cellAlign:"left",wrapAround:!1,percentPosition:!1,resize:!0,pageDots:!1,prevNextButtons:!1,adaptiveHeight:!0,dragThreshold:80,fade:!Modernizr.touch,on:{change:ii}};tt.flickitySectionBrandsOptions={cellSelector:".carousel-cell",cellAlign:"center",freeScroll:!1,wrapAround:!1,percentPosition:!1,resize:!0,contain:!0,pageDots:!1,groupCells:!0,draggable:!1,accessibility:!0,on:{staticClick:function(n,i,r,u){t(function(){tt.selectedSectionBrandIndex=u;at(tt.menu.SectionBrands[u]);h.isSize("xs")?k.goToSections(f):tt.selectSection(tt.menuSections[0].Id,tt.sectionReplaceOptions)})}}};tt.selectedSectionBrand=undefined;ot=0;Object.defineProperty(tt,"selectedSectionBrandIndex",{get:function(){return ot},set:function(n){ot=n;tt.selectedSectionBrand=tt.menu.SectionBrands[n]}});ri();u.$on("$stateChangeSuccess",function(n,t){(t.name==="menu.sections"||t.name==="days.menus.menu.sections")&&vt()});u.$on("$stateChangeStart",function(){d.toggleOptions(!1);tt.hideCartSidebar()});u.$on("$stateChangeSuccess",function(n,t){t.name==="menu.sections"||t.name==="days.menus.menu.sections"?(tt.isSectionsInFocus=!0,d.selectedMenuItem=null,tt.showAppBackButton=tt.hasAppBack(),wt(!1)):(t.name==="menu.sections.items"||t.name==="days.menus.menu.sections.items")&&(tt.isSectionsInFocus=!1,d.selectedMenuItem=null,tt.showAppBackButton=tt.hasAppBack()&&!h.isSize("xs"),wt(!0))})}angular.module("main").controller("menu",["$log","$timeout","$window","$q","$scope","$stateParams","$state","$uibModal","events","browserInfo","common","notify","menuService","cartService","merchantLocationService","routeStateService","orderValidationService","orderPricingService","menuWorkflowService","menuItemDetailViewModel","storageService","Order",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a){function p(){h.activateController([a.waitForInitialization()],"menuSectionItems").then(function(){})}function w(){e.history.back()}var v=this,b=parseInt(r.menuId,10),k=parseInt(r.sectionId,10),y=i.vm;v.merchantLocation={};v.backToMenuSections=w;p();Object.defineProperty(v,"selectedSection",{get:function(){return y.getSelectedSection()}})}angular.module("main").controller("menuSectionItems",["$log","$timeout","$scope","$stateParams","$state","$uibModal","$window","events","browserInfo","common","notify","menuService","cartService",n])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h){function y(){f.activateController([w(),b(),s.waitForInitialization()],"menuSections")}function p(){if(!c.selectedSectionId)return 0;return _.findIndex(v.menuSections,function(n){return n.Id===c.selectedSectionId})}function w(){return o.getMenu(l).then(function(n){return c.menu=n,n})}function b(){return e.getById(a)}var c=this,l=parseInt(r.menuId,10),k=parseInt(r.orderType,10),a=togoorder.locationId,v=n.vm;c.menu={};c.selectedSectionId=null;y();Object.defineProperty(c,"selectedFlickityIndex",{get:function(){return p()},set:function(){}});n.$on("$stateChangeSuccess",function(n,t){h.isSectionsState(t)?(c.selectedSectionId=null,c.menu&&c.menu.Id===l&&f.activateController([],"menuSections")):h.isSectionItemsState(t)&&(c.selectedSectionId=parseInt(r.sectionId,10))})}angular.module("main").controller("menuSections",["$scope","$q","$state","$stateParams","$timeout","common","merchantLocationService","menuService","cartService","menuWorkflowService",n])}(),function(){"use strict";function n(n,t,i,r,u){function e(n,i){try{return!n||!i?" one or more of the selected items":r.getOrderTypeDescription(n,i)}catch(u){return t.warn(u,arguments),""}}var f=this;f.validations=u;f.close=n.close;f.getOrderTypeDescription=e;f.maxErrorLevel=f.validations.fatals?"fatals":f.validations.errors?"errors":"warnings";f.safeClassName=i.safeClassName}angular.module("common").controller("menuChangesAlert",["$uibModalInstance","$log","common","orderTypeWorkflowService","validations",n])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l){function w(){s.activateController([k().then(d)],n)}function b(n){if(!n)return undefined;return"m-"+s.safeClassName(n.MenuName)}function k(){return c.getById(v).then(function(n){return a.merchantLocation=n,n})}function d(){return c.getMenus(v,p,y).then(function(n){return a.menuSelections=n.menuSelections,a.menuSelections&&a.menuSelections.length===1&&a.merchantLocation.BypassMenuAndHoursScreen?u(function(){a.selectMenu(a.menuSelections[0],{location:"replace"})},4):l.addState(o),n.menuSelections})}function g(n,t){o.go("menu.sections",{merchantLocationId:v,menuId:n.MenuId,orderType:p,fulfillmentType:y},t)}var a=this,v=togoorder.locationId,y=e.fulfillmentType,p=e.orderType;sessionStorage.setItem("is_unlistedOnly",e.unlistedOnly==="unlistedOnly");a.menuSelections=undefined;a.selectMenu=g;a.appBack=l.goBack;a.hasAppBack=l.hasAppBack;a.merchantLocation={};a.getMenuClass=b;w()}var n="chooseMenu";angular.module("main").controller(n,["$scope","$q","$window","$timeout","$log","$stateParams","$state","common","notify","merchantLocationService","routeStateService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l){function k(){s.activateController([tt(),it(),d()],n).then(function(){if(e.day)l.addState(o);else{var n=_.findWhere(a.days,{weekDay:w});n&&u(function(){b(n,{location:"replace"})},4)}})}function d(){c.getEarliestDayOrderable(v,p,y).then(function(n){w=n})}function g(n){return n?n:""}function b(n,t){n.menus&&n.menus.length&&a.selectedDay!==n.weekDay&&(a.selectedDay=n.weekDay,e.day=n.weekDay,o.go("days.menus",e,t))}function nt(n){return a.selectedDay===n.weekDay}function tt(){return c.getById(v).then(function(n){return a.merchantLocation=n,n})}function it(){return c.getDaysWithMenus(v,p,y).then(function(n){a.days=n})}var a=this,v=togoorder.locationId,y=e.fulfillmentType,p=e.orderType,w;a.days=undefined;a.appBack=l.goBack;a.hasAppBack=l.hasAppBack;a.selectDay=b;a.selectedDay=e.day;a.isSelectedDay=nt;a.getHoursOfOperationDisplay=g;a.merchantLocation={};k()}var n="days";angular.module("main").controller(n,["$scope","$q","$window","$timeout","$log","$stateParams","$state","common","notify","merchantLocationService","routeStateService",t])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v){function g(){h.activateController([nt(),tt()],"daysMenus").then(function(){var n=_.find(y.days,function(n){return n.weekDay===b});n&&(y.menus=n.menus,y.menus&&y.menus.length===1&&e(function(){w(y.menus[0],{location:"replace"})},4))})}function w(n,t){r.menuId=n.MenuId;u.go("days.menus.menu.sections",r,t)}function nt(){return v.getById(p).then(function(n){return y.merchantLocation=n,n})}function tt(){return v.getDaysWithMenus(p,k,d).then(function(n){y.days=n})}var y=this,b=r.day,k=r.orderType,d=r.fulfillmentType,p=togoorder.locationId;y.merchantLocation={};y.days=[];y.menus=undefined;y.selectMenu=w;g()}angular.module("main").controller("daysMenus",["$log","$q","$scope","$stateParams","$state","$uibModal","$timeout","events","browserInfo","common","notify","menuService","cartService","merchantLocationService",n])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d){function st(){h.activateController([wt().then(function(){bt();ht()}),lt(),ct()],n).then(function(){et(g.address.getGoogleAddress());a.addState(o);$(document).on({DOMNodeInserted:function(){$(".pac-item, .pac-item span",this).addClass("needsclick")}},".pac-container")})}function ht(){it=b.getOrderTypeRule(nt,tt,g.merchantLocation);g.instructionsField=it.InstructionsField}function ct(){return l.getDeliveryZones(nt,tt).then(function(n){g.deliveryZones=n})}function lt(){var n=function(n){return n.OrderType!=nt||n.FulfillmentType!=tt};return b.getDisplayOrderTypes(n).then(function(n){g.orderTypes=n})}function at(n){g.isOrderTypeChoicesOpen=!1;k.loadCurrent().then(function(t){b.switchToOrderTypeRule(n,rt,t.hasOrderItems())},function(){b.switchToOrderTypeRule(n,rt,!1)})}function vt(){return it.DeliveryServiceHasOwnZones?l.checkAddressIsInDeliveryServiceArea(it,g.address,0).then(function(){return g.isAddressInDeliveryArea=!0,y.success("Your address is in the delivery area! You're good to go."),!0},function(){g.isAddressInDeliveryArea=!1;ut()}).catch(function(n){f.error(n)}):l.checkAddressIsInAnyDeliveryArea(g.address,g.deliveryZones).then(function(){return g.isAddressInDeliveryArea=!0,y.success("Your address is in the delivery area! You're good to go."),!0},function(){g.isAddressInDeliveryArea=!1;ut()}).catch(function(n){f.error(n)})}function yt(){var n=togoorder||{};return n.merchantLocation.MerchantLocationCount>1}function ut(){y.dialog({dialogTitle:"Oh No!",dialogMessage:"So Sorry. This address is not in our delivery area.",buttonActions:yt()?[{action:function(){h.broadcast(c.navigateToMerchantHome,{})},text:"Find Another Location"}]:[],cssClass:"delivery-area-alert"})}function pt(){y.warning("Sorry. We need an address with a valid street number.")}function wt(){return v.getById(ot).then(function(n){return g.merchantLocation=n,n})}function bt(){l.getDeliveryAddress().then(function(n){g.address=n},function(){return i.when(1)})}function kt(n){if(n)g.isAddressInDeliveryArea?l.cacheDeliveryAddress(g.address).then().then(function(){rt?o.go("menu.sections",e):d.goToFirstState(e)}).catch(function(n){f.error(n)}):ut();else{var t="There's a problem. Please correct any problems AND be sure your address is found on the map.";y.dialog("Almost Perfect!",t);y.warning(t)}}function ft(n){var t=_.reduce(n,function(n,t){return n+t},0);return t/n.length}function et(n,t){function h(n){u(function(){g.isAddressInDeliveryArea=!1});var t=g.address.parseMapBoxFeature(n);return t instanceof p?(f.setHTML(`<div><strong>Deliver Here?</strong><br>${t.displayString}`),u(function(){g.address=t;vt()})):(f.setHTML(`<div><strong>What Street Number?</strong><br>${t.displayString}`),pt()),Array.isArray(n.geometry.coordinates)&&n.geometry.coordinates.length&&(s=(new mapboxgl.Marker).setLngLat(n.geometry.coordinates).setPopup(f).addTo(e).togglePopup()),t}var f,s;if(!t){setTimeout(function(){et(n,!0)},100);return}var c=$(".mapboxgl-ctrl-geocoder--input"),i={lat:0,lng:0},r=null;g.deliveryZones&&g.deliveryZones.length&&(r=g.deliveryZones[g.deliveryZones.length-1]);r&&r.Coordinates&&r.Coordinates.length&&(i.lat=ft(_.map(r.Coordinates,function(n){return n.Lat})),i.lng=ft(_.map(r.Coordinates,function(n){return n.Lng})));i.lat||i.lng||(i={lat:36.1866405,lng:-86.7852454});mapboxgl.accessToken=togoorder.MapBoxApiKey;const e=new mapboxgl.Map({container:"map-canvas",style:"mapbox://styles/mapbox/streets-v11",center:[i.lng,i.lat],zoom:10});e.addControl(new mapboxgl.NavigationControl);const o=new MapboxGeocoder({accessToken:mapboxgl.accessToken,mapboxgl:mapboxgl,marker:!1,placeholder:"Delivery Address*",types:"address,poi",language:"en-US"});f=new mapboxgl.Popup;s=(new mapboxgl.Marker).setLngLat([0,-29]);e.on("load",function(){o.on("result",function(n){f.remove();s.remove();document.activeElement.blur();g.address=new p;var t=h(n.result)});n&&o.query(n);$("#pac-input").on("click",".suggestions li a",function(){var n=$(this),t=n.find("div.mapboxgl-ctrl-geocoder--suggestion-title").text(),i=n.find("div.mapboxgl-ctrl-geocoder--suggestion-address").text(),r=`${t},${i}`;o.query(r)})});document.getElementById("pac-input").appendChild(o.onAdd(e))}var g=this,ot=togoorder.locationId,nt=e.orderType,tt=e.fulfillmentType,rt=e.menuId,it={};g.address=new p;g.orderTypes=[];g.orderTypeDisplay=w.getOrderTypeDescription(nt,tt);g.instructionsField="";g.switchToOrderType=at;g.enterDeliveryAddress=kt;g.merchantLocation={};g.isAddressInDeliveryArea=!1;g.appBack=a.goBack;g.hasAppBack=a.hasAppBack;g.deliveryZones=[];g.safeClassName=h.safeClassName;g.mandatoryText={name:"required input",url:"shared/mandatoryMsg.html"};st();t.$on("$destroy",function(){$("#pac-input").off("click","**")})}var n="getDeliveryAddress";angular.module("main").controller(n,["$scope","$q","$window","$timeout","$log","$stateParams","$state","$uibModal","common","events","deliveryService","routeStateService","merchantLocationService","notify","Address","orderTypeWorkflowService","orderTypeRuleService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b){function it(){h.activateController([rt(),ft()],n).then(function(){a.addState(o)})}function rt(){c.getTableNumber(g).then(function(n){k.tableNumber=n})}function ut(){a.goBack()}function ft(){var n=function(n){return n.OrderType!=nt||n.FulfillmentType!=tt};return p.getDisplayOrderTypes(n).then(function(n){k.orderTypes=n})}function et(n){k.isOrderTypeChoicesOpen=!1;w.loadCurrent().then(function(t){p.switchToOrderTypeRule(n,d,t.hasOrderItems())},function(){p.switchToOrderTypeRule(n,d,!1)})}function ot(){if(k.tableNumber)c.cacheTableNumber(k.tableNumber,g).then(function(){d?o.go("menu.sections",e):b.goToFirstState(e)});else{var n="We really need your table number so your food can find its way to you.";l.dialog("Almost Perfect!",n);l.warning(n)}}var k=this,g=togoorder.locationId,nt=e.orderType,tt=e.fulfillmentType,d=e.menuId;k.tableNumber="";k.orderTypes=[];k.orderTypeDisplay=y.getOrderTypeDescription(nt,tt);k.switchToOrderType=et;k.enterTableNumber=ot;k.back=ut;k.safeClassName=h.safeClassName;it()}var n="getTableNumber";angular.module("main").controller(n,["$scope","$q","$window","$timeout","$log","$stateParams","$state","$uibModal","common","deliveryService","notify","routeStateService","merchantLocationService","orderTypeWorkflowService","orderTypeRuleService","cartService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c){function v(){e.activateController([],n);h.cacheTableNumber(l.tableNumber,a).then(function(){f(function(){o.spinnerShow()},500);f(function(){c.goToFirstState({orderType:1,fulfillmentType:2})},2e3)})}var l=this,a=togoorder.locationId;l.tableNumber=r.tableNumber;v()}var n="setTableNumber";angular.module("main").controller(n,["$rootScope","$state","$stateParams","$location","$timeout","common","spinner","events","deliveryService","menuWorkflowService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){function k(){b?s.activateController([d()],n).then(function(){a.addState(o)}):o.go("home")}function d(){return l.getOrderTypes(b).then(function(n){w.mobileMessage=n.mobileMessage;w.orderTypeViewModels=n.orderTypeViewModels})}function g(n){p.loadCurrent().then(function(t){if(t&&t.hasOrderItems()){var i=t.order.MenuId;l.getMenus(b,n.OrderType,n.FulfillmentType).then(function(t){var u=t.menuSelections,f=_.some(u,{MenuId:i}),r;f?y.goToFirstState({orderType:n.OrderType,fulfillmentType:n.FulfillmentType}):(r=h.dialog({dialogTitle:"Switch to "+n.Description+"?",dialogMessage:n.Description+" has a different menu. If you switch, you'll lose your cart.",dismissButtonText:"Cancel",closeButtonText:"Switch"}),r.then(function(){p.destroy();y.goToFirstState({orderType:n.OrderType,fulfillmentType:n.FulfillmentType})}))})}else y.goToFirstState({orderType:n.OrderType,fulfillmentType:n.FulfillmentType})},function(){p.destroy();y.goToFirstState({orderType:n.OrderType,fulfillmentType:n.FulfillmentType})})}function nt(){c.spinnerShow();l.getById(b).then(function(n){v.begin(n)["finally"](function(){c.spinnerHide()})})}var w=this,b=togoorder.locationId;w.orderTypeViewModels=undefined;w.mobileMessage="";w.selectOrderType=g;w.orderMyUsual=nt;k()}var n="chooseOrderType";angular.module("main").controller(n,["$scope","$http","$q","$timeout","$log","$stateParams","$state","common","notify","spinner","merchantLocationService","routeStateService","usualOrderService","menuWorkflowService","cartService",t])}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v){function w(){p?o.activateController([ft()],n).then(function(){v.addState(e)}).then(function(){et()}).then(function(){st()}):e.go("home")}function b(){e.go("loyaltyAdmin",{},null)}function k(){e.go("offers",{},null)}function d(){e.go("punchCards",{},null)}function g(){e.go("achEnrollment",{},null)}function nt(){e.go("personalInfo",{},null)}function tt(){e.go("loyaltyAdmin",{updating:!0},null)}function it(){return a.checkIsAuthenticated()}function rt(){o.broadcast(s.securityAuthorizationRequired,{})}function ut(){o.broadcast(s.securityAuthorizationRequired,{goSignUp:!0})}function ft(){return l.getOrderTypes(p).then(function(n){y.mobileMessage=n.mobileMessage})}function et(){return l.getById(p).then(function(n){y.merchantLocation=n})}function ot(){return y.merchantLocation.LoyaltyProfile.IsAchEnabled}function st(){return a.checkIsAuthenticated()?a.getUserWithLoyalty(y.merchantLocation.MerchantId).then(function(n){y.user=n}):i.when()}function ht(){var n="Not Enrolled";if(y.user&&y.user.Loyalties&&y.user.Loyalties.length)switch(y.user.Loyalties[0].AchStatus){case 1:n="Pending";break;case 2:n="Verification Required";break;case 3:n="Active";break;case 4:n="Suspended"}return n}var y=this,p=togoorder.locationId;y.mobileMessage="";y.isLoggedIn=it;y.signIn=rt;y.goToRewards=b;y.goToOffers=k;y.goToPunchCards=d;y.isAchEnabled=ot;y.goToAchEnrollment=g;y.getAchStatusLabel=ht;y.goToPersonalInfo=nt;y.signUp=ut;y.goToUpdateCard=tt;w()}var n="loyaltyHome";angular.module("main").controller(n,["$scope","$q","$timeout","$log","$stateParams","$state","common","events","notify","spinner","merchantLocationService","userService","routeStateService",t])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c){function v(){l.survey.Comments="";_.each(l.survey.FeedbackQuestions,function(n){n.Value=0});o.spinnerHide()}function y(){var n={FeedbackSurveyId:l.survey.Id,FeedbackQuestionResponses:[],Comments:l.survey.Comments,LocationId:togoorder.merchantLocation.Id};_.each(l.survey.FeedbackQuestions,function(t){n.FeedbackQuestionResponses.push({FeedbackQuestionId:t.Id,Value:t.Value})});o.spinnerShow();h.saveFeedback(n).then(function(){o.spinnerHide();a();s.dialog("Thank you","Thank you for your feedback.")})}function a(){i.dismiss();i=null}var l=this;l.cancel=a;l.submitFeedback=y;l.survey=c;v();n.$on("$stateChangeStart",function(){i&&a()})}angular.module("main").controller("feedbackSurvey",["$scope","$state","$uibModalInstance","$uibModal","$window","common","events","spinner","notify","feedbackService","survey",n])}(),function(){"use strict";var n=angular.module("common");n.filter("giftCardMask",function(){return function(n){var t,i;return n.length<5?n:(t=n.substr(n.length-4,4),n.length>=14?(i=n.substr(0,6),`${i}${"x".repeat(n.length-10)}${t}`):`${"x".repeat(n.length-4)}${t}`)}})}()