{"version":3,"sources":["delivery-intervals-dialog-box.js","overlays.js","master.js","main.js","angular-cookies.js","angular-resource.js","angular-sanitize.js","angular-smooth-scroll.js","controllers.js","directives.js","filters.js","ngKookies.js","ngStorage.js","resources.js","services.js","ui-bootstrap-tpls-0.11.0.js","wap.search.resource.js","basket.js","cookies.js","customerserviceService.js","gatracking.js","identity.js","order.js","prescription.js","preventrequestcachinginterceptor.js","preventtemplatecacheinterceptor.js","product.js","RaptorProductService.js","receipt.js","responseinterceptor.js","review.js","search.js","shipping.js","shippinginfo.js","shippingService.js","storage.js","subscription.js","subscriptiondelivery.js","tagManager.js","urlhelper.js","user.js","utilities.js","billing.js","category.js","competition.js","customerinfo.js","filter.js","giftwrap.js","grants.js","login.js","modalinstance.js","myPageDeleteProfile.js","myPageEditProfileType.js","myPageOrderHistory.js","myPageProfileForm.js","myPageSubscriptionDeliveryDetails.js","myPageSubscriptionDetails.js","nemIdLogin.js","newbasket.js","newslettersubscribe.js","panelsearch.js","productDetailsSubscription.js","productlist.js","profileConfirmPassword.js","ProfileInformation.js","RaptorProductController.js","subscriptionCreation.js","subscriptionDeliveryShippingDetails.js","subscriptionflow.js","subscriptionShippingDetails.js","keepitemswithproperty.js","newlines.js","nohtml.js","nowhitespace.js","reduceitems.js","removeitemswithproperty.js","replacespaces.js","reverseitems.js","safe.js","angular-pageslide-directive.js","autofillmodel.js","becomemember.js","blur.js","clickoutside.js","cookieinfo.js","dictionary-item.js","enter.js","fielderror.js","gaecommercetracking.js","highlighter.js","locationtransition.js","mobilenavigation.js","modaldialog.js","model.js","mypageorderhistory.js","new-basket-product-orderline.js","orderdetails.js","orderdetailscontainer.js","orderhistory.js","owlcarousel.js","productdetail.js","productlistitem.js","productorderline.js","profile-address.js","profile-base-directive.js","profile-birthdate.js","profile-change-password.js","profile-cpr.js","profile-customer-type.js","profile-field-layout.js","profile-gender.js","profile-in-house.js","profile-member-of-danmark.js","profile-newsletter.js","profile-subscription-card.js","profilefielderror.js","raptor-banner.js","responseerror.js","scrollto.js","searchautosuggest.js","searchform.js","shipping-options.js","shippingexpand.js","shippingtypeselect.js","slidetoggle.js","starrating.js","subscription-address.js","subscription-card.js","subscription-interval.js","subscription-products.js","subscription-title.js","tabs.js","validateean.js","validatequantity.js","warning-message.js","webshipper-directive.js","ziplookup.js","app.js","site.js","webapoteket.reviews.js"],"names":["deliverIntervalsDialogbox","deliveryIntervalsTrigger","$","overlayBackdrop","closeDeliveryIntervals","deliveryIntervalsDialogBox","length","click","e","stopPropagation","fadeIn","addClass","hasClass","fadeOut","removeClass","overlays","overlayTrigger","closeOverlay","continueShopping","overlay","dialogBox","dialogBoxLink","overlayName","currentTarget","getAttribute","this","data","scrollTop","console","log","counter","type","el","countEl","parentNode","getElementsByClassName","count","value","isDateValid","selectedDate","setHours","dateToday","displayOrHideMessage","inputObject","errorMessageObject","display","prop","datepicker","$datePickers","$errorMsg","each","$datePicker","$self","dateFormat","showWeek","firstDay","showOtherMonths","selectOtherMonths","constrainInput","showOn","buttonText","minDate","defaultDate","beforeShow","textbox","instance","setTimeout","prepend","dpDiv","onSelect","dateText","inst","parsedDate","Date","selectedYear","selectedMonth","parseInt","selectedDay","on","k","startDateMask","mask","placeholder","birthdayMask","openOverlay","novicell","create","class","selector","selectDeliveryShop","parent","children","siblings","showHidePassword","passwordInput","next","showPasswordText","attr","hidePasswordText","text","wrapCollapsibleDivs","nextUntil","filter","wrapAll","collapsible","toggleClass","servicemenu","servicemenuLink","headerServiceInfoIconsClick","container","expandable","current","condition","html","slideUp","slideDown","CaruselBanner","slideNumber","slider","document","querySelectorAll","sliderItem","i","isPrimaryContent","maxNumber","autoplay","autoplayInt","startSlide","undefined","Math","round","random","Flickity","cellAlign","contain","cellSelector","wrapAround","prevNextButtons","initialIndex","autoPlay","lazyLoad","classList","add","flickitySliderFrontpage","pageDots","produktOverviewSlider","raptorSlider","myProfileTooltip","hover","searchFieldMobile","window","innerWidth","header","main","disclaimerMobileHeight","outerHeight","searchHeight","navHeight","categoryNav","moveUpHeader","moveUpContent","totalHeight","css","searchAutoSuggestHeight","searchAutoSuggestContainer","windowHeight","height","searchAutoSuggestContainerHeight","ifBrowserIsIe","ua","navigator","userAgent","msie","indexOf","match","getCookie","iePopup","edgeButton","hasChildNodes","url","location","href","a","createElement","setAttribute","innerHTML","dataset","appendChild","setCookie","t","o","cookie","split","n","charAt","substring","setTime","getTime","toUTCString","angular","$$CookieWriter","$document","$log","$browser","buildCookieString","name","options","path","expires","isDefined","cookiePath","isUndefined","isString","str","encodeURIComponent","domain","secure","cookieLength","warn","baseHref","rawDocument","module","info","angularVersion","provider","calcOptions","extend","defaults","$get","$$cookieReader","$$cookieWriter","get","key","getObject","fromJson","getAll","put","putObject","toJson","remove","factory","$cookies","$inject","isValidDottedPath","MEMBER_NAME_REGEX","test","lookupDottedPath","obj","$resourceMinErr","keys","ii","shallowClearAndCopy","src","dst","forEach","hasOwnProperty","$$minErr","PROTOCOL_AND_IPV6_REGEX","stripTrailingSlashes","cancellable","actions","method","save","query","isArray","delete","$http","$q","$timeout","Route","template","urlParams","resourceFactory","paramDefaults","extractParams","actionParams","ids","isFunction","substr","defaultResponseInterceptor","response","resource","Resource","route","prototype","toJSON","$promise","$resolved","$cancelRequest","action","hasBody","numericTimeout","timeout","isNumber","debug","a1","a2","a3","a4","cancelRequest","promise","catch","noop","timeoutDeferred","resolve","success","error","params","arguments","numericTimeoutPromise","isInstanceCall","httpConfig","responseInterceptor","interceptor","responseErrorInterceptor","responseError","hasError","hasResponseErrorInterceptor","copy","defer","setUrlParams","then","item","push","reject","cancel","headers","status","statusText","result","call","encodeUriQuery","$$encodeUriQuery","encodeUriSegment","$$encodeUriSegment","config","actionUrl","val","encodedVal","self","protocolAndIpv6","Object","param","RegExp","isQueryParamValue","replace","paramInfo","urlParam","p1","leadingSlashes","tail","$SanitizeProvider","toMap","lowercaseKeys","items","lowercase","htmlParserImpl","handler","inertBodyElement","getInertBodyElement","mXSSAttempts","$sanitizeMinErr","node","firstChild","nodeType","start","nodeName","toLowerCase","attrToMap","attributes","chars","textContent","nextNode","end","getNonDescendant","removeChild","attrs","map","encodeEntities","SURROGATE_PAIR_REGEXP","hi","charCodeAt","low","NON_ALPHANUMERIC_REGEXP","htmlSanitizeWriterImpl","buf","uriValidator","ignoreCurrentElement","out","bind","tag","blockedElements","validElements","lkey","isImage","validAttrs","uriAttrs","voidElements","stripCustomNsAttrs","Node","ELEMENT_NODE","l","attrNode","attrName","lastIndexOf","removeAttributeNode","propName","nodeContains","outerHTML","outerText","svgEnabled","$$sanitizeUri","svgElements","htmlParser","htmlSanitizeWriter","uri","join","enableSvg","contains","arg","compareDocumentPosition","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","htmlAttrs","svgAttrs","getInertBodyElement_XHR","encodeURI","xhr","XMLHttpRequest","responseType","open","send","body","getInertBodyElement_DOMParser","DOMParser","parseFromString","getInertBodyElement_InertDocument","documentMode","inertDocument","implementation","createHTMLDocument","documentElement","getDocumentElement","querySelector","sanitizeText","writer","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","isObject","target","addText","addLink","linkAttributes","attributesFn","raw","index","resolveOffset","offset","element","isElement","offsetEl","offsetHeight","smoothScroll","duration","easing","callbackBefore","callbackAfter","getScrollLocation","pageYOffset","percentage","position","scrollableElements","userScrollListener","startLocation","timeLapsed","easingPattern","time","getEndLocation","offsetParent","offsetTop","max","endLocation","distance","stopOnUserScroll","clearInterval","runAnimation","off","stopAnimation","currentLocation","innerHeight","scrollHeight","animateScroll","scrollTo","setInterval","defaultOptions","setDefaultOptions","directive","smoothScrollProvider","restrict","scope","link","$scope","$elem","$attrs","scrollIf","exprHandler","targetElement","preventDefault","getElementById","root","exports","require","define","amd","setConfig","newConfig","setDefaults","newDefaults","privateMethods","publicMethods","decode","s","decodeURIComponent","encode","parseCookie","slice","json","stringifyCookie","String","read","converter","cookies","parts","shift","set","days","_storageFactory","storageType","$rootScope","$window","isStorageSupported","supported","err","localStorage","setItem","removeItem","_last$storage","_debounce","webStorage","getItem","$storage","$default","$reset","$watch","temp$storage","equals","v","addEventListener","event","newValue","$apply","findEndEventName","endEventNames","transElement","style","$transition","trigger","deferred","endEventName","animation","transitionEndHandler","unbind","transitionEndEventNames","WebkitTransition","MozTransition","OTransition","transition","animationEndEventNames","transitionEndEventName","animationEndEventName","doTransition","change","newTransitionDone","currentTransition","newTransition","expand","initialAnimSkip","expandDone","collapse","collapseDone","offsetWidth","shouldCollapse","constant","closeOthers","controller","accordionConfig","groups","openGroup","$eval","group","isOpen","addGroup","groupScope","that","$on","removeGroup","splice","transclude","templateUrl","heading","isDisabled","setHeading","accordionCtrl","toggleOpen","accordionGroupCtrl","accordionTransclude","append","closeable","close","bindHtmlUnsafe","activeClass","toggleEvent","buttonConfig","ctrls","buttonsCtrl","ngModelCtrl","$render","$modelValue","btnRadio","isActive","uncheckable","$setViewValue","getTrueValue","getCheckboxValue","btnCheckboxTrue","getFalseValue","btnCheckboxFalse","attributeValue","defaultValue","restartTimer","resetTimer","interval","isNaN","currentTimeout","timerFn","isPlaying","pause","slides","currentIndex","currentSlide","destroyed","select","nextSlide","direction","goNext","noTransition","$element","slide","entering","leaving","active","$currentTransition","transitionDone","nextIndex","indexOfSlide","newIndex","prev","play","noPause","addSlide","removeSlide","carouselCtrl","service","$locale","orderByFilter","isValid","year","month","date","parsers","formatCodeToRegex","yyyy","regex","apply","yy","y","MMMM","DATETIME_FORMATS","MONTH","MMM","SHORTMONTH","MM","M","dd","d","EEEE","DAY","EEE","SHORTDAY","createParser","format","code","parse","input","parser","results","dt","fields","hours","mapper","getStyle","cssprop","currentStyle","getComputedStyle","isStaticPositioned","parentOffsetEl","docDomEl","elBCR","offsetParentBCR","top","left","offsetParentEl","clientTop","clientLeft","scrollLeft","boundingClientRect","getBoundingClientRect","width","pageXOffset","positionElements","hostEl","targetEl","positionStr","appendToBody","hostElPos","targetElWidth","targetElHeight","targetElPos","positionStrParts","pos0","pos1","shiftWidth","center","right","shiftHeight","bottom","formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","datepickerMode","minMode","maxMode","showWeeks","startingDay","yearRange","maxDate","$parse","$interpolate","dateFilter","datepickerConfig","modes","$parent","refreshView","uniqueId","$id","floor","activeDate","initDate","dateObject","compare","activeDateId","uid","init","ngModelCtrl_","render","$setValidity","_refreshView","createDateObject","model","label","selected","disabled","dateDisabled","mode","arr","size","arrays","setFullYear","getFullYear","getMonth","getDate","move","step","years","months","toggleMode","13","32","33","34","35","36","37","38","39","40","focusElement","focus","keydown","evt","which","shiftKey","altKey","ctrlKey","handleKeyDown","showValidationMessages","datepickerCtrl","ctrl","getDaysInMonth","DAYS_IN_MONTH","getDates","startDate","dates","Array","setDate","getISO8601WeekNumber","checkDate","getDay","setMonth","firstDayOfMonth","difference","numDisplayedFromPreviousMonth","firstDate","secondary","labels","j","abbr","full","title","rows","weekNumbers","weekNumber","numWeeks","date1","date2","min","getStartingYear","range","datepickerPopup","currentText","clearText","closeText","closeOnDateSelection","showButtonBar","$compile","$position","dateParser","datepickerPopupConfig","ngModel","cameltoDash","string","$1","parseDate","viewValue","isDate","datepickerAppendToBody","getText","$observe","popupEl","ng-model","ng-change","datepickerEl","datepickerOptions","option","$parsers","unshift","dateSelection","$viewValue","documentClickBind","noApply","$broadcast","today","$popup","find","after","openClass","openScope","dropdownScope","closeDropdown","escapeKeyBind","isDefaultPrevented","focusToggleElement","dropdownConfig","dropdownService","$animate","getIsOpen","$new","setIsOpen","toggleInvoker","onToggle","assign","toggle","toggleElement","wasOpen","$destroy","dropdownCtrl","toggleDropdown","aria-haspopup","aria-expanded","createNew","stack","idx","removeTop","animate","$modalStack","tElement","tAttrs","windowClass","modal","getTop","backdrop","dismiss","$$stackedMap","backdropIndex","topBackdropIndex","opened","openedWindows","removeModalWindow","modalInstance","eq","modalWindow","removeAfterAnimate","modalDomEl","modalScope","OPENED_MODAL_CLASS","checkRemoveBackdrop","backdropDomEl","backdropScopeRef","backdropScope","domEl","emulateTime","done","afterAnimating","newBackdropIndex","keyboard","currBackdropIndex","angularDomEl","template-url","windowTemplateUrl","window-class","content","reason","dismissAll","topModal","$modalProvider","$injector","$templateCache","$controller","getTemplatePromise","when","cache","getResolvePromises","resolves","promisesArr","invoke","$modal","modalOptions","modalResultDeferred","modalOpenedDeferred","Error","templateAndResolvePromise","all","concat","tplAndVars","$close","$dismiss","ctrlInstance","ctrlLocals","resolveIter","$modalInstance","setNumPages","numPages","itemsPerPage","totalPages","calculateTotalPages","ceil","totalItems","page","selectPage","noPrevious","noNext","boundaryLinks","directionLinks","firstText","previousText","nextText","lastText","rotate","paginationConfig","makePage","number","getPages","currentPage","pages","startPage","endPage","isMaxSized","maxSize","previousPageSet","nextPageSet","paginationCtrl","originalRender","align","pagerConfig","snake_case","regexp","separator","letter","pos","placement","popupDelay","triggerMap","mouseenter","globalOptions","setTriggers","triggers","prefix","defaultTriggerShow","getTriggers","show","hide","directiveName","startSym","startSymbol","endSym","endSymbol","compile","tElem","tooltipLinker","toggleTooltipBind","tt_isOpen","hideTooltipBind","showTooltipBind","hasEnableExp","tt_popupDelay","popupTimeout","reposition","transitionTimeout","tt_content","createTooltip","tooltip","positionTooltip","$digest","tt_animation","removeTooltip","ttPosition","tt_placement","tt_title","delay","unregisterTriggers","$tooltip","progressConfig","bars","addBar","bar","percent","toFixed","removeBar","progressCtrl","stateOn","stateOff","ratingConfig","ratingStates","buildTemplateObjects","states","rate","readonly","enter","onHover","reset","onLeave","onKeydown","ratingCtrl","tabs","selectedTab","tab","onDeselect","addTab","removeTab","newActiveIndex","vertical","justified","elm","tabsetCtrl","$transcludeFn","tabCtrl","isTabHeading","tagName","hasAttribute","tabContentTransclude","contents","headingElement","hourStep","minuteStep","showMeridian","meridians","readonlyInput","mousewheel","timepickerConfig","getHoursFromTemplate","valid","meridian","getMinutesFromTemplate","minutes","pad","toString","refresh","keyboardChange","makeValid","updateTemplate","invalidHours","invalidMinutes","getHours","getMinutes","addMinutes","AMPMS","inputs","hoursInputEl","minutesInputEl","setupMousewheelEvents","setupInputEvents","$error","isScrollingUp","originalEvent","delta","wheelDelta","deltaY","detail","incrementHours","decrementHours","incrementMinutes","decrementMinutes","updateHours","updateMinutes","invalidate","setMinutes","toggleMeridian","timepickerCtrl","TYPEAHEAD_REGEXP","itemName","source","viewMapper","modelMapper","typeaheadParser","HOT_KEYS","originalScope","modelCtrl","hasFocus","minSearch","typeaheadMinLength","waitTime","typeaheadWaitMs","isEditable","typeaheadEditable","isLoadingSetter","typeaheadLoading","onSelectCallback","typeaheadOnSelect","inputFormatter","typeaheadInputFormatter","typeaheadAppendToBody","$setModelValue","parserResult","typeahead","popupId","aria-autocomplete","aria-owns","popUpEl","id","matches","typeaheadTemplateUrl","resetMatches","activeIdx","getMatchId","removeAttr","getMatchesAsync","inputValue","locals","onCurrentRequest","timeoutPromise","$formatters","modelValue","candidateViewValue","emptyViewValue","$item","$model","$label","dismissClickHandler","matchIdx","selectActive","selectMatch","tplUrl","tplContent","replaceWith","trim","escapeRegexp","queryToEscape","matchItem","run","$resource","cookieId","frontendService","SuggestionSearch","$location","identityService","userService","incrementValue","broadcastBasketModelUpdate","setCachedPreview","basketId","getBasketCookieValue","serviceApi","getBasket","Authorization","accessToken","removeBasketCookie","setBasketCookie","Cookies","hasBasketCookie","clearCachePreview","basketData","basket","preview","cachedUserProfileType","userProfileType","getProfileTypeAlias","getCachedPreview","minibasketPreviewSerialized","minibasketPreview","update","quantity","prescriptionId","ProductId","Quantity","PrescriptionId","BasketId","lastAddedItem","_","findWhere","orderLines","sku","prevQuantity","increment","product","debounceTimeout","incrementOrDecrement","decrement","manualIncrement","tagManagerService","updateDataLayer","updatePrescriptionProduct","selectedSku","isLocked","ordinatedSku","nemLoginId","reimbursementClause","productId","locked","updateBasketPrescriptionProduct","Content-Type","useVoucher","VoucherCode","voucher","removeVoucher","acceptCookies","allFaq","faq","siteSearch","term","searchTrackingUrl","gaTracking","siteSearchQueryPattern","pathname","dataLayer","pageCategory","searchKeyword","_gaq","trackOrder","order","dataLayerProducts","mapBasketOrderLine","orderNumber","affiliation","revenue","total","tax","taxTotal","shipping","shippingTotal","coupon","vouchers","billingAddress","city","countryDisplayName","line","description","price","currentPrice","getCombinedHistory","ordersSize","ordersServiceUrl","filterOrderHistory","getPrescriptionsAddedToBasket","validateAndAddCprNr","cpr","connectToClubMember","cprNr","post","getCtrWidgetInformation","getComplimentaryProductsInformations","prescriptionComplimentaryProductsInformations","constants","request","no_cache","appVersion","searchRequestCanceler","getProducts","productIds","profileType","userRecommendations","numberOfRecommendations","raptorProducts","X-Raptor-CookieId","mostPopularRightNow","promis","topSellingInCategory","categoryId","similarItems","relatedItems","relatedItemsForBasket","productIdsCsv","userTopSellingItems","overallTopSellingXDays","cookieHistory","campaignItems","content2Products","contentId","product2Contents","topViewedInCategory","getMerchandisingProducts","merchandisingId","receipt","orderId","queryResults","receiptApiUrl","xhrStatus","message","messages","Message","msg","responseStatus","addReview","headline","rating","urlHelper","quickSearchRequestCanceler","categorySearchRequestCanceler","articleSearchRequestCanceler","catalog","selectedFacets","omit","decodeValueFromUrl","_params","seriesId","brandId","raptorCookieId","isCategory","isBrand","catalogSearch","quickSearch","productProfileType","hitsPerPage","productSearch","products","categoryHitsPerPage","categories","articleHitsPerPage","articles","popularSearches","categorySearch","articleSearch","getSettings","basketServiceUrl","getSettingsForSubscription","getSettingsForExistingSubscription","subscriptionId","getSettingsForSubscriptionDelivery","subscriptionDeliveryId","getShippingCountries","$cookieStore","shippingInformation","selectedShippingType","selectedShippingMethod","getPickupDestinations","shippingMethods","webshipperShipping","shippingDropPoints","carrierId","serviceCode","address","zip","countryCode","getStorage","storage","Modernizr","getKey","setKey","removeKey","getSubscriptions","subscriptionsServiceUrl","subscriptionAddProduct","qty","SubscriptionId","Sku","getCreationContract","getCreationWithProductContract","createSubscription","daysBetweenDeliveries","createSubscriptionWithProduct","updateProduct","updateProduct2","removeProduct","subscriptionProductId","updateTitle","updateInterval","resume","updateAddress","addressId","firstName","lastName","companyName","addressLine","postalCode","countryIsoCode","pickupPointId","pickupPointName","pickupPointAddressLine","pickupPointPostalCode","pickupPointCity","stationId","updateDeliveryMethod","shippingTypeAlias","shippingMethodAlias","pickupAgentId","getDeliveryWeek","updateDeliveryAddresses","subscriptionDeliveryProductId","basketService","mapPrice","activePrice","mapTotalPrice","tagManagerProperties","raptorModuleName","ecommerceEvent","ecommerce","currencyCode","cachedBasket","listProductIds","basketProducts","basketProduct","includes","found","p","pId","commaSeparatedIds","basketContent","basketTotal","voucherDiscountTotal","raptorModule","toUpperCase","actionField","userId","clubmemberEmail","dataLayerObject","updateDataLayerWithImpressions","list","impressions","object","mapSearchProduct","searchProduct","displayName","listPrice","brand","category","displayCategoryName","mapBasketProduct","manufacturer","baseUrl","imageUrl","thumbnailImageUrl","mapCheckoutOrderline","getPathFromParams","urlPattern","getParamsFromPath","pathSplit","without","pathKeys","pathValues","updateParam","isSingleValue","encodeValueForUrl","hasValue","lastFacet","hasParam","hasFacet","facet","getFacetCount","getLastFacet","resetParamsExcept","paramsToKeep","currentParams","resetSpecificParams","paramsToReset","changeProfileType","profileServiceUrl","clubMemberSession","premiumMemberSession","createCustomer","login","username","password","returnUrl","createNewPassword","email","changePassword","passwordConfirm","removeNemId","removeNemIdLink","updateUser","unsubscribeFromNewsletter","subscribeToNewsletter","updateMyProfile","requestDelete","removeCards","removeCardsApi","removeSubscriptionCard","cardId","getUser","newsletterSubscribe","emailAddress","subscribeEmail","submitAnswer","competitionId","answer","hasParticipated","deleteProfile","findUserByEmail","oneTimeUpdatePassword","patch","isClubMemberSession","isPremiumMemberSession","safeApply","fn","phase","$root","$$phase","welcomePresentCheck","mail","zipLookup","zipCode","postalcode","countryisocode","zipToCity","createRange","loading","setAnimationTimer","hasSoldOutItems","inStock","toggleVisiblity","hiddenVisiblity","isVisible","hideIfPathEndsWith","endsWith","updatePromotionCode","voucherForm","$invalid","UpdatePromotionCode","promotionCode","removePromotionCode","RemovePromotionCode","$filter","utilities","user","productService","submitBillingInformation","saveBillingInformation","information","pending","Promise","createUserAccount","retries","firstname","lastname","signup","newsletterTermsAccepted","newsletter","country","gender","phoneNumber","mobile","nextStepUrl","loginValidationErrors","Messages","HasError","showLoginValidationMessages","ResultObj","displayLoginBox","foundUser","foundReceiveAdvantage","currentProfileType","skus","overview","orderlines","x","existingOrderline","orderline","originalEstimatedSavings","estimatedPotentialSavings","clubMemberSignUp","benefits","disclaimerTexts","umbracoTexts","isMember","isMemberText","saveOnOrderTemplate","becomeMember","becomeMemberHtml","thankYou","thankYouText","basketSavingTemplate","infoText","regret","regretText","JSON","sessionStorage","clearSignup","maskPassword","stringify","doSignup","recalculateBasketForProfileType","getBasketStockStatus","highestStockStatus","stockStatus","selectAlternativeAddress","useAlternativeDeliveryAddress","alternativeDeliveryAddress","selectDefaultAddress","enabledComments","hasNote","disableComments","noteForOrder","changeCountry","getCountryFromIsoCode","isoCode","shippingCountryCode","shippingCountry","countries","isProhibitedCountry","prohibitedCountries","isValidAddressLine","isValidDate","dateObj","recalculateBasket","validateSignup","customerInfoFormSignup","showSignUpValidationMessages","invalid","$$element","skipRecalculate","acceptedTermsOfAgreement","birthdateDay","birthdateMonth","birthdateYear","formSubmitted","customerInfoForm","finally","showLoginBox","customerInfoFormBilling","$valid","resp","receiveAdvantage","pendingFindUser","showMoreCategories","listHeight","$applyAsync","newListHeight","scrollToFullText","yPos","behavior","openBurgerMenu","openFiltersMobileModal","closeModal","sectionProductsHeadingElem","scrollIntoView","block","submit","competitionForm","hasEntered","nodeId","ready","shippingInfo","initAddress","addressMode","initCheckoutModel","phoneRegex","basketHasPresent","showNewsLetterGiftDialog","setSelectedCountriesFromModel","customerInformation","comment_ask","customerMessage","shippingComment","shippingAddress","pickupAddress","shippingCountries","useShippingAddress","emailChanged","newsLetter","customerType","hasPresent","presentOrderLine","orderLine","isWebPresent","removePresentFromBasket","present","isClubMember","showClubHint","checkEan","eanNumber","eanUser","resetShippingMethod","countryName","deliveryMethod","getCountrySelectedForShipping","shippingMethod","showMorePickupDestinations","pickupDestinations","entry","visible","showMorePickupDestinationsButton","showFewerPickupDestinationsButton","showFewerPickupDestinations","getShippingPricesForSelectedCountry","prices","shippingMethodId","showBillingAddressLineNotification","showShippingAddressLineNotification","submitForm","validationState","confirm","shippingAddressSelectedInCheckout","redirectionUrl","calculateBasketTotal","methodId","getBasketTotalFromShippingTotal","subTotal","calculated","orderChanged","setAddressMode","shipToAddressType","oneAtATime","showAllFilters","toggleAllFilters","closeFilterOverlay","openFiltersModal","filterOverlayFacet","resetFilterQuery","filterQuery","getActiveConstraints","facets","values","constraint","modelChanges","wrappingInfo","toggleGiftWrapDialog","showGiftWrapDialog","submitGiftWrap","giftWrapModel","pendingGiftWrap","enabled","giftWrap","disableGiftWrap","wrappingDescription","greeting","editGiftWrap","prescriptionService","isLoading","grants","ctrExpirationDate","balance","validationErrors","showNofityResetPassword","view","resetPasswordEmail","reload","setResetPasswordView","setLoginView","isLoginView","resetPassword","normalizedEmail","itemsAddedCount","deleteRequestAccepted","profilePageUrl","acceptConsent","declineConsent","getConsentType","from","to","hasCreditCard","types","fromIndex","toIndex","membership","membershipText","consent","currentProfileTypeText","showConsent","orderService","updateBasket","utils","loadProfile","dateOfBirth","dateMs","day","subscriptionDeliveryService","subscriptionService","subscriptionsOverviewUrl","setStatus","cancelDelivery","details","isMissingInformation","statusId","card","deliveryAddress","isShippingMethodSet","isShippingAddressSet","defaultDeliveryAddress","updateDeliveryAddressRequest","initEditTitle","productRemovalRequest","productQuantityUpdatedRequest","editing","confirmDeleteSubscription","wantToDelete","resetServiceMenu","deleteSubscription","resumeSubscription","pauseSubscription","updateIntervalRequest","customerserviceService","openAboutMitIdModal","openReadMoreModal","openReadHowModal","getAllFaqs","faqs","channel","getChildPrescriptionFaq","childPrescriptionFaq","rsp","abs","newslettersignupForm","receiptUrl","searchService","defaultQuantity","resetQuantity","relatedProductSkus","openRelatedProductsModel","clickProduct","initAnim","empty","searchTerm","endOfResults","resetSearchTerm","filterTextTimeout","tempFilterText","oldValue","catalogElastic","paging","loadingMoreProducts","loadMoreItems","handlePopState","state","deselectPrescription","selectedPrescription","prescription","GetPrescriptionIdsFromBasket","prescriptionIds","prescriptionIdsInBasket","productMap","initReg","showCprText","connectWithClubUser","visiblePrescriptionSubstitutes","showPrescriptionDetailsDesktop","history","replaceState","removeEventListener","getNemLoginCookieValue","updateBasketPrescription","selectedProduct","packageQuantity","prescriptionID","prescriptedSku","openPowerStepModalIfComplimentaryProductExists","selectProduct","isSubSelected","checkboxes","getElementsByName","checked","getSelectedProduct","alert","doesBasketContainPrescriptionProduct","areSubstitudesVisible","togglePrescriptionSubstitudeVisiblity","setSelectedPrescription","pushState","prescriptionBackButtonClick","back","formatFilter","trimmed","capitalized","uniqueFilters","prescriptionProducts","indicationText","selectFilter","selectedPrescriptionFilter","filterPrescriptions","array","resetFilters","scrollToWidgets","openPrescriptionDetailsModal","selectedPrescriptionModel","openLowestPriceModal","openEffectuationsInfoModal","prescriptionProduct","selectedPrescriptionProduct","complimentaryProductData","responseData","raptorMerchandiseId","togglePrescriptionDetailsDesktop","expanded","readMoreText","getPreviewText","longText","shouldTruncate","shouldShowToggle","reviewService","countDownTime","sameDayCountDownText","analyticsProductJson","analyticsProduct","sameDayCounter","removePrescriptionProduct","removeFromBasket","gtmProduct","openSubscriptionFlowNew","openSubscriptionFlowExisting","subId","args","SubId","countDownDate","now","seconds","h","m","txt","parentElement","subscriptions","onInit","optimistic","productJson","form","successUrl","currentStepIndex","membershipAlias","methods","jsonConfig","MembershipTypeAlias","NextStepUrl","Firstname","Lastname","UserEmail","dateFormatInvalid","resultObj","dibsRedirectUrl","isUndefinedOrNull","raptorProductService","customParam","res","recommendedProducts","submitted","showMessage","maxRating","reviews","getReviews","isValidRating","reviewForm","resetReviewForm","newVal","oldVal","rating_value","search","CapitalizeString","categoryName","hasAnyParam","getTotalFacetCount","isFacetActive","facetName","isLastFacet","resetParams","createPageRange","pageCount","computeProductRepeaterIndex","pageSize","setProductListPosition","setItemList","tmp","@type","@context","itemListElement","scriptElemn","handleLocationChange","onlyOutlet","searchType","absUrl","tagManagerProducts","notFirstRequest","totalResults","$localStorage","validShippingMethods","shippingStepModel","alias","pickupPoint","acceptTerms","requiresAdult","requiresAdultAccepted","noteForDelivery","noteForDeliveryErrorText","pickupFormModel","street","zipErrorMessage","loadingDeliveryLocations","preselectedType","shippingTypes","preSelectedTypeAlias","line1","setShippingType","getRetinaImage","dpr","shippingType","getPickupPoints","preselectedMethod","preSelectedMethodAlias","isSelectedToaddressPostNord","checkNoteLength","setShippingMethod","zipCodeErrorMessage","destIsSelected","pickupDropPointsSuccess","destinations","selectPickupDestination","address1","goToPickPoint","selectedType","selectedMethod","getBasketTotal","previousShippingTaxTotal","parseFloat","basketTotalTaxWithoutPreviousShippingTax","getBasketTaxTotal","totalWithTax","totalTax","updatePrice","major","minor","shippingInfoForm","pickupPointStationId","pickupPointStation","toLocaleLowerCase","shp","subscription","subscriptionViewUrl","availableIntervalsInDays","productsInformation","productSku","productQuantity","productResponseData","shippingService","loadShippingSettings","shippingSettings","validateShipping","subscriptionDeliveryAddress","successRedirectUrl","preselectedShippingTypeAlias","preselectedShippingMethodAlias","preselectedPickupPointId","subscriptionAddress","selectedPickupPoint","selectedShippingTypeMethod","handleShippingOptionsInit","isPickupService","handleShippingTypeMethodChanged","handlePickupPointChanged","shippingValid","currentExisting","currentProduct","currentNewSubscription","currentNewSubscriptionId","currentNewSubscriptionTotal","currentNewSubscriptionShowDatePicker","currentNewSubscriptionStartingDate","cntrl","newPickedDate","nextDeliveryWeek","initNewSubscription","openExisting","handleResponse","changeQty","changeQtyNew","productPrice","selectPickupPoint","loadShippingSettingsForSubscription","goToSubscriptionNewAddCard","goToSubscriptionNew","goToSubscriptionExisting","toggleDatePicker","fc","decPos","padEnd","subscriptionProducts","dateChanged","df","formatDateForService","ya","ma","createNewSubscription","creationPending","startingDate","pickupPointAddress","property","reverse","$sce","trustAsHtml","psOpen","psAutoClose","psClose","side","speed","functionToCheck","getType","psSide","psSpeed","psSize","zindex","psZindex","className","psClass","targetId","psTarget","transitionDuration","webkitTransitionDuration","zIndex","transitionProperty","psCustomHeight","psCustomTop","psCustomBottom","psCustomRight","psCustomLeft","psCustomWidth","close_handler","attachEvent","returnValue","priority","eventType","siteAutofillModel","component","bindings","$onInit","showErrorMessage","createUser","errorMessage","siteBlur","$event","elem","siteClickOutside","tapping","bindToController","controllerAs","WebapoteketDictionary","siteEnter","errorMapper","siteFieldError","errors","tracking","clearElementHeight","previous","setPersistElementHeight","elemHeight","curParams","prevParams","userForgotPassword","hideSignup","siteHideSignup","switchViewMode","forgotPasswordMode","newPasswordForm","partialsDirectivesLoginForm","siteLogin","membershipSelectionUrl","clubFrontPageUrl","signoutUrl","links","findActiveLevel","urlArr","currentUrl","currentLevel","navData","parentLevel","grandparentLevel","currentLevelUrlArr","clone","activeLevel","mainMenu","isAuthenticated","openNav","resetToLevelOne","closeNav","clickItem","isCurrentLocation","utilitiesService","modalDialog","modalDialogHtml","siteModalDialog","showModalDialog","getElementsByTagName","closeModalDialog","dialogWidth","marginTop","siteActive","destroyModalDialog","triggerHandler","detailsLink","pagination","overviewUrl","pagingEnabled","setCurrentResultsAmountInformation","totalCount","currentResultsAmountInformation","of","availablePageSizes","amount","changePageSize","changePage","citoWarningText","onQuantityUpdated","onRemoved","temporaryQuantity","errorMessages","updateQuantity","quantityUpdateValue","saadanHandlerDu","orderInformation","$onChanges","changes","currentValue","termsText","orderHistoryLink","saadanHandlerDuLink","getOrder","orders","initCarousel","customOptions","timer","images","imgSrc","owlCarousel","$last","formName","phone","postalCodeDigits","addressFieldRegex","baseValidationDoneBeforeSaving","temporaryData","$emit","successAndClose","baseActivate","edit","editClicked","$setPristine","formIsPristine","$pristine","hasPendingChanges","dateRegex","dayRange","monthRange","formattedBirthDate","matchesPattern","revalidate","showNofityPasswordChanged","submitOnEnter","keyCode","passwordRepeat","profileChangePasswordForm","password_id","password_id_confirm","pendingPassword","mitidUrl","customerTypes","getCustomerTypeAsText","button","pendingChanges","showNofityMembership","isNewsletterSubscribed","notifyMembership","isSubscribed","typeString","addUrl","getLastCard4Digits","subscriptionCard","profileFieldError","identifier","fisk","customparam","customclass","itemsperrowdesktop","clubFrontpageLink","retryFailed","isTracked","settings","siteResponseError","responseErrors","isInErrorState","responseErrorHandler","jQuery","showLocalErrors","showResponseErrors","hideLocalErrors","hideResponseErrors","scrollToElem","siteScrollTo","resultPageLink","searchImage","wapSearchCategoriesResource","limitPopularSearchesMobile","resultPageUrl","searchImageUrl","mobileTab","mobileThreshold","preSearchLinks","replaceAll","getPopularSearches","updateSearchTerm","innerSearch","hasSearchedForProducts","keysToIgnore","setMobileTab","tabId","isMobileTabSet","selectCategoryTabMobile","selectProductTabMobile","selectArticleTabMobile","backLink","onSave","selectedPickupPointId","shippingInfoService","initSubscriptionFlow","cheapestType","cheapestMethod","st","sm","radioButtonSelectedShippingTypeMethodAlias","selectedShippingTypeMethodChanged","CalculateShippingPricesForPremium","lowestPrice","shippingTypeMethod","CalculateShippingPricesForClubMember","hasFreeShippingOption","CalculateShippingPricesForStandard","radioButtonSelectedPickupPointId","pickupPoints","limit","defaultLimit","showSaveButton","preselectedTypes","preselectedTypeMethods","reloadPickupPoints","newShippingType","newShippingTypeMethod","selectedPickupPointChanged","preferedPickupPointId","matchingPickupPoints","showAllPickupPoints","showLimitedPickupPoints","columns","w","getWindowDimensions","windowWidth","reArrangeElements","cols","elemIndex","els","lastElementInRow","insertAfter","closeButtonText","setup","elementForToggling","resizeTimeout","clearTimeout","measureContainerHeight","setMaxHeightToMeasuredHeight","extraHeight","maxHeight","ratingValue","updateStars","stars","filled","linkToMyProfile","availableIntervals","intervals","selectedInterval","allowDeletion","GetCount","MapAndCalculateProducts","matchingProducts","originalQuantity","CalculatePrice","CalculateTotal","FormatDecimalNumber","totalPrice","removeSubscriptionProduct","productQuantityUpdated","incrementQuantity","decrementQuantity","titlePrefix","tabsMapper","setActive","activeTab","siteTabs","beginsWith","beginsWith2","eanFormat","Barcoder","enableZeroPadding","handleKeyUp","trimmedEan","validate","pattern","siteValidateQuantity","countrycode","webshipperShippingService","b","req","Fisk","GetDropPoints","p_address","p_postalcode","v_address","v_postalCode","carrierServiceCode","dropPoints","previousZip","zipLookupModelCountry","cityModel","zipLookupModelCity","review","deliveryServiceUrl","getOrderHistory","checkEmail","hashPrefix","$httpProvider","$locationProvider","$qProvider","html5Mode","interceptors","errorOnUnhandledRejections","regional","webapoteket","tabView","reviewsDelegateClick","scrollToView","elementRect","absoluteElementTop","middle","scroll","updateTarget","parents","addTest","devicePixelRatio","screen","deviceXDPI","logicalXDPI","viewport","checkWidth","viewportWidth","initDesktop","hideHeaderOnScroll","hoverNav","getDesktopHeaderHeight","focusAndStickySearch","searchFilters","filterBrandsIndex","getHeaderHeight","miniBasketHeight","filterToggleBtn","filters","filterBtn","closeFilterBtn","nav","navService","appendTo","backBtn","prependTo","alphabets","brandContainer","currentLetterElem","currentLetterArea","headerHeight","miniBasket","basketButton","navWrapper","hasScrolled","lastScrollTop","navbarHeight","didScroll","functionalCheckbox","sleeky"],"mappings":"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","file":"master.min.js","sourcesContent":["function deliverIntervalsDialogbox() {\n var deliveryIntervalsTrigger = $('.js-delivery-intervals-trigger');\n var overlayBackdrop = $('.delivery-intervals-backdrop');\n var closeDeliveryIntervals = $('.js-close-delivery-intervals-dialog-box');\n var deliveryIntervalsDialogBox = $('.js-delivery-intervals-dialog-box');\n \n //Open overlay\n if($(deliveryIntervalsTrigger).length) {\n $(deliveryIntervalsTrigger).click(function(e) {\n e.stopPropagation();\n\n $(deliveryIntervalsDialogBox).fadeIn();\n $(overlayBackdrop).addClass('site-overlay--show');\n $(overlayBackdrop).fadeIn();\n });\n\n //Close overlay when click on close icon/button\n $(closeDeliveryIntervals).click(function() {\n if($(overlayBackdrop).hasClass('site-overlay--show')) {\n $(deliveryIntervalsDialogBox).fadeOut();\n $(overlayBackdrop).removeClass('site-overlay--show');\n $(overlayBackdrop).fadeOut();\n // $('body').removeClass('noscroll');\n }\n });\n }\n};","function overlays() {\n var overlayTrigger = $('.js-overlay-trigger');\n var overlayBackdrop = $('.overlay-backdrop');\n var closeOverlay = $('.js-close-overlay');\n var continueShopping = $('.js-continue-shopping');\n var overlay = $('.js-overlay');\n var dialogBox = $('.dialog-box');\n var dialogBoxLink = $('.dialog-box__link');\n\n //Open overlay\n if ($(overlayTrigger).length) {\n $(overlayTrigger).click(function (e) {\n e.stopPropagation();\n\n var overlayName = e.currentTarget.getAttribute('data-overlay');\n var overlay = $(\".\" + overlayName);\n\n $(overlay).fadeIn();\n $(overlayBackdrop).addClass('site-overlay--show');\n $(overlayBackdrop).fadeIn();\n\n if ($(this).data().overlay === 'wap-become-member-panel' || $(this).data().overlay === 'wap-become-member-checkout-panel') {\n $('.wap-become-member-panel').scrollTop(0);\n $('body').addClass('noscroll');\n }\n\n if ($('#cd-lateral-nav').hasClass('lateral-menu-is-open')) {\n $('#cd-lateral-nav').removeClass('lateral-menu-is-open');\n $('.header').removeClass('lateral-menu-is-open');\n $('html').removeClass('lateral-menu-is-open');\n $('body').removeClass('lateral-menu-is-open');\n }\n });\n\n\n //Close overlay when click on backdrop\n $(overlayBackdrop).click(function () {\n console.log('backdrop');\n if ($(overlayBackdrop).hasClass('site-overlay--show')) {\n $(overlay).fadeOut();\n $(overlayBackdrop).removeClass('site-overlay--show');\n $(overlayBackdrop).fadeOut();\n\n //in the case of wap-become-member-panel remove to be sure we can scroll when clicking outside of modal to close\n $('body').removeClass('noscroll');\n }\n });\n\n //Close overlay when click on close icon\n $(closeOverlay).click(function () {\n if ($(overlayBackdrop).hasClass('site-overlay--show')) {\n $(overlay).fadeOut();\n $(overlayBackdrop).removeClass('site-overlay--show');\n $(overlayBackdrop).fadeOut();\n\n if ($(this).data().overlay === 'wap-become-member-panel' || $(this).data().overlay === 'wap-become-member-checkout-panel')\n $('body').removeClass('noscroll');\n }\n });\n\n\n $(continueShopping).click(function () {\n if ($(overlayBackdrop).hasClass('site-overlay--show')) {\n $(overlay).fadeOut();\n $(overlayBackdrop).removeClass('site-overlay--show');\n $(overlayBackdrop).fadeOut();\n\n if ($(this).data().overlay === 'wap-become-member-panel' || $(this).data().overlay === 'wap-become-member-checkout-panel')\n $('body').removeClass('noscroll');\n }\n });\n\n\n $(dialogBoxLink).click(function () {\n if ($(overlayBackdrop).hasClass('site-overlay--show')) {\n $(dialogBox).fadeOut();\n }\n });\n }\n};\n","/* Standard Jquery */\n$(document).ready(function () {\n overlays();\n deliverIntervalsDialogbox();\n showHidePassword();\n openOverlay();\n servicemenu();\n headerServiceInfoIconsClick();\n selectDeliveryShop();\n birthdayMask();\n datepicker();\n startDateMask();\n CaruselBanner();\n flickitySliderFrontpage();\n myProfileTooltip();\n searchFieldMobile();\n collapsible();\n wrapCollapsibleDivs();\n});\n\nvar count = 1;\nfunction counter(type, el){\n var countEl = el.parentNode.parentNode.getElementsByClassName(\"input--quantity\")[0];\n var count = +countEl.value;\n if(type == \"minus\"){\n if (count > 1) {\n count--;\n }\n }\n else {\n count++;\n }\n countEl.value = count;\n}\n\n\n$.datepicker.setDefaults( $.datepicker.regional[ \"da\" ] );\n\nvar dateToday = new Date();\ndateToday.setHours(0, 0, 0, 0);\n\nfunction isDateValid(selectedDate) {\n selectedDate.setHours(0, 0, 0, 0)\n return selectedDate >= dateToday;\n}\n\nfunction displayOrHideMessage(inputObject, errorMessageObject, display) {\n if (display) {\n inputObject.addClass(\"required\");\n errorMessageObject.addClass(\"date-msg\");\n $('.new-green-button').prop('disabled', true);\n } else {\n inputObject.removeClass(\"required\");\n errorMessageObject.removeClass(\"date-msg\");\n $('.new-green-button').prop('disabled', false);\n }\n}\n\nfunction datepicker() {\n\n var $datePickers = $('#datepicker');\n var $errorMsg = $(\".date-error-message\");\n $datePickers.each(function ($datePicker) {\n\n var $self = $(this);\n $self.datepicker({\n dateFormat: 'dd/mm-yy',\n showWeek: true,\n firstDay: 1,\n showOtherMonths: true,\n selectOtherMonths: true,\n constrainInput: true,\n showOn: 'button',\n buttonText: 'Ã…ben kalender',\n minDate: dateToday,\n defaultDate: dateToday,\n beforeShow: function (textbox, instance) {\n setTimeout(function () {\n $('#js-datepicker-container').prepend(instance.dpDiv)\n }, 0);\n },\n onSelect: function (dateText, inst) {\n\n var parsedDate = new Date(inst.selectedYear, inst.selectedMonth, parseInt(inst.selectedDay));\n\n if (isDateValid(parsedDate)) {\n displayOrHideMessage($self, $errorMsg, false)\n } else {\n displayOrHideMessage($self, $errorMsg, true)\n }\n\n }\n });\n\n $self.datepicker(\"setDate\", dateToday);\n\n $self.on(\"change, keyup\", function (k) {\n\n var selectedDate = $self.datepicker(\"getDate\");\n\n if (isDateValid(selectedDate)) {\n displayOrHideMessage($self, $errorMsg, false)\n } else {\n displayOrHideMessage($self, $errorMsg, true)\n }\n\n });\n\n });\n\n}\n\nfunction startDateMask() {\n $('#datepicker').mask('00/00-0000', {placeholder: '__ / __ - ____'});\n}\nfunction birthdayMask() {\n $('.js-birthday-mask').mask(\"00/00/0000\", {placeholder: \"__ / __ / ____\"});\n}\n\nfunction openOverlay() {\n $('#js-overlay-trigger').click(function() {\n novicell.overlay.create({\n 'class': \"wap-overlay\", // [string] class for overlay\n 'selector': \"#js-overlay-content\", // [string] javascript selector for content to go in overlay (overrides video)\n });\n });\n}\n\nfunction selectDeliveryShop() {\n $('input:radio').click(function(e) {\n e.stopPropagation();\n }).parent().click(function() {\n $(this).children('input').click();\n $(this).addClass('checked').siblings().removeClass('checked');\n });\n}\n\nfunction showHidePassword() {\n $('body').on('click','.show-password-trigger-js',function() {\n var passwordInput = $(this).next('.password-js');\n var showPasswordText = $(this).attr('data-show-password');\n var hidePasswordText = $(this).attr('data-hide-password');\n if($(passwordInput).attr('type') === 'password') {\n $(passwordInput).attr('type', 'text');\n $(this).text(hidePasswordText);\n } else {\n $(passwordInput).attr('type', 'password');\n $(this).text(showPasswordText);\n }\n });\n}\n\nfunction wrapCollapsibleDivs() {\n $('.collapsible-wrapper__button').each(function(){\n $(this).nextUntil('.collapsible-wrapper__button').filter('.collapsible-wrapper__content').wrapAll('
');\n });\n}\nfunction collapsible() {\n $('body').on('click','.collapsible-wrapper__button',function() {\n $(this).next(\".collapsible-wrapper\").toggleClass(\"active\");\n $(this).toggleClass(\"active\");\n });\n}\n\n\nfunction servicemenu() {\n var servicemenuLink = $('.js-servicemenu-opener');\n var servicemenu = $('.js-servicemenu');\n var overlayBackdrop = $('.overlay-backdrop');\n var closeOverlay = $('.js-close-overlay');\n\n //Open change MembershipLink overlay\n if($(servicemenuLink).length) {\n $(servicemenuLink).click(function(e) {\n e.stopPropagation();\n $(servicemenu).fadeIn();\n $(overlayBackdrop).addClass('site-overlay--show');\n $(overlayBackdrop).fadeIn();\n $('body').addClass('noscroll');\n });\n\n //Close login overlay when click on backdrop\n $(overlayBackdrop).click(function() {\n if($(overlayBackdrop).hasClass('site-overlay--show')) {\n $(servicemenu).fadeOut();\n $(overlayBackdrop).removeClass('site-overlay--show');\n $(overlayBackdrop).fadeOut();\n $('body').removeClass('noscroll');\n }\n });\n\n //Close login overlay when click on close icon\n $(closeOverlay).click(function() {\n if($(overlayBackdrop).hasClass('site-overlay--show')) {\n $(servicemenu).fadeOut();\n $(overlayBackdrop).removeClass('site-overlay--show');\n $(overlayBackdrop).fadeOut();\n $('body').removeClass('noscroll');\n }\n });\n }\n}\n\nfunction headerServiceInfoIconsClick() {\n if ($('.sales-conditions').length) {\n var container = $('.sales-conditions');\n var expandable = $('.expandable', container);\n\n $('.sales-condition', container).click(function () {\n var current = $(this);\n var condition = $('span', this).html();\n\n if (!$('.sales-condition.active', container).length) {\n $(current).addClass('active');\n $(expandable).html(condition);\n $(expandable).slideDown();\n\n } else {\n if ($(current).hasClass('active')) {\n $(current).removeClass('active');\n $(expandable).slideUp();\n } else {\n $('.sales-condition', container).removeClass('active');\n $(current).addClass('active');\n $(expandable).html(condition);\n }\n }\n });\n }\n}\n\n/* END Standard Jquery */\n\nfunction CaruselBanner() {\n var slider = document.querySelectorAll('.js-carousel-banner');\n var sliderItem = document.querySelectorAll('.js-carousel-banner-cell');\n var slideNumber;\n\n for(i = 0; i < sliderItem.length; i++) {\n var isPrimaryContent = sliderItem[i].getAttribute('data-primary-content');\n\n if(isPrimaryContent === \"True\") {\n slideNumber = i;\n }\n }\n\n ​if(slider && sliderItem) {\n for (i = 0; i < slider.length; i++) {\n var maxNumber = slider[i].getAttribute('data-number-of-slides') - 1;\n var autoplay = slider[i].getAttribute('data-autoplay-time');\n var autoplayInt = parseInt(autoplay, 10);\n var startSlide = slideNumber != undefined ? slideNumber : Math.round(Math.random() * maxNumber);\n var flkty = new Flickity(slider[i], {\n // options\n cellAlign: 'left',\n contain: true,\n cellSelector: '.js-carousel-banner-cell',\n wrapAround: true,\n prevNextButtons: false,\n initialIndex: startSlide,\n autoPlay: autoplayInt,\n lazyLoad: true\n });\n\n for (i = 0; i < sliderItem.length; i++) {\n sliderItem[i].classList.add(\"carousel-banner__cell--show\");\n }\n }\n }\n}\n\nfunction flickitySliderFrontpage() {\n var slider = document.querySelectorAll('.js-slider-frontpage');\n var sliderItem = document.querySelectorAll('.js-slider-cell');\n\n ​if(slider && sliderItem) {\n for (i = 0; i < slider.length; i++) {\n var flkty = new Flickity(slider[i], {\n // options\n cellAlign: 'left',\n contain: true,\n cellSelector: '.js-slider-cell',\n pageDots: false\n });\n }\n }\n}\n\nfunction produktOverviewSlider() {\n var slider = document.querySelectorAll('.js-product-slider');\n var sliderItem = document.querySelectorAll('.js-product-slider-cell');\n\n ​if(slider && sliderItem) {\n for (i = 0; i < slider.length; i++) {\n var flkty = new Flickity(slider[i], {\n // options\n cellAlign: 'left',\n contain: true,\n cellSelector: '.js-product-slider-cell',\n pageDots: false,\n wrapAround: true\n });\n }\n }\n}\n\nfunction raptorSlider() {\n var slider = document.querySelectorAll('.js-raptor-banner');\n var sliderItem = document.querySelectorAll('.js-raptor-banner-cell');\n\n ​if(slider && sliderItem) {\n for (i = 0; i < slider.length; i++) {\n var flkty = new Flickity(slider[i], {\n // options\n cellAlign: 'left',\n contain: true,\n cellSelector: '.js-raptor-banner-cell',\n pageDots: false,\n wrapAround: true\n });\n }\n }\n}\n\nfunction myProfileTooltip() {\n $('.my-page-personal-info__tool-tip-icon').hover(function(){\n // on mouseenter\n $('.my-page-personal-info__tool-tip').addClass('my-page-personal-info__tool-tip--show');\n }, function(){\n // on mouseleave\n $('.my-page-personal-info__tool-tip').removeClass('my-page-personal-info__tool-tip--show');\n });\n}\n\nfunction searchFieldMobile() {\n if(window.innerWidth < 992) {\n var header = $(\".header\");\n var main = $('.main');\n\n var disclaimerMobileHeight = $('.js-sitewide-disclaimer-mobile').outerHeight();\n var searchHeight = $('.mobile-login-search-bar').outerHeight();\n var navHeight = $('.nav').outerHeight();\n var categoryNav = $('.category-navigation__back').outerHeight();\n if (categoryNav > 0) categoryNav += 15;\n\n var moveUpHeader = disclaimerMobileHeight + navHeight;\n var moveUpContent = searchHeight;\n var totalHeight = disclaimerMobileHeight + navHeight + searchHeight + categoryNav;\n\n\n $('body').on('focus','.search-input', function() {\n header.css('top', -moveUpHeader);\n header.addClass('scroll-header-up');\n main.css('margin-top', moveUpContent);\n main.addClass('scroll-header-up');\n });\n\n $('body').on('focusout','.search-input', function() {\n header.css('top', 0);\n main.css('margin-top', totalHeight + 40);\n });\n }\n}\n\nfunction searchAutoSuggestHeight() {\n if(window.innerWidth <= 992) {\n var searchAutoSuggestContainer = $('.search-header-results-container');\n var windowHeight = $(window).height();\n\n var searchHeight = $('.mobile-login-search-bar').outerHeight();\n var searchAutoSuggestContainerHeight = windowHeight - searchHeight;\n\n searchAutoSuggestContainer.css('height', searchAutoSuggestContainerHeight);\n }\n}\n","/* add custom tests */\nModernizr.addTest('android', function () { return !!navigator.userAgent.match(/Android/i) });\nModernizr.addTest('chrome', function () { return !!navigator.userAgent.match(/Chrome/i) });\nModernizr.addTest('firefox', function () { return !!navigator.userAgent.match(/Firefox/i) });\nModernizr.addTest('iemobile', function () { return !!navigator.userAgent.match(/IEMobile/i) });\nModernizr.addTest('ie', function () { return !!navigator.userAgent.match(/MSIE/i) });\nModernizr.addTest('ie10', function () { return !!navigator.userAgent.match(/MSIE 10/i) });\nModernizr.addTest('ios', function () { return !!navigator.userAgent.match(/iPhone|iPad|iPod/i) });\nModernizr.addTest('mobile', function () { return !!navigator.userAgent.match(/android.+mobile|avantgo|bada\\/|MeeGo|NokiaN9|blackberry|BlackBerry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|Kindle|Kindle Fire|silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|pad|p(ixi|re)\\/|plucker|pocket|psp|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|e\\-|e\\/|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\\-|2|g)|yas\\-|your|zeto|zte\\-/i) });\nModernizr.addTest('safari', function () { return !navigator.userAgent.match(/Chrome/i) && !navigator.userAgent.match(/iPhone|iPad|iPod/i) && !!navigator.userAgent.match(/Safari/i) });\n\nModernizr.addTest('retina', function () {\n // starts with default value for modern browsers\n var dpr = window.devicePixelRatio ||\n // fallback for IE\n (window.screen.deviceXDPI / window.screen.logicalXDPI) ||\n // default value\n 1;\n return !!(dpr > 1);\n});\n\njQuery(document).ready(function ($) {\n\n var logo = $('header .logo'),\n search = $('div.search'),\n nav = $('.nav'),\n navService = $('nav.service'),\n navWrapper = $('.nav-wrapper'),\n navSub = $('.nav-sub'),\n serviceMenu = $('ul.service-menu');\n\n var currentSub = $('.nav li.active > .nav-sub');\n var header = $('header.header');\n var $lateralNav = $(\"#cd-lateral-nav\");\n\n // check viewport width incl. IE8\n function viewport() {\n var e = window;\n var a = 'inner';\n if (!('innerWidth' in window)) {\n a = 'client';\n e = document.documentElement || document.body;\n }\n return { width: e[a + 'Width'], height: e[a + 'Height'] }\n }\n\n var $window = $(window);\n function checkWidth() {\n\n var viewportWidth = viewport().width;\n if (viewportWidth >= 992) {\n initDesktop();\n hideHeaderOnScroll();\n hoverNav();\n getDesktopHeaderHeight();\n }\n else {\n focusAndStickySearch();\n searchFilters();\n filterBrandsIndex();\n getHeaderHeight();\n miniBasketHeight();\n }\n\n ifBrowserIsIe();\n }\n\n // Execute on load\n checkWidth();\n // Bind event listener\n $(window).on(\"resize\", checkWidth);\n\n var functionalCheckbox = document.getElementById('cookie_cat_functional');\n if (functionalCheckbox && functionalCheckbox.checked) {\n sleeky.init();\n }\n\n // event listener to checkbox for changes\n if (functionalCheckbox) {\n functionalCheckbox.addEventListener('change', function () {\n if (this.checked) {\n sleeky.init();\n }\n });\n }\n\n\n\n function focusAndStickySearch() {\n $(\"#search-wrapper .search\").on('focus', function () {\n $(this).parents(\"#siteSearch\").addClass(\"active\");\n $(\"html, body\").addClass(\"search-open\");\n });\n\n $(\"#siteSearch-close\").on('click', function () {\n $(this).parents(\"#siteSearch\").removeClass(\"active\");\n $(\"html, body\").removeClass(\"search-open\");\n window.scrollTo(0, 0);\n });\n }\n\n function searchFilters() {\n var filterToggleBtn = $(''),\n filters = $(\".search-filters\"),\n filterBtn = $('')\n closeFilterBtn = $('');\n\n if (filters.siblings(\".button\").length == 0) {\n filters.parent().prepend(filterToggleBtn);\n }\n\n var header = filters.find(\"div.box-blue\");\n if (header.children(\".close-filter\").length == 0) {\n header.prepend(closeFilterBtn);\n }\n if (header.children(\".continue-filter\").length == 0) {\n header.prepend(filterBtn);\n }\n\n if (filters.parents(\".search-filters-wrapper\").hasClass(\"active\")) {\n filters.show();\n } else {\n filters.hide();\n }\n\n filterToggleBtn.on(\"click\", function () {\n filters.toggle().parents(\".search-filters-wrapper\").toggleClass(\"active\");\n $(\"html, body\").toggleClass(\"filter-active\");\n });\n\n closeFilterBtn.add(filterBtn).on(\"click\", function () {\n filters.hide().parents(\".search-filters-wrapper\").removeClass(\"active\");\n $(\"html, body\").removeClass(\"filter-active\");\n });\n\n // height = window height - height of header\n filters.css(\"height\", $window.height() - nav.height() + \"px\");\n }\n\n function initDesktop() {\n navService.find(\"ul\").removeClass('hidden');\n search.removeClass('hidden');\n $(\"#siteSearch\").removeClass(\"active\");\n $(\"html, body\").removeClass(\"search-open\");\n $(\"html, body, #cd-lateral-nav\").removeClass(\"lateral-menu-is-open\");\n\n $(\"#mobile-nav-trigger\").removeClass(\"is-clicked\");\n $(\"#pageslide-target-siteSearch\").css(\"width\", \"0px\").find(\"> div\").hide();\n\n // remove mobil search buttons\n $(\"button.toggle-filters\").remove();\n $(\"button.continue-filter\").remove();\n\n $(\".search-filters\").show();\n\n $('.nav').on('mousedown touchstart', 'li.hasSubNav > a', function (e) {\n if (e.type === 'touchstart') {\n if ($(this).parent().hasClass('showdropdown')) {\n return true;\n } else {\n e.preventDefault();\n $(this).parent().addClass('showdropdown')\n }\n }\n });\n\n if ($(\"body\").hasClass(\"checkout\")) {\n $(\".tabs-checkout\").insertAfter(\"nav.service\");\n $(\".checkout-customer-info\").appendTo(\".service > ul > li:first-child\");\n }\n\n // only for checkout page\n var backBtn = $(\".checkout a.back\").eq(0);\n if ($(\".checkout header.header\").find(\".nav-catalog-path > a.back\").length == 0) {\n backBtn.find('i.icon').remove();\n backBtn.prependTo(\".nav-catalog-path\");\n }\n\n\n // brands - change to desktop mode\n var alphabets = $(\".brands ul.letters > li > a\"),\n brandContainer = $(\".brands .brand-container\");\n\n brandContainer.each(function (i, e) {\n var elem = $(e);\n elem.removeClass(\"hidden\").removeAttr(\"style\");\n });\n\n alphabets.on(\"click\", function (e) {\n\n // set class on active element\n currentLetterElem = $(this);\n currentLetterElem.parent().addClass('active');\n\n var id = $(this).attr(\"scroll-to\"); //site-scroll-to\n\n brandContainer.each(function (i, e) {\n var elem = $(e);\n\n if (elem.attr('id') == id) {\n elem.removeClass(\"hidden\").addClass(\"current-brand\").removeAttr(\"style\");\n currentLetterArea = elem;\n }\n else {\n elem.removeClass(\"current-brand\").removeClass(\"hidden\").removeAttr(\"style\");\n }\n });\n\n return false;\n });\n }\n \n function filterBrandsIndex() {\n var currentLetterElem;\n\n var alphabets = $(\".brands ul.letters > li > a\"),\n brandContainer = $(\".brands .brand-container\");\n\n jQuery(window).on(\"load\", function () {\n currentLetterElem = $(\".brands ul.letters > li > a[scroll-to=brand-A]\"); // site-scroll-to\n currentLetterElem.parent().addClass(\"active\");\n\n brandContainer.each(function (i, e) {\n var elem = $(e);\n if (elem.attr('id') == \"brand-A\") {\n elem.removeClass(\"hidden\").addClass(\"current-brand\").css(\"padding-top\", \"80px\");\n } else {\n elem.removeClass(\"current-brand\").addClass(\"hidden\").css(\"padding-top\", \"0\");\n }\n });\n });\n\n alphabets.on(\"click\", function (e) {\n //e.preventDefault();\n //e.stopPropagation();\n\n // set class on active element\n currentLetterElem = $(this);\n currentLetterElem.parent().addClass('active').siblings().removeClass('active');\n\n var id = $(this).attr(\"scroll-to\"); //site-scroll-to\n\n brandContainer.each(function (i, e) {\n var elem = $(e);\n if (elem.attr('id') == id) {\n elem.removeClass(\"hidden\").addClass(\"current-brand\").css(\"padding-top\", \"80px\");\n currentLetterArea = elem;\n //do something and check\n //if you want to break the each\n //return false;\n }\n else {\n elem.removeClass(\"current-brand\").addClass(\"hidden\").css(\"padding-top\", \"0\");\n }\n });\n\n return false;\n });\n\n }\n\n function getDesktopHeaderHeight() {\n var headerHeight = $('header').outerHeight();\n var main = $('.main');\n\n main.css('margin-top', headerHeight);\n }\n\n function getHeaderHeight() {\n var disclaimerMobileHeight = $('.js-sitewide-disclaimer-mobile').outerHeight();\n var searchHeight = $('.mobile-login-search-bar').outerHeight();\n var main = $('.main');\n\n if ($('body').hasClass(\"checkout\")) {\n var navHeight = 46;\n } else {\n var navHeight = $('nav.nav').outerHeight();\n if (navHeight < 42) navHeight = 42;\n }\n\n var totalHeight = disclaimerMobileHeight + navHeight + searchHeight;\n main.css('margin-top', totalHeight);\n }\n\n function miniBasketHeight() {\n var miniBasket = $('.js-mini-basket');\n var disclaimerMobileHeight = $('.js-sitewide-disclaimer-mobile').outerHeight();\n var basketButton = 79;\n var navWrapper = $('.nav-wrapper').outerHeight();\n var windowHeight = window.innerHeight;\n\n var headerHeight = disclaimerMobileHeight + navWrapper + basketButton;\n var miniBasketHeight = windowHeight - headerHeight;\n\n miniBasket.css('max-height', miniBasketHeight);\n }\n\n function hideHeaderOnScroll() {\n var didScroll;\n var lastScrollTop = 0;\n var delta = 5;\n var navbarHeight = $(\"header\").outerHeight();\n\n $(window).on(\"scroll\", function (event) {\n didScroll = true;\n });\n\n setInterval(function () {\n if (didScroll) {\n hasScrolled();\n didScroll = false;\n }\n }, 250);\n\n function hasScrolled() {\n var st = $(this).scrollTop();\n\n // Make sure they scroll more than delta\n if (Math.abs(lastScrollTop - st) <= delta) return;\n\n // If they scrolled down and are past the navbar, add class .nav-up.\n // This is necessary so you never see what is \"behind\" the navbar.\n if (st > lastScrollTop && st > navbarHeight) {\n // Scroll Down\n $(\".header-default\").removeClass(\"nav-down\").addClass(\"nav-up\");\n } else {\n // Scroll Up\n if (st + $(window).height() < $(document).height()) {\n $(\".header-default\").removeClass(\"nav-up\").addClass(\"nav-down\");\n }\n }\n\n lastScrollTop = st;\n }\n }\n\n function hoverNav() {\n var timer;\n\n $(\".nav-wrapper li.hasSubNav\").on(\"mouseenter\", function () {\n var obj = $(this);\n\n timer = setTimeout(function () {\n obj.addClass(\"showdropdown\");\n obj.find(\".subnav-link-wrapper a .subnav-link-connector\").addClass(\"active\");\n $(\"body #backgrounds\").addClass(\"nav-focus\");\n }, 200);\n });\n\n $(\".nav-wrapper li.hasSubNav\").on(\"mouseleave\", function () {\n clearTimeout(timer);\n $(this).removeClass(\"showdropdown\");\n $(\"body #backgrounds\").removeClass(\"nav-focus\");\n $(this).find(\".subnav-link-wrapper a .subnav-link-connector\").removeClass(\"active\");\n });\n }\n});\n\nfunction ifBrowserIsIe() {\n var ua = window.navigator.userAgent;\n var msie = ua.indexOf(\"MSIE \");\n\n if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\\:11\\./)) // If Internet Explorer\n {\n if (ua.indexOf('Windows NT 10') && getCookie(\"ieAccept\") != \"accepted\") {\n var iePopup = document.getElementsByClassName(\"js-ie-popup\");\n var overlayBackdrop = document.getElementsByClassName(\"overlay-backdrop\");\n var closeOverlay = document.getElementsByClassName('js-close-overlay');\n var edgeButton = document.getElementsByClassName('use-edge-button')[0];\n\n if (!edgeButton.hasChildNodes()) {\n // add link to Edge\n var url = window.location.href;\n var a = document.createElement('a');\n a.setAttribute('href', 'microsoft-edge:' + url);\n a.setAttribute('class', 'new-green-button');\n a.innerHTML = edgeButton.dataset.buttonText;\n edgeButton.appendChild(a);\n }\n\n /**** needs to rewitten to valilla if used in other project, or use other overlay ****/\n //Open overlay\n $(iePopup).fadeIn();\n $(overlayBackdrop).addClass('ie-popup--show');\n $(overlayBackdrop).fadeIn();\n\n\n //Close login overlay when click on backdrop\n $(overlayBackdrop).click(function () {\n if ($(overlayBackdrop).hasClass('ie-popup--show')) {\n $(iePopup).fadeOut();\n $(overlayBackdrop).removeClass('ie-popup--show');\n $(overlayBackdrop).fadeOut();\n setCookie(\"ieAccept\", \"accepted\");\n }\n });\n\n //Close login overlay when click on close icon\n $(closeOverlay).click(function () {\n if ($(overlayBackdrop).hasClass('ie-popup--show')) {\n $(iePopup).fadeOut();\n $(overlayBackdrop).removeClass('ie-popup--show');\n $(overlayBackdrop).fadeOut();\n setCookie(\"ieAccept\", \"accepted\");\n }\n });\n }\n }\n}\n\n/* Cookie helper functions\n*******************************/\n// Get cookie\nfunction getCookie(e) {\n for (var t = e + \"=\", o = document.cookie.split(\";\"), n = 0; n < o.length; n++) {\n for (var i = o[n]; \" \" == i.charAt(0);)\n i = i.substring(1);\n if (0 === i.indexOf(t))\n return i.substring(t.length, i.length)\n }\n return \"\"\n}\n\n// Set cookie\nfunction setCookie(e, t, o) {\n var n = new Date;\n n.setTime(n.getTime() + 60 * o * 60 * 1e3 * 24);\n var i = \"expires=\" + n.toUTCString() + \";\";\n document.cookie = e + \"=\" + t + \"; \" + i + \"path=/\"\n}\n","/**\n * @license AngularJS v1.6.7\n * (c) 2010-2017 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/**\n * @ngdoc module\n * @name ngCookies\n * @description\n *\n * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.\n *\n * See {@link ngCookies.$cookies `$cookies`} for usage.\n */\n\n\nangular.module('ngCookies', ['ng']).\n info({ angularVersion: '1.6.7' }).\n /**\n * @ngdoc provider\n * @name $cookiesProvider\n * @description\n * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.\n * */\n provider('$cookies', [/** @this */function $CookiesProvider() {\n /**\n * @ngdoc property\n * @name $cookiesProvider#defaults\n * @description\n *\n * Object containing default options to pass when setting cookies.\n *\n * The object may have following properties:\n *\n * - **path** - `{string}` - The cookie will be available only for this path and its\n * sub-paths. By default, this is the URL that appears in your `` tag.\n * - **domain** - `{string}` - The cookie will be available only for this domain and\n * its sub-domains. For security reasons the user agent will not accept the cookie\n * if the current domain is not a sub-domain of this domain or equal to it.\n * - **expires** - `{string|Date}` - String of the form \"Wdy, DD Mon YYYY HH:MM:SS GMT\"\n * or a Date object indicating the exact date/time this cookie will expire.\n * - **secure** - `{boolean}` - If `true`, then the cookie will only be available through a\n * secured connection.\n *\n * Note: By default, the address that appears in your `` tag will be used as the path.\n * This is important so that cookies will be visible for all routes when html5mode is enabled.\n *\n * @example\n *\n * ```js\n * angular.module('cookiesProviderExample', ['ngCookies'])\n * .config(['$cookiesProvider', function($cookiesProvider) {\n * // Setting default options\n * $cookiesProvider.defaults.domain = 'foo.com';\n * $cookiesProvider.defaults.secure = true;\n * }]);\n * ```\n **/\n var defaults = this.defaults = {};\n\n function calcOptions(options) {\n return options ? angular.extend({}, defaults, options) : defaults;\n }\n\n /**\n * @ngdoc service\n * @name $cookies\n *\n * @description\n * Provides read/write access to browser's cookies.\n *\n *
\n * Up until Angular 1.3, `$cookies` exposed properties that represented the\n * current browser cookie values. In version 1.4, this behavior has changed, and\n * `$cookies` now provides a standard api of getters, setters etc.\n *
\n *\n * Requires the {@link ngCookies `ngCookies`} module to be installed.\n *\n * @example\n *\n * ```js\n * angular.module('cookiesExample', ['ngCookies'])\n * .controller('ExampleController', ['$cookies', function($cookies) {\n * // Retrieving a cookie\n * var favoriteCookie = $cookies.get('myFavorite');\n * // Setting a cookie\n * $cookies.put('myFavorite', 'oatmeal');\n * }]);\n * ```\n */\n this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) {\n return {\n /**\n * @ngdoc method\n * @name $cookies#get\n *\n * @description\n * Returns the value of given cookie key\n *\n * @param {string} key Id to use for lookup.\n * @returns {string} Raw cookie value.\n */\n get: function(key) {\n return $$cookieReader()[key];\n },\n\n /**\n * @ngdoc method\n * @name $cookies#getObject\n *\n * @description\n * Returns the deserialized value of given cookie key\n *\n * @param {string} key Id to use for lookup.\n * @returns {Object} Deserialized cookie value.\n */\n getObject: function(key) {\n var value = this.get(key);\n return value ? angular.fromJson(value) : value;\n },\n\n /**\n * @ngdoc method\n * @name $cookies#getAll\n *\n * @description\n * Returns a key value object with all the cookies\n *\n * @returns {Object} All cookies\n */\n getAll: function() {\n return $$cookieReader();\n },\n\n /**\n * @ngdoc method\n * @name $cookies#put\n *\n * @description\n * Sets a value for given cookie key\n *\n * @param {string} key Id for the `value`.\n * @param {string} value Raw value to be stored.\n * @param {Object=} options Options object.\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n */\n put: function(key, value, options) {\n $$cookieWriter(key, value, calcOptions(options));\n },\n\n /**\n * @ngdoc method\n * @name $cookies#putObject\n *\n * @description\n * Serializes and sets a value for given cookie key\n *\n * @param {string} key Id for the `value`.\n * @param {Object} value Value to be stored.\n * @param {Object=} options Options object.\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n */\n putObject: function(key, value, options) {\n this.put(key, angular.toJson(value), options);\n },\n\n /**\n * @ngdoc method\n * @name $cookies#remove\n *\n * @description\n * Remove given cookie\n *\n * @param {string} key Id of the key-value pair to delete.\n * @param {Object=} options Options object.\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n */\n remove: function(key, options) {\n $$cookieWriter(key, undefined, calcOptions(options));\n }\n };\n }];\n }]);\n\nangular.module('ngCookies').\n/**\n * @ngdoc service\n * @name $cookieStore\n * @deprecated\n * sinceVersion=\"v1.4.0\"\n * Please use the {@link ngCookies.$cookies `$cookies`} service instead.\n *\n * @requires $cookies\n *\n * @description\n * Provides a key-value (string-object) storage, that is backed by session cookies.\n * Objects put or retrieved from this storage are automatically serialized or\n * deserialized by angular's toJson/fromJson.\n *\n * Requires the {@link ngCookies `ngCookies`} module to be installed.\n *\n * @example\n *\n * ```js\n * angular.module('cookieStoreExample', ['ngCookies'])\n * .controller('ExampleController', ['$cookieStore', function($cookieStore) {\n * // Put cookie\n * $cookieStore.put('myFavorite','oatmeal');\n * // Get cookie\n * var favoriteCookie = $cookieStore.get('myFavorite');\n * // Removing a cookie\n * $cookieStore.remove('myFavorite');\n * }]);\n * ```\n */\n factory('$cookieStore', ['$cookies', function($cookies) {\n\n return {\n /**\n * @ngdoc method\n * @name $cookieStore#get\n *\n * @description\n * Returns the value of given cookie key\n *\n * @param {string} key Id to use for lookup.\n * @returns {Object} Deserialized cookie value, undefined if the cookie does not exist.\n */\n get: function(key) {\n return $cookies.getObject(key);\n },\n\n /**\n * @ngdoc method\n * @name $cookieStore#put\n *\n * @description\n * Sets a value for given cookie key\n *\n * @param {string} key Id for the `value`.\n * @param {Object} value Value to be stored.\n */\n put: function(key, value) {\n $cookies.putObject(key, value);\n },\n\n /**\n * @ngdoc method\n * @name $cookieStore#remove\n *\n * @description\n * Remove given cookie\n *\n * @param {string} key Id of the key-value pair to delete.\n */\n remove: function(key) {\n $cookies.remove(key);\n }\n };\n\n }]);\n\n/**\n * @name $$cookieWriter\n * @requires $document\n *\n * @description\n * This is a private service for writing cookies\n *\n * @param {string} name Cookie name\n * @param {string=} value Cookie value (if undefined, cookie will be deleted)\n * @param {Object=} options Object with options that need to be stored for the cookie.\n */\nfunction $$CookieWriter($document, $log, $browser) {\n var cookiePath = $browser.baseHref();\n var rawDocument = $document[0];\n\n function buildCookieString(name, value, options) {\n var path, expires;\n options = options || {};\n expires = options.expires;\n path = angular.isDefined(options.path) ? options.path : cookiePath;\n if (angular.isUndefined(value)) {\n expires = 'Thu, 01 Jan 1970 00:00:00 GMT';\n value = '';\n }\n if (angular.isString(expires)) {\n expires = new Date(expires);\n }\n\n var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n str += path ? ';path=' + path : '';\n str += options.domain ? ';domain=' + options.domain : '';\n str += expires ? ';expires=' + expires.toUTCString() : '';\n str += options.secure ? ';secure' : '';\n\n // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\n // - 300 cookies\n // - 20 cookies per unique domain\n // - 4096 bytes per cookie\n var cookieLength = str.length + 1;\n if (cookieLength > 4096) {\n $log.warn('Cookie \\'' + name +\n '\\' possibly not set or overflowed because it was too large (' +\n cookieLength + ' > 4096 bytes)!');\n }\n\n return str;\n }\n\n return function(name, value, options) {\n rawDocument.cookie = buildCookieString(name, value, options);\n };\n}\n\n$$CookieWriter.$inject = ['$document', '$log', '$browser'];\n\nangular.module('ngCookies').provider('$$cookieWriter', /** @this */ function $$CookieWriterProvider() {\n this.$get = $$CookieWriter;\n});\n\n\n})(window, window.angular);\n","/**\n * @license AngularJS v1.6.7\n * (c) 2010-2017 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\nvar $resourceMinErr = angular.$$minErr('$resource');\n\n// Helper functions and regex to lookup a dotted path on an object\n// stopping at undefined/null. The path must be composed of ASCII\n// identifiers (just like $parse)\nvar MEMBER_NAME_REGEX = /^(\\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;\n\nfunction isValidDottedPath(path) {\n return (path != null && path !== '' && path !== 'hasOwnProperty' &&\n MEMBER_NAME_REGEX.test('.' + path));\n}\n\nfunction lookupDottedPath(obj, path) {\n if (!isValidDottedPath(path)) {\n throw $resourceMinErr('badmember', 'Dotted member path \"@{0}\" is invalid.', path);\n }\n var keys = path.split('.');\n for (var i = 0, ii = keys.length; i < ii && angular.isDefined(obj); i++) {\n var key = keys[i];\n obj = (obj !== null) ? obj[key] : undefined;\n }\n return obj;\n}\n\n/**\n * Create a shallow copy of an object and clear other fields from the destination\n */\nfunction shallowClearAndCopy(src, dst) {\n dst = dst || {};\n\n angular.forEach(dst, function(value, key) {\n delete dst[key];\n });\n\n for (var key in src) {\n if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {\n dst[key] = src[key];\n }\n }\n\n return dst;\n}\n\n/**\n * @ngdoc module\n * @name ngResource\n * @description\n *\n * The `ngResource` module provides interaction support with RESTful services\n * via the $resource service.\n *\n * See {@link ngResource.$resourceProvider} and {@link ngResource.$resource} for usage.\n */\n\n/**\n * @ngdoc provider\n * @name $resourceProvider\n *\n * @description\n *\n * Use `$resourceProvider` to change the default behavior of the {@link ngResource.$resource}\n * service.\n *\n * ## Dependencies\n * Requires the {@link ngResource } module to be installed.\n *\n */\n\n/**\n * @ngdoc service\n * @name $resource\n * @requires $http\n * @requires ng.$log\n * @requires $q\n * @requires ng.$timeout\n *\n * @description\n * A factory which creates a resource object that lets you interact with\n * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.\n *\n * The returned resource object has action methods which provide high-level behaviors without\n * the need to interact with the low level {@link ng.$http $http} service.\n *\n * Requires the {@link ngResource `ngResource`} module to be installed.\n *\n * By default, trailing slashes will be stripped from the calculated URLs,\n * which can pose problems with server backends that do not expect that\n * behavior. This can be disabled by configuring the `$resourceProvider` like\n * this:\n *\n * ```js\n app.config(['$resourceProvider', function($resourceProvider) {\n // Don't strip trailing slashes from calculated URLs\n $resourceProvider.defaults.stripTrailingSlashes = false;\n }]);\n * ```\n *\n * @param {string} url A parameterized URL template with parameters prefixed by `:` as in\n * `/user/:username`. If you are using a URL with a port number (e.g.\n * `http://example.com:8080/api`), it will be respected.\n *\n * If you are using a url with a suffix, just add the suffix, like this:\n * `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`\n * or even `$resource('http://example.com/resource/:resource_id.:format')`\n * If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be\n * collapsed down to a single `.`. If you need this sequence to appear and not collapse then you\n * can escape it with `/\\.`.\n *\n * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in\n * `actions` methods. If a parameter value is a function, it will be called every time\n * a param value needs to be obtained for a request (unless the param was overridden). The function\n * will be passed the current data value as an argument.\n *\n * Each key value in the parameter object is first bound to url template if present and then any\n * excess keys are appended to the url search query after the `?`.\n *\n * Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in\n * URL `/path/greet?salutation=Hello`.\n *\n * If the parameter value is prefixed with `@`, then the value for that parameter will be\n * extracted from the corresponding property on the `data` object (provided when calling actions\n * with a request body).\n * For example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of\n * `someParam` will be `data.someProp`.\n * Note that the parameter will be ignored, when calling a \"GET\" action method (i.e. an action\n * method that does not accept a request body)\n *\n * @param {Object.=} actions Hash with declaration of custom actions that will be available\n * in addition to the default set of resource actions (see below). If a custom action has the same\n * key as a default action (e.g. `save`), then the default action will be *overwritten*, and not\n * extended.\n *\n * The declaration should be created in the format of {@link ng.$http#usage $http.config}:\n *\n * {action1: {method:?, params:?, isArray:?, headers:?, ...},\n * action2: {method:?, params:?, isArray:?, headers:?, ...},\n * ...}\n *\n * Where:\n *\n * - **`action`** – {string} – The name of action. This name becomes the name of the method on\n * your resource object.\n * - **`method`** – {string} – Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`,\n * `DELETE`, `JSONP`, etc).\n * - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of\n * the parameter value is a function, it will be called every time when a param value needs to\n * be obtained for a request (unless the param was overridden). The function will be passed the\n * current data value as an argument.\n * - **`url`** – {string} – action specific `url` override. The url templating is supported just\n * like for the resource-level urls.\n * - **`isArray`** – {boolean=} – If true then the returned object for this action is an array,\n * see `returns` section.\n * - **`transformRequest`** –\n * `{function(data, headersGetter)|Array.}` –\n * transform function or an array of such functions. The transform function takes the http\n * request body and headers and returns its transformed (typically serialized) version.\n * By default, transformRequest will contain one function that checks if the request data is\n * an object and serializes it using `angular.toJson`. To prevent this behavior, set\n * `transformRequest` to an empty array: `transformRequest: []`\n * - **`transformResponse`** –\n * `{function(data, headersGetter, status)|Array.}` –\n * transform function or an array of such functions. The transform function takes the http\n * response body, headers and status and returns its transformed (typically deserialized)\n * version.\n * By default, transformResponse will contain one function that checks if the response looks\n * like a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior,\n * set `transformResponse` to an empty array: `transformResponse: []`\n * - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the\n * GET request, otherwise if a cache instance built with\n * {@link ng.$cacheFactory $cacheFactory} is supplied, this cache will be used for\n * caching.\n * - **`timeout`** – `{number}` – timeout in milliseconds.
\n * **Note:** In contrast to {@link ng.$http#usage $http.config}, {@link ng.$q promises} are\n * **not** supported in $resource, because the same value would be used for multiple requests.\n * If you are looking for a way to cancel requests, you should use the `cancellable` option.\n * - **`cancellable`** – `{boolean}` – if set to true, the request made by a \"non-instance\" call\n * will be cancelled (if not already completed) by calling `$cancelRequest()` on the call's\n * return value. Calling `$cancelRequest()` for a non-cancellable or an already\n * completed/cancelled request will have no effect.
\n * - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the\n * XHR object. See\n * [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5)\n * for more information.\n * - **`responseType`** - `{string}` - see\n * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).\n * - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods -\n * `response` and `responseError`. Both `response` and `responseError` interceptors get called\n * with `http response` object. See {@link ng.$http $http interceptors}. In addition, the\n * resource instance or array object is accessible by the `resource` property of the\n * `http response` object.\n * Keep in mind that the associated promise will be resolved with the value returned by the\n * response interceptor, if one is specified. The default response interceptor returns\n * `response.resource` (i.e. the resource instance or array).\n * - **`hasBody`** - `{boolean}` - allows to specify if a request body should be included or not.\n * If not specified only POST, PUT and PATCH requests will have a body.\n *\n * @param {Object} options Hash with custom settings that should extend the\n * default `$resourceProvider` behavior. The supported options are:\n *\n * - **`stripTrailingSlashes`** – {boolean} – If true then the trailing\n * slashes from any calculated URL will be stripped. (Defaults to true.)\n * - **`cancellable`** – {boolean} – If true, the request made by a \"non-instance\" call will be\n * cancelled (if not already completed) by calling `$cancelRequest()` on the call's return value.\n * This can be overwritten per action. (Defaults to false.)\n *\n * @returns {Object} A resource \"class\" object with methods for the default set of resource actions\n * optionally extended with custom `actions`. The default set contains these actions:\n * ```js\n * { 'get': {method:'GET'},\n * 'save': {method:'POST'},\n * 'query': {method:'GET', isArray:true},\n * 'remove': {method:'DELETE'},\n * 'delete': {method:'DELETE'} };\n * ```\n *\n * Calling these methods invoke an {@link ng.$http} with the specified http method,\n * destination and parameters. When the data is returned from the server then the object is an\n * instance of the resource class. The actions `save`, `remove` and `delete` are available on it\n * as methods with the `$` prefix. This allows you to easily perform CRUD operations (create,\n * read, update, delete) on server-side data like this:\n * ```js\n * var User = $resource('/user/:userId', {userId:'@id'});\n * var user = User.get({userId:123}, function() {\n * user.abc = true;\n * user.$save();\n * });\n * ```\n *\n * It is important to realize that invoking a $resource object method immediately returns an\n * empty reference (object or array depending on `isArray`). Once the data is returned from the\n * server the existing reference is populated with the actual data. This is a useful trick since\n * usually the resource is assigned to a model which is then rendered by the view. Having an empty\n * object results in no rendering, once the data arrives from the server then the object is\n * populated with the data and the view automatically re-renders itself showing the new data. This\n * means that in most cases one never has to write a callback function for the action methods.\n *\n * The action methods on the class object or instance object can be invoked with the following\n * parameters:\n *\n * - \"class\" actions without a body: `Resource.action([parameters], [success], [error])`\n * - \"class\" actions with a body: `Resource.action([parameters], postData, [success], [error])`\n * - instance actions: `instance.$action([parameters], [success], [error])`\n *\n *\n * When calling instance methods, the instance itself is used as the request body (if the action\n * should have a body). By default, only actions using `POST`, `PUT` or `PATCH` have request\n * bodies, but you can use the `hasBody` configuration option to specify whether an action\n * should have a body or not (regardless of its HTTP method).\n *\n *\n * Success callback is called with (value (Object|Array), responseHeaders (Function),\n * status (number), statusText (string)) arguments, where the value is the populated resource\n * instance or collection object. The error callback is called with (httpResponse) argument.\n *\n * Class actions return empty instance (with additional properties below).\n * Instance actions return promise of the action.\n *\n * The Resource instances and collections have these additional properties:\n *\n * - `$promise`: the {@link ng.$q promise} of the original server interaction that created this\n * instance or collection.\n *\n * On success, the promise is resolved with the same resource instance or collection object,\n * updated with data from server. This makes it easy to use in\n * {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view\n * rendering until the resource(s) are loaded.\n *\n * On failure, the promise is rejected with the {@link ng.$http http response} object.\n *\n * If an interceptor object was provided, the promise will instead be resolved with the value\n * returned by the interceptor.\n *\n * - `$resolved`: `true` after first server interaction is completed (either with success or\n * rejection), `false` before that. Knowing if the Resource has been resolved is useful in\n * data-binding.\n *\n * The Resource instances and collections have these additional methods:\n *\n * - `$cancelRequest`: If there is a cancellable, pending request related to the instance or\n * collection, calling this method will abort the request.\n *\n * The Resource instances have these additional methods:\n *\n * - `toJSON`: It returns a simple object without any of the extra properties added as part of\n * the Resource API. This object can be serialized through {@link angular.toJson} safely\n * without attaching Angular-specific fields. Notice that `JSON.stringify` (and\n * `angular.toJson`) automatically use this method when serializing a Resource instance\n * (see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON%28%29_behavior)).\n *\n * @example\n *\n * ### Credit card resource\n *\n * ```js\n // Define CreditCard class\n var CreditCard = $resource('/user/:userId/card/:cardId',\n {userId:123, cardId:'@id'}, {\n charge: {method:'POST', params:{charge:true}}\n });\n\n // We can retrieve a collection from the server\n var cards = CreditCard.query(function() {\n // GET: /user/123/card\n // server returns: [ {id:456, number:'1234', name:'Smith'} ];\n\n var card = cards[0];\n // each item is an instance of CreditCard\n expect(card instanceof CreditCard).toEqual(true);\n card.name = \"J. Smith\";\n // non GET methods are mapped onto the instances\n card.$save();\n // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}\n // server returns: {id:456, number:'1234', name: 'J. Smith'};\n\n // our custom method is mapped as well.\n card.$charge({amount:9.99});\n // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}\n });\n\n // we can create an instance as well\n var newCard = new CreditCard({number:'0123'});\n newCard.name = \"Mike Smith\";\n newCard.$save();\n // POST: /user/123/card {number:'0123', name:'Mike Smith'}\n // server returns: {id:789, number:'0123', name: 'Mike Smith'};\n expect(newCard.id).toEqual(789);\n * ```\n *\n * The object returned from this function execution is a resource \"class\" which has \"static\" method\n * for each action in the definition.\n *\n * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and\n * `headers`.\n *\n * @example\n *\n * ### User resource\n *\n * When the data is returned from the server then the object is an instance of the resource type and\n * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD\n * operations (create, read, update, delete) on server-side data.\n\n ```js\n var User = $resource('/user/:userId', {userId:'@id'});\n User.get({userId:123}, function(user) {\n user.abc = true;\n user.$save();\n });\n ```\n *\n * It's worth noting that the success callback for `get`, `query` and other methods gets passed\n * in the response that came from the server as well as $http header getter function, so one\n * could rewrite the above example and get access to http headers as:\n *\n ```js\n var User = $resource('/user/:userId', {userId:'@id'});\n User.get({userId:123}, function(user, getResponseHeaders){\n user.abc = true;\n user.$save(function(user, putResponseHeaders) {\n //user => saved user object\n //putResponseHeaders => $http header getter\n });\n });\n ```\n *\n * You can also access the raw `$http` promise via the `$promise` property on the object returned\n *\n ```\n var User = $resource('/user/:userId', {userId:'@id'});\n User.get({userId:123})\n .$promise.then(function(user) {\n $scope.user = user;\n });\n ```\n *\n * @example\n *\n * ### Creating a custom 'PUT' request\n *\n * In this example we create a custom method on our resource to make a PUT request\n * ```js\n * var app = angular.module('app', ['ngResource', 'ngRoute']);\n *\n * // Some APIs expect a PUT request in the format URL/object/ID\n * // Here we are creating an 'update' method\n * app.factory('Notes', ['$resource', function($resource) {\n * return $resource('/notes/:id', null,\n * {\n * 'update': { method:'PUT' }\n * });\n * }]);\n *\n * // In our controller we get the ID from the URL using ngRoute and $routeParams\n * // We pass in $routeParams and our Notes factory along with $scope\n * app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes',\n function($scope, $routeParams, Notes) {\n * // First get a note object from the factory\n * var note = Notes.get({ id:$routeParams.id });\n * $id = note.id;\n *\n * // Now call update passing in the ID first then the object you are updating\n * Notes.update({ id:$id }, note);\n *\n * // This will PUT /notes/ID with the note object in the request payload\n * }]);\n * ```\n *\n * @example\n *\n * ### Cancelling requests\n *\n * If an action's configuration specifies that it is cancellable, you can cancel the request related\n * to an instance or collection (as long as it is a result of a \"non-instance\" call):\n *\n ```js\n // ...defining the `Hotel` resource...\n var Hotel = $resource('/api/hotel/:id', {id: '@id'}, {\n // Let's make the `query()` method cancellable\n query: {method: 'get', isArray: true, cancellable: true}\n });\n\n // ...somewhere in the PlanVacationController...\n ...\n this.onDestinationChanged = function onDestinationChanged(destination) {\n // We don't care about any pending request for hotels\n // in a different destination any more\n this.availableHotels.$cancelRequest();\n\n // Let's query for hotels in ''\n // (calls: /api/hotel?location=)\n this.availableHotels = Hotel.query({location: destination});\n };\n ```\n *\n */\nangular.module('ngResource', ['ng']).\n info({ angularVersion: '1.6.7' }).\n provider('$resource', function ResourceProvider() {\n var PROTOCOL_AND_IPV6_REGEX = /^https?:\\/\\/\\[[^\\]]*][^/]*/;\n\n var provider = this;\n\n /**\n * @ngdoc property\n * @name $resourceProvider#defaults\n * @description\n * Object containing default options used when creating `$resource` instances.\n *\n * The default values satisfy a wide range of usecases, but you may choose to overwrite any of\n * them to further customize your instances. The available properties are:\n *\n * - **stripTrailingSlashes** – `{boolean}` – If true, then the trailing slashes from any\n * calculated URL will be stripped.
\n * (Defaults to true.)\n * - **cancellable** – `{boolean}` – If true, the request made by a \"non-instance\" call will be\n * cancelled (if not already completed) by calling `$cancelRequest()` on the call's return\n * value. For more details, see {@link ngResource.$resource}. This can be overwritten per\n * resource class or action.
\n * (Defaults to false.)\n * - **actions** - `{Object.}` - A hash with default actions declarations. Actions are\n * high-level methods corresponding to RESTful actions/methods on resources. An action may\n * specify what HTTP method to use, what URL to hit, if the return value will be a single\n * object or a collection (array) of objects etc. For more details, see\n * {@link ngResource.$resource}. The actions can also be enhanced or overwritten per resource\n * class.
\n * The default actions are:\n * ```js\n * {\n * get: {method: 'GET'},\n * save: {method: 'POST'},\n * query: {method: 'GET', isArray: true},\n * remove: {method: 'DELETE'},\n * delete: {method: 'DELETE'}\n * }\n * ```\n *\n * #### Example\n *\n * For example, you can specify a new `update` action that uses the `PUT` HTTP verb:\n *\n * ```js\n * angular.\n * module('myApp').\n * config(['$resourceProvider', function ($resourceProvider) {\n * $resourceProvider.defaults.actions.update = {\n * method: 'PUT'\n * };\n * }]);\n * ```\n *\n * Or you can even overwrite the whole `actions` list and specify your own:\n *\n * ```js\n * angular.\n * module('myApp').\n * config(['$resourceProvider', function ($resourceProvider) {\n * $resourceProvider.defaults.actions = {\n * create: {method: 'POST'},\n * get: {method: 'GET'},\n * getAll: {method: 'GET', isArray:true},\n * update: {method: 'PUT'},\n * delete: {method: 'DELETE'}\n * };\n * });\n * ```\n *\n */\n this.defaults = {\n // Strip slashes by default\n stripTrailingSlashes: true,\n\n // Make non-instance requests cancellable (via `$cancelRequest()`)\n cancellable: false,\n\n // Default actions configuration\n actions: {\n 'get': {method: 'GET'},\n 'save': {method: 'POST'},\n 'query': {method: 'GET', isArray: true},\n 'remove': {method: 'DELETE'},\n 'delete': {method: 'DELETE'}\n }\n };\n\n this.$get = ['$http', '$log', '$q', '$timeout', function($http, $log, $q, $timeout) {\n\n var noop = angular.noop,\n forEach = angular.forEach,\n extend = angular.extend,\n copy = angular.copy,\n isArray = angular.isArray,\n isDefined = angular.isDefined,\n isFunction = angular.isFunction,\n isNumber = angular.isNumber,\n encodeUriQuery = angular.$$encodeUriQuery,\n encodeUriSegment = angular.$$encodeUriSegment;\n\n function Route(template, defaults) {\n this.template = template;\n this.defaults = extend({}, provider.defaults, defaults);\n this.urlParams = {};\n }\n\n Route.prototype = {\n setUrlParams: function(config, params, actionUrl) {\n var self = this,\n url = actionUrl || self.template,\n val,\n encodedVal,\n protocolAndIpv6 = '';\n\n var urlParams = self.urlParams = Object.create(null);\n forEach(url.split(/\\W/), function(param) {\n if (param === 'hasOwnProperty') {\n throw $resourceMinErr('badname', 'hasOwnProperty is not a valid parameter name.');\n }\n if (!(new RegExp('^\\\\d+$').test(param)) && param &&\n (new RegExp('(^|[^\\\\\\\\]):' + param + '(\\\\W|$)').test(url))) {\n urlParams[param] = {\n isQueryParamValue: (new RegExp('\\\\?.*=:' + param + '(?:\\\\W|$)')).test(url)\n };\n }\n });\n url = url.replace(/\\\\:/g, ':');\n url = url.replace(PROTOCOL_AND_IPV6_REGEX, function(match) {\n protocolAndIpv6 = match;\n return '';\n });\n\n params = params || {};\n forEach(self.urlParams, function(paramInfo, urlParam) {\n val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];\n if (isDefined(val) && val !== null) {\n if (paramInfo.isQueryParamValue) {\n encodedVal = encodeUriQuery(val, true);\n } else {\n encodedVal = encodeUriSegment(val);\n }\n url = url.replace(new RegExp(':' + urlParam + '(\\\\W|$)', 'g'), function(match, p1) {\n return encodedVal + p1;\n });\n } else {\n url = url.replace(new RegExp('(/?):' + urlParam + '(\\\\W|$)', 'g'), function(match,\n leadingSlashes, tail) {\n if (tail.charAt(0) === '/') {\n return tail;\n } else {\n return leadingSlashes + tail;\n }\n });\n }\n });\n\n // strip trailing slashes and set the url (unless this behavior is specifically disabled)\n if (self.defaults.stripTrailingSlashes) {\n url = url.replace(/\\/+$/, '') || '/';\n }\n\n // Collapse `/.` if found in the last URL path segment before the query.\n // E.g. `http://url.com/id/.format?q=x` becomes `http://url.com/id.format?q=x`.\n url = url.replace(/\\/\\.(?=\\w+($|\\?))/, '.');\n // Replace escaped `/\\.` with `/.`.\n // (If `\\.` comes from a param value, it will be encoded as `%5C.`.)\n config.url = protocolAndIpv6 + url.replace(/\\/(\\\\|%5C)\\./, '/.');\n\n\n // set params - delegate param encoding to $http\n forEach(params, function(value, key) {\n if (!self.urlParams[key]) {\n config.params = config.params || {};\n config.params[key] = value;\n }\n });\n }\n };\n\n\n function resourceFactory(url, paramDefaults, actions, options) {\n var route = new Route(url, options);\n\n actions = extend({}, provider.defaults.actions, actions);\n\n function extractParams(data, actionParams) {\n var ids = {};\n actionParams = extend({}, paramDefaults, actionParams);\n forEach(actionParams, function(value, key) {\n if (isFunction(value)) { value = value(data); }\n ids[key] = value && value.charAt && value.charAt(0) === '@' ?\n lookupDottedPath(data, value.substr(1)) : value;\n });\n return ids;\n }\n\n function defaultResponseInterceptor(response) {\n return response.resource;\n }\n\n function Resource(value) {\n shallowClearAndCopy(value || {}, this);\n }\n\n Resource.prototype.toJSON = function() {\n var data = extend({}, this);\n delete data.$promise;\n delete data.$resolved;\n delete data.$cancelRequest;\n return data;\n };\n\n forEach(actions, function(action, name) {\n var hasBody = action.hasBody === true || (action.hasBody !== false && /^(POST|PUT|PATCH)$/i.test(action.method));\n var numericTimeout = action.timeout;\n var cancellable = isDefined(action.cancellable) ?\n action.cancellable : route.defaults.cancellable;\n\n if (numericTimeout && !isNumber(numericTimeout)) {\n $log.debug('ngResource:\\n' +\n ' Only numeric values are allowed as `timeout`.\\n' +\n ' Promises are not supported in $resource, because the same value would ' +\n 'be used for multiple requests. If you are looking for a way to cancel ' +\n 'requests, you should use the `cancellable` option.');\n delete action.timeout;\n numericTimeout = null;\n }\n\n Resource[name] = function(a1, a2, a3, a4) {\n var params = {}, data, success, error;\n\n switch (arguments.length) {\n case 4:\n error = a4;\n success = a3;\n // falls through\n case 3:\n case 2:\n if (isFunction(a2)) {\n if (isFunction(a1)) {\n success = a1;\n error = a2;\n break;\n }\n\n success = a2;\n error = a3;\n // falls through\n } else {\n params = a1;\n data = a2;\n success = a3;\n break;\n }\n // falls through\n case 1:\n if (isFunction(a1)) success = a1;\n else if (hasBody) data = a1;\n else params = a1;\n break;\n case 0: break;\n default:\n throw $resourceMinErr('badargs',\n 'Expected up to 4 arguments [params, data, success, error], got {0} arguments',\n arguments.length);\n }\n\n var isInstanceCall = this instanceof Resource;\n var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));\n var httpConfig = {};\n var responseInterceptor = action.interceptor && action.interceptor.response ||\n defaultResponseInterceptor;\n var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||\n undefined;\n var hasError = !!error;\n var hasResponseErrorInterceptor = !!responseErrorInterceptor;\n var timeoutDeferred;\n var numericTimeoutPromise;\n\n forEach(action, function(value, key) {\n switch (key) {\n default:\n httpConfig[key] = copy(value);\n break;\n case 'params':\n case 'isArray':\n case 'interceptor':\n case 'cancellable':\n break;\n }\n });\n\n if (!isInstanceCall && cancellable) {\n timeoutDeferred = $q.defer();\n httpConfig.timeout = timeoutDeferred.promise;\n\n if (numericTimeout) {\n numericTimeoutPromise = $timeout(timeoutDeferred.resolve, numericTimeout);\n }\n }\n\n if (hasBody) httpConfig.data = data;\n route.setUrlParams(httpConfig,\n extend({}, extractParams(data, action.params || {}), params),\n action.url);\n\n var promise = $http(httpConfig).then(function(response) {\n var data = response.data;\n\n if (data) {\n // Need to convert action.isArray to boolean in case it is undefined\n if (isArray(data) !== (!!action.isArray)) {\n throw $resourceMinErr('badcfg',\n 'Error in resource configuration for action `{0}`. Expected response to ' +\n 'contain an {1} but got an {2} (Request: {3} {4})', name, action.isArray ? 'array' : 'object',\n isArray(data) ? 'array' : 'object', httpConfig.method, httpConfig.url);\n }\n if (action.isArray) {\n value.length = 0;\n forEach(data, function(item) {\n if (typeof item === 'object') {\n value.push(new Resource(item));\n } else {\n // Valid JSON values may be string literals, and these should not be converted\n // into objects. These items will not have access to the Resource prototype\n // methods, but unfortunately there\n value.push(item);\n }\n });\n } else {\n var promise = value.$promise; // Save the promise\n shallowClearAndCopy(data, value);\n value.$promise = promise; // Restore the promise\n }\n }\n response.resource = value;\n\n return response;\n }, function(response) {\n response.resource = value;\n return $q.reject(response);\n });\n\n promise = promise['finally'](function() {\n value.$resolved = true;\n if (!isInstanceCall && cancellable) {\n value.$cancelRequest = noop;\n $timeout.cancel(numericTimeoutPromise);\n timeoutDeferred = numericTimeoutPromise = httpConfig.timeout = null;\n }\n });\n\n promise = promise.then(\n function(response) {\n var value = responseInterceptor(response);\n (success || noop)(value, response.headers, response.status, response.statusText);\n return value;\n },\n (hasError || hasResponseErrorInterceptor) ?\n function(response) {\n if (hasError && !hasResponseErrorInterceptor) {\n // Avoid `Possibly Unhandled Rejection` error,\n // but still fulfill the returned promise with a rejection\n promise.catch(noop);\n }\n if (hasError) error(response);\n return hasResponseErrorInterceptor ?\n responseErrorInterceptor(response) :\n $q.reject(response);\n } :\n undefined);\n\n if (!isInstanceCall) {\n // we are creating instance / collection\n // - set the initial promise\n // - return the instance / collection\n value.$promise = promise;\n value.$resolved = false;\n if (cancellable) value.$cancelRequest = cancelRequest;\n\n return value;\n }\n\n // instance call\n return promise;\n\n function cancelRequest(value) {\n promise.catch(noop);\n if (timeoutDeferred !== null) {\n timeoutDeferred.resolve(value);\n }\n }\n };\n\n\n Resource.prototype['$' + name] = function(params, success, error) {\n if (isFunction(params)) {\n error = success; success = params; params = {};\n }\n var result = Resource[name].call(this, params, this, success, error);\n return result.$promise || result;\n };\n });\n\n return Resource;\n }\n\n return resourceFactory;\n }];\n });\n\n\n})(window, window.angular);\n","/**\n * @license AngularJS v1.6.7\n * (c) 2010-2017 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Any commits to this file should be reviewed with security in mind. *\n * Changes to this file can potentially create security vulnerabilities. *\n * An approval from 2 Core members with history of modifying *\n * this file is required. *\n * *\n * Does the change somehow allow for arbitrary javascript to be executed? *\n * Or allows for someone to change the prototype of built-in objects? *\n * Or gives undesired access to variables likes document or window? *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\nvar bind;\nvar extend;\nvar forEach;\nvar isDefined;\nvar lowercase;\nvar noop;\nvar nodeContains;\nvar htmlParser;\nvar htmlSanitizeWriter;\n\n/**\n * @ngdoc module\n * @name ngSanitize\n * @description\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/**\n * @ngdoc service\n * @name $sanitize\n * @kind function\n *\n * @description\n * Sanitizes an html string by stripping all potentially dangerous tokens.\n *\n * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are\n * then serialized back to properly escaped html string. This means that no unsafe input can make\n * it into the returned string.\n *\n * The whitelist for URL sanitization of attribute values is configured using the functions\n * `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider\n * `$compileProvider`}.\n *\n * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.\n *\n * @param {string} html HTML input.\n * @returns {string} Sanitized HTML.\n *\n * @example\n \n \n \n
\n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
DirectiveHowSourceRendered
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html=\"snippet\">
</div>
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value\n
<div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\">\n</div>
\n
ng-bindAutomatically escapes
<div ng-bind=\"snippet\">
</div>
\n
\n
\n \n it('should sanitize the html snippet by default', function() {\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('

an html\\nclick here\\nsnippet

');\n });\n\n it('should inline raw snippet if bound to a trusted value', function() {\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).\n toBe(\"

an html\\n\" +\n \"click here\\n\" +\n \"snippet

\");\n });\n\n it('should escape snippet without any filter', function() {\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).\n toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n \"snippet</p>\");\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new text');\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('new text');\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe(\n 'new text');\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe(\n \"new <b onclick=\\\"alert(1)\\\">text</b>\");\n });\n
\n
\n */\n\n\n/**\n * @ngdoc provider\n * @name $sanitizeProvider\n * @this\n *\n * @description\n * Creates and configures {@link $sanitize} instance.\n */\nfunction $SanitizeProvider() {\n var svgEnabled = false;\n\n this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\n if (svgEnabled) {\n extend(validElements, svgElements);\n }\n return function(html) {\n var buf = [];\n htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\n return !/^unsafe:/.test($$sanitizeUri(uri, isImage));\n }));\n return buf.join('');\n };\n }];\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#enableSvg\n * @kind function\n *\n * @description\n * Enables a subset of svg to be supported by the sanitizer.\n *\n *
\n *

By enabling this setting without taking other precautions, you might expose your\n * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned\n * outside of the containing element and be rendered over other elements on the page (e.g. a login\n * link). Such behavior can then result in phishing incidents.

\n *\n *

To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg\n * tags within the sanitized content:

\n *\n *
\n *\n *
\n   *   .rootOfTheIncludedContent svg {\n   *     overflow: hidden !important;\n   *   }\n   *   
\n *
\n *\n * @param {boolean=} flag Enable or disable SVG support in the sanitizer.\n * @returns {boolean|ng.$sanitizeProvider} Returns the currently configured value if called\n * without an argument or self for chaining otherwise.\n */\n this.enableSvg = function(enableSvg) {\n if (isDefined(enableSvg)) {\n svgEnabled = enableSvg;\n return this;\n } else {\n return svgEnabled;\n }\n };\n\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Private stuff\n //////////////////////////////////////////////////////////////////////////////////////////////////\n\n bind = angular.bind;\n extend = angular.extend;\n forEach = angular.forEach;\n isDefined = angular.isDefined;\n lowercase = angular.lowercase;\n noop = angular.noop;\n\n htmlParser = htmlParserImpl;\n htmlSanitizeWriter = htmlSanitizeWriterImpl;\n\n nodeContains = window.Node.prototype.contains || /** @this */ function(arg) {\n // eslint-disable-next-line no-bitwise\n return !!(this.compareDocumentPosition(arg) & 16);\n };\n\n // Regular Expressions for parsing tags and attributes\n var SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n // Match everything outside of normal chars and \" (quote character)\n NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g;\n\n\n // Good source of info about elements and attributes\n // http://dev.w3.org/html5/spec/Overview.html#semantics\n // http://simon.html5.org/html-elements\n\n // Safe Void Elements - HTML5\n // http://dev.w3.org/html5/spec/Overview.html#void-elements\n var voidElements = toMap('area,br,col,hr,img,wbr');\n\n // Elements that you can, intentionally, leave open (and which close themselves)\n // http://dev.w3.org/html5/spec/Overview.html#optional-tags\n var optionalEndTagBlockElements = toMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'),\n optionalEndTagInlineElements = toMap('rp,rt'),\n optionalEndTagElements = extend({},\n optionalEndTagInlineElements,\n optionalEndTagBlockElements);\n\n // Safe Block Elements - HTML5\n var blockElements = extend({}, optionalEndTagBlockElements, toMap('address,article,' +\n 'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +\n 'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul'));\n\n // Inline Elements - HTML5\n var inlineElements = extend({}, optionalEndTagInlineElements, toMap('a,abbr,acronym,b,' +\n 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +\n 'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));\n\n // SVG Elements\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements\n // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.\n // They can potentially allow for arbitrary javascript to be executed. See #11290\n var svgElements = toMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' +\n 'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' +\n 'radialGradient,rect,stop,svg,switch,text,title,tspan');\n\n // Blocked Elements (will be stripped)\n var blockedElements = toMap('script,style');\n\n var validElements = extend({},\n voidElements,\n blockElements,\n inlineElements,\n optionalEndTagElements);\n\n //Attributes that have href and hence need to be sanitized\n var uriAttrs = toMap('background,cite,href,longdesc,src,xlink:href');\n\n var htmlAttrs = toMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +\n 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +\n 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +\n 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +\n 'valign,value,vspace,width');\n\n // SVG attributes (without \"id\" and \"name\" attributes)\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes\n var svgAttrs = toMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +\n 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +\n 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +\n 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +\n 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +\n 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +\n 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +\n 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +\n 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +\n 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +\n 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +\n 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +\n 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +\n 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +\n 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);\n\n var validAttrs = extend({},\n uriAttrs,\n svgAttrs,\n htmlAttrs);\n\n function toMap(str, lowercaseKeys) {\n var obj = {}, items = str.split(','), i;\n for (i = 0; i < items.length; i++) {\n obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;\n }\n return obj;\n }\n\n /**\n * Create an inert document that contains the dirty HTML that needs sanitizing\n * Depending upon browser support we use one of three strategies for doing this.\n * Support: Safari 10.x -> XHR strategy\n * Support: Firefox -> DomParser strategy\n */\n var getInertBodyElement /* function(html: string): HTMLBodyElement */ = (function(window, document) {\n var inertDocument;\n if (document && document.implementation) {\n inertDocument = document.implementation.createHTMLDocument('inert');\n } else {\n throw $sanitizeMinErr('noinert', 'Can\\'t create an inert html document');\n }\n var inertBodyElement = (inertDocument.documentElement || inertDocument.getDocumentElement()).querySelector('body');\n\n // Check for the Safari 10.1 bug - which allows JS to run inside the SVG G element\n inertBodyElement.innerHTML = '';\n if (!inertBodyElement.querySelector('svg')) {\n return getInertBodyElement_XHR;\n } else {\n // Check for the Firefox bug - which prevents the inner img JS from being sanitized\n inertBodyElement.innerHTML = '

';\n if (inertBodyElement.querySelector('svg img')) {\n return getInertBodyElement_DOMParser;\n } else {\n return getInertBodyElement_InertDocument;\n }\n }\n\n function getInertBodyElement_XHR(html) {\n // We add this dummy element to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the `` tag.\n html = '' + html;\n try {\n html = encodeURI(html);\n } catch (e) {\n return undefined;\n }\n var xhr = new window.XMLHttpRequest();\n xhr.responseType = 'document';\n xhr.open('GET', 'data:text/html;charset=utf-8,' + html, false);\n xhr.send(null);\n var body = xhr.response.body;\n body.firstChild.remove();\n return body;\n }\n\n function getInertBodyElement_DOMParser(html) {\n // We add this dummy element to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the `` tag.\n html = '' + html;\n try {\n var body = new window.DOMParser().parseFromString(html, 'text/html').body;\n body.firstChild.remove();\n return body;\n } catch (e) {\n return undefined;\n }\n }\n\n function getInertBodyElement_InertDocument(html) {\n inertBodyElement.innerHTML = html;\n\n // Support: IE 9-11 only\n // strip custom-namespaced attributes on IE<=11\n if (document.documentMode) {\n stripCustomNsAttrs(inertBodyElement);\n }\n\n return inertBodyElement;\n }\n })(window, window.document);\n\n /**\n * @example\n * htmlParser(htmlString, {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * });\n *\n * @param {string} html string\n * @param {object} handler\n */\n function htmlParserImpl(html, handler) {\n if (html === null || html === undefined) {\n html = '';\n } else if (typeof html !== 'string') {\n html = '' + html;\n }\n\n var inertBodyElement = getInertBodyElement(html);\n if (!inertBodyElement) return '';\n\n //mXSS protection\n var mXSSAttempts = 5;\n do {\n if (mXSSAttempts === 0) {\n throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n\n // trigger mXSS if it is going to happen by reading and writing the innerHTML\n html = inertBodyElement.innerHTML;\n inertBodyElement = getInertBodyElement(html);\n } while (html !== inertBodyElement.innerHTML);\n\n var node = inertBodyElement.firstChild;\n while (node) {\n switch (node.nodeType) {\n case 1: // ELEMENT_NODE\n handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));\n break;\n case 3: // TEXT NODE\n handler.chars(node.textContent);\n break;\n }\n\n var nextNode;\n if (!(nextNode = node.firstChild)) {\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n nextNode = getNonDescendant('nextSibling', node);\n if (!nextNode) {\n while (nextNode == null) {\n node = getNonDescendant('parentNode', node);\n if (node === inertBodyElement) break;\n nextNode = getNonDescendant('nextSibling', node);\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n }\n }\n }\n node = nextNode;\n }\n\n while ((node = inertBodyElement.firstChild)) {\n inertBodyElement.removeChild(node);\n }\n }\n\n function attrToMap(attrs) {\n var map = {};\n for (var i = 0, ii = attrs.length; i < ii; i++) {\n var attr = attrs[i];\n map[attr.name] = attr.value;\n }\n return map;\n }\n\n\n /**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n * @returns {string} escaped text\n */\n function encodeEntities(value) {\n return value.\n replace(/&/g, '&').\n replace(SURROGATE_PAIR_REGEXP, function(value) {\n var hi = value.charCodeAt(0);\n var low = value.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n }).\n replace(NON_ALPHANUMERIC_REGEXP, function(value) {\n return '&#' + value.charCodeAt(0) + ';';\n }).\n replace(//g, '>');\n }\n\n /**\n * create an HTML/XML writer which writes to buffer\n * @param {Array} buf use buf.join('') to get out sanitized html string\n * @returns {object} in the form of {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * }\n */\n function htmlSanitizeWriterImpl(buf, uriValidator) {\n var ignoreCurrentElement = false;\n var out = bind(buf, buf.push);\n return {\n start: function(tag, attrs) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && blockedElements[tag]) {\n ignoreCurrentElement = tag;\n }\n if (!ignoreCurrentElement && validElements[tag] === true) {\n out('<');\n out(tag);\n forEach(attrs, function(value, key) {\n var lkey = lowercase(key);\n var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\n if (validAttrs[lkey] === true &&\n (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\n out(' ');\n out(key);\n out('=\"');\n out(encodeEntities(value));\n out('\"');\n }\n });\n out('>');\n }\n },\n end: function(tag) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {\n out('');\n }\n // eslint-disable-next-line eqeqeq\n if (tag == ignoreCurrentElement) {\n ignoreCurrentElement = false;\n }\n },\n chars: function(chars) {\n if (!ignoreCurrentElement) {\n out(encodeEntities(chars));\n }\n }\n };\n }\n\n\n /**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare\n * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want\n * to allow any of these custom attributes. This method strips them all.\n *\n * @param node Root element to process\n */\n function stripCustomNsAttrs(node) {\n while (node) {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n var attrs = node.attributes;\n for (var i = 0, l = attrs.length; i < l; i++) {\n var attrNode = attrs[i];\n var attrName = attrNode.name.toLowerCase();\n if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {\n node.removeAttributeNode(attrNode);\n i--;\n l--;\n }\n }\n }\n\n var nextNode = node.firstChild;\n if (nextNode) {\n stripCustomNsAttrs(nextNode);\n }\n\n node = getNonDescendant('nextSibling', node);\n }\n }\n\n function getNonDescendant(propName, node) {\n // An element is clobbered if its `propName` property points to one of its descendants\n var nextNode = node[propName];\n if (nextNode && nodeContains.call(node, nextNode)) {\n throw $sanitizeMinErr('elclob', 'Failed to sanitize html because the element is clobbered: {0}', node.outerHTML || node.outerText);\n }\n return nextNode;\n }\n}\n\nfunction sanitizeText(chars) {\n var buf = [];\n var writer = htmlSanitizeWriter(buf, noop);\n writer.chars(chars);\n return buf.join('');\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', [])\n .provider('$sanitize', $SanitizeProvider)\n .info({ angularVersion: '1.6.7' });\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports `http/https/ftp/sftp/mailto` and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} [target] Window (`_blank|_self|_parent|_top`) or named frame to open links in.\n * @param {object|function(url)} [attributes] Add custom attributes to the link element.\n *\n * Can be one of:\n *\n * - `object`: A map of attributes\n * - `function`: Takes the url as a parameter and returns a map of attributes\n *\n * If the map of attributes contains a value for `target`, it overrides the value of\n * the target parameter.\n *\n *\n * @returns {string} Html-linkified and {@link $sanitize sanitized} text.\n *\n * @usage\n \n *\n * @example\n \n \n

\n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FilterSourceRendered
linky filter\n
<div ng-bind-html=\"snippet | linky\">
</div>
\n
\n
\n
linky target\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\">
</div>
\n
\n
\n
linky custom attributes\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\">
</div>
\n
\n
\n
no filter
<div ng-bind=\"snippet\">
</div>
\n \n \n angular.module('linkyExample', ['ngSanitize'])\n .controller('ExampleController', ['$scope', function($scope) {\n $scope.snippet =\n 'Pretty text with some links:\\n' +\n 'http://angularjs.org/,\\n' +\n 'mailto:us@somewhere.org,\\n' +\n 'another@somewhere.org,\\n' +\n 'and one more: ftp://127.0.0.1/.';\n $scope.snippetWithSingleURL = 'http://angularjs.org/';\n }]);\n \n \n it('should linkify the snippet with urls', function() {\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\n });\n\n it('should not linkify snippet without the linky filter', function() {\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new http://link.');\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('new http://link.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\n .toBe('new http://link.');\n });\n\n it('should work with the target property', function() {\n expect(element(by.id('linky-target')).\n element(by.binding(\"snippetWithSingleURL | linky:'_blank'\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\n });\n\n it('should optionally add custom attributes', function() {\n expect(element(by.id('linky-custom-attributes')).\n element(by.binding(\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');\n });\n \n \n */\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\n var LINKY_URL_REGEXP =\n /((s?ftp|https?):\\/\\/|(www\\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>\"\\u201d\\u2019]/i,\n MAILTO_REGEXP = /^mailto:/i;\n\n var linkyMinErr = angular.$$minErr('linky');\n var isDefined = angular.isDefined;\n var isFunction = angular.isFunction;\n var isObject = angular.isObject;\n var isString = angular.isString;\n\n return function(text, target, attributes) {\n if (text == null || text === '') return text;\n if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);\n\n var attributesFn =\n isFunction(attributes) ? attributes :\n isObject(attributes) ? function getAttributesObject() {return attributes;} :\n function getEmptyAttributesObject() {return {};};\n\n var match;\n var raw = text;\n var html = [];\n var url;\n var i;\n while ((match = raw.match(LINKY_URL_REGEXP))) {\n // We can not end in these as they are sometimes found at the end of the sentence\n url = match[0];\n // if we did not match ftp/http/www/mailto then assume mailto\n if (!match[2] && !match[4]) {\n url = (match[3] ? 'http://' : 'mailto:') + url;\n }\n i = match.index;\n addText(raw.substr(0, i));\n addLink(url, match[0].replace(MAILTO_REGEXP, ''));\n raw = raw.substring(i + match[0].length);\n }\n addText(raw);\n return $sanitize(html.join(''));\n\n function addText(text) {\n if (!text) {\n return;\n }\n html.push(sanitizeText(text));\n }\n\n function addLink(url, text) {\n var key, linkAttributes = attributesFn(url);\n html.push('');\n addText(text);\n html.push('');\n }\n };\n}]);\n\n\n})(window, window.angular);\n","/* =============================================================\n/*\n/*\t Angular Smooth Scroll 1.7.1\n/*\t Animates scrolling to elements, by David Oliveros.\n/*\n/* Callback hooks contributed by Ben Armston\n/* https://github.com/benarmston\n/*\n/*\t Easing support contributed by Willem Liu.\n/*\t https://github.com/willemliu\n/*\n/*\t Easing functions forked from Gaëtan Renaudeau.\n/*\t https://gist.github.com/gre/1650294\n/*\n/*\t Infinite loop bugs in iOS and Chrome (when zoomed) by Alex Guzman.\n/*\t https://github.com/alexguzman\n/*\n/*\t Influenced by Chris Ferdinandi\n/*\t https://github.com/cferdinandi\n/*\n/*\n/*\t Free to use under the MIT License.\n/*\n/* ============================================================= */\n\n(function () {\n\t'use strict';\n\n\tvar module = angular.module('smoothScroll', []);\n\n\tvar resolveOffset = function(offset, element, options) {\n\t\tif (typeof offset == 'function')\n\t\t\toffset = offset(element, options);\n\n\t\tif (angular.isElement(offset)) {\n\t\t\tvar offsetEl = angular.element(offset)[0];\n\n\t\t\tif (typeof offset != 'undefined')\n\t\t\t\toffset = offsetEl.offsetHeight;\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\t// Smooth scrolls the window to the provided element.\n\t//\n\tvar smoothScroll = function (element, options) {\n\t\toptions = options || {};\n\n\t\t// Options\n\t\tvar duration = options.duration || 800,\n\t\t\toffset = resolveOffset(options.offset || 0, element, options),\n\t\t\teasing = options.easing || 'easeInOutQuart',\n\t\t\tcallbackBefore = options.callbackBefore || function() {},\n\t\t\tcallbackAfter = options.callbackAfter || function() {};\n\n\t\t\n\t\t\t\n\t\tvar getScrollLocation = function() {\n\t\t\treturn window.pageYOffset ? window.pageYOffset : document.documentElement.scrollTop;\n\t\t};\n\n\t\tsetTimeout( function() {\n\t\t\tvar startLocation = getScrollLocation(),\n\t\t\t\ttimeLapsed = 0,\n\t\t\t\tpercentage, position;\n\n\t\t\t// Calculate the easing pattern\n\t\t\tvar easingPattern = function (type, time) {\n\t\t\t\tif ( type == 'easeInQuad' ) return time * time; // accelerating from zero velocity\n\t\t\t\tif ( type == 'easeOutQuad' ) return time * (2 - time); // decelerating to zero velocity\n\t\t\t\tif ( type == 'easeInOutQuad' ) return time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; // acceleration until halfway, then deceleration\n\t\t\t\tif ( type == 'easeInCubic' ) return time * time * time; // accelerating from zero velocity\n\t\t\t\tif ( type == 'easeOutCubic' ) return (--time) * time * time + 1; // decelerating to zero velocity\n\t\t\t\tif ( type == 'easeInOutCubic' ) return time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; // acceleration until halfway, then deceleration\n\t\t\t\tif ( type == 'easeInQuart' ) return time * time * time * time; // accelerating from zero velocity\n\t\t\t\tif ( type == 'easeOutQuart' ) return 1 - (--time) * time * time * time; // decelerating to zero velocity\n\t\t\t\tif ( type == 'easeInOutQuart' ) return time < 0.5 ? 8 * time * time * time * time : 1 - 8 * (--time) * time * time * time; // acceleration until halfway, then deceleration\n\t\t\t\tif ( type == 'easeInQuint' ) return time * time * time * time * time; // accelerating from zero velocity\n\t\t\t\tif ( type == 'easeOutQuint' ) return 1 + (--time) * time * time * time * time; // decelerating to zero velocity\n\t\t\t\tif ( type == 'easeInOutQuint' ) return time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * (--time) * time * time * time * time; // acceleration until halfway, then deceleration\n\t\t\t\treturn time; // no easing, no acceleration\n\t\t\t};\n\n\n\t\t\t// Calculate how far to scroll\n\t\t\tvar getEndLocation = function (element) {\n\t\t\t\tvar location = 0;\n\t\t\t\tif (element.offsetParent) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tlocation += element.offsetTop;\n\t\t\t\t\t\telement = element.offsetParent;\n\t\t\t\t\t} while (element);\n\t\t\t\t}\n\t\t\t\tlocation = Math.max(location - offset, 0);\n\t\t\t\treturn location;\n\t\t\t};\n\n\t\t\tvar endLocation = getEndLocation(element);\n\t\t\tvar distance = endLocation - startLocation;\n\n\n\t\t\tvar scrollableElements, userScrollListener;\n\t\t\tif (options.stopOnUserScroll) {\n\t\t\t\tscrollableElements = angular.element([document, window]);\n\t\t\t\tuserScrollListener = function (e) {\n\t\t\t\t\tclearInterval(runAnimation);\n\t\t\t\t\tscrollableElements.off('wheel', userScrollListener);\n\t\t\t\t};\n\n\t\t\t\tscrollableElements.on('wheel', userScrollListener);\n\t\t\t}\n\n\t\t\t// Stop the scrolling animation when the anchor is reached (or at the top/bottom of the page)\n\t\t\tvar stopAnimation = function () {\n\t\t\t\tvar currentLocation = getScrollLocation();\n\t\t\t\tif ( position == endLocation || currentLocation == endLocation || ( (window.innerHeight + currentLocation) >= document.body.scrollHeight ) ) {\n\t\t\t\t\tif (options.stopOnUserScroll) {\n\t\t\t\t\t\tscrollableElements.off('wheel', userScrollListener);\n\t\t\t\t\t}\n\t\t\t\t\tclearInterval(runAnimation);\n\t\t\t\t\tcallbackAfter(element);\n\t\t\t\t}\n\t\t\t};\n\n\n\t\t\t// Scroll the page by an increment, and check if it's time to stop\n\t\t\tvar animateScroll = function () {\n\t\t\t\ttimeLapsed += 16;\n\t\t\t\tpercentage = ( timeLapsed / duration );\n\t\t\t\tpercentage = ( percentage > 1 ) ? 1 : percentage;\n\t\t\t\tposition = startLocation + ( distance * easingPattern(easing, percentage) );\n\t\t\t\twindow.scrollTo( 0, position );\n\t\t\t\tstopAnimation();\n\t\t\t};\n\n\n\t\t\t// Init\n\t\t\tcallbackBefore(element);\n\t\t\tvar runAnimation = setInterval(animateScroll, 16);\n\t\t}, 0);\n\t};\n\n\t// Expose the library via a provider to allow default options to be overridden\n\t//\n\tmodule.provider('smoothScroll', function() {\n\t\t\n\t\tfunction noop() {}\n\t\tvar defaultOptions = {\n\t\t\tduration: 800,\n\t\t\toffset: 0,\n\t\t\teasing: 'easeInOutQuart',\n\t\t\tcallbackBefore: noop,\n\t\t\tcallbackAfter: noop\n\t\t};\n\n\t\treturn {\n\t\t\t$get: function() {\n\t\t\t\treturn function(element, options) {\n\t\t\t\t\tsmoothScroll(element, angular.extend({}, defaultOptions, options));\n\t\t\t\t}\n\t\t\t},\n\t\t\tsetDefaultOptions: function(options) {\n\t\t\t\tangular.extend(defaultOptions, options);\n\t\t\t}\n\t\t}\n\t});\n\t\n\n\t// Scrolls the window to this element, optionally validating an expression\n\t//\n\tmodule.directive('smoothScroll', ['smoothScroll', function(smoothScroll, smoothScrollProvider) {\n\t\treturn {\n\t\t\trestrict: 'A',\n\t\t\tscope: {\n\t\t\t\tcallbackBefore: '&',\n\t\t\t\tcallbackAfter: '&',\n\t\t\t},\n\t\t\tlink: function($scope, $elem, $attrs) {\n\t\t\t\tif ( typeof $attrs.scrollIf === 'undefined' || $attrs.scrollIf === 'true' ) {\n\t\t\t\t\tsetTimeout( function() {\n\n\t\t\t\t\t\tvar callbackBefore = function(element) {\n\t\t\t\t\t\t\tif ( $attrs.callbackBefore ) {\n\t\t\t\t\t\t\t\tvar exprHandler = $scope.callbackBefore({ element: element });\n\t\t\t\t\t\t\t\tif (typeof exprHandler === 'function') {\n\t\t\t\t\t\t\t\t\texprHandler(element);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tvar callbackAfter = function(element) {\n\t\t\t\t\t\t\tif ( $attrs.callbackAfter ) {\n\t\t\t\t\t\t\t\tvar exprHandler = $scope.callbackAfter({ element: element });\n\t\t\t\t\t\t\t\tif (typeof exprHandler === 'function') {\n\t\t\t\t\t\t\t\t\texprHandler(element);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tvar options = {\n\t\t\t\t\t\t\tcallbackBefore: callbackBefore,\n\t\t\t\t\t\t\tcallbackAfter: callbackAfter\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (typeof $attrs.duration != 'undefined')\n\t\t\t\t\t\t\toptions.duration = $attrs.duration;\n\n\t\t\t\t\t\tif (typeof $attrs.offset != 'undefined')\n\t\t\t\t\t\t\toptions.offset = $attrs.offset;\n\n\t\t\t\t\t\tif (typeof $attrs.easing != 'undefined')\n\t\t\t\t\t\t\toptions.easing = $attrs.easing;\n\n\t\t\t\t\t\tsmoothScroll($elem[0], options);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}]);\n\n\n\t// Scrolls to a specified element ID when this element is clicked\n\t//\n\tmodule.directive('scrollTo', ['smoothScroll', function(smoothScroll) {\n\t\treturn {\n\t\t\trestrict: 'A',\n\t\t\tscope: {\n\t\t\t\tcallbackBefore: '&',\n\t\t\t\tcallbackAfter: '&',\n\t\t\t},\n\t\t\tlink: function($scope, $elem, $attrs) {\n\t\t\t\tvar targetElement;\n\t\t\t\t\n\t\t\t\t$elem.on('click', function(e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\ttargetElement = document.getElementById($attrs.scrollTo);\n\t\t\t\t\tif ( !targetElement ) return; \n\t\t\t\t\t\n\t\t\t\t\tvar callbackBefore = function(element) {\n\t\t\t\t\t\tif ( $attrs.callbackBefore ) {\n\t\t\t\t\t\t\tvar exprHandler = $scope.callbackBefore({element: element});\n\t\t\t\t\t\t\tif (typeof exprHandler === 'function') {\n\t\t\t\t\t\t\t\texprHandler(element);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tvar callbackAfter = function(element) {\n\t\t\t\t\t\tif ( $attrs.callbackAfter ) {\n\t\t\t\t\t\t\tvar exprHandler = $scope.callbackAfter({element: element});\n\t\t\t\t\t\t\tif (typeof exprHandler === 'function') {\n\t\t\t\t\t\t\t\texprHandler(element);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tvar options = {\n\t\t\t\t\t\tcallbackBefore: callbackBefore,\n\t\t\t\t\t\tcallbackAfter: callbackAfter\n\t\t\t\t\t};\n\n\t\t\t\t\tif (typeof $attrs.duration != 'undefined')\n\t\t\t\t\t\toptions.duration = $attrs.duration;\n\n\t\t\t\t\tif (typeof $attrs.offset != 'undefined')\n\t\t\t\t\t\toptions.offset = $attrs.offset;\n\n\t\t\t\t\tif (typeof $attrs.easing != 'undefined')\n\t\t\t\t\t\toptions.easing = $attrs.easing;\n\n\t\t\t\t\tsmoothScroll(targetElement, options);\n\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}]);\n\n}());\n","angular.module('site.controllers', []);","angular.module('site.directives', []);","angular.module('site.filters', []);","/*\n * ngKookies - relpacer for built-in $cookieStore\n * Porque?? - https://github.com/angular/angular.js/issues/950\n * http://github.com/voronianski/ngKookies\n * (c) 2014 MIT License, https://pixelhunter.me\n */\n\n(function (root, factory) {\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = factory(require('angular'));\n } else if (typeof define === 'function' && define.amd) {\n define(['angular'], factory);\n } else {\n factory(root.angular);\n }\n}(this, function (angular, undefined) {\n 'use strict';\n\n angular.module('ngKookies', [])\n\n .provider('$kookies', function () {\n var config = this.config = {};\n var defaults = this.defaults = {};\n\n this.setConfig = function (newConfig) {\n angular.extend(config, newConfig);\n };\n\n this.setDefaults = function (newDefaults) {\n angular.extend(defaults, newDefaults);\n };\n\n this.$get = function () {\n\n var privateMethods = {};\n var publicMethods = {};\n\n privateMethods.decode = function (s) {\n return config.raw ? s : decodeURIComponent(s);\n };\n\n privateMethods.encode = function (s) {\n return config.raw ? s : encodeURIComponent(s);\n };\n\n privateMethods.parseCookie = function (s) {\n if (s.indexOf('\"') === 0) {\n // unescape quoted cookie as according to RFC2068\n s = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n }\n\n try {\n // replace server-side written pluses with spaces.\n s = decodeURIComponent(s.replace(/\\+/g, ' '));\n return config.json ? angular.fromJson(s) : s;\n } catch(e) {\n // do nothing\n }\n };\n\n privateMethods.stringifyCookie = function (value) {\n return privateMethods.encode(config.json ? angular.toJson(value) : String(value));\n };\n\n privateMethods.read = function (s, converter) {\n var value = config.raw ? s : privateMethods.parseCookie(s);\n return angular.isFunction(converter) ? converter(value) : value;\n };\n\n publicMethods.get = function (key, converter) {\n var result = key ? undefined : {};\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n\n for (var i = 0, l = cookies.length; i < l; i++) {\n var parts = cookies[i].split('=');\n var name = privateMethods.decode(parts.shift());\n var cookie = parts.join('=');\n\n if (key && key === name) {\n result = privateMethods.read(cookie, converter);\n break;\n }\n\n if (!key && (cookie = privateMethods.read(cookie)) !== undefined) {\n result[name] = cookie;\n }\n }\n\n return result;\n };\n\n publicMethods.set = function (key, value, options) {\n options = options || {};\n options = angular.extend(options, defaults);\n\n if (typeof options.expires === 'number') {\n var days = options.expires;\n var time = options.expires = new Date();\n time.setTime(+time + days * 864e+5);\n }\n\n var cookies = document.cookie = [\n privateMethods.encode(key), '=', privateMethods.stringifyCookie(value),\n options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n options.path ? '; path=' + options.path : '',\n options.domain ? '; domain=' + options.domain : '',\n options.secure ? '; secure' : ''\n ].join('');\n\n return cookies;\n };\n\n publicMethods.remove = function (key, options) {\n if (publicMethods.get(key) === undefined) {\n return false;\n }\n\n publicMethods.set(key, '', angular.extend({expires: -1}, options));\n return !publicMethods.get(key);\n };\n\n return publicMethods;\n };\n });\n}));\n","(function(angular, factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define('ngStorage', ['angular'], function(angular) {\n return factory(angular);\n });\n } else {\n return factory(angular);\n }\n}(typeof angular === 'undefined' ? null : angular, function(angular) {\n\n 'use strict';\n\n /**\n * @ngdoc overview\n * @name ngStorage\n */\n\n angular.module('ngStorage', [])\n\n /**\n * @ngdoc object\n * @name ngStorage.$localStorage\n * @requires $rootScope\n * @requires $window\n */\n\n .factory('$localStorage', _storageFactory('localStorage'))\n\n /**\n * @ngdoc object\n * @name ngStorage.$sessionStorage\n * @requires $rootScope\n * @requires $window\n */\n\n .factory('$sessionStorage', _storageFactory('sessionStorage'));\n\n function _storageFactory(storageType) {\n return [\n '$rootScope',\n '$window',\n '$log',\n '$timeout',\n\n function(\n $rootScope,\n $window,\n $log,\n $timeout\n ){\n function isStorageSupported(storageType) {\n\n // Some installations of IE, for an unknown reason, throw \"SCRIPT5: Error: Access is denied\"\n // when accessing window.localStorage. This happens before you try to do anything with it. Catch\n // that error and allow execution to continue.\n\n // fix 'SecurityError: DOM Exception 18' exception in Desktop Safari, Mobile Safari\n // when \"Block cookies\": \"Always block\" is turned on\n var supported;\n try {\n supported = $window[storageType];\n }\n catch (err) {\n supported = false;\n }\n\n // When Safari (OS X or iOS) is in private browsing mode, it appears as though localStorage\n // is available, but trying to call .setItem throws an exception below:\n // \"QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota.\"\n if (supported && storageType === 'localStorage') {\n var key = '__' + Math.round(Math.random() * 1e7);\n\n try {\n localStorage.setItem(key, key);\n localStorage.removeItem(key);\n }\n catch (err) {\n supported = false;\n }\n }\n\n return supported;\n }\n\n // #9: Assign a placeholder object if Web Storage is unavailable to prevent breaking the entire AngularJS app\n var webStorage = isStorageSupported(storageType) || ($log.warn('This browser does not support Web Storage!'), {setItem: function() {}, getItem: function() {}}),\n $storage = {\n $default: function(items) {\n for (var k in items) {\n angular.isDefined($storage[k]) || ($storage[k] = items[k]);\n }\n\n return $storage;\n },\n $reset: function(items) {\n for (var k in $storage) {\n '$' === k[0] || (delete $storage[k] && webStorage.removeItem('ngStorage-' + k));\n }\n\n return $storage.$default(items);\n }\n },\n _last$storage,\n _debounce;\n\n try {\n webStorage = $window[storageType];\n webStorage.length;\n } catch(e) {\n $log.warn('This browser does not support Web Storage!');\n webStorage = {};\n }\n\n for (var i = 0, l = webStorage.length, k; i < l; i++) {\n // #8, #10: `webStorage.key(i)` may be an empty string (or throw an exception in IE9 if `webStorage` is empty)\n (k = webStorage.key(i)) && 'ngStorage-' === k.slice(0, 10) && ($storage[k.slice(10)] = angular.fromJson(webStorage.getItem(k)));\n }\n\n _last$storage = angular.copy($storage);\n\n $rootScope.$watch(function() {\n var temp$storage;\n _debounce || (_debounce = $timeout(function() {\n _debounce = null;\n\n if (!angular.equals($storage, _last$storage)) {\n temp$storage = angular.copy(_last$storage);\n angular.forEach($storage, function(v, k) {\n angular.isDefined(v) && '$' !== k[0] && webStorage.setItem('ngStorage-' + k, angular.toJson(v));\n\n delete temp$storage[k];\n });\n\n for (var k in temp$storage) {\n webStorage.removeItem('ngStorage-' + k);\n }\n\n _last$storage = angular.copy($storage);\n }\n }, 100, false));\n });\n\n // #6: Use `$window.addEventListener` instead of `angular.element` to avoid the jQuery-specific `event.originalEvent`\n 'localStorage' === storageType && $window.addEventListener && $window.addEventListener('storage', function(event) {\n if ('ngStorage-' === event.key.slice(0, 10)) {\n event.newValue ? $storage[event.key.slice(10)] = angular.fromJson(event.newValue) : delete $storage[event.key.slice(10)];\n\n _last$storage = angular.copy($storage);\n\n $rootScope.$apply();\n }\n });\n\n return $storage;\n }\n ];\n }\n\n}));\n","angular.module('site.resources', ['ngResource']);","angular.module('site.services', []);","/*\n * angular-ui-bootstrap\n * http://angular-ui.github.io/bootstrap/\n\n * Version: 0.11.0 - 2014-05-01\n * License: MIT\n */\nangular.module(\"ui.bootstrap\", [\"ui.bootstrap.tpls\", \"ui.bootstrap.transition\",\"ui.bootstrap.collapse\",\"ui.bootstrap.accordion\",\"ui.bootstrap.alert\",\"ui.bootstrap.bindHtml\",\"ui.bootstrap.buttons\",\"ui.bootstrap.carousel\",\"ui.bootstrap.dateparser\",\"ui.bootstrap.position\",\"ui.bootstrap.datepicker\",\"ui.bootstrap.dropdown\",\"ui.bootstrap.modal\",\"ui.bootstrap.pagination\",\"ui.bootstrap.tooltip\",\"ui.bootstrap.popover\",\"ui.bootstrap.progressbar\",\"ui.bootstrap.rating\",\"ui.bootstrap.tabs\",\"ui.bootstrap.timepicker\",\"ui.bootstrap.typeahead\"]);\nangular.module(\"ui.bootstrap.tpls\", [\"template/accordion/accordion-group.html\",\"template/accordion/accordion.html\",\"template/alert/alert.html\",\"template/carousel/carousel.html\",\"template/carousel/slide.html\",\"template/datepicker/datepicker.html\",\"template/datepicker/day.html\",\"template/datepicker/month.html\",\"template/datepicker/popup.html\",\"template/datepicker/year.html\",\"template/modal/backdrop.html\",\"template/modal/window.html\",\"template/pagination/pager.html\",\"template/pagination/pagination.html\",\"template/tooltip/tooltip-html-unsafe-popup.html\",\"template/tooltip/tooltip-popup.html\",\"template/popover/popover.html\",\"template/progressbar/bar.html\",\"template/progressbar/progress.html\",\"template/progressbar/progressbar.html\",\"template/rating/rating.html\",\"template/tabs/tab.html\",\"template/tabs/tabset.html\",\"template/timepicker/timepicker.html\",\"template/typeahead/typeahead-match.html\",\"template/typeahead/typeahead-popup.html\"]);\nangular.module('ui.bootstrap.transition', [])\n\n/**\n * $transition service provides a consistent interface to trigger CSS 3 transitions and to be informed when they complete.\n * @param {DOMElement} element The DOMElement that will be animated.\n * @param {string|object|function} trigger The thing that will cause the transition to start:\n * - As a string, it represents the css class to be added to the element.\n * - As an object, it represents a hash of style attributes to be applied to the element.\n * - As a function, it represents a function to be called that will cause the transition to occur.\n * @return {Promise} A promise that is resolved when the transition finishes.\n */\n.factory('$transition', ['$q', '$timeout', '$rootScope', function($q, $timeout, $rootScope) {\n\n var $transition = function(element, trigger, options) {\n options = options || {};\n var deferred = $q.defer();\n var endEventName = $transition[options.animation ? 'animationEndEventName' : 'transitionEndEventName'];\n\n var transitionEndHandler = function(event) {\n $rootScope.$apply(function() {\n element.unbind(endEventName, transitionEndHandler);\n deferred.resolve(element);\n });\n };\n\n if (endEventName) {\n element.bind(endEventName, transitionEndHandler);\n }\n\n // Wrap in a timeout to allow the browser time to update the DOM before the transition is to occur\n $timeout(function() {\n if ( angular.isString(trigger) ) {\n element.addClass(trigger);\n } else if ( angular.isFunction(trigger) ) {\n trigger(element);\n } else if ( angular.isObject(trigger) ) {\n element.css(trigger);\n }\n //If browser does not support transitions, instantly resolve\n if ( !endEventName ) {\n deferred.resolve(element);\n }\n });\n\n // Add our custom cancel function to the promise that is returned\n // We can call this if we are about to run a new transition, which we know will prevent this transition from ending,\n // i.e. it will therefore never raise a transitionEnd event for that transition\n deferred.promise.cancel = function() {\n if ( endEventName ) {\n element.unbind(endEventName, transitionEndHandler);\n }\n deferred.reject('Transition cancelled');\n };\n\n return deferred.promise;\n };\n\n // Work out the name of the transitionEnd event\n var transElement = document.createElement('trans');\n var transitionEndEventNames = {\n 'WebkitTransition': 'webkitTransitionEnd',\n 'MozTransition': 'transitionend',\n 'OTransition': 'oTransitionEnd',\n 'transition': 'transitionend'\n };\n var animationEndEventNames = {\n 'WebkitTransition': 'webkitAnimationEnd',\n 'MozTransition': 'animationend',\n 'OTransition': 'oAnimationEnd',\n 'transition': 'animationend'\n };\n function findEndEventName(endEventNames) {\n for (var name in endEventNames){\n if (transElement.style[name] !== undefined) {\n return endEventNames[name];\n }\n }\n }\n $transition.transitionEndEventName = findEndEventName(transitionEndEventNames);\n $transition.animationEndEventName = findEndEventName(animationEndEventNames);\n return $transition;\n}]);\n\nangular.module('ui.bootstrap.collapse', ['ui.bootstrap.transition'])\n\n .directive('collapse', ['$transition', function ($transition) {\n\n return {\n link: function (scope, element, attrs) {\n\n var initialAnimSkip = true;\n var currentTransition;\n\n function doTransition(change) {\n var newTransition = $transition(element, change);\n if (currentTransition) {\n currentTransition.cancel();\n }\n currentTransition = newTransition;\n newTransition.then(newTransitionDone, newTransitionDone);\n return newTransition;\n\n function newTransitionDone() {\n // Make sure it's this transition, otherwise, leave it alone.\n if (currentTransition === newTransition) {\n currentTransition = undefined;\n }\n }\n }\n\n function expand() {\n if (initialAnimSkip) {\n initialAnimSkip = false;\n expandDone();\n } else {\n element.removeClass('collapse').addClass('collapsing');\n doTransition({ height: element[0].scrollHeight + 'px' }).then(expandDone);\n }\n }\n\n function expandDone() {\n element.removeClass('collapsing');\n element.addClass('collapse in');\n element.css({height: 'auto'});\n }\n\n function collapse() {\n if (initialAnimSkip) {\n initialAnimSkip = false;\n collapseDone();\n element.css({height: 0});\n } else {\n // CSS transitions don't work with height: auto, so we have to manually change the height to a specific value\n element.css({ height: element[0].scrollHeight + 'px' });\n //trigger reflow so a browser realizes that height was updated from auto to a specific value\n var x = element[0].offsetWidth;\n\n element.removeClass('collapse in').addClass('collapsing');\n\n doTransition({ height: 0 }).then(collapseDone);\n }\n }\n\n function collapseDone() {\n element.removeClass('collapsing');\n element.addClass('collapse');\n }\n\n scope.$watch(attrs.collapse, function (shouldCollapse) {\n if (shouldCollapse) {\n collapse();\n } else {\n expand();\n }\n });\n }\n };\n }]);\n\nangular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])\n\n.constant('accordionConfig', {\n closeOthers: true\n})\n\n.controller('AccordionController', ['$scope', '$attrs', 'accordionConfig', function ($scope, $attrs, accordionConfig) {\n\n // This array keeps track of the accordion groups\n this.groups = [];\n\n // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to\n this.closeOthers = function(openGroup) {\n var closeOthers = angular.isDefined($attrs.closeOthers) ? $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;\n if ( closeOthers ) {\n angular.forEach(this.groups, function (group) {\n if ( group !== openGroup ) {\n group.isOpen = false;\n }\n });\n }\n };\n\n // This is called from the accordion-group directive to add itself to the accordion\n this.addGroup = function(groupScope) {\n var that = this;\n this.groups.push(groupScope);\n\n groupScope.$on('$destroy', function (event) {\n that.removeGroup(groupScope);\n });\n };\n\n // This is called from the accordion-group directive when to remove itself\n this.removeGroup = function(group) {\n var index = this.groups.indexOf(group);\n if ( index !== -1 ) {\n this.groups.splice(index, 1);\n }\n };\n\n}])\n\n// The accordion directive simply sets up the directive controller\n// and adds an accordion CSS class to itself element.\n.directive('accordion', function () {\n return {\n restrict:'EA',\n controller:'AccordionController',\n transclude: true,\n replace: false,\n templateUrl: 'template/accordion/accordion.html'\n };\n})\n\n// The accordion-group directive indicates a block of html that will expand and collapse in an accordion\n.directive('accordionGroup', function() {\n return {\n require:'^accordion', // We need this directive to be inside an accordion\n restrict:'EA',\n transclude:true, // It transcludes the contents of the directive into the template\n replace: true, // The element containing the directive will be replaced with the template\n templateUrl:'template/accordion/accordion-group.html',\n scope: {\n heading: '@', // Interpolate the heading attribute onto this scope\n isOpen: '=?',\n isDisabled: '=?'\n },\n controller: function() {\n this.setHeading = function(element) {\n this.heading = element;\n };\n },\n link: function(scope, element, attrs, accordionCtrl) {\n accordionCtrl.addGroup(scope);\n\n scope.$watch('isOpen', function(value) {\n if ( value ) {\n accordionCtrl.closeOthers(scope);\n }\n });\n\n scope.toggleOpen = function() {\n if ( !scope.isDisabled ) {\n scope.isOpen = !scope.isOpen;\n }\n };\n }\n };\n})\n\n// Use accordion-heading below an accordion-group to provide a heading containing HTML\n// \n// Heading containing HTML - \n// \n.directive('accordionHeading', function() {\n return {\n restrict: 'EA',\n transclude: true, // Grab the contents to be used as the heading\n template: '', // In effect remove this element!\n replace: true,\n require: '^accordionGroup',\n link: function(scope, element, attr, accordionGroupCtrl, transclude) {\n // Pass the heading to the accordion-group controller\n // so that it can be transcluded into the right place in the template\n // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]\n accordionGroupCtrl.setHeading(transclude(scope, function() {}));\n }\n };\n})\n\n// Use in the accordion-group template to indicate where you want the heading to be transcluded\n// You must provide the property on the accordion-group controller that will hold the transcluded element\n//
\n// \n// ...\n//
\n.directive('accordionTransclude', function() {\n return {\n require: '^accordionGroup',\n link: function(scope, element, attr, controller) {\n scope.$watch(function() { return controller[attr.accordionTransclude]; }, function(heading) {\n if ( heading ) {\n element.html('');\n element.append(heading);\n }\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.alert', [])\n\n.controller('AlertController', ['$scope', '$attrs', function ($scope, $attrs) {\n $scope.closeable = 'close' in $attrs;\n}])\n\n.directive('alert', function () {\n return {\n restrict:'EA',\n controller:'AlertController',\n templateUrl:'template/alert/alert.html',\n transclude:true,\n replace:true,\n scope: {\n type: '@',\n close: '&'\n }\n };\n});\n\nangular.module('ui.bootstrap.bindHtml', [])\n\n .directive('bindHtmlUnsafe', function () {\n return function (scope, element, attr) {\n element.addClass('ng-binding').data('$binding', attr.bindHtmlUnsafe);\n scope.$watch(attr.bindHtmlUnsafe, function bindHtmlUnsafeWatchAction(value) {\n element.html(value || '');\n });\n };\n });\nangular.module('ui.bootstrap.buttons', [])\n\n.constant('buttonConfig', {\n activeClass: 'active',\n toggleEvent: 'click'\n})\n\n.controller('ButtonsController', ['buttonConfig', function(buttonConfig) {\n this.activeClass = buttonConfig.activeClass || 'active';\n this.toggleEvent = buttonConfig.toggleEvent || 'click';\n}])\n\n.directive('btnRadio', function () {\n return {\n require: ['btnRadio', 'ngModel'],\n controller: 'ButtonsController',\n link: function (scope, element, attrs, ctrls) {\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n //model -> UI\n ngModelCtrl.$render = function () {\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio)));\n };\n\n //ui->model\n element.bind(buttonsCtrl.toggleEvent, function () {\n var isActive = element.hasClass(buttonsCtrl.activeClass);\n\n if (!isActive || angular.isDefined(attrs.uncheckable)) {\n scope.$apply(function () {\n ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.btnRadio));\n ngModelCtrl.$render();\n });\n }\n });\n }\n };\n})\n\n.directive('btnCheckbox', function () {\n return {\n require: ['btnCheckbox', 'ngModel'],\n controller: 'ButtonsController',\n link: function (scope, element, attrs, ctrls) {\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n function getTrueValue() {\n return getCheckboxValue(attrs.btnCheckboxTrue, true);\n }\n\n function getFalseValue() {\n return getCheckboxValue(attrs.btnCheckboxFalse, false);\n }\n\n function getCheckboxValue(attributeValue, defaultValue) {\n var val = scope.$eval(attributeValue);\n return angular.isDefined(val) ? val : defaultValue;\n }\n\n //model -> UI\n ngModelCtrl.$render = function () {\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));\n };\n\n //ui->model\n element.bind(buttonsCtrl.toggleEvent, function () {\n scope.$apply(function () {\n ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());\n ngModelCtrl.$render();\n });\n });\n }\n };\n});\n\n/**\n* @ngdoc overview\n* @name ui.bootstrap.carousel\n*\n* @description\n* AngularJS version of an image carousel.\n*\n*/\nangular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])\n.controller('CarouselController', ['$scope', '$timeout', '$transition', function ($scope, $timeout, $transition) {\n var self = this,\n slides = self.slides = $scope.slides = [],\n currentIndex = -1,\n currentTimeout, isPlaying;\n self.currentSlide = null;\n\n var destroyed = false;\n /* direction: \"prev\" or \"next\" */\n self.select = $scope.select = function(nextSlide, direction) {\n var nextIndex = slides.indexOf(nextSlide);\n //Decide direction if it's not given\n if (direction === undefined) {\n direction = nextIndex > currentIndex ? 'next' : 'prev';\n }\n if (nextSlide && nextSlide !== self.currentSlide) {\n if ($scope.$currentTransition) {\n $scope.$currentTransition.cancel();\n //Timeout so ng-class in template has time to fix classes for finished slide\n $timeout(goNext);\n } else {\n goNext();\n }\n }\n function goNext() {\n // Scope has been destroyed, stop here.\n if (destroyed) { return; }\n //If we have a slide to transition from and we have a transition type and we're allowed, go\n if (self.currentSlide && angular.isString(direction) && !$scope.noTransition && nextSlide.$element) {\n //We shouldn't do class manip in here, but it's the same weird thing bootstrap does. need to fix sometime\n nextSlide.$element.addClass(direction);\n var reflow = nextSlide.$element[0].offsetWidth; //force reflow\n\n //Set all other slides to stop doing their stuff for the new transition\n angular.forEach(slides, function(slide) {\n angular.extend(slide, {direction: '', entering: false, leaving: false, active: false});\n });\n angular.extend(nextSlide, {direction: direction, active: true, entering: true});\n angular.extend(self.currentSlide||{}, {direction: direction, leaving: true});\n\n $scope.$currentTransition = $transition(nextSlide.$element, {});\n //We have to create new pointers inside a closure since next & current will change\n (function(next,current) {\n $scope.$currentTransition.then(\n function(){ transitionDone(next, current); },\n function(){ transitionDone(next, current); }\n );\n }(nextSlide, self.currentSlide));\n } else {\n transitionDone(nextSlide, self.currentSlide);\n }\n self.currentSlide = nextSlide;\n currentIndex = nextIndex;\n //every time you change slides, reset the timer\n restartTimer();\n }\n function transitionDone(next, current) {\n angular.extend(next, {direction: '', active: true, leaving: false, entering: false});\n angular.extend(current||{}, {direction: '', active: false, leaving: false, entering: false});\n $scope.$currentTransition = null;\n }\n };\n $scope.$on('$destroy', function () {\n destroyed = true;\n });\n\n /* Allow outside people to call indexOf on slides array */\n self.indexOfSlide = function(slide) {\n return slides.indexOf(slide);\n };\n\n $scope.next = function() {\n var newIndex = (currentIndex + 1) % slides.length;\n\n //Prevent this user-triggered transition from occurring if there is already one in progress\n if (!$scope.$currentTransition) {\n return self.select(slides[newIndex], 'next');\n }\n };\n\n $scope.prev = function() {\n var newIndex = currentIndex - 1 < 0 ? slides.length - 1 : currentIndex - 1;\n\n //Prevent this user-triggered transition from occurring if there is already one in progress\n if (!$scope.$currentTransition) {\n return self.select(slides[newIndex], 'prev');\n }\n };\n\n $scope.isActive = function(slide) {\n return self.currentSlide === slide;\n };\n\n $scope.$watch('interval', restartTimer);\n $scope.$on('$destroy', resetTimer);\n\n function restartTimer() {\n resetTimer();\n var interval = +$scope.interval;\n if (!isNaN(interval) && interval>=0) {\n currentTimeout = $timeout(timerFn, interval);\n }\n }\n\n function resetTimer() {\n if (currentTimeout) {\n $timeout.cancel(currentTimeout);\n currentTimeout = null;\n }\n }\n\n function timerFn() {\n if (isPlaying) {\n $scope.next();\n restartTimer();\n } else {\n $scope.pause();\n }\n }\n\n $scope.play = function() {\n if (!isPlaying) {\n isPlaying = true;\n restartTimer();\n }\n };\n $scope.pause = function() {\n if (!$scope.noPause) {\n isPlaying = false;\n resetTimer();\n }\n };\n\n self.addSlide = function(slide, element) {\n slide.$element = element;\n slides.push(slide);\n //if this is the first slide or the slide is set to active, select it\n if(slides.length === 1 || slide.active) {\n self.select(slides[slides.length-1]);\n if (slides.length == 1) {\n $scope.play();\n }\n } else {\n slide.active = false;\n }\n };\n\n self.removeSlide = function(slide) {\n //get the index of the slide inside the carousel\n var index = slides.indexOf(slide);\n slides.splice(index, 1);\n if (slides.length > 0 && slide.active) {\n if (index >= slides.length) {\n self.select(slides[index-1]);\n } else {\n self.select(slides[index]);\n }\n } else if (currentIndex > index) {\n currentIndex--;\n }\n };\n\n}])\n\n/**\n * @ngdoc directive\n * @name ui.bootstrap.carousel.directive:carousel\n * @restrict EA\n *\n * @description\n * Carousel is the outer container for a set of image 'slides' to showcase.\n *\n * @param {number=} interval The time, in milliseconds, that it will take the carousel to go to the next slide.\n * @param {boolean=} noTransition Whether to disable transitions on the carousel.\n * @param {boolean=} noPause Whether to disable pausing on the carousel (by default, the carousel interval pauses on hover).\n *\n * @example\n\n \n \n \n \n
\n

Beautiful!

\n
\n
\n \n \n
\n

D'aww!

\n
\n
\n
\n
\n \n .carousel-indicators {\n top: auto;\n bottom: 15px;\n }\n \n
\n */\n.directive('carousel', [function() {\n return {\n restrict: 'EA',\n transclude: true,\n replace: true,\n controller: 'CarouselController',\n require: 'carousel',\n templateUrl: 'template/carousel/carousel.html',\n scope: {\n interval: '=',\n noTransition: '=',\n noPause: '='\n }\n };\n}])\n\n/**\n * @ngdoc directive\n * @name ui.bootstrap.carousel.directive:slide\n * @restrict EA\n *\n * @description\n * Creates a slide inside a {@link ui.bootstrap.carousel.directive:carousel carousel}. Must be placed as a child of a carousel element.\n *\n * @param {boolean=} active Model binding, whether or not this slide is currently active.\n *\n * @example\n\n \n
\n \n \n \n
\n

Slide {{$index}}

\n

{{slide.text}}

\n
\n
\n
\n Interval, in milliseconds: \n
Enter a negative number to stop the interval.\n
\n
\n \nfunction CarouselDemoCtrl($scope) {\n $scope.myInterval = 5000;\n}\n \n \n .carousel-indicators {\n top: auto;\n bottom: 15px;\n }\n \n
\n*/\n\n.directive('slide', function() {\n return {\n require: '^carousel',\n restrict: 'EA',\n transclude: true,\n replace: true,\n templateUrl: 'template/carousel/slide.html',\n scope: {\n active: '=?'\n },\n link: function (scope, element, attrs, carouselCtrl) {\n carouselCtrl.addSlide(scope, element);\n //when the scope is destroyed then remove the slide from the current slides array\n scope.$on('$destroy', function() {\n carouselCtrl.removeSlide(scope);\n });\n\n scope.$watch('active', function(active) {\n if (active) {\n carouselCtrl.select(scope);\n }\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.dateparser', [])\n\n.service('dateParser', ['$locale', 'orderByFilter', function($locale, orderByFilter) {\n\n this.parsers = {};\n\n var formatCodeToRegex = {\n 'yyyy': {\n regex: '\\\\d{4}',\n apply: function(value) { this.year = +value; }\n },\n 'yy': {\n regex: '\\\\d{2}',\n apply: function(value) { this.year = +value + 2000; }\n },\n 'y': {\n regex: '\\\\d{1,4}',\n apply: function(value) { this.year = +value; }\n },\n 'MMMM': {\n regex: $locale.DATETIME_FORMATS.MONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); }\n },\n 'MMM': {\n regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); }\n },\n 'MM': {\n regex: '0[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; }\n },\n 'M': {\n regex: '[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; }\n },\n 'dd': {\n regex: '[0-2][0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; }\n },\n 'd': {\n regex: '[1-2]?[0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; }\n },\n 'EEEE': {\n regex: $locale.DATETIME_FORMATS.DAY.join('|')\n },\n 'EEE': {\n regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|')\n }\n };\n\n this.createParser = function(format) {\n var map = [], regex = format.split('');\n\n angular.forEach(formatCodeToRegex, function(data, code) {\n var index = format.indexOf(code);\n\n if (index > -1) {\n format = format.split('');\n\n regex[index] = '(' + data.regex + ')';\n format[index] = '$'; // Custom symbol to define consumed part of format\n for (var i = index + 1, n = index + code.length; i < n; i++) {\n regex[i] = '';\n format[i] = '$';\n }\n format = format.join('');\n\n map.push({ index: index, apply: data.apply });\n }\n });\n\n return {\n regex: new RegExp('^' + regex.join('') + '$'),\n map: orderByFilter(map, 'index')\n };\n };\n\n this.parse = function(input, format) {\n if ( !angular.isString(input) ) {\n return input;\n }\n\n format = $locale.DATETIME_FORMATS[format] || format;\n\n if ( !this.parsers[format] ) {\n this.parsers[format] = this.createParser(format);\n }\n\n var parser = this.parsers[format],\n regex = parser.regex,\n map = parser.map,\n results = input.match(regex);\n\n if ( results && results.length ) {\n var fields = { year: 1900, month: 0, date: 1, hours: 0 }, dt;\n\n for( var i = 1, n = results.length; i < n; i++ ) {\n var mapper = map[i-1];\n if ( mapper.apply ) {\n mapper.apply.call(fields, results[i]);\n }\n }\n\n if ( isValid(fields.year, fields.month, fields.date) ) {\n dt = new Date( fields.year, fields.month, fields.date, fields.hours);\n }\n\n return dt;\n }\n };\n\n // Check if date is valid for specific month (and year for February).\n // Month: 0 = Jan, 1 = Feb, etc\n function isValid(year, month, date) {\n if ( month === 1 && date > 28) {\n return date === 29 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n }\n\n if ( month === 3 || month === 5 || month === 8 || month === 10) {\n return date < 31;\n }\n\n return true;\n }\n}]);\n\nangular.module('ui.bootstrap.position', [])\n\n/**\n * A set of utility methods that can be use to retrieve position of DOM elements.\n * It is meant to be used where we need to absolute-position DOM elements in\n * relation to other, existing elements (this is the case for tooltips, popovers,\n * typeahead suggestions etc.).\n */\n .factory('$position', ['$document', '$window', function ($document, $window) {\n\n function getStyle(el, cssprop) {\n if (el.currentStyle) { //IE\n return el.currentStyle[cssprop];\n } else if ($window.getComputedStyle) {\n return $window.getComputedStyle(el)[cssprop];\n }\n // finally try and get inline style\n return el.style[cssprop];\n }\n\n /**\n * Checks if a given element is statically positioned\n * @param element - raw DOM element\n */\n function isStaticPositioned(element) {\n return (getStyle(element, 'position') || 'static' ) === 'static';\n }\n\n /**\n * returns the closest, non-statically positioned parentOffset of a given element\n * @param element\n */\n var parentOffsetEl = function (element) {\n var docDomEl = $document[0];\n var offsetParent = element.offsetParent || docDomEl;\n while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) {\n offsetParent = offsetParent.offsetParent;\n }\n return offsetParent || docDomEl;\n };\n\n return {\n /**\n * Provides read-only equivalent of jQuery's position function:\n * http://api.jquery.com/position/\n */\n position: function (element) {\n var elBCR = this.offset(element);\n var offsetParentBCR = { top: 0, left: 0 };\n var offsetParentEl = parentOffsetEl(element[0]);\n if (offsetParentEl != $document[0]) {\n offsetParentBCR = this.offset(angular.element(offsetParentEl));\n offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;\n offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;\n }\n\n var boundingClientRect = element[0].getBoundingClientRect();\n return {\n width: boundingClientRect.width || element.prop('offsetWidth'),\n height: boundingClientRect.height || element.prop('offsetHeight'),\n top: elBCR.top - offsetParentBCR.top,\n left: elBCR.left - offsetParentBCR.left\n };\n },\n\n /**\n * Provides read-only equivalent of jQuery's offset function:\n * http://api.jquery.com/offset/\n */\n offset: function (element) {\n var boundingClientRect = element[0].getBoundingClientRect();\n return {\n width: boundingClientRect.width || element.prop('offsetWidth'),\n height: boundingClientRect.height || element.prop('offsetHeight'),\n top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop),\n left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft)\n };\n },\n\n /**\n * Provides coordinates for the targetEl in relation to hostEl\n */\n positionElements: function (hostEl, targetEl, positionStr, appendToBody) {\n\n var positionStrParts = positionStr.split('-');\n var pos0 = positionStrParts[0], pos1 = positionStrParts[1] || 'center';\n\n var hostElPos,\n targetElWidth,\n targetElHeight,\n targetElPos;\n\n hostElPos = appendToBody ? this.offset(hostEl) : this.position(hostEl);\n\n targetElWidth = targetEl.prop('offsetWidth');\n targetElHeight = targetEl.prop('offsetHeight');\n\n var shiftWidth = {\n center: function () {\n return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2;\n },\n left: function () {\n return hostElPos.left;\n },\n right: function () {\n return hostElPos.left + hostElPos.width;\n }\n };\n\n var shiftHeight = {\n center: function () {\n return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2;\n },\n top: function () {\n return hostElPos.top;\n },\n bottom: function () {\n return hostElPos.top + hostElPos.height;\n }\n };\n\n switch (pos0) {\n case 'right':\n targetElPos = {\n top: shiftHeight[pos1](),\n left: shiftWidth[pos0]()\n };\n break;\n case 'left':\n targetElPos = {\n top: shiftHeight[pos1](),\n left: hostElPos.left - targetElWidth\n };\n break;\n case 'bottom':\n targetElPos = {\n top: shiftHeight[pos0](),\n left: shiftWidth[pos1]()\n };\n break;\n default:\n targetElPos = {\n top: hostElPos.top - targetElHeight,\n left: shiftWidth[pos1]()\n };\n break;\n }\n\n return targetElPos;\n }\n };\n }]);\n\nangular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position'])\n\n.constant('datepickerConfig', {\n formatDay: 'dd',\n formatMonth: 'MMMM',\n formatYear: 'yyyy',\n formatDayHeader: 'EEE',\n formatDayTitle: 'MMMM yyyy',\n formatMonthTitle: 'yyyy',\n datepickerMode: 'day',\n minMode: 'day',\n maxMode: 'year',\n showWeeks: true,\n startingDay: 0,\n yearRange: 20,\n minDate: null,\n maxDate: null\n})\n\n.controller('DatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$timeout', '$log', 'dateFilter', 'datepickerConfig', function($scope, $attrs, $parse, $interpolate, $timeout, $log, dateFilter, datepickerConfig) {\n var self = this,\n ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl;\n\n // Modes chain\n this.modes = ['day', 'month', 'year'];\n\n // Configuration attributes\n angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle',\n 'minMode', 'maxMode', 'showWeeks', 'startingDay', 'yearRange'], function( key, index ) {\n self[key] = angular.isDefined($attrs[key]) ? (index < 8 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key];\n });\n\n // Watchable attributes\n angular.forEach(['minDate', 'maxDate'], function( key ) {\n if ( $attrs[key] ) {\n $scope.$parent.$watch($parse($attrs[key]), function(value) {\n self[key] = value ? new Date(value) : null;\n self.refreshView();\n });\n } else {\n self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null;\n }\n });\n\n $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode;\n $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);\n this.activeDate = angular.isDefined($attrs.initDate) ? $scope.$parent.$eval($attrs.initDate) : new Date();\n\n $scope.isActive = function(dateObject) {\n if (self.compare(dateObject.date, self.activeDate) === 0) {\n $scope.activeDateId = dateObject.uid;\n return true;\n }\n return false;\n };\n\n this.init = function( ngModelCtrl_ ) {\n ngModelCtrl = ngModelCtrl_;\n\n ngModelCtrl.$render = function() {\n self.render();\n };\n };\n\n this.render = function() {\n if ( ngModelCtrl.$modelValue ) {\n var date = new Date( ngModelCtrl.$modelValue ),\n isValid = !isNaN(date);\n\n if ( isValid ) {\n this.activeDate = date;\n } else {\n $log.error('Datepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');\n }\n ngModelCtrl.$setValidity('date', isValid);\n }\n this.refreshView();\n };\n\n this.refreshView = function() {\n if ( this.element ) {\n this._refreshView();\n\n var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null;\n ngModelCtrl.$setValidity('date-disabled', !date || (this.element && !this.isDisabled(date)));\n }\n };\n\n this.createDateObject = function(date, format) {\n var model = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null;\n return {\n date: date,\n label: dateFilter(date, format),\n selected: model && this.compare(date, model) === 0,\n disabled: this.isDisabled(date),\n current: this.compare(date, new Date()) === 0\n };\n };\n\n this.isDisabled = function( date ) {\n return ((this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0) || ($attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode})));\n };\n\n // Split array into smaller arrays\n this.split = function(arr, size) {\n var arrays = [];\n while (arr.length > 0) {\n arrays.push(arr.splice(0, size));\n }\n return arrays;\n };\n\n $scope.select = function( date ) {\n if ( $scope.datepickerMode === self.minMode ) {\n var dt = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : new Date(0, 0, 0, 0, 0, 0, 0);\n dt.setFullYear( date.getFullYear(), date.getMonth(), date.getDate() );\n ngModelCtrl.$setViewValue( dt );\n ngModelCtrl.$render();\n } else {\n self.activeDate = date;\n $scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) - 1 ];\n }\n };\n\n $scope.move = function( direction ) {\n var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),\n month = self.activeDate.getMonth() + direction * (self.step.months || 0);\n self.activeDate.setFullYear(year, month, 1);\n self.refreshView();\n };\n\n $scope.toggleMode = function( direction ) {\n direction = direction || 1;\n\n if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) {\n return;\n }\n\n $scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) + direction ];\n };\n\n // Key event mapper\n $scope.keys = { 13:'enter', 32:'space', 33:'pageup', 34:'pagedown', 35:'end', 36:'home', 37:'left', 38:'up', 39:'right', 40:'down' };\n\n var focusElement = function() {\n $timeout(function() {\n self.element[0].focus();\n }, 0 , false);\n };\n\n // Listen for focus requests from popup directive\n $scope.$on('datepicker.focus', focusElement);\n\n $scope.keydown = function( evt ) {\n var key = $scope.keys[evt.which];\n\n if ( !key || evt.shiftKey || evt.altKey ) {\n return;\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n\n if (key === 'enter' || key === 'space') {\n if ( self.isDisabled(self.activeDate)) {\n return; // do nothing\n }\n $scope.select(self.activeDate);\n focusElement();\n } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {\n $scope.toggleMode(key === 'up' ? 1 : -1);\n focusElement();\n } else {\n self.handleKeyDown(key, evt);\n self.refreshView();\n }\n };\n}])\n\n.directive( 'datepicker', function () {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: 'template/datepicker/datepicker.html',\n scope: {\n datepickerMode: '=?',\n dateDisabled: '&',\n showValidationMessages: '&'\n },\n require: ['datepicker', '?^ngModel'],\n controller: 'DatepickerController',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if ( ngModelCtrl ) {\n datepickerCtrl.init( ngModelCtrl );\n }\n }\n };\n})\n\n.directive('daypicker', ['dateFilter', function (dateFilter) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: 'template/datepicker/day.html',\n require: '^datepicker',\n link: function(scope, element, attrs, ctrl) {\n scope.showWeeks = ctrl.showWeeks;\n\n ctrl.step = { months: 1 };\n ctrl.element = element;\n\n var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n function getDaysInMonth( year, month ) {\n return ((month === 1) && (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month];\n }\n\n function getDates(startDate, n) {\n var dates = new Array(n), current = new Date(startDate), i = 0;\n current.setHours(12); // Prevent repeated dates because of timezone bug\n while ( i < n ) {\n dates[i++] = new Date(current);\n current.setDate( current.getDate() + 1 );\n }\n return dates;\n }\n\n ctrl._refreshView = function() {\n var year = ctrl.activeDate.getFullYear(),\n month = ctrl.activeDate.getMonth(),\n firstDayOfMonth = new Date(year, month, 1),\n difference = ctrl.startingDay - firstDayOfMonth.getDay(),\n numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : - difference,\n firstDate = new Date(firstDayOfMonth);\n\n if ( numDisplayedFromPreviousMonth > 0 ) {\n firstDate.setDate( - numDisplayedFromPreviousMonth + 1 );\n }\n\n // 42 is the number of days on a six-month calendar\n var days = getDates(firstDate, 42);\n for (var i = 0; i < 42; i ++) {\n days[i] = angular.extend(ctrl.createDateObject(days[i], ctrl.formatDay), {\n secondary: days[i].getMonth() !== month,\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.labels = new Array(7);\n for (var j = 0; j < 7; j++) {\n scope.labels[j] = {\n abbr: dateFilter(days[j].date, ctrl.formatDayHeader),\n full: dateFilter(days[j].date, 'EEEE')\n };\n }\n\n scope.title = dateFilter(ctrl.activeDate, ctrl.formatDayTitle);\n scope.rows = ctrl.split(days, 7);\n\n if ( scope.showWeeks ) {\n scope.weekNumbers = [];\n var weekNumber = getISO8601WeekNumber( scope.rows[0][0].date ),\n numWeeks = scope.rows.length;\n while( scope.weekNumbers.push(weekNumber++) < numWeeks ) {}\n }\n };\n\n ctrl.compare = function(date1, date2) {\n return (new Date( date1.getFullYear(), date1.getMonth(), date1.getDate() ) - new Date( date2.getFullYear(), date2.getMonth(), date2.getDate() ) );\n };\n\n function getISO8601WeekNumber(date) {\n var checkDate = new Date(date);\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday\n var time = checkDate.getTime();\n checkDate.setMonth(0); // Compare with Jan 1\n checkDate.setDate(1);\n return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\n }\n\n ctrl.handleKeyDown = function( key, evt ) {\n var date = ctrl.activeDate.getDate();\n\n if (key === 'left') {\n date = date - 1; // up\n } else if (key === 'up') {\n date = date - 7; // down\n } else if (key === 'right') {\n date = date + 1; // down\n } else if (key === 'down') {\n date = date + 7;\n } else if (key === 'pageup' || key === 'pagedown') {\n var month = ctrl.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);\n ctrl.activeDate.setMonth(month, 1);\n date = Math.min(getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()), date);\n } else if (key === 'home') {\n date = 1;\n } else if (key === 'end') {\n date = getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth());\n }\n ctrl.activeDate.setDate(date);\n };\n\n ctrl.refreshView();\n }\n };\n}])\n\n.directive('monthpicker', ['dateFilter', function (dateFilter) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: 'template/datepicker/month.html',\n require: '^datepicker',\n link: function(scope, element, attrs, ctrl) {\n ctrl.step = { years: 1 };\n ctrl.element = element;\n\n ctrl._refreshView = function() {\n var months = new Array(12),\n year = ctrl.activeDate.getFullYear();\n\n for ( var i = 0; i < 12; i++ ) {\n months[i] = angular.extend(ctrl.createDateObject(new Date(year, i, 1), ctrl.formatMonth), {\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.title = dateFilter(ctrl.activeDate, ctrl.formatMonthTitle);\n scope.rows = ctrl.split(months, 3);\n };\n\n ctrl.compare = function(date1, date2) {\n return new Date( date1.getFullYear(), date1.getMonth() ) - new Date( date2.getFullYear(), date2.getMonth() );\n };\n\n ctrl.handleKeyDown = function( key, evt ) {\n var date = ctrl.activeDate.getMonth();\n\n if (key === 'left') {\n date = date - 1; // up\n } else if (key === 'up') {\n date = date - 3; // down\n } else if (key === 'right') {\n date = date + 1; // down\n } else if (key === 'down') {\n date = date + 3;\n } else if (key === 'pageup' || key === 'pagedown') {\n var year = ctrl.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);\n ctrl.activeDate.setFullYear(year);\n } else if (key === 'home') {\n date = 0;\n } else if (key === 'end') {\n date = 11;\n }\n ctrl.activeDate.setMonth(date);\n };\n\n ctrl.refreshView();\n }\n };\n}])\n\n.directive('yearpicker', ['dateFilter', function (dateFilter) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: 'template/datepicker/year.html',\n require: '^datepicker',\n link: function(scope, element, attrs, ctrl) {\n var range = ctrl.yearRange;\n\n ctrl.step = { years: range };\n ctrl.element = element;\n\n function getStartingYear( year ) {\n return parseInt((year - 1) / range, 10) * range + 1;\n }\n\n ctrl._refreshView = function() {\n var years = new Array(range);\n\n for ( var i = 0, start = getStartingYear(ctrl.activeDate.getFullYear()); i < range; i++ ) {\n years[i] = angular.extend(ctrl.createDateObject(new Date(start + i, 0, 1), ctrl.formatYear), {\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.title = [years[0].label, years[range - 1].label].join(' - ');\n scope.rows = ctrl.split(years, 5);\n };\n\n ctrl.compare = function(date1, date2) {\n return date1.getFullYear() - date2.getFullYear();\n };\n\n ctrl.handleKeyDown = function( key, evt ) {\n var date = ctrl.activeDate.getFullYear();\n\n if (key === 'left') {\n date = date - 1; // up\n } else if (key === 'up') {\n date = date - 5; // down\n } else if (key === 'right') {\n date = date + 1; // down\n } else if (key === 'down') {\n date = date + 5;\n } else if (key === 'pageup' || key === 'pagedown') {\n date += (key === 'pageup' ? - 1 : 1) * ctrl.step.years;\n } else if (key === 'home') {\n date = getStartingYear( ctrl.activeDate.getFullYear() );\n } else if (key === 'end') {\n date = getStartingYear( ctrl.activeDate.getFullYear() ) + range - 1;\n }\n ctrl.activeDate.setFullYear(date);\n };\n\n ctrl.refreshView();\n }\n };\n}])\n\n.constant('datepickerPopupConfig', {\n datepickerPopup: 'yyyy-MM-dd',\n currentText: 'Today',\n clearText: 'Clear',\n closeText: 'Done',\n closeOnDateSelection: true,\n appendToBody: false,\n showButtonBar: true\n})\n\n.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig',\nfunction ($compile, $parse, $document, $position, dateFilter, dateParser, datepickerPopupConfig) {\n return {\n restrict: 'EA',\n require: 'ngModel',\n scope: {\n isOpen: '=?',\n currentText: '@',\n clearText: '@',\n closeText: '@',\n dateDisabled: '&',\n showValidationMessages: '='\n },\n link: function(scope, element, attrs, ngModel) {\n var dateFormat,\n closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection,\n appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;\n\n scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;\n\n scope.getText = function( key ) {\n return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];\n };\n\n attrs.$observe('datepickerPopup', function(value) {\n dateFormat = value || datepickerPopupConfig.datepickerPopup;\n ngModel.$render();\n });\n\n // popup element used to display calendar\n var popupEl = angular.element('
');\n popupEl.attr({\n 'ng-model': 'date',\n 'ng-change': 'dateSelection()'\n });\n\n function cameltoDash( string ){\n return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });\n }\n\n // datepicker element\n var datepickerEl = angular.element(popupEl.children()[0]);\n if ( attrs.datepickerOptions ) {\n angular.forEach(scope.$parent.$eval(attrs.datepickerOptions), function( value, option ) {\n datepickerEl.attr( cameltoDash(option), value );\n });\n }\n\n angular.forEach(['minDate', 'maxDate'], function( key ) {\n if ( attrs[key] ) {\n scope.$parent.$watch($parse(attrs[key]), function(value){\n scope[key] = value;\n });\n datepickerEl.attr(cameltoDash(key), key);\n }\n });\n if (attrs.dateDisabled) {\n datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })');\n }\n\n function parseDate(viewValue) {\n if (!viewValue) {\n ngModel.$setValidity('date', true);\n return null;\n } else if (angular.isDate(viewValue) && !isNaN(viewValue)) {\n ngModel.$setValidity('date', true);\n return viewValue;\n } else if (angular.isString(viewValue)) {\n var date = dateParser.parse(viewValue, dateFormat) || new Date(viewValue);\n if (isNaN(date)) {\n ngModel.$setValidity('date', false);\n return undefined;\n } else {\n ngModel.$setValidity('date', true);\n return date;\n }\n } else {\n ngModel.$setValidity('date', false);\n return undefined;\n }\n }\n ngModel.$parsers.unshift(parseDate);\n\n // Inner change\n scope.dateSelection = function(dt) {\n if (angular.isDefined(dt)) {\n scope.date = dt;\n }\n ngModel.$setViewValue(scope.date);\n ngModel.$render();\n\n if ( closeOnDateSelection ) {\n scope.isOpen = false;\n element[0].focus();\n }\n };\n\n element.bind('input change keyup', function() {\n scope.$apply(function() {\n scope.date = ngModel.$modelValue;\n });\n });\n\n // Outter change\n ngModel.$render = function() {\n var date = ngModel.$viewValue ? dateFilter(ngModel.$viewValue, dateFormat) : '';\n element.val(date);\n scope.date = parseDate( ngModel.$modelValue );\n };\n\n var documentClickBind = function(event) {\n if (scope.isOpen && event.target !== element[0]) {\n scope.$apply(function() {\n scope.isOpen = false;\n });\n }\n };\n\n var keydown = function(evt, noApply) {\n scope.keydown(evt);\n };\n element.bind('keydown', keydown);\n\n scope.keydown = function(evt) {\n if (evt.which === 27) {\n evt.preventDefault();\n evt.stopPropagation();\n scope.close();\n } else if (evt.which === 40 && !scope.isOpen) {\n scope.isOpen = true;\n }\n };\n\n scope.$watch('isOpen', function(value) {\n if (value) {\n scope.$broadcast('datepicker.focus');\n scope.position = appendToBody ? $position.offset(element) : $position.position(element);\n scope.position.top = scope.position.top + element.prop('offsetHeight');\n\n $document.bind('click', documentClickBind);\n } else {\n $document.unbind('click', documentClickBind);\n }\n });\n\n scope.select = function( date ) {\n if (date === 'today') {\n var today = new Date();\n if (angular.isDate(ngModel.$modelValue)) {\n date = new Date(ngModel.$modelValue);\n date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());\n } else {\n date = new Date(today.setHours(0, 0, 0, 0));\n }\n }\n scope.dateSelection( date );\n };\n\n scope.close = function() {\n scope.isOpen = false;\n element[0].focus();\n };\n\n var $popup = $compile(popupEl)(scope);\n if ( appendToBody ) {\n $document.find('body').append($popup);\n } else {\n element.after($popup);\n }\n\n scope.$on('$destroy', function() {\n $popup.remove();\n element.unbind('keydown', keydown);\n $document.unbind('click', documentClickBind);\n });\n }\n };\n}])\n\n.directive('datepickerPopupWrap', function() {\n return {\n restrict:'EA',\n replace: true,\n transclude: true,\n templateUrl: 'template/datepicker/popup.html',\n link:function (scope, element, attrs) {\n element.bind('click', function(event) {\n event.preventDefault();\n event.stopPropagation();\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.dropdown', [])\n\n.constant('dropdownConfig', {\n openClass: 'open'\n})\n\n.service('dropdownService', ['$document', function($document) {\n var openScope = null;\n\n this.open = function( dropdownScope ) {\n if ( !openScope ) {\n $document.bind('click', closeDropdown);\n $document.bind('keydown', escapeKeyBind);\n }\n\n if ( openScope && openScope !== dropdownScope ) {\n openScope.isOpen = false;\n }\n\n openScope = dropdownScope;\n };\n\n this.close = function( dropdownScope ) {\n if ( openScope === dropdownScope ) {\n openScope = null;\n $document.unbind('click', closeDropdown);\n $document.unbind('keydown', escapeKeyBind);\n }\n };\n\n var closeDropdown = function( evt ) {\n if (evt && evt.isDefaultPrevented()) {\n return;\n }\n\n openScope.$apply(function() {\n openScope.isOpen = false;\n });\n };\n\n var escapeKeyBind = function( evt ) {\n if ( evt.which === 27 ) {\n openScope.focusToggleElement();\n closeDropdown();\n }\n };\n}])\n\n.controller('DropdownController', ['$scope', '$attrs', '$parse', 'dropdownConfig', 'dropdownService', '$animate', function($scope, $attrs, $parse, dropdownConfig, dropdownService, $animate) {\n var self = this,\n scope = $scope.$new(), // create a child scope so we are not polluting original one\n openClass = dropdownConfig.openClass,\n getIsOpen,\n setIsOpen = angular.noop,\n toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop;\n\n this.init = function( element ) {\n self.$element = element;\n\n if ( $attrs.isOpen ) {\n getIsOpen = $parse($attrs.isOpen);\n setIsOpen = getIsOpen.assign;\n\n $scope.$watch(getIsOpen, function(value) {\n scope.isOpen = !!value;\n });\n }\n };\n\n this.toggle = function( open ) {\n return scope.isOpen = arguments.length ? !!open : !scope.isOpen;\n };\n\n // Allow other directives to watch status\n this.isOpen = function() {\n return scope.isOpen;\n };\n\n scope.focusToggleElement = function() {\n if ( self.toggleElement ) {\n self.toggleElement[0].focus();\n }\n };\n\n scope.$watch('isOpen', function( isOpen, wasOpen ) {\n $animate[isOpen ? 'addClass' : 'removeClass'](self.$element, openClass);\n\n if ( isOpen ) {\n scope.focusToggleElement();\n dropdownService.open( scope );\n } else {\n dropdownService.close( scope );\n }\n\n setIsOpen($scope, isOpen);\n if (angular.isDefined(isOpen) && isOpen !== wasOpen) {\n toggleInvoker($scope, { open: !!isOpen });\n }\n });\n\n $scope.$on('$locationChangeSuccess', function() {\n scope.isOpen = false;\n });\n\n $scope.$on('$destroy', function() {\n scope.$destroy();\n });\n}])\n\n.directive('dropdown', function() {\n return {\n restrict: 'CA',\n controller: 'DropdownController',\n link: function(scope, element, attrs, dropdownCtrl) {\n dropdownCtrl.init( element );\n }\n };\n})\n\n.directive('dropdownToggle', function() {\n return {\n restrict: 'CA',\n require: '?^dropdown',\n link: function(scope, element, attrs, dropdownCtrl) {\n if ( !dropdownCtrl ) {\n return;\n }\n\n dropdownCtrl.toggleElement = element;\n\n var toggleDropdown = function(event) {\n event.preventDefault();\n\n if ( !element.hasClass('disabled') && !attrs.disabled ) {\n scope.$apply(function() {\n dropdownCtrl.toggle();\n });\n }\n };\n\n element.bind('click', toggleDropdown);\n\n // WAI-ARIA\n element.attr({ 'aria-haspopup': true, 'aria-expanded': false });\n scope.$watch(dropdownCtrl.isOpen, function( isOpen ) {\n element.attr('aria-expanded', !!isOpen);\n });\n\n scope.$on('$destroy', function() {\n element.unbind('click', toggleDropdown);\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.modal', ['ui.bootstrap.transition'])\n\n/**\n * A helper, internal data structure that acts as a map but also allows getting / removing\n * elements in the LIFO order\n */\n .factory('$$stackedMap', function () {\n return {\n createNew: function () {\n var stack = [];\n\n return {\n add: function (key, value) {\n stack.push({\n key: key,\n value: value\n });\n },\n get: function (key) {\n for (var i = 0; i < stack.length; i++) {\n if (key == stack[i].key) {\n return stack[i];\n }\n }\n },\n keys: function() {\n var keys = [];\n for (var i = 0; i < stack.length; i++) {\n keys.push(stack[i].key);\n }\n return keys;\n },\n top: function () {\n return stack[stack.length - 1];\n },\n remove: function (key) {\n var idx = -1;\n for (var i = 0; i < stack.length; i++) {\n if (key == stack[i].key) {\n idx = i;\n break;\n }\n }\n return stack.splice(idx, 1)[0];\n },\n removeTop: function () {\n return stack.splice(stack.length - 1, 1)[0];\n },\n length: function () {\n return stack.length;\n }\n };\n }\n };\n })\n\n/**\n * A helper directive for the $modal service. It creates a backdrop element.\n */\n .directive('modalBackdrop', ['$timeout', function ($timeout) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: 'template/modal/backdrop.html',\n link: function (scope) {\n\n scope.animate = false;\n\n //trigger CSS transitions\n $timeout(function () {\n scope.animate = true;\n });\n }\n };\n }])\n\n .directive('modalWindow', ['$modalStack', '$timeout', function ($modalStack, $timeout) {\n return {\n restrict: 'EA',\n scope: {\n index: '@',\n animate: '='\n },\n replace: true,\n transclude: true,\n templateUrl: function(tElement, tAttrs) {\n return tAttrs.templateUrl || 'template/modal/window.html';\n },\n link: function (scope, element, attrs) {\n element.addClass(attrs.windowClass || '');\n scope.size = attrs.size;\n\n $timeout(function () {\n // trigger CSS transitions\n scope.animate = true;\n // focus a freshly-opened modal\n element[0].focus();\n });\n\n scope.close = function (evt) {\n var modal = $modalStack.getTop();\n if (modal && modal.value.backdrop && modal.value.backdrop != 'static' && (evt.target === evt.currentTarget)) {\n evt.preventDefault();\n evt.stopPropagation();\n $modalStack.dismiss(modal.key, 'backdrop click');\n }\n };\n }\n };\n }])\n\n .factory('$modalStack', ['$transition', '$timeout', '$document', '$compile', '$rootScope', '$$stackedMap',\n function ($transition, $timeout, $document, $compile, $rootScope, $$stackedMap) {\n\n var OPENED_MODAL_CLASS = 'modal-open';\n\n var backdropDomEl, backdropScope;\n var openedWindows = $$stackedMap.createNew();\n var $modalStack = {};\n\n function backdropIndex() {\n var topBackdropIndex = -1;\n var opened = openedWindows.keys();\n for (var i = 0; i < opened.length; i++) {\n if (openedWindows.get(opened[i]).value.backdrop) {\n topBackdropIndex = i;\n }\n }\n return topBackdropIndex;\n }\n\n $rootScope.$watch(backdropIndex, function(newBackdropIndex){\n if (backdropScope) {\n backdropScope.index = newBackdropIndex;\n }\n });\n\n function removeModalWindow(modalInstance) {\n\n var body = $document.find('body').eq(0);\n var modalWindow = openedWindows.get(modalInstance).value;\n\n //clean up the stack\n openedWindows.remove(modalInstance);\n\n //remove window DOM element\n removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, 300, function() {\n modalWindow.modalScope.$destroy();\n body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0);\n checkRemoveBackdrop();\n });\n }\n\n function checkRemoveBackdrop() {\n //remove backdrop if no longer needed\n if (backdropDomEl && backdropIndex() == -1) {\n var backdropScopeRef = backdropScope;\n removeAfterAnimate(backdropDomEl, backdropScope, 150, function () {\n backdropScopeRef.$destroy();\n backdropScopeRef = null;\n });\n backdropDomEl = undefined;\n backdropScope = undefined;\n }\n }\n\n function removeAfterAnimate(domEl, scope, emulateTime, done) {\n // Closing animation\n scope.animate = false;\n\n var transitionEndEventName = $transition.transitionEndEventName;\n if (transitionEndEventName) {\n // transition out\n var timeout = $timeout(afterAnimating, emulateTime);\n\n domEl.bind(transitionEndEventName, function () {\n $timeout.cancel(timeout);\n afterAnimating();\n scope.$apply();\n });\n } else {\n // Ensure this call is async\n $timeout(afterAnimating, 0);\n }\n\n function afterAnimating() {\n if (afterAnimating.done) {\n return;\n }\n afterAnimating.done = true;\n\n domEl.remove();\n if (done) {\n done();\n }\n }\n }\n\n $document.bind('keydown', function (evt) {\n var modal;\n\n if (evt.which === 27) {\n modal = openedWindows.top();\n if (modal && modal.value.keyboard) {\n evt.preventDefault();\n $rootScope.$apply(function () {\n $modalStack.dismiss(modal.key, 'escape key press');\n });\n }\n }\n });\n\n $modalStack.open = function (modalInstance, modal) {\n\n openedWindows.add(modalInstance, {\n deferred: modal.deferred,\n modalScope: modal.scope,\n backdrop: modal.backdrop,\n keyboard: modal.keyboard\n });\n\n var body = $document.find('body').eq(0),\n currBackdropIndex = backdropIndex();\n\n if (currBackdropIndex >= 0 && !backdropDomEl) {\n backdropScope = $rootScope.$new(true);\n backdropScope.index = currBackdropIndex;\n backdropDomEl = $compile('
')(backdropScope);\n body.append(backdropDomEl);\n }\n\n var angularDomEl = angular.element('
');\n angularDomEl.attr({\n 'template-url': modal.windowTemplateUrl,\n 'window-class': modal.windowClass,\n 'size': modal.size,\n 'index': openedWindows.length() - 1,\n 'animate': 'animate'\n }).html(modal.content);\n\n var modalDomEl = $compile(angularDomEl)(modal.scope);\n openedWindows.top().value.modalDomEl = modalDomEl;\n body.append(modalDomEl);\n body.addClass(OPENED_MODAL_CLASS);\n };\n\n $modalStack.close = function (modalInstance, result) {\n var modalWindow = openedWindows.get(modalInstance).value;\n if (modalWindow) {\n modalWindow.deferred.resolve(result);\n removeModalWindow(modalInstance);\n }\n };\n\n $modalStack.dismiss = function (modalInstance, reason) {\n var modalWindow = openedWindows.get(modalInstance).value;\n if (modalWindow) {\n modalWindow.deferred.reject(reason);\n removeModalWindow(modalInstance);\n }\n };\n\n $modalStack.dismissAll = function (reason) {\n var topModal = this.getTop();\n while (topModal) {\n this.dismiss(topModal.key, reason);\n topModal = this.getTop();\n }\n };\n\n $modalStack.getTop = function () {\n return openedWindows.top();\n };\n\n return $modalStack;\n }])\n\n .provider('$modal', function () {\n\n var $modalProvider = {\n options: {\n backdrop: true, //can be also false or 'static'\n keyboard: true\n },\n $get: ['$injector', '$rootScope', '$q', '$http', '$templateCache', '$controller', '$modalStack',\n function ($injector, $rootScope, $q, $http, $templateCache, $controller, $modalStack) {\n\n var $modal = {};\n\n function getTemplatePromise(options) {\n return options.template ? $q.when(options.template) :\n $http.get(options.templateUrl, {cache: $templateCache}).then(function (result) {\n return result.data;\n });\n }\n\n function getResolvePromises(resolves) {\n var promisesArr = [];\n angular.forEach(resolves, function (value, key) {\n if (angular.isFunction(value) || angular.isArray(value)) {\n promisesArr.push($q.when($injector.invoke(value)));\n }\n });\n return promisesArr;\n }\n\n $modal.open = function (modalOptions) {\n\n var modalResultDeferred = $q.defer();\n var modalOpenedDeferred = $q.defer();\n\n //prepare an instance of a modal to be injected into controllers and returned to a caller\n var modalInstance = {\n result: modalResultDeferred.promise,\n opened: modalOpenedDeferred.promise,\n close: function (result) {\n $modalStack.close(modalInstance, result);\n },\n dismiss: function (reason) {\n $modalStack.dismiss(modalInstance, reason);\n }\n };\n\n //merge and clean up options\n modalOptions = angular.extend({}, $modalProvider.options, modalOptions);\n modalOptions.resolve = modalOptions.resolve || {};\n\n //verify options\n if (!modalOptions.template && !modalOptions.templateUrl) {\n throw new Error('One of template or templateUrl options is required.');\n }\n\n var templateAndResolvePromise =\n $q.all([getTemplatePromise(modalOptions)].concat(getResolvePromises(modalOptions.resolve)));\n\n\n templateAndResolvePromise.then(function resolveSuccess(tplAndVars) {\n\n var modalScope = (modalOptions.scope || $rootScope).$new();\n modalScope.$close = modalInstance.close;\n modalScope.$dismiss = modalInstance.dismiss;\n\n var ctrlInstance, ctrlLocals = {};\n var resolveIter = 1;\n\n //controllers\n if (modalOptions.controller) {\n ctrlLocals.$scope = modalScope;\n ctrlLocals.$modalInstance = modalInstance;\n angular.forEach(modalOptions.resolve, function (value, key) {\n ctrlLocals[key] = tplAndVars[resolveIter++];\n });\n\n ctrlInstance = $controller(modalOptions.controller, ctrlLocals);\n }\n\n $modalStack.open(modalInstance, {\n scope: modalScope,\n deferred: modalResultDeferred,\n content: tplAndVars[0],\n backdrop: modalOptions.backdrop,\n keyboard: modalOptions.keyboard,\n windowClass: modalOptions.windowClass,\n windowTemplateUrl: modalOptions.windowTemplateUrl,\n size: modalOptions.size\n });\n\n }, function resolveError(reason) {\n modalResultDeferred.reject(reason);\n });\n\n templateAndResolvePromise.then(function () {\n modalOpenedDeferred.resolve(true);\n }, function () {\n modalOpenedDeferred.reject(false);\n });\n\n return modalInstance;\n };\n\n return $modal;\n }]\n };\n\n return $modalProvider;\n });\n\nangular.module('ui.bootstrap.pagination', [])\n\n.controller('PaginationController', ['$scope', '$attrs', '$parse', function ($scope, $attrs, $parse) {\n var self = this,\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl\n setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;\n\n this.init = function(ngModelCtrl_, config) {\n ngModelCtrl = ngModelCtrl_;\n this.config = config;\n\n ngModelCtrl.$render = function() {\n self.render();\n };\n\n if ($attrs.itemsPerPage) {\n $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) {\n self.itemsPerPage = parseInt(value, 10);\n $scope.totalPages = self.calculateTotalPages();\n });\n } else {\n this.itemsPerPage = config.itemsPerPage;\n }\n };\n\n this.calculateTotalPages = function() {\n var totalPages = this.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / this.itemsPerPage);\n return Math.max(totalPages || 0, 1);\n };\n\n this.render = function() {\n $scope.page = parseInt(ngModelCtrl.$viewValue, 10) || 1;\n };\n\n $scope.selectPage = function(page) {\n if ( $scope.page !== page && page > 0 && page <= $scope.totalPages) {\n ngModelCtrl.$setViewValue(page);\n ngModelCtrl.$render();\n }\n };\n\n $scope.getText = function( key ) {\n return $scope[key + 'Text'] || self.config[key + 'Text'];\n };\n $scope.noPrevious = function() {\n return $scope.page === 1;\n };\n $scope.noNext = function() {\n return $scope.page === $scope.totalPages;\n };\n\n $scope.$watch('totalItems', function() {\n $scope.totalPages = self.calculateTotalPages();\n });\n\n $scope.$watch('totalPages', function(value) {\n setNumPages($scope.$parent, value); // Readonly variable\n\n if ( $scope.page > value ) {\n $scope.selectPage(value);\n } else {\n ngModelCtrl.$render();\n }\n });\n}])\n\n.constant('paginationConfig', {\n itemsPerPage: 10,\n boundaryLinks: false,\n directionLinks: true,\n firstText: 'First',\n previousText: 'Previous',\n nextText: 'Next',\n lastText: 'Last',\n rotate: true\n})\n\n.directive('pagination', ['$parse', 'paginationConfig', function($parse, paginationConfig) {\n return {\n restrict: 'EA',\n scope: {\n totalItems: '=',\n firstText: '@',\n previousText: '@',\n nextText: '@',\n lastText: '@'\n },\n require: ['pagination', '?ngModel'],\n controller: 'PaginationController',\n templateUrl: 'template/pagination/pagination.html',\n replace: true,\n link: function(scope, element, attrs, ctrls) {\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (!ngModelCtrl) {\n return; // do nothing if no ng-model\n }\n\n // Setup configuration parameters\n var maxSize = angular.isDefined(attrs.maxSize) ? scope.$parent.$eval(attrs.maxSize) : paginationConfig.maxSize,\n rotate = angular.isDefined(attrs.rotate) ? scope.$parent.$eval(attrs.rotate) : paginationConfig.rotate;\n scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : paginationConfig.boundaryLinks;\n scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : paginationConfig.directionLinks;\n\n paginationCtrl.init(ngModelCtrl, paginationConfig);\n\n if (attrs.maxSize) {\n scope.$parent.$watch($parse(attrs.maxSize), function(value) {\n maxSize = parseInt(value, 10);\n paginationCtrl.render();\n });\n }\n\n // Create page object used in template\n function makePage(number, text, isActive) {\n return {\n number: number,\n text: text,\n active: isActive\n };\n }\n\n function getPages(currentPage, totalPages) {\n var pages = [];\n\n // Default page limits\n var startPage = 1, endPage = totalPages;\n var isMaxSized = ( angular.isDefined(maxSize) && maxSize < totalPages );\n\n // recompute if maxSize\n if ( isMaxSized ) {\n if ( rotate ) {\n // Current page is displayed in the middle of the visible ones\n startPage = Math.max(currentPage - Math.floor(maxSize/2), 1);\n endPage = startPage + maxSize - 1;\n\n // Adjust if limit is exceeded\n if (endPage > totalPages) {\n endPage = totalPages;\n startPage = endPage - maxSize + 1;\n }\n } else {\n // Visible pages are paginated with maxSize\n startPage = ((Math.ceil(currentPage / maxSize) - 1) * maxSize) + 1;\n\n // Adjust last page if limit is exceeded\n endPage = Math.min(startPage + maxSize - 1, totalPages);\n }\n }\n\n // Add page number links\n for (var number = startPage; number <= endPage; number++) {\n var page = makePage(number, number, number === currentPage);\n pages.push(page);\n }\n\n // Add links to move between page sets\n if ( isMaxSized && ! rotate ) {\n if ( startPage > 1 ) {\n var previousPageSet = makePage(startPage - 1, '...', false);\n pages.unshift(previousPageSet);\n }\n\n if ( endPage < totalPages ) {\n var nextPageSet = makePage(endPage + 1, '...', false);\n pages.push(nextPageSet);\n }\n }\n\n return pages;\n }\n\n var originalRender = paginationCtrl.render;\n paginationCtrl.render = function() {\n originalRender();\n if (scope.page > 0 && scope.page <= scope.totalPages) {\n scope.pages = getPages(scope.page, scope.totalPages);\n }\n };\n }\n };\n}])\n\n.constant('pagerConfig', {\n itemsPerPage: 10,\n previousText: '« Previous',\n nextText: 'Next »',\n align: true\n})\n\n.directive('pager', ['pagerConfig', function(pagerConfig) {\n return {\n restrict: 'EA',\n scope: {\n totalItems: '=',\n previousText: '@',\n nextText: '@'\n },\n require: ['pager', '?ngModel'],\n controller: 'PaginationController',\n templateUrl: 'template/pagination/pager.html',\n replace: true,\n link: function(scope, element, attrs, ctrls) {\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (!ngModelCtrl) {\n return; // do nothing if no ng-model\n }\n\n scope.align = angular.isDefined(attrs.align) ? scope.$parent.$eval(attrs.align) : pagerConfig.align;\n paginationCtrl.init(ngModelCtrl, pagerConfig);\n }\n };\n}]);\n\n/**\n * The following features are still outstanding: animation as a\n * function, placement as a function, inside, support for more triggers than\n * just mouse enter/leave, html tooltips, and selector delegation.\n */\nangular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap.bindHtml' ] )\n\n/**\n * The $tooltip service creates tooltip- and popover-like directives as well as\n * houses global options for them.\n */\n.provider( '$tooltip', function () {\n // The default options tooltip and popover.\n var defaultOptions = {\n placement: 'top',\n animation: true,\n popupDelay: 0\n };\n\n // Default hide triggers for each show trigger\n var triggerMap = {\n 'mouseenter': 'mouseleave',\n 'click': 'click',\n 'focus': 'blur'\n };\n\n // The options specified to the provider globally.\n var globalOptions = {};\n\n /**\n * `options({})` allows global configuration of all tooltips in the\n * application.\n *\n * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {\n * // place tooltips left instead of top by default\n * $tooltipProvider.options( { placement: 'left' } );\n * });\n */\n\tthis.options = function( value ) {\n\t\tangular.extend( globalOptions, value );\n\t};\n\n /**\n * This allows you to extend the set of trigger mappings available. E.g.:\n *\n * $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' );\n */\n this.setTriggers = function setTriggers ( triggers ) {\n angular.extend( triggerMap, triggers );\n };\n\n /**\n * This is a helper function for translating camel-case to snake-case.\n */\n function snake_case(name){\n var regexp = /[A-Z]/g;\n var separator = '-';\n return name.replace(regexp, function(letter, pos) {\n return (pos ? separator : '') + letter.toLowerCase();\n });\n }\n\n /**\n * Returns the actual instance of the $tooltip service.\n * TODO support multiple triggers\n */\n this.$get = [ '$window', '$compile', '$timeout', '$parse', '$document', '$position', '$interpolate', function ( $window, $compile, $timeout, $parse, $document, $position, $interpolate ) {\n return function $tooltip ( type, prefix, defaultTriggerShow ) {\n var options = angular.extend( {}, defaultOptions, globalOptions );\n\n /**\n * Returns an object of show and hide triggers.\n *\n * If a trigger is supplied,\n * it is used to show the tooltip; otherwise, it will use the `trigger`\n * option passed to the `$tooltipProvider.options` method; else it will\n * default to the trigger supplied to this directive factory.\n *\n * The hide trigger is based on the show trigger. If the `trigger` option\n * was passed to the `$tooltipProvider.options` method, it will use the\n * mapped trigger from `triggerMap` or the passed trigger if the map is\n * undefined; otherwise, it uses the `triggerMap` value of the show\n * trigger; else it will just use the show trigger.\n */\n function getTriggers ( trigger ) {\n var show = trigger || options.trigger || defaultTriggerShow;\n var hide = triggerMap[show] || show;\n return {\n show: show,\n hide: hide\n };\n }\n\n var directiveName = snake_case( type );\n\n var startSym = $interpolate.startSymbol();\n var endSym = $interpolate.endSymbol();\n var template =\n '
'+\n '
';\n\n return {\n restrict: 'EA',\n scope: true,\n compile: function (tElem, tAttrs) {\n var tooltipLinker = $compile( template );\n\n return function link ( scope, element, attrs ) {\n var tooltip;\n var transitionTimeout;\n var popupTimeout;\n var appendToBody = angular.isDefined( options.appendToBody ) ? options.appendToBody : false;\n var triggers = getTriggers( undefined );\n var hasEnableExp = angular.isDefined(attrs[prefix+'Enable']);\n\n var positionTooltip = function () {\n\n var ttPosition = $position.positionElements(element, tooltip, scope.tt_placement, appendToBody);\n ttPosition.top += 'px';\n ttPosition.left += 'px';\n\n // Now set the calculated positioning.\n tooltip.css( ttPosition );\n };\n\n // By default, the tooltip is not open.\n // TODO add ability to start tooltip opened\n scope.tt_isOpen = false;\n\n function toggleTooltipBind () {\n if ( ! scope.tt_isOpen ) {\n showTooltipBind();\n } else {\n hideTooltipBind();\n }\n }\n\n // Show the tooltip with delay if specified, otherwise show it immediately\n function showTooltipBind() {\n if(hasEnableExp && !scope.$eval(attrs[prefix+'Enable'])) {\n return;\n }\n if ( scope.tt_popupDelay ) {\n // Do nothing if the tooltip was already scheduled to pop-up.\n // This happens if show is triggered multiple times before any hide is triggered.\n if (!popupTimeout) {\n popupTimeout = $timeout( show, scope.tt_popupDelay, false );\n popupTimeout.then(function(reposition){reposition();});\n }\n } else {\n show()();\n }\n }\n\n function hideTooltipBind () {\n scope.$apply(function () {\n hide();\n });\n }\n\n // Show the tooltip popup element.\n function show() {\n\n popupTimeout = null;\n\n // If there is a pending remove transition, we must cancel it, lest the\n // tooltip be mysteriously removed.\n if ( transitionTimeout ) {\n $timeout.cancel( transitionTimeout );\n transitionTimeout = null;\n }\n\n // Don't show empty tooltips.\n if ( ! scope.tt_content ) {\n return angular.noop;\n }\n\n createTooltip();\n\n // Set the initial positioning.\n tooltip.css({ top: 0, left: 0, display: 'block' });\n\n // Now we add it to the DOM because need some info about it. But it's not \n // visible yet anyway.\n if ( appendToBody ) {\n $document.find( 'body' ).append( tooltip );\n } else {\n element.after( tooltip );\n }\n\n positionTooltip();\n\n // And show the tooltip.\n scope.tt_isOpen = true;\n scope.$digest(); // digest required as $apply is not called\n\n // Return positioning function as promise callback for correct\n // positioning after draw.\n return positionTooltip;\n }\n\n // Hide the tooltip popup element.\n function hide() {\n // First things first: we don't show it anymore.\n scope.tt_isOpen = false;\n\n //if tooltip is going to be shown after delay, we must cancel this\n $timeout.cancel( popupTimeout );\n popupTimeout = null;\n\n // And now we remove it from the DOM. However, if we have animation, we \n // need to wait for it to expire beforehand.\n // FIXME: this is a placeholder for a port of the transitions library.\n if ( scope.tt_animation ) {\n if (!transitionTimeout) {\n transitionTimeout = $timeout(removeTooltip, 500);\n }\n } else {\n removeTooltip();\n }\n }\n\n function createTooltip() {\n // There can only be one tooltip element per directive shown at once.\n if (tooltip) {\n removeTooltip();\n }\n tooltip = tooltipLinker(scope, function () {});\n\n // Get contents rendered into the tooltip\n scope.$digest();\n }\n\n function removeTooltip() {\n transitionTimeout = null;\n if (tooltip) {\n tooltip.remove();\n tooltip = null;\n }\n }\n\n /**\n * Observe the relevant attributes.\n */\n attrs.$observe( type, function ( val ) {\n scope.tt_content = val;\n\n if (!val && scope.tt_isOpen ) {\n hide();\n }\n });\n\n attrs.$observe( prefix+'Title', function ( val ) {\n scope.tt_title = val;\n });\n\n attrs.$observe( prefix+'Placement', function ( val ) {\n scope.tt_placement = angular.isDefined( val ) ? val : options.placement;\n });\n\n attrs.$observe( prefix+'PopupDelay', function ( val ) {\n var delay = parseInt( val, 10 );\n scope.tt_popupDelay = ! isNaN(delay) ? delay : options.popupDelay;\n });\n\n var unregisterTriggers = function () {\n element.unbind(triggers.show, showTooltipBind);\n element.unbind(triggers.hide, hideTooltipBind);\n };\n\n attrs.$observe( prefix+'Trigger', function ( val ) {\n unregisterTriggers();\n\n triggers = getTriggers( val );\n\n if ( triggers.show === triggers.hide ) {\n element.bind( triggers.show, toggleTooltipBind );\n } else {\n element.bind( triggers.show, showTooltipBind );\n element.bind( triggers.hide, hideTooltipBind );\n }\n });\n\n var animation = scope.$eval(attrs[prefix + 'Animation']);\n scope.tt_animation = angular.isDefined(animation) ? !!animation : options.animation;\n\n attrs.$observe( prefix+'AppendToBody', function ( val ) {\n appendToBody = angular.isDefined( val ) ? $parse( val )( scope ) : appendToBody;\n });\n\n // if a tooltip is attached to we need to remove it on\n // location change as its parent scope will probably not be destroyed\n // by the change.\n if ( appendToBody ) {\n scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess () {\n if ( scope.tt_isOpen ) {\n hide();\n }\n });\n }\n\n // Make sure tooltip is destroyed and removed.\n scope.$on('$destroy', function onDestroyTooltip() {\n $timeout.cancel( transitionTimeout );\n $timeout.cancel( popupTimeout );\n unregisterTriggers();\n removeTooltip();\n });\n };\n }\n };\n };\n }];\n})\n\n.directive( 'tooltipPopup', function () {\n return {\n restrict: 'EA',\n replace: true,\n scope: { content: '@', placement: '@', animation: '&', isOpen: '&' },\n templateUrl: 'template/tooltip/tooltip-popup.html'\n };\n})\n\n.directive( 'tooltip', [ '$tooltip', function ( $tooltip ) {\n return $tooltip( 'tooltip', 'tooltip', 'mouseenter' );\n}])\n\n.directive( 'tooltipHtmlUnsafePopup', function () {\n return {\n restrict: 'EA',\n replace: true,\n scope: { content: '@', placement: '@', animation: '&', isOpen: '&' },\n templateUrl: 'template/tooltip/tooltip-html-unsafe-popup.html'\n };\n})\n\n.directive( 'tooltipHtmlUnsafe', [ '$tooltip', function ( $tooltip ) {\n return $tooltip( 'tooltipHtmlUnsafe', 'tooltip', 'mouseenter' );\n}]);\n\n/**\n * The following features are still outstanding: popup delay, animation as a\n * function, placement as a function, inside, support for more triggers than\n * just mouse enter/leave, html popovers, and selector delegatation.\n */\nangular.module( 'ui.bootstrap.popover', [ 'ui.bootstrap.tooltip' ] )\n\n.directive( 'popoverPopup', function () {\n return {\n restrict: 'EA',\n replace: true,\n scope: { title: '@', content: '@', placement: '@', animation: '&', isOpen: '&' },\n templateUrl: 'template/popover/popover.html'\n };\n})\n\n.directive( 'popover', [ '$tooltip', function ( $tooltip ) {\n return $tooltip( 'popover', 'popover', 'click' );\n}]);\n\nangular.module('ui.bootstrap.progressbar', [])\n\n.constant('progressConfig', {\n animate: true,\n max: 100\n})\n\n.controller('ProgressController', ['$scope', '$attrs', 'progressConfig', function($scope, $attrs, progressConfig) {\n var self = this,\n animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;\n\n this.bars = [];\n $scope.max = angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : progressConfig.max;\n\n this.addBar = function(bar, element) {\n if ( !animate ) {\n element.css({'transition': 'none'});\n }\n\n this.bars.push(bar);\n\n bar.$watch('value', function( value ) {\n bar.percent = +(100 * value / $scope.max).toFixed(2);\n });\n\n bar.$on('$destroy', function() {\n element = null;\n self.removeBar(bar);\n });\n };\n\n this.removeBar = function(bar) {\n this.bars.splice(this.bars.indexOf(bar), 1);\n };\n}])\n\n.directive('progress', function() {\n return {\n restrict: 'EA',\n replace: true,\n transclude: true,\n controller: 'ProgressController',\n require: 'progress',\n scope: {},\n templateUrl: 'template/progressbar/progress.html'\n };\n})\n\n.directive('bar', function() {\n return {\n restrict: 'EA',\n replace: true,\n transclude: true,\n require: '^progress',\n scope: {\n value: '=',\n type: '@'\n },\n templateUrl: 'template/progressbar/bar.html',\n link: function(scope, element, attrs, progressCtrl) {\n progressCtrl.addBar(scope, element);\n }\n };\n})\n\n.directive('progressbar', function() {\n return {\n restrict: 'EA',\n replace: true,\n transclude: true,\n controller: 'ProgressController',\n scope: {\n value: '=',\n type: '@'\n },\n templateUrl: 'template/progressbar/progressbar.html',\n link: function(scope, element, attrs, progressCtrl) {\n progressCtrl.addBar(scope, angular.element(element.children()[0]));\n }\n };\n});\nangular.module('ui.bootstrap.rating', [])\n\n.constant('ratingConfig', {\n max: 5,\n stateOn: null,\n stateOff: null\n})\n\n.controller('RatingController', ['$scope', '$attrs', 'ratingConfig', function($scope, $attrs, ratingConfig) {\n var ngModelCtrl = { $setViewValue: angular.noop };\n\n this.init = function(ngModelCtrl_) {\n ngModelCtrl = ngModelCtrl_;\n ngModelCtrl.$render = this.render;\n\n this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;\n this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;\n\n var ratingStates = angular.isDefined($attrs.ratingStates) ? $scope.$parent.$eval($attrs.ratingStates) :\n new Array( angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max );\n $scope.range = this.buildTemplateObjects(ratingStates);\n };\n\n this.buildTemplateObjects = function(states) {\n for (var i = 0, n = states.length; i < n; i++) {\n states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff }, states[i]);\n }\n return states;\n };\n\n $scope.rate = function(value) {\n if ( !$scope.readonly && value >= 0 && value <= $scope.range.length ) {\n ngModelCtrl.$setViewValue(value);\n ngModelCtrl.$render();\n }\n };\n\n $scope.enter = function(value) {\n if ( !$scope.readonly ) {\n $scope.value = value;\n }\n $scope.onHover({value: value});\n };\n\n $scope.reset = function() {\n $scope.value = ngModelCtrl.$viewValue;\n $scope.onLeave();\n };\n\n $scope.onKeydown = function(evt) {\n if (/(37|38|39|40)/.test(evt.which)) {\n evt.preventDefault();\n evt.stopPropagation();\n $scope.rate( $scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1) );\n }\n };\n\n this.render = function() {\n $scope.value = ngModelCtrl.$viewValue;\n };\n}])\n\n.directive('rating', function() {\n return {\n restrict: 'EA',\n require: ['rating', 'ngModel'],\n scope: {\n readonly: '=?',\n onHover: '&',\n onLeave: '&'\n },\n controller: 'RatingController',\n templateUrl: 'template/rating/rating.html',\n replace: true,\n link: function(scope, element, attrs, ctrls) {\n var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if ( ngModelCtrl ) {\n ratingCtrl.init( ngModelCtrl );\n }\n }\n };\n});\n\n/**\n * @ngdoc overview\n * @name ui.bootstrap.tabs\n *\n * @description\n * AngularJS version of the tabs directive.\n */\n\nangular.module('ui.bootstrap.tabs', [])\n\n.controller('TabsetController', ['$scope', function TabsetCtrl($scope) {\n var ctrl = this,\n tabs = ctrl.tabs = $scope.tabs = [];\n\n ctrl.select = function(selectedTab) {\n angular.forEach(tabs, function(tab) {\n if (tab.active && tab !== selectedTab) {\n tab.active = false;\n tab.onDeselect();\n }\n });\n selectedTab.active = true;\n selectedTab.onSelect();\n };\n\n ctrl.addTab = function addTab(tab) {\n tabs.push(tab);\n // we can't run the select function on the first tab\n // since that would select it twice\n if (tabs.length === 1) {\n tab.active = true;\n } else if (tab.active) {\n ctrl.select(tab);\n }\n };\n\n ctrl.removeTab = function removeTab(tab) {\n var index = tabs.indexOf(tab);\n //Select a new tab if the tab to be removed is selected\n if (tab.active && tabs.length > 1) {\n //If this is the last tab, select the previous tab. else, the next tab.\n var newActiveIndex = index == tabs.length - 1 ? index - 1 : index + 1;\n ctrl.select(tabs[newActiveIndex]);\n }\n tabs.splice(index, 1);\n };\n}])\n\n/**\n * @ngdoc directive\n * @name ui.bootstrap.tabs.directive:tabset\n * @restrict EA\n *\n * @description\n * Tabset is the outer container for the tabs directive\n *\n * @param {boolean=} vertical Whether or not to use vertical styling for the tabs.\n * @param {boolean=} justified Whether or not to use justified styling for the tabs.\n *\n * @example\n\n \n \n First Content!\n Second Content!\n \n
\n \n First Vertical Content!\n Second Vertical Content!\n \n \n First Justified Content!\n Second Justified Content!\n \n
\n
\n */\n.directive('tabset', function() {\n return {\n restrict: 'EA',\n transclude: true,\n replace: true,\n scope: {\n type: '@'\n },\n controller: 'TabsetController',\n templateUrl: 'template/tabs/tabset.html',\n link: function(scope, element, attrs) {\n scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false;\n scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false;\n }\n };\n})\n\n/**\n * @ngdoc directive\n * @name ui.bootstrap.tabs.directive:tab\n * @restrict EA\n *\n * @param {string=} heading The visible heading, or title, of the tab. Set HTML headings with {@link ui.bootstrap.tabs.directive:tabHeading tabHeading}.\n * @param {string=} select An expression to evaluate when the tab is selected.\n * @param {boolean=} active A binding, telling whether or not this tab is selected.\n * @param {boolean=} disabled A binding, telling whether or not this tab is disabled.\n *\n * @description\n * Creates a tab with a heading and content. Must be placed within a {@link ui.bootstrap.tabs.directive:tabset tabset}.\n *\n * @example\n\n \n
\n \n \n
\n \n First Tab\n \n Alert me!\n Second Tab, with alert callback and html heading!\n \n \n {{item.content}}\n \n \n
\n
\n \n function TabsDemoCtrl($scope) {\n $scope.items = [\n { title:\"Dynamic Title 1\", content:\"Dynamic Item 0\" },\n { title:\"Dynamic Title 2\", content:\"Dynamic Item 1\", disabled: true }\n ];\n\n $scope.alertMe = function() {\n setTimeout(function() {\n alert(\"You've selected the alert tab!\");\n });\n };\n };\n \n
\n */\n\n/**\n * @ngdoc directive\n * @name ui.bootstrap.tabs.directive:tabHeading\n * @restrict EA\n *\n * @description\n * Creates an HTML heading for a {@link ui.bootstrap.tabs.directive:tab tab}. Must be placed as a child of a tab element.\n *\n * @example\n\n \n \n \n HTML in my titles?!\n And some content, too!\n \n \n Icon heading?!?\n That's right.\n \n \n \n\n */\n.directive('tab', ['$parse', function($parse) {\n return {\n require: '^tabset',\n restrict: 'EA',\n replace: true,\n templateUrl: 'template/tabs/tab.html',\n transclude: true,\n scope: {\n active: '=?',\n heading: '@',\n onSelect: '&select', //This callback is called in contentHeadingTransclude\n //once it inserts the tab's content into the dom\n onDeselect: '&deselect'\n },\n controller: function() {\n //Empty controller so other directives can require being 'under' a tab\n },\n compile: function(elm, attrs, transclude) {\n return function postLink(scope, elm, attrs, tabsetCtrl) {\n scope.$watch('active', function(active) {\n if (active) {\n tabsetCtrl.select(scope);\n }\n });\n\n scope.disabled = false;\n if ( attrs.disabled ) {\n scope.$parent.$watch($parse(attrs.disabled), function(value) {\n scope.disabled = !! value;\n });\n }\n\n scope.select = function() {\n if ( !scope.disabled ) {\n scope.active = true;\n }\n };\n\n tabsetCtrl.addTab(scope);\n scope.$on('$destroy', function() {\n tabsetCtrl.removeTab(scope);\n });\n\n //We need to transclude later, once the content container is ready.\n //when this link happens, we're inside a tab heading.\n scope.$transcludeFn = transclude;\n };\n }\n };\n}])\n\n.directive('tabHeadingTransclude', [function() {\n return {\n restrict: 'A',\n require: '^tab',\n link: function(scope, elm, attrs, tabCtrl) {\n scope.$watch('headingElement', function updateHeadingElement(heading) {\n if (heading) {\n elm.html('');\n elm.append(heading);\n }\n });\n }\n };\n}])\n\n.directive('tabContentTransclude', function() {\n return {\n restrict: 'A',\n require: '^tabset',\n link: function(scope, elm, attrs) {\n var tab = scope.$eval(attrs.tabContentTransclude);\n\n //Now our tab is ready to be transcluded: both the tab heading area\n //and the tab content area are loaded. Transclude 'em both.\n tab.$transcludeFn(tab.$parent, function(contents) {\n angular.forEach(contents, function(node) {\n if (isTabHeading(node)) {\n //Let tabHeadingTransclude know.\n tab.headingElement = node;\n } else {\n elm.append(node);\n }\n });\n });\n }\n };\n function isTabHeading(node) {\n return node.tagName && (\n node.hasAttribute('tab-heading') ||\n node.hasAttribute('data-tab-heading') ||\n node.tagName.toLowerCase() === 'tab-heading' ||\n node.tagName.toLowerCase() === 'data-tab-heading'\n );\n }\n})\n\n;\n\nangular.module('ui.bootstrap.timepicker', [])\n\n.constant('timepickerConfig', {\n hourStep: 1,\n minuteStep: 1,\n showMeridian: true,\n meridians: null,\n readonlyInput: false,\n mousewheel: true\n})\n\n.controller('TimepickerController', ['$scope', '$attrs', '$parse', '$log', '$locale', 'timepickerConfig', function($scope, $attrs, $parse, $log, $locale, timepickerConfig) {\n var selected = new Date(),\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl\n meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS;\n\n this.init = function( ngModelCtrl_, inputs ) {\n ngModelCtrl = ngModelCtrl_;\n ngModelCtrl.$render = this.render;\n\n var hoursInputEl = inputs.eq(0),\n minutesInputEl = inputs.eq(1);\n\n var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;\n if ( mousewheel ) {\n this.setupMousewheelEvents( hoursInputEl, minutesInputEl );\n }\n\n $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;\n this.setupInputEvents( hoursInputEl, minutesInputEl );\n };\n\n var hourStep = timepickerConfig.hourStep;\n if ($attrs.hourStep) {\n $scope.$parent.$watch($parse($attrs.hourStep), function(value) {\n hourStep = parseInt(value, 10);\n });\n }\n\n var minuteStep = timepickerConfig.minuteStep;\n if ($attrs.minuteStep) {\n $scope.$parent.$watch($parse($attrs.minuteStep), function(value) {\n minuteStep = parseInt(value, 10);\n });\n }\n\n // 12H / 24H mode\n $scope.showMeridian = timepickerConfig.showMeridian;\n if ($attrs.showMeridian) {\n $scope.$parent.$watch($parse($attrs.showMeridian), function(value) {\n $scope.showMeridian = !!value;\n\n if ( ngModelCtrl.$error.time ) {\n // Evaluate from template\n var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate();\n if (angular.isDefined( hours ) && angular.isDefined( minutes )) {\n selected.setHours( hours );\n refresh();\n }\n } else {\n updateTemplate();\n }\n });\n }\n\n // Get $scope.hours in 24H mode if valid\n function getHoursFromTemplate ( ) {\n var hours = parseInt( $scope.hours, 10 );\n var valid = ( $scope.showMeridian ) ? (hours > 0 && hours < 13) : (hours >= 0 && hours < 24);\n if ( !valid ) {\n return undefined;\n }\n\n if ( $scope.showMeridian ) {\n if ( hours === 12 ) {\n hours = 0;\n }\n if ( $scope.meridian === meridians[1] ) {\n hours = hours + 12;\n }\n }\n return hours;\n }\n\n function getMinutesFromTemplate() {\n var minutes = parseInt($scope.minutes, 10);\n return ( minutes >= 0 && minutes < 60 ) ? minutes : undefined;\n }\n\n function pad( value ) {\n return ( angular.isDefined(value) && value.toString().length < 2 ) ? '0' + value : value;\n }\n\n // Respond on mousewheel spin\n this.setupMousewheelEvents = function( hoursInputEl, minutesInputEl ) {\n var isScrollingUp = function(e) {\n if (e.originalEvent) {\n e = e.originalEvent;\n }\n //pick correct delta variable depending on event\n var delta = (e.wheelDelta) ? e.wheelDelta : -e.deltaY;\n return (e.detail || delta > 0);\n };\n\n hoursInputEl.bind('mousewheel wheel', function(e) {\n $scope.$apply( (isScrollingUp(e)) ? $scope.incrementHours() : $scope.decrementHours() );\n e.preventDefault();\n });\n\n minutesInputEl.bind('mousewheel wheel', function(e) {\n $scope.$apply( (isScrollingUp(e)) ? $scope.incrementMinutes() : $scope.decrementMinutes() );\n e.preventDefault();\n });\n\n };\n\n this.setupInputEvents = function( hoursInputEl, minutesInputEl ) {\n if ( $scope.readonlyInput ) {\n $scope.updateHours = angular.noop;\n $scope.updateMinutes = angular.noop;\n return;\n }\n\n var invalidate = function(invalidHours, invalidMinutes) {\n ngModelCtrl.$setViewValue( null );\n ngModelCtrl.$setValidity('time', false);\n if (angular.isDefined(invalidHours)) {\n $scope.invalidHours = invalidHours;\n }\n if (angular.isDefined(invalidMinutes)) {\n $scope.invalidMinutes = invalidMinutes;\n }\n };\n\n $scope.updateHours = function() {\n var hours = getHoursFromTemplate();\n\n if ( angular.isDefined(hours) ) {\n selected.setHours( hours );\n refresh( 'h' );\n } else {\n invalidate(true);\n }\n };\n\n hoursInputEl.bind('blur', function(e) {\n if ( !$scope.invalidHours && $scope.hours < 10) {\n $scope.$apply( function() {\n $scope.hours = pad( $scope.hours );\n });\n }\n });\n\n $scope.updateMinutes = function() {\n var minutes = getMinutesFromTemplate();\n\n if ( angular.isDefined(minutes) ) {\n selected.setMinutes( minutes );\n refresh( 'm' );\n } else {\n invalidate(undefined, true);\n }\n };\n\n minutesInputEl.bind('blur', function(e) {\n if ( !$scope.invalidMinutes && $scope.minutes < 10 ) {\n $scope.$apply( function() {\n $scope.minutes = pad( $scope.minutes );\n });\n }\n });\n\n };\n\n this.render = function() {\n var date = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : null;\n\n if ( isNaN(date) ) {\n ngModelCtrl.$setValidity('time', false);\n $log.error('Timepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');\n } else {\n if ( date ) {\n selected = date;\n }\n makeValid();\n updateTemplate();\n }\n };\n\n // Call internally when we know that model is valid.\n function refresh( keyboardChange ) {\n makeValid();\n ngModelCtrl.$setViewValue( new Date(selected) );\n updateTemplate( keyboardChange );\n }\n\n function makeValid() {\n ngModelCtrl.$setValidity('time', true);\n $scope.invalidHours = false;\n $scope.invalidMinutes = false;\n }\n\n function updateTemplate( keyboardChange ) {\n var hours = selected.getHours(), minutes = selected.getMinutes();\n\n if ( $scope.showMeridian ) {\n hours = ( hours === 0 || hours === 12 ) ? 12 : hours % 12; // Convert 24 to 12 hour system\n }\n\n $scope.hours = keyboardChange === 'h' ? hours : pad(hours);\n $scope.minutes = keyboardChange === 'm' ? minutes : pad(minutes);\n $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];\n }\n\n function addMinutes( minutes ) {\n var dt = new Date( selected.getTime() + minutes * 60000 );\n selected.setHours( dt.getHours(), dt.getMinutes() );\n refresh();\n }\n\n $scope.incrementHours = function() {\n addMinutes( hourStep * 60 );\n };\n $scope.decrementHours = function() {\n addMinutes( - hourStep * 60 );\n };\n $scope.incrementMinutes = function() {\n addMinutes( minuteStep );\n };\n $scope.decrementMinutes = function() {\n addMinutes( - minuteStep );\n };\n $scope.toggleMeridian = function() {\n addMinutes( 12 * 60 * (( selected.getHours() < 12 ) ? 1 : -1) );\n };\n}])\n\n.directive('timepicker', function () {\n return {\n restrict: 'EA',\n require: ['timepicker', '?^ngModel'],\n controller:'TimepickerController',\n replace: true,\n scope: {},\n templateUrl: 'template/timepicker/timepicker.html',\n link: function(scope, element, attrs, ctrls) {\n var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if ( ngModelCtrl ) {\n timepickerCtrl.init( ngModelCtrl, element.find('input') );\n }\n }\n };\n});\n\nangular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap.bindHtml'])\n\n/**\n * A helper service that can parse typeahead's syntax (string provided by users)\n * Extracted to a separate service for ease of unit testing\n */\n .factory('typeaheadParser', ['$parse', function ($parse) {\n\n // 00000111000000000000022200000000000000003333333333333330000000000044000\n var TYPEAHEAD_REGEXP = /^\\s*(.*?)(?:\\s+as\\s+(.*?))?\\s+for\\s+(?:([\\$\\w][\\$\\w\\d]*))\\s+in\\s+(.*)$/;\n\n return {\n parse:function (input) {\n\n var match = input.match(TYPEAHEAD_REGEXP);\n if (!match) {\n throw new Error(\n 'Expected typeahead specification in form of \"_modelValue_ (as _label_)? for _item_ in _collection_\"' +\n ' but got \"' + input + '\".');\n }\n\n return {\n itemName:match[3],\n source:$parse(match[4]),\n viewMapper:$parse(match[2] || match[1]),\n modelMapper:$parse(match[1])\n };\n }\n };\n}])\n\n .directive('typeahead', ['$compile', '$parse', '$q', '$timeout', '$document', '$position', 'typeaheadParser',\n function ($compile, $parse, $q, $timeout, $document, $position, typeaheadParser) {\n\n var HOT_KEYS = [9, 13, 27, 38, 40];\n\n return {\n require:'ngModel',\n link:function (originalScope, element, attrs, modelCtrl) {\n\n //SUPPORTED ATTRIBUTES (OPTIONS)\n\n //minimal no of characters that needs to be entered before typeahead kicks-in\n var minSearch = originalScope.$eval(attrs.typeaheadMinLength) || 1;\n\n //minimal wait time after last character typed before typehead kicks-in\n var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;\n\n //should it restrict model values to the ones selected from the popup only?\n var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;\n\n //binding to a variable that indicates if matches are being retrieved asynchronously\n var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;\n\n //a callback executed when a match is selected\n var onSelectCallback = $parse(attrs.typeaheadOnSelect);\n\n var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;\n\n var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;\n\n //INTERNAL VARIABLES\n\n //model setter executed upon match selection\n var $setModelValue = $parse(attrs.ngModel).assign;\n\n //expressions used by typeahead\n var parserResult = typeaheadParser.parse(attrs.typeahead);\n\n var hasFocus;\n\n //create a child scope for the typeahead directive so we are not polluting original scope\n //with typeahead-specific data (matches, query etc.)\n var scope = originalScope.$new();\n originalScope.$on('$destroy', function(){\n scope.$destroy();\n });\n\n // WAI-ARIA\n var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\n element.attr({\n 'aria-autocomplete': 'list',\n 'aria-expanded': false,\n 'aria-owns': popupId\n });\n\n //pop-up element used to display matches\n var popUpEl = angular.element('
');\n popUpEl.attr({\n id: popupId,\n matches: 'matches',\n active: 'activeIdx',\n select: 'select(activeIdx)',\n query: 'query',\n position: 'position'\n });\n //custom item template\n if (angular.isDefined(attrs.typeaheadTemplateUrl)) {\n popUpEl.attr('template-url', attrs.typeaheadTemplateUrl);\n }\n\n var resetMatches = function() {\n scope.matches = [];\n scope.activeIdx = -1;\n element.attr('aria-expanded', false);\n };\n\n var getMatchId = function(index) {\n return popupId + '-option-' + index;\n };\n\n // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.\n // This attribute is added or removed automatically when the `activeIdx` changes.\n scope.$watch('activeIdx', function(index) {\n if (index < 0) {\n element.removeAttr('aria-activedescendant');\n } else {\n element.attr('aria-activedescendant', getMatchId(index));\n }\n });\n\n var getMatchesAsync = function(inputValue) {\n\n var locals = {$viewValue: inputValue};\n isLoadingSetter(originalScope, true);\n $q.when(parserResult.source(originalScope, locals)).then(function(matches) {\n\n //it might happen that several async queries were in progress if a user were typing fast\n //but we are interested only in responses that correspond to the current view value\n var onCurrentRequest = (inputValue === modelCtrl.$viewValue);\n if (onCurrentRequest && hasFocus) {\n if (matches.length > 0) {\n\n scope.activeIdx = 0;\n scope.matches.length = 0;\n\n //transform labels\n for(var i=0; i= minSearch) {\n if (waitTime > 0) {\n if (timeoutPromise) {\n $timeout.cancel(timeoutPromise);//cancel previous timeout\n }\n timeoutPromise = $timeout(function () {\n getMatchesAsync(inputValue);\n }, waitTime);\n } else {\n getMatchesAsync(inputValue);\n }\n } else {\n isLoadingSetter(originalScope, false);\n resetMatches();\n }\n\n if (isEditable) {\n return inputValue;\n } else {\n if (!inputValue) {\n // Reset in case user had typed something previously.\n modelCtrl.$setValidity('editable', true);\n return inputValue;\n } else {\n modelCtrl.$setValidity('editable', false);\n return undefined;\n }\n }\n });\n\n modelCtrl.$formatters.push(function (modelValue) {\n\n var candidateViewValue, emptyViewValue;\n var locals = {};\n\n if (inputFormatter) {\n\n locals['$model'] = modelValue;\n return inputFormatter(originalScope, locals);\n\n } else {\n\n //it might happen that we don't have enough info to properly render input value\n //we need to check for this situation and simply return model value if we can't apply custom formatting\n locals[parserResult.itemName] = modelValue;\n candidateViewValue = parserResult.viewMapper(originalScope, locals);\n locals[parserResult.itemName] = undefined;\n emptyViewValue = parserResult.viewMapper(originalScope, locals);\n\n return candidateViewValue!== emptyViewValue ? candidateViewValue : modelValue;\n }\n });\n\n scope.select = function (activeIdx) {\n //called from within the $digest() cycle\n var locals = {};\n var model, item;\n\n locals[parserResult.itemName] = item = scope.matches[activeIdx].model;\n model = parserResult.modelMapper(originalScope, locals);\n $setModelValue(originalScope, model);\n modelCtrl.$setValidity('editable', true);\n\n onSelectCallback(originalScope, {\n $item: item,\n $model: model,\n $label: parserResult.viewMapper(originalScope, locals)\n });\n\n resetMatches();\n\n //return focus to the input element if a match was selected via a mouse click event\n // use timeout to avoid $rootScope:inprog error\n $timeout(function() { element[0].focus(); }, 0, false);\n };\n\n //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)\n element.bind('keydown', function (evt) {\n\n //typeahead is open and an \"interesting\" key was pressed\n if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {\n return;\n }\n\n evt.preventDefault();\n\n if (evt.which === 40) {\n scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;\n scope.$digest();\n\n } else if (evt.which === 38) {\n scope.activeIdx = (scope.activeIdx ? scope.activeIdx : scope.matches.length) - 1;\n scope.$digest();\n\n } else if (evt.which === 13 || evt.which === 9) {\n scope.$apply(function () {\n scope.select(scope.activeIdx);\n });\n\n } else if (evt.which === 27) {\n evt.stopPropagation();\n\n resetMatches();\n scope.$digest();\n }\n });\n\n element.bind('blur', function (evt) {\n hasFocus = false;\n });\n\n // Keep reference to click handler to unbind it.\n var dismissClickHandler = function (evt) {\n if (element[0] !== evt.target) {\n resetMatches();\n scope.$digest();\n }\n };\n\n $document.bind('click', dismissClickHandler);\n\n originalScope.$on('$destroy', function(){\n $document.unbind('click', dismissClickHandler);\n });\n\n var $popup = $compile(popUpEl)(scope);\n if ( appendToBody ) {\n $document.find('body').append($popup);\n } else {\n element.after($popup);\n }\n }\n };\n\n}])\n\n .directive('typeaheadPopup', function () {\n return {\n restrict:'EA',\n scope:{\n matches:'=',\n query:'=',\n active:'=',\n position:'=',\n select:'&'\n },\n replace:true,\n templateUrl:'template/typeahead/typeahead-popup.html',\n link:function (scope, element, attrs) {\n\n scope.templateUrl = attrs.templateUrl;\n\n scope.isOpen = function () {\n return scope.matches.length > 0;\n };\n\n scope.isActive = function (matchIdx) {\n return scope.active == matchIdx;\n };\n\n scope.selectActive = function (matchIdx) {\n scope.active = matchIdx;\n };\n\n scope.selectMatch = function (activeIdx) {\n scope.select({activeIdx:activeIdx});\n };\n }\n };\n })\n\n .directive('typeaheadMatch', ['$http', '$templateCache', '$compile', '$parse', function ($http, $templateCache, $compile, $parse) {\n return {\n restrict:'EA',\n scope:{\n index:'=',\n match:'=',\n query:'='\n },\n link:function (scope, element, attrs) {\n var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'template/typeahead/typeahead-match.html';\n $http.get(tplUrl, {cache: $templateCache}).then(function(tplContent){\n element.replaceWith($compile(tplContent.data.trim())(scope));\n });\n }\n };\n }])\n\n .filter('typeaheadHighlight', function() {\n\n function escapeRegexp(queryToEscape) {\n return queryToEscape.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\n }\n\n return function(matchItem, query) {\n return query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem;\n };\n });\n\nangular.module(\"template/accordion/accordion-group.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/accordion/accordion-group.html\",\n \"
\\n\" +\n \"
\\n\" +\n \"

\\n\" +\n \" {{heading}}\\n\" +\n \"

\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"\t
\\n\" +\n \"
\\n\" +\n \"
\");\n}]);\n\nangular.module(\"template/accordion/accordion.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/accordion/accordion.html\",\n \"
\");\n}]);\n\nangular.module(\"template/alert/alert.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/alert/alert.html\",\n \"
\\n\" +\n \" \\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/carousel/carousel.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/carousel/carousel.html\",\n \"
\\n\" +\n \"
    1\\\">\\n\" +\n \"
  1. \\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \" 1\\\">\\n\" +\n \" 1\\\">\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/carousel/slide.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/carousel/slide.html\",\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/datepicker/datepicker.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/datepicker/datepicker.html\",\n \"
\\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
\");\n}]);\n\nangular.module(\"template/datepicker/day.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/datepicker/day.html\",\n \"\\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"

{{title}}

{{label.abbr}}
{{ weekNumbers[$index] }}\\n\" +\n \" \\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/datepicker/month.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/datepicker/month.html\",\n \"\\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
\\n\" +\n \" \\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/datepicker/popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/datepicker/popup.html\",\n \"
\\n\" +\n \"\t
\\n\" +\n //\"\t
\\n\" +\n //\"\t\t\\n\" +\n //\"\t\t\t\\n\" +\n //\"\t\t\t\\n\" +\n //\"\t\t\\n\" +\n //\"\t\t\\n\" +\n //\"\t
\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/datepicker/year.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/datepicker/year.html\",\n \"\\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
\\n\" +\n \" \\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/modal/backdrop.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/modal/backdrop.html\",\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/modal/window.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/modal/window.html\",\n \"
\\n\" +\n \"
\\n\" +\n \"
\");\n}]);\n\nangular.module(\"template/pagination/pager.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/pagination/pager.html\",\n \"\");\n}]);\n\nangular.module(\"template/pagination/pagination.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/pagination/pagination.html\",\n \"\");\n}]);\n\nangular.module(\"template/tooltip/tooltip-html-unsafe-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/tooltip/tooltip-html-unsafe-popup.html\",\n \"
\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/tooltip/tooltip-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/tooltip/tooltip-popup.html\",\n \"
\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/popover/popover.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/popover/popover.html\",\n \"
\\n\" +\n \"
\\n\" +\n \"\\n\" +\n \"
\\n\" +\n \"

\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n\nangular.module(\"template/progressbar/bar.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/progressbar/bar.html\",\n \"
\");\n}]);\n\nangular.module(\"template/progressbar/progress.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/progressbar/progress.html\",\n \"
\");\n}]);\n\nangular.module(\"template/progressbar/progressbar.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/progressbar/progressbar.html\",\n \"
\\n\" +\n \"
\\n\" +\n \"
\");\n}]);\n\nangular.module(\"template/rating/rating.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/rating/rating.html\",\n \"\\n\" +\n \" \\n\" +\n \" ({{ $index < value ? '*' : ' ' }})\\n\" +\n \" \\n\" +\n \"\");\n}]);\n\nangular.module(\"template/tabs/tab.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/tabs/tab.html\",\n \"
  • \\n\" +\n \" {{heading}}\\n\" +\n \"
  • \\n\" +\n \"\");\n}]);\n\nangular.module(\"template/tabs/tabset-titles.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/tabs/tabset-titles.html\",\n \"
      \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"template/tabs/tabset.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/tabs/tabset.html\",\n \"\\n\" +\n \"
    \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"\");\n}]);\n\nangular.module(\"template/timepicker/timepicker.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/timepicker/timepicker.html\",\n \"\\n\" +\n \"\t\\n\" +\n \"\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\\n\" +\n \"\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\\n\" +\n \"\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\\n\" +\n \"\t\\n\" +\n \"
       
      \\n\" +\n \"\t\t\t\t\\n\" +\n \"\t\t\t:\\n\" +\n \"\t\t\t\t\\n\" +\n \"\t\t\t
       
      \\n\" +\n \"\");\n}]);\n\nangular.module(\"template/typeahead/typeahead-match.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/typeahead/typeahead-match.html\",\n \"\");\n}]);\n\nangular.module(\"template/typeahead/typeahead-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/typeahead/typeahead-popup.html\",\n \"
        \\n\" +\n \"
      • \\n\" +\n \"
        \\n\" +\n \"
      • \\n\" +\n \"
      \");\n}]);\n","angular.module('site.resources')\n .factory('wapSearchProductsResource', [\n '$resource', '$cookies', function ($resource, $cookies) {\n var cookieId = \"\";\n if ($cookies.get('rsa')) {\n cookieId = $cookies.get('rsa');\n }\n return $resource(frontendService + '/api/Search/product/:profileType?query=:term&hitsPerPage=:hitsPerPage&raptorCookieId=' + cookieId, {}, {\n SuggestionSearch: { method: 'GET', },\n });\n }\n ])\n .factory('wapSearchCategoriesResource', [\n '$resource','$location', function ($resource, $location) {\n return $resource(frontendService + '/api/Search/category?query=:term&hitsPerPage=:hitsPerPage', {}, {\n SuggestionSearch: { method: 'GET', }\n });\n }\n ]);\n","angular.module('site.controllers')\n\t.controller('basketController', ['$scope', '$timeout', 'basketService', function ($scope, $timeout, basketService) {\n $scope.active = false;\n $scope.showValidationMessages = false;\n $scope.loading = true;\n $scope.error = false;\n\n $scope.init = function () {\n\n $scope.model = basketService.getCachedPreview();\n if ($scope.model == null) {\n basketService\n .get()\n .then(\n function successCallback(response) {\n if (response != null && response.data != null) {\n $scope.model = response.data;\n } else {\n $scope.model = null;\n }\n\n $scope.loading = false;\n }\n );\n }\n\n };\n\n $scope.$on('basketModelUpdate', function (event, model) {\n\t $scope.model = model;\n\t $scope.setAnimationTimer();\n });\n\n\t $scope.setAnimationTimer = function () {\n\t if ($scope.animate) {\n\t return;\n\t }\n\t $scope.animate = true;\n\t $timeout(function () {\n\t $scope.animate = false;\n\t }, 3000);\n };\n\n\t $scope.hasSoldOutItems = function (items) {\n\t return !!_.find(items, function (item) {\n\t return !item.inStock;\n\t });\n };\n\n $scope.toggleVisiblity = function(products) {\n if(products != undefined && products > 0) {\n $scope.active = !$scope.active;\n $(\"body #backgrounds\").addClass(\"nav-focus\");\n $(\".basket-summary-toggle\").addClass(\"active\");\n }\n }\n\n $scope.hiddenVisiblity = function () {\n $scope.active = false;\n if(!$(\".search-bar .search-input\").hasClass(\"active\")) {\n $(\"body #backgrounds\").removeClass(\"nav-focus\");\n }\n $(\".basket-summary-toggle\").removeClass(\"active\");\n }\n\n $scope.isVisible = function () {\n return $scope.active;\n }\n\n $scope.hideIfPathEndsWith = function(s) {\n if (window.location.pathname.endsWith(s)) {\n $scope.hiddenVisiblity();\n }\n }\n\n $scope.updatePromotionCode = function (code) {\n $scope.showValidationMessages = true;\n\n if ($scope.voucherForm.$invalid) {\n return false;\n }\n\n if (code != undefined && code != \"\") {\n $scope.showValidationMessages = false;\n basketService.UpdatePromotionCode(code);\n }\n\n $scope.promotionCode = '';\n };\n $scope.removePromotionCode = function (code) {\n $scope.showValidationMessages = false;\n basketService.RemovePromotionCode(code);\n };\n }]);\n","angular.module('site.services')\n .factory('cookieService', ['$cookies', function($cookies) {\n return {\n acceptCookies: function() {\n document.cookie = \"acceptCookies=true; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/\";\n }\n };\n }]);","angular.module('site.services')\n .factory('customerserviceService', ['config', '$http', '$q', function(config, $http, $q) {\n var url = frontendService + '/api/CustomerSupport';\n return {\n allFaq: function () {\n return $http.get(url);\n },\n faq: function (id) {\n return $http.get(url + '/' + id);\n }\n }\n }]);\n","angular.module('site.services')\n\t.factory('gaTrackingService', ['config', '$window', 'tagManagerService', function(config, $window, tagManagerService) {\n\n\t\treturn {\n\t\t\tsiteSearch: function(term){\n\t\t\t\tif(!term){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar searchTrackingUrl = _.template(config.gaTracking.siteSearchQueryPattern, {\n\t\t\t\t\tpath: $window.location.pathname,\n\t\t\t\t\tterm: term\n\t\t\t\t});\n\t\t\t\tdataLayer.push({ 'pageCategory': 'search', 'searchKeyword': term });\n\t\t\t //'filterType': 'valg,'filterBrand': 'valg'\n\n if (window._gaq) {\n _gaq.push(['_trackPageview', searchTrackingUrl]);\n }\n\t\t\t},\n\t\t\ttrackOrder: function (order) {\n if (!order)\n return;\n\n // Maybe separate tag manager logic from ga?\n var dataLayerProducts = order.order.orderLines.map(function(l){ return tagManagerService.mapBasketOrderLine(l, l.quantity); });\n tagManagerService.updateDataLayer('transactionSuccess', dataLayerProducts, {\n id: order.order.orderNumber,\n affiliation: 'Webapoteket',\n revenue: order.order.total.value,\n tax: order.order.taxTotal.value,\n shipping: order.order.shippingTotal.value,\n coupon: order.order.vouchers,\n });\n\n\t\t\t if (!order || !window._gaq)\n\t\t\t return;\n\n\t\t\t _gaq.push(['_trackPageview']);\n\t\t\t _gaq.push(['_addTrans',\n\t\t\t order.order.number, // transaction ID\n\t\t\t 'Webapoteket.dk', // affiliation or store name\n\t\t\t order.order.total.value, // order total\n\t\t\t order.order.taxTotal.value, // tax\n\t\t\t order.order.shippingTotal.value, // shipping\n\t\t\t order.order.billingAddress.city, // city\n\t\t\t '', // state or province\n\t\t\t order.order.billingAddress.countryDisplayName\n\t\t\t ]);\n\n\t\t\t for (var i = 0; i < order.order.orderLines.length; i++) {\n\t\t\t var line = order.order.orderLines[i];\n\n\t\t\t _gaq.push(['_addItem',\n\t\t\t order.order.orderNumber, // transaction ID\n\t\t\t line.sku, // sku\n\t\t\t line.name, // product name\n\t\t\t line.description, // category or variation\n\t\t\t line.price.currentPrice.value, // unit price\n\t\t\t line.quantity // quantity\n\t\t\t ]);\n\t\t\t }\n\n\t\t\t _gaq.push(['_trackTrans']);\n\t\t\t}\n\t\t};\n\t}]);\n","angular.module('site.services')\n\t.factory('identityService', [function(){\n var service = { \n accessToken: null \n };\n \n return service;\n\t}]);","angular.module('site.services')\n .factory('orderService', ['config', '$http', 'identityService', function (config, $http, identityService) {\n\t\tvar service = {\n\t getCombinedHistory: function (ordersSize) {\n return $http({\n url: ordersServiceUrl+'/customer-history', \n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer '+ identityService.accessToken\n },\n params: {\n ordersSize: ordersSize\n }\n });\n },\n filterOrderHistory: function (size, page) {\n return $http({\n url: ordersServiceUrl+'/customer-orders', \n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer '+ identityService.accessToken\n },\n params: {\n size: size,\n page: page\n }\n });\n }\n\t\t};\n\t return service;\n\t}]);\n","angular.module('site.controllers')\n\t.controller('prescriptionController', ['$scope', 'basketService', 'prescriptionService', '$cookies', '$modal', function ($scope, basket, prescriptionService, $cookies, $modal) {\n\t\t$scope.prescriptionIdsInBasket = [];\n\t\t$scope.showValidationMessages = false;\n $scope.productMap = {};\n $scope.initReg = function () {\n\t\t $scope.model = {};\n\t\t $scope.model.showCprText = false;\n\t\t $scope.model.cpr = '';\n $scope.model.connectWithClubUser = false;\n };\n $scope.visiblePrescriptionSubstitutes = [];\n $scope.selectedPrescription = null;\n $scope.showPrescriptionDetailsDesktop = false;\n\n if (history.replaceState) {\n history.replaceState(\n {\n id: 'receipt-overview',\n prescription: null,\n },\n document.title,\n document.location.href\n );\n }\n\n function handlePopState(event) {\n switch (event.state.id) {\n case 'receipt-overview':\n $scope.deselectPrescription();\n break;\n case 'receipt-details':\n $scope.selectedPrescription = event.state.prescription;\n window.scrollTo({top: 0});\n break;\n } \n }\n\n window.addEventListener('popstate', handlePopState);\n $scope.$on('$destroy', function() {\n window.removeEventListener('popstate', handlePopState);\n });\n\n getNemLoginCookieValue = function(){\n return $cookies.get('WebapoteketId');\n }\n\n function GetPrescriptionIdsFromBasket(basket){\n var prescriptionIds = [];\n angular.forEach(basket.orderLines, function(orderline) {\n if (orderline.prescriptionId){\n prescriptionIds.push(orderline.prescriptionId);\n }\n });\n\n return prescriptionIds;\n }\n\n $scope.updateBasketPrescription = function (event, prescription, selectedProduct) {\n if (event) {\n event.preventDefault();\n }\n if (prescription.pending) {\n return;\n }\n\n prescription.pending = true;\n basket.updatePrescriptionProduct(selectedProduct.sku, prescription.packageQuantity || 1, prescription.prescriptionID, prescription.isLocked, prescription.prescriptedSku, getNemLoginCookieValue(), prescription.reimbursementClause).then(function (data) {\n $scope.prescriptionIdsInBasket = GetPrescriptionIdsFromBasket(data.data);\n prescription.pending = false;\n\n $scope.openPowerStepModalIfComplimentaryProductExists(selectedProduct);\n \n });\n };\n\n $scope.selectProduct = function (prescriptionId, productId) {\n $scope.productMap[prescriptionId] = productId;\n };\n\n $scope.isSubSelected = function(prescriptionId) {\n var checkboxes = document.getElementsByName('substitude' + prescriptionId),\n i = checkboxes.length - 1;\n for (; i > -1 ; i--) {\n if (checkboxes[i].checked) { return true; }\n }\n return false;\n }\n\n $scope.getSelectedProduct = function (prescriptionId) {\n return $scope.productMap[prescriptionId];\n }\n\n $scope.getPrescriptionsAddedToBasket = function () {\n var json = $('div[data-controller-model]').attr('data-controller-model');\n $scope.model = angular.fromJson(json.toString());\n\n var basketJson = $('#BasketController').attr('data-basket');\n //var basket = angular.fromJson(basketJson.toString()); todo this was not working earlier, maybe it should be fixed to give customers better guidance\n\n $scope.prescriptionIdsInBasket = GetPrescriptionIdsFromBasket(basket);\n\t\t};\n\n\t\t$scope.validateAndAddCprNr = function (cpr, connectToClubMember) {\n\t\t $scope.showValidationMessages = true;\n\t\t prescriptionService.validateAndAddCprNr(cpr, connectToClubMember)\n .then(function (data) {\n if (!data.data.HasError){\n location.href = data.data.ResultObj;\n }\n else {\n alert(data.data.Messages[0]);\n }\n\t\t });\n\t\t}\n\n\t\t$scope.doesBasketContainPrescriptionProduct = function (prescriptionId) {\n\t\t\treturn _.contains($scope.prescriptionIdsInBasket, prescriptionId);\n };\n\n\t\t$scope.$on('basketModelUpdate', function (event, model) {\n $scope.basket = model;\n\t });\n\n $scope.areSubstitudesVisible = function (prescriptionId) {\n return $scope.visiblePrescriptionSubstitutes.indexOf(prescriptionId) > -1;\n }\n\n $scope.togglePrescriptionSubstitudeVisiblity = function(prescriptionId) {\n var index = $scope.visiblePrescriptionSubstitutes.indexOf(prescriptionId);\n if (index > -1) {\n $scope.visiblePrescriptionSubstitutes.splice(index, 1);\n } else {\n $scope.visiblePrescriptionSubstitutes.push(prescriptionId);\n }\n }\n\n $scope.setSelectedPrescription = function (selectedPrescription) {\n $scope.selectedPrescription = selectedPrescription;\n if (history.pushState) {\n history.pushState(\n {\n id:'receipt-details',\n prescription: selectedPrescription\n }, \n 'Recept detaljer',\n document.location.href\n );\n } \n window.scrollTo({top: 0});\n }\n\n $scope.deselectPrescription = function () {\n $scope.selectedPrescription = null;\n }\n\n $scope.prescriptionBackButtonClick = function () {\n if (history.pushState) {\n window.history.back();\n } else {\n $scope.deselectPrescription\n }\n }\n\n $scope.closeOverlay = function () {\n $scope.modalInstance.close();\n }\n\n $scope.formatFilter = function (filter) {\n var trimmed = filter.replace(\"mod \", \"\");\n var capitalized = trimmed.substring(0, 1).toUpperCase() + trimmed.substring(1);\n return capitalized;\n }\n\n $scope.openFiltersModal = function () {\n var uniqueFilters = [\"Alle\"];\n\n for (var i = 0; i < $scope.model.prescriptionProducts.length; i++) {\n var indicationText = $scope.model.prescriptionProducts[i].indicationText;\n if (!uniqueFilters.includes(indicationText)) {\n uniqueFilters.push(indicationText);\n }\n }\n $scope.uniqueFilters = uniqueFilters;\n $scope.modalInstance = $modal.open({\n templateUrl: '/partials/prescriptions/filters',\n controller: 'prescriptionController',\n size: 'lg',\n scope: $scope,\n });\n }\n\n $scope.selectFilter = function (filter) {\n if (filter.toLowerCase() === \"alle\") {\n $scope.model.selectedPrescriptionFilter = \"\";\n } else {\n $scope.model.selectedPrescriptionFilter = filter;\n }\n }\n\n $scope.filterPrescriptions = function (value, index, array) {\n // If neither filter nor status is selected\n if (!$scope.model.selectedPrescriptionFilter) {\n return true;\n }\n\n // If only indication is selected\n if ($scope.model.selectedPrescriptionFilter) {\n if ($scope.model.selectedPrescriptionFilter === value.indicationText) {\n return true;\n }\n }\n\n return false;\n }\n\n $scope.resetFilters = function () {\n $scope.model.selectedPrescriptionFilter = \"\";\n }\n\n $scope.scrollToWidgets = function () {\n var yPos = $(\".sidebar\").position().top;\n window.scrollTo({ top: yPos, behavior: 'smooth' });\n }\n\n $scope.openPrescriptionDetailsModal = function () {\n $scope.selectedPrescriptionModel = $scope.selectedPrescription;\n $scope.modalInstance = $modal.open({\n templateUrl: '/partials/prescriptions/details',\n controller: 'prescriptionController',\n size: 'lg',\n scope: $scope,\n });\n }\n\n $scope.openLowestPriceModal = function () {\n $scope.modalInstance = $modal.open({\n templateUrl: '/partials/prescriptions/lowestprice',\n controller: 'prescriptionController',\n size: 'lg',\n scope: $scope,\n });\n }\n\n $scope.openEffectuationsInfoModal = function () {\n $scope.selectedPrescriptionModel = $scope.selectedPrescription;\n $scope.modalInstance = $modal.open({\n templateUrl: '/partials/prescriptions/effectuationsinfo',\n controller: 'prescriptionController',\n size: 'lg',\n scope: $scope,\n });\n }\n\n $scope.openPowerStepModalIfComplimentaryProductExists = function (prescriptionProduct) { \n $scope.selectedPrescriptionProduct = prescriptionProduct;\n $scope.complimentaryProductData = null;\n \n prescriptionService.getComplimentaryProductsInformations(prescriptionProduct.sku)\n .then(function (responseData) {\n var data = responseData.data;\n\n if (data.HasError || (!data.headline && !data.raptorMerchandiseId)) {\n return\n }\n $scope.complimentaryProductData = data;\n\n $scope.modalInstance = $modal.open({\n templateUrl: '/partials/prescriptions/powerstep',\n controller: 'prescriptionController',\n size: 'lg',\n scope: $scope,\n }); \n });\n }\n\n $scope.togglePrescriptionDetailsDesktop = function () {\n $scope.showPrescriptionDetailsDesktop = !$scope.showPrescriptionDetailsDesktop;\n }\n\n $scope.expanded = false;\n $scope.readMoreText = \"Læs mere\";\n\n $scope.getPreviewText = function(toggle) {\n var text = $scope.complimentaryProductData && $scope.complimentaryProductData.longText;\n \n if (!text) return ''; \n \n text = text.replace(/<\\/?p>/g, '');\n \n var shouldTruncate = window.innerWidth < 991 && text.length > 90;\n $scope.shouldShowToggle = shouldTruncate;\n\n if (toggle) {\n $scope.expanded = !$scope.expanded;\n }\n\n $scope.readMoreText = $scope.expanded ? \"Læs mindre\" : \"Læs mere\";\n \n return shouldTruncate && !$scope.expanded ? text.substring(0, 90) : text;\n };\n\t}]);\n","angular.module('site.services')\n.factory('preventGetRequestCachingInterceptor', ['config', function (constants) {\n return {\n 'request': function (config) {\n if (config.method === \"GET\" && config.url && config.url.indexOf(\"http\") == 0){\n if (!config.params){\n config.params = {};\n }\n config.params.no_cache = new Date().getTime();\n }\n return config;\n }\n };\n}]);\n","angular.module('site.services')\n .factory('preventTemplateCacheInterceptor', ['config', function (constants) {\n return {\n 'request': function (config) {\n if (config.url.indexOf('dist/templates') !== -1) {\n config.url = config.url + '?v=' + constants.appVersion;\n }\n return config;\n }\n };\n }]);\n","angular.module('site.controllers')\n\t.controller('productController', ['$scope', '$rootScope', '$timeout', '$filter', '$q', '$modal', '$modalStack'\n\t\t, 'basketService', 'reviewService', 'smoothScroll', 'searchService', 'userService', 'tagManagerService',\n\t\tfunction ($scope, $rootScope, $timeout, $filter, $q, $modal, $modalStack, basket, reviewService, smoothScroll, searchService, userService, tagManagerService) {\n\t\t\t$scope.defaultQuantity = 1;\n $scope.debounceTimeout;\n $scope.prevQuantity = 1;\n $scope.incrementValue = 0;\n\n\t\t\tif ($scope.product && $scope.product.quantity) {\n\t\t\t\t$scope.defaultQuantity = $scope.product.quantity || 1;\n\t\t\t}\n\n\t\t\t$scope.init = function (countDownTime, sameDayCountDownText) {\n\t\t\t\tvar analyticsProductJson = $('#product-detail-container').attr('data-product');\n\t\t\t\t$scope.analyticsProduct = angular.fromJson(analyticsProductJson.toString());\n $scope.sameDayCounter(countDownTime, sameDayCountDownText);\n\t\t\t}\n\t\t\t$scope.resetQuantity = function (event) {\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\t$scope.quantity = $scope.defaultQuantity;\n\t\t\t};\n\n\t\t\t$scope.isClubMember = userService.isClubMemberSession();\n\n\t\t\t$scope.isActive = [{ active: true }, { active: false }, { active: false }];\n\n\t\t\t$scope.resetQuantity();\n\n\t\t\t$scope.updateBasket = function (id, quantity, event, type, product, tagManagerProperties, relatedProductSkus) {\n $scope.prevQuantity = quantity;\n\n\t\t\t\ttype = (typeof type === 'undefined') ? null : type;\n\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tif ($scope.pending) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$scope.pending = true;\n\t\t\t\tbasket.update(id, quantity).then(function (results) {\n // $rootScope.optimistic.quantity = quantity;\n if (product) {\n if (type == 'addToCart'){\n product.quantity = quantity;\n }\n tagManagerService.updateDataLayer(type, product, tagManagerProperties);\n }\n\t\t\t\t\t$scope.resetQuantity();\n\t\t\t\t\t$scope.pending = false;\n\n\t\t\t\t\t// when clicking add to basket button\n\t\t\t\t\tif (type === 'addToCart') {\n\t\t\t\t\t\t$scope.order = results.data;\n\t\t\t\t\t\t$scope.itemsAddedCount = quantity;\n\n\t\t\t\t\t\tvar orderLines = $scope.order.orderLines;\n\t\t\t\t\t\t// find last added product\n\t\t\t\t\t\t$rootScope.lastAddedItem = _.findWhere(orderLines, { sku: id.toString() });\n\n\t\t\t\t\t\t// display dialog\n\t\t\t\t\t\t$timeout(function () {\n\t\t\t\t\t\t\t$scope.openRelatedProductsModel('lg', relatedProductSkus);\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t};\n\n\t\t\t$scope.removePrescriptionProduct = function (id, prescriptionId, event) {\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tif ($scope.pending) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$scope.pending = true;\n\t\t\t\tbasket.updatePrescriptionProduct(id, 0, prescriptionId).then(function () {\n\t\t\t\t\t$scope.resetQuantity();\n\t\t\t\t\t$scope.pending = false;\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t$scope.removeFromBasket = function (id, prescriptionId, product, event) {\n\t\t\t\tif (prescriptionId) {\n\t\t\t\t\t$scope.removePrescriptionProduct(id, prescriptionId, event);\n\t\t\t\t} else {\n\t\t\t\t\tvar gtmProduct = tagManagerService.mapBasketProduct(product);\n\n\t\t\t\t\t$scope.updateBasket(id, 0, event, 'removeFromCart', gtmProduct);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t$scope.openRelatedProductsModel = function (size, relatedProductSkus) {\n\t\t\t\tvar query = {\n\t\t\t\t\tskus: relatedProductSkus,\n\t\t\t\t\tisClubMember: $scope.isClubMember\n\t\t\t\t};\n\n\t\t\t\t$modalStack.dismissAll();\n\t\t\t\tvar modalInstance = $modal.open({\n\t\t\t\t\ttemplateUrl: '/partials/checkout/addToBasketDialog',\n\t\t\t\t\tcontroller: 'modelInstanceController',\n\t\t\t\t\tsize: size,\n\t\t\t\t\tresolve: {\n\t\t\t\t\t\torder: function () {\n\t\t\t\t\t\t\treturn $scope.order;\n\t\t\t\t\t\t},\n\t\t\t\t\t\titemsAddedCount: function () {\n\t\t\t\t\t\t\treturn $scope.itemsAddedCount;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlastAddedItem: function () {\n\t\t\t\t\t\t\treturn $rootScope.lastAddedItem;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n scope: $scope,\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t$scope.openSubscriptionFlowNew = function (sku) {\n\t\t\t\t$rootScope.$broadcast('open-subscription-flow-new', sku);\n\n\t\t\t\t$timeout(function () {\n\t\t\t\t\tdeliverIntervalsDialogbox();\n\t\t\t\t\tdatepicker();\n\t\t\t\t\tstartDateMask();\n\t\t\t\t\toverlays();\n\t\t\t\t}, 0);\n\t\t\t};\n\n\t\t\t$scope.openSubscriptionFlowExisting = function (subId, sku) {\n\t\t\t\tvar args = {\n\t\t\t\t\tSubId: subId,\n\t\t\t\t\tSku: sku\n\t\t\t\t};\n\t\t\t\t$rootScope.$broadcast('open-subscription-flow-existing', args);\n\n\t\t\t\t$timeout(function () {\n\t\t\t\t\toverlays();\n\t\t\t\t}, 0);\n\t\t\t};\n\n\t\t\t$timeout(function () {\n\t\t\t\t$scope.initAnim = true;\n\t\t\t}, 10);\n\n $scope.sameDayCounter = function (countDownTime, text)\n {\n if (!countDownTime)\n {\n return\n }\n\n var countDownDate = new Date(countDownTime).getTime();\n var x = setInterval(function() {\n\n // Get today's date and time\n var now = new Date().getTime();\n\n // Find the distance between now and the count down date\n var distance = countDownDate - now;\n\n // Time calculations for days, hours, minutes and seconds\n var days = Math.floor(distance / (1000 * 60 * 60 * 24));\n var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n var seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\n // Output the result in an element with id=\"demo\"\n var h = hours > 0 ? hours + \"t \": '';\n var m = minutes > 0 ? minutes + \"m \": '';\n\n var txt = '' + h + m +seconds + \"s \"+'';\n var split = text.split('|');\n if (split.length == 2)\n {\n txt = split[0] + ''+h + m + seconds + \"s \"+'' + split[1];\n }\n\n document.getElementById(\"sameDayCountDownTime\").innerHTML = txt;\n\n if (distance < 0) {\n clearInterval(x);\n document.getElementById(\"sameDayCountDownTime\").parentElement.parentElement.innerHTML = \"\";\n }\n }, 1000);\n }\n\t\t}]);\n","angular.module('site.services')\n .factory('raptorProductService', ['config', '$http', '$rootScope', '$q', '$cookies', 'identityService', '$window', function (config, $http, $rootScope, $q,\n $cookies, identityService, $window) {\n return {\n userRecommendations: function (numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetUserRecommendations/' + numberOfRecommendations,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n mostPopularRightNow: function (numberOfRecommendations) {\n var promis = $http({\n url: config.serviceApi.raptorProducts + '/GetMostPopularRightNow/' + numberOfRecommendations,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n }).then(\n function successCallback(response) {\n return response;\n }\n );\n return promis\n },\n topSellingInCategory: function (categoryId, numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetTopSellingInCategory/' + numberOfRecommendations + '/' + categoryId,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n similarItems: function (productId, numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetSimilarItems/' + numberOfRecommendations + '/' + productId,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n relatedItems: function (productId, numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetRelatedItems/' + numberOfRecommendations + '/' + productId,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n relatedItemsForBasket: function (productIdsCsv, numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetRelatedItemsForBasket/' + numberOfRecommendations + '/' + productIdsCsv,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n userTopSellingItems: function (numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetUserTopSellingItems/' + numberOfRecommendations,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n overallTopSellingXDays: function (numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetOverallTopSellingXDays/' + numberOfRecommendations,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n cookieHistory: function (numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetCookieHistory/' + numberOfRecommendations,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n campaignItems: function (numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetCampaignItems/' + numberOfRecommendations,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n content2Products: function (contentId, numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetContent2Products/' + numberOfRecommendations + '/' + contentId,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n product2Contents: function (productId, numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetProduct2Contents/' + numberOfRecommendations + '/' + productId,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n topViewedInCategory: function (categoryId, numberOfRecommendations) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetTopViewedInCategory/' + numberOfRecommendations + '/' + categoryId,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n getMerchandisingProducts: function (numberOfRecommendations, merchandisingId) {\n return $http({\n url: config.serviceApi.raptorProducts + '/GetMerchandisingProducts/' + numberOfRecommendations + '/' + merchandisingId,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken,\n \"X-Raptor-CookieId\": $cookies.get('rsa')\n }\n });\n },\n }\n }]);\n","angular.module('site.directives')\n .component('receipt', {\n restrict: 'E',\n bindings: {\n information: '<',\n order: '<',\n clubFrontpageLink: '@',\n saadanHandlerDuLink: '@'\n },\n controller: ['$scope','config', 'receiptService', function ($scope, config, receipt) {\n\n $scope.model = {\n information: null,\n pending: true,\n retryFailed: false\n };\n\n this.$onInit = function() {\n receipt\n .receipt(this.order)\n .then(function (response) {\n if (response) {\n if (response && response.data && response.data.order && response.data.order != null) {\n $scope.model.information = response.data;\n var skus = [];\n for (i = 0; i < response.data.order.orderLines.length; i++) {\n skus.push(response.data.order.orderLines[i].sku);\n }\n $scope.model.isTracked = response.data.order.isTracked;\n $scope.model.pending = false;\n\n } else {\n $scope.model.pending = false;\n $scope.model.retryFailed = true;\n }\n }\n else{\n window.location.reload(true);\n }\n }, function (data) {\n // called asynchronously if an error occurs\n // or server returns response with an error status.\n $scope.model.pending = false; // don't do this in .always(), as we would like the spinner while redirecting\n $scope.model.retryFailed = true;\n });\n\n $scope.model.clubFrontpageLink = this.clubFrontpageLink;\n $scope.model.saadanHandlerDuLink = this.saadanHandlerDuLink;\n };\n\n this.$onChanges = function (changes) {\n if (changes.information)\n $scope.model.information = changes.information.currentValue;\n };\n }],\n templateUrl: '/dist/templates/directives/receipt.tpl.html'\n });\n","angular.module('site.services')\n .factory('responseInterceptorService', ['$rootScope', '$q', function ($rootScope, $q) {\n return {\n 'responseError': function (response) {\n console.log(response);\n // To avoid showing useless errors in UI because of cancelled search requests\n if (response.xhrStatus === \"abort\") {\n return;\n }\n\n if (response.status && response.status === 500)\n {\n $rootScope.$broadcast('responseInterceptorError', 'Der er desværre sket en fejl');\n }else{\n\n if (response.status && response.status === 401) {\n // don't wan't a broadcast for this\n } else if (response.data && response.data.message) {\n $rootScope.$broadcast('responseInterceptorError', response.data.message);\n } else if (response.data && response.data.messages) {\n $rootScope.$broadcast('responseInterceptorError', response.data.messages);\n } else if (response.data && response.data.Message) {\n $rootScope.$broadcast('responseInterceptorError', response.data.Message);\n } else if (response.status && response.status !== 404) {\n var msg = response.data;\n\n if (response.data) {\n if (response.data.responseStatus && response.data.responseStatus.message) {\n msg = response.data.responseStatus.message;\n } else if (response.data.responseStatus) {\n msg = response.data.responseStatus;\n }\n }\n\n if (msg === null)\n {\n msg = 'Der er desværre sket en fejl';\n }\n\n $rootScope.$broadcast('responseInterceptorError', [{ message: msg }]);\n }}\n\n return $q.reject(response);\n }\n };\n }]);\n","angular.module('site.controllers')\n .controller('reviewController', ['$scope', '$http', '$timeout', 'reviewService', function ($scope, $http, $timeout, reviewService) {\n\n $scope.showValidationMessages = false;\n $scope.submitted = false;\n $scope.showMessage = false;\n\n $scope.rating = -1; // set start rating value (user haven't chosen a value)\n $scope.maxRating = 5;\n $scope.reviews = [];\n\n // http://stackoverflow.com/questions/21453697/angularjs-access-parent-scope-from-child-controller\n //$scope.parentReviews = $scope.reviews;\n\n $scope.getReviews = function (sku) {\n\n reviewService.getReviews(sku).then(function (data) {\n $scope.reviews = data.data;\n //console.log($scope.reviews);\n });\n };\n\n $scope.addReview = function (sku, headline, text, rating) {\n \n $scope.showValidationMessages = true;\n \n // check if rating value is valid 1-5 (starting with -1) - if invalid form will be invalid\n $scope.isValidRating();\n\n // don't submit form if invalid\n if ($scope.reviewForm.$invalid) {\n return false;\n }\n\n $scope.submitted = true;\n\n if ((headline != undefined && headline != \"\") && (text != undefined && text != \"\") && (rating != undefined && rating > 0)) {\n\n $scope.showValidationMessages = false;\n\n reviewService.addReview(sku, headline, text, rating)\n .then(function (data) {\n $scope.resetReviewForm();\n\n $scope.showMessage = true;\n\n // show success message\n $timeout(function () {\n $scope.showMessage = false;\n }, 3000);\n }); \n }\n };\n \n $scope.isValidRating = function () {\n var isValidRating = false;\n\n $scope.$watch('rating', function (newVal, oldVal) {\n //console.log(\"Before: \" + oldVal + \", After: \" + newVal); \n if (newVal > 0 && newVal <= $scope.maxRating) {\n isValidRating = true;\n };\n \n // set validationErrorKey\n $scope.reviewForm.rating_value.$setValidity('rating', isValidRating);\n }, true);\n };\n\n $scope.resetReviewForm = function () {\n $scope.headline = '';\n $scope.text = '';\n $scope.rating = -1;\n };\n \n $scope.init = function (sku) {\n $scope.getReviews(sku);\n };\n\n}]);\n","angular.module('site.controllers')\n .controller('searchController', ['$scope', '$location', '$window', 'urlHelperService', 'searchService', 'gaTrackingService',\n 'userService', 'tagManagerService', '$timeout',\n function ($scope, $location, $window, urlHelper, search, gaTracking, userService, tagManagerService, $timeout) {\n\n function CapitalizeString(text) {\n return text.charAt(0).toUpperCase() + text.slice(1);\n }\n\n $scope.init = function (params) {\n $scope.categoryId = params.categoryId;\n $scope.categoryName = params.categoryName;\n $scope.isClubMember = params.isClubMember;\n $scope.isCategory = params.isCategory;\n $scope.isBrand = params.isBrand;\n $scope.hasAnyParam();\n }\n\n $scope.updateParam = function (event, param, value, isSingleValue, encode) {\n event.preventDefault();\n urlHelper.updateParam(param, value, isSingleValue, encode);\n };\n $scope.hasParam = function (param, value, encode) {\n return urlHelper.hasParam(param, value, encode) || urlHelper.hasParam(CapitalizeString(param), value, encode) || urlHelper.hasParam(param.toLowerCase(), value, encode);\n };\n $scope.hasAnyParam = function () {\n return Object.keys(urlHelper.getParamsFromPath($location.path())).length > 1;\n };\n $scope.getTotalFacetCount = function () {\n return Object.keys(urlHelper.getParamsFromPath($location.path())).length;\n };\n $scope.isFacetActive = function (facetName) {\n return urlHelper.hasFacet(facetName);\n };\n $scope.getFacetCount = function (facetName) {\n return urlHelper.getFacetCount(facetName);\n };\n $scope.isLastFacet = function (facetName) {\n return urlHelper.getLastFacet(facetName) === facetName;\n };\n $scope.resetParams = function (event) {\n if (event) {\n event.preventDefault();\n }\n return urlHelper.resetParamsExcept('term');\n };\n $scope.resetSpecificParams = function (params) {\n return urlHelper.resetSpecificParams(params);\n };\n $scope.createPageRange = function (pageCount) {\n if (!pageCount || isNaN(parseInt(pageCount, 10))) {\n return;\n }\n var pages = [];\n for (var i = 1; i <= pageCount; i++) {\n pages.push(i);\n }\n return pages;\n };\n\n $scope.computeProductRepeaterIndex = function (index, model) {\n return index + ((model.paging.page - 1) * model.paging.pageSize);\n }\n\n $scope.setProductListPosition = function (index) {\n return index + 1;\n }\n\n $scope.setItemList = function()\n {\n var items = $scope.model.products.map(function(elm, i)\n {\n var tmp = i+1;\n return {\n \"@type\":\"ListItem\",\n \"url\": \"https://www.webapoteket.dk\"+elm.url,\n \"position\": tmp\n }\n });\n\n var data = {\n \"@context\": \"http://schema.org\",\n \"@type\": \"ItemList\",\n \"itemListElement\": items\n }\n\n var id = \"itemListSchema\";\n var elm = document.getElementById(id);\n if (elm) {\n document.body.removeChild(elm);\n }\n\n var scriptElemn = document.createElement('script');\n scriptElemn.setAttribute(\"id\", id);\n scriptElemn.setAttribute(\"type\", \"application/ld+json\");\n scriptElemn.setAttribute(\"innerHTML\", JSON.stringify(data));\n\n document.body.appendChild(scriptElemn);\n }\n\n $scope.handleLocationChange = function () {\n $scope.isLoading = true;\n var query = urlHelper.getParamsFromPath($location.path());\n var profileType = 'Standard';\n if (userService.isClubMemberSession()) {\n profileType = 'ClubMember';\n }\n else if (userService.isPremiumMemberSession()) {\n profileType = 'Premium';\n }\n\n if ($scope.categoryId) {\n query = _.extend({ categoryId: $scope.categoryId, profileType: profileType, isCategory: $scope.isCategory, isBrand: $scope.isBrand }, query);\n }\n\n if (query.term) {\n query = _.extend({ profileType: profileType }, query);\n }\n\n if ($scope.onlyOutlet) {\n query = _.extend({ onlyOutlet: $scope.onlyOutlet }, query);\n }\n\n if (query.term || query.categoryId || query.onlyOutlet) {\n $scope.model = $scope.model || {};\n\n var searchType = 'catalog';\n if ($location.absUrl().includes('soeg')) {\n searchType = 'catalogSearch';\n }\n search[searchType](query, profileType).then(function (xhr) {\n $scope.model.products = xhr.data.products;\n $scope.model.facets = xhr.data.facets;\n $scope.model.paging = xhr.data.paging;\n $scope.isLoading = false;\n\n $scope.setItemList();\n\n var tagManagerProducts = $scope.model.products.map(function (p, i) {\n return tagManagerService.mapSearchProduct(p, i);\n });\n\n var list = $scope.categoryName;\n if (query.term) {\n list = 'Søgeresultat';\n }\n\n // On 1st level category pages (Section.cshtml), scroll to top of /partials/category/products on page navigation or filtering\n var sectionProductsHeadingElem = document.querySelector('#section-products-heading');\n\n if (sectionProductsHeadingElem && $scope.notFirstRequest) {\n sectionProductsHeadingElem.scrollIntoView({behavior: \"smooth\", block: \"center\" });\n }\n $scope.notFirstRequest = true;\n\n tagManagerService.updateDataLayerWithImpressions(tagManagerProducts, list);\n });\n\n } else {\n $scope.isLoading = false;\n $scope.model = $scope.model || {};\n $scope.model.paging = { totalResults: 0 };\n }\n $scope.searchTerm = query.term && query.term.length ? query.term[0] : '';\n\n // Push a normal page view tracking, to hook up to GA's site search analysis\n if (!$scope.category && $scope.searchTerm) {\n gaTracking.siteSearch($scope.searchTerm);\n }\n };\n\n $scope.$on('$locationChangeSuccess', $scope.handleLocationChange);\n }]);\n","angular.module('site.services')\n .factory('shippingService', ['config', '$http', 'identityService', function (config, $http, identityService) {\n\t\tvar service = {\n\t getSettings: function () {\n console.log(\"getSettings\");\n return $http({\n url: basketServiceUrl+'/api/shipping/settings', \n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer '+ identityService.accessToken\n }\n });\n },\n getSettingsForSubscription: function (sku, quantity) {\n console.log(\"getSettingsForSubscription\");\n return $http({\n url: basketServiceUrl+'/api/shipping/settingsforsubscriptions?sku='+sku+'&quantity='+quantity, \n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer '+ identityService.accessToken\n }\n });\n },\n getSettingsForExistingSubscription: function (subscriptionId) {\n console.log(\"getSettingsForExistingSubscription\");\n return $http({\n url: basketServiceUrl+'/api/shipping/settingsforsubscription?subscriptionid='+subscriptionId, \n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer '+ identityService.accessToken\n }\n });\n },\n getSettingsForSubscriptionDelivery: function (subscriptionDeliveryId) {\n console.log(\"getSettingsForSubscriptionDelivery CALLING NEW ENDPOINT\");\n return $http({\n url: basketServiceUrl+'/api/shipping/settingsforsubscriptiondelivery?subscriptionDeliveryId='+subscriptionDeliveryId, \n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer '+ identityService.accessToken\n }\n });\n },\n getShippingCountries: function (){\n console.log(\"getShippingCountries\");\n return $http({\n url: basketServiceUrl+'/api/shipping/countries',\n method: 'GET',\n headers:{\n 'Authorization': 'Bearer' + identityService.accessToken\n }\n });\n }\n\t\t};\n\t return service;\n\t}]);\n","angular.module('site.controllers')\n\t.controller('shippingInfoController', ['$scope', '$filter', '$timeout', '$cookieStore', '$localStorage', 'shippingInfoService', 'utilitiesService', 'basketService'\n\t\t, 'userService', 'smoothScroll', '$window', 'identityService', 'config', '$http', 'tagManagerService', function ($scope, $filter, $timeout, $cookieStore, $localStorage, shippingInfo, utilities,\n\t\t\tbasket, user, smoothScroll, $window, identityService, config, $http, tagManagerService) {\n\n\t\t\t// variables\n\t\t\t$scope.showValidationMessages = false;\n\t\t\t$scope.pending = false;\n\t\t\t$scope.validShippingMethods = true;\n\n $scope.displayLoginBox = false;\n $scope.foundUser = false;\n $scope.foundReceiveAdvantage = false;\n\n\t\t\t$scope.shippingStepModel = {\n\t\t\t\ttype: {\n\t\t\t\t\talias: null\n\t\t\t\t},\n\t\t\t\tmethod: {\n\t\t\t\t\ttitle: null,\n\t\t\t\t\talias: null\n\t\t\t\t},\n\t\t\t\tpickupPoint: null,\n\t\t\t\tacceptTerms: false,\n\t\t\t\trequiresAdult: false,\n\t\t\t\trequiresAdultAccepted: false,\n noteForDelivery: '',\n noteForDeliveryErrorText : ''\n\t\t\t};\n\n\t\t\t$scope.pickupFormModel = {\n\t\t\t\tpostalCode: null,\n\t\t\t\tstreet: null,\n\t\t\t\tzipErrorMessage: false,\n\n\t\t\t\tloadingDeliveryLocations: false,\n\t\t\t\tpickupDestinations: [],\n\n\t\t\t\tshowMorePickupDestinationsButton: false,\n\t\t\t\tshowFewerPickupDestinationsButton: false\n\t\t\t};\n\n\t\t\t// function\n\t\t\t$scope.initCheckoutModel = function () {\n\t\t\t\tvar json = $('div[data-controller-model]').attr('data-controller-model');\n\t\t\t\t$scope.model = angular.fromJson(json.toString());\n\n\t\t\t\t// set default props based on basket api viewmodel preselcted values\n\t\t\t\t//$scope.shippingStepModel.type.alias = ($scope.model.shipping.preSelectedTypeAlias || '').toLowerCase();\n\t\t\t\tif ($scope.model.customerInformation.customerType == 1 || ($scope.model.customerInformation.billingAddress.eanNumber != null && $scope.model.customerInformation.billingAddress.eanNumber.length == 13)) {\n\t\t\t\t\t$scope.shippingStepModel.type.alias = (\"toaddress\" || '').toLowerCase();\n\t\t\t\t\tvar preselectedType = $scope.model.shipping.shippingTypes.filter(function (t) {\n\t\t\t\t\t\treturn t.alias.toLowerCase() === $scope.shippingStepModel.type.alias;\n\t\t\t\t\t})[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$scope.shippingStepModel.type.alias = ($scope.model.shipping.preSelectedTypeAlias || '').toLowerCase();\n\t\t\t\t\tvar preselectedType = $scope.model.shipping.shippingTypes.filter(function (t) {\n\t\t\t\t\t\treturn t.alias.toLowerCase() === $scope.shippingStepModel.type.alias;\n\t\t\t\t\t})[0];\n\n\t\t\t\t}\n\n\t\t\t\t$scope.pickupFormModel.postalCode = $scope.model.customerInformation.shippingAddress.postalCode;\n\t\t\t\t$scope.pickupFormModel.street = $scope.model.customerInformation.shippingAddress.line1;\n\n\t\t\t\tif (preselectedType) {\n\t\t\t\t\t$scope.setShippingType(preselectedType, true, true);\n\t\t\t\t}\n\n\t\t\t\t// Update dataLayer\n\t\t\t\tvar products = $scope.model.basket.orderLines.map(tagManagerService.mapBasketProduct);\n\t\t\t\ttagManagerService.updateDataLayer('checkout', products, { step: 2 })\n\n\t\t\t\t$scope.shippingStepModel.requiresAdult = $scope.model.basket.requiresAdult;\n\n if (($scope.model.shipping && !$scope.model.shipping.shippingTypes))\n $scope.validShippingMethods = false;\n\n if ($scope.validShippingMethods && $scope.model.shipping.shippingTypes && $scope.model.shipping.shippingTypes.length < 1)\n $scope.validShippingMethods = false;\n\n if ($scope.validShippingMethods) {\n var found = false;\n $scope.model.shipping.shippingTypes.filter(function(s){\n if(s.shippingMethods.length > 0) {\n found = true;\n return s;\n }\n });\n\n $scope.validShippingMethods = found;\n }\n\n if($scope.model.customerInformation.billingAddress.email){\n $scope.displayLoginBox = true;\n user\n .findUserByEmail($scope.model.customerInformation.billingAddress.email)\n .then(function(resp){\n if(resp && resp.data){\n $scope.foundUser = resp.data;\n $scope.foundReceiveAdvantage = resp.data.receiveAdvantage;\n }\n }, function(error) {\n $scope.pendingFindUser = false;\n });\n }\n };\n\n\t\t\t$scope.getRetinaImage = function (src, dpr) {\n\t\t\t\tif (src == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (src.indexOf('http') > -1)\n\t\t\t\t\treturn src;\n\n\t\t\t\tif (dpr == 2 || dpr == 3) {\n\t\t\t\t\tsrc = src.replace(/@2x\\./, '.');\n\t\t\t\t\tsrc = src.replace(/(\\.\\w+$)/, '@' + dpr + 'x$1');\n\t\t\t\t}\n\n\t\t\t\treturn '/Layout/gfx/delivery-methods/' + src;\n\n\t\t\t};\n\n\t\t\t$scope.setShippingType = function (shippingType, recalculateBasket, getPickupPoints) {\n\t\t\t\t$scope.shippingStepModel.type.alias = shippingType.alias;\n\n\t\t\t\t// select preselected delivery method for particular shipping type\n var preselectedMethod;\n if (shippingType.shippingMethods && shippingType.preSelectedMethodAlias)\n preselectedMethod = shippingType.shippingMethods.filter(function (m) {\n return m.alias.toLowerCase() === shippingType.preSelectedMethodAlias.toLowerCase();\n\t\t\t\t})[0];\n\n if(preselectedMethod) {\n $scope.shippingStepModel.method.title = preselectedMethod.title;\n $scope.shippingStepModel.method.alias = preselectedMethod.alias;\n }\n\t\t\t\t$scope.shippingStepModel.pickupPoint = null;\n\n\t\t\t\t// if pickup point, then set pickup form values\n\t\t\t\tif (getPickupPoints && preselectedMethod && $scope.shippingStepModel.type.alias.toLowerCase() === 'pickuppoint') {\n\t\t\t\t\t$scope.getPickupDestinations();\n\t\t\t\t}\n\n\t\t\t\tif (recalculateBasket) {\n\t\t\t\t\t$scope.calculateBasketTotal();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t$scope.isSelectedToaddressPostNord = function (shippingType, shippingMethod){\n return shippingType.alias.toLowerCase() === 'toaddress' &&\n shippingMethod.alias.toUpperCase().indexOf('MYPACK_HOME') >= 0 &&\n $scope.shippingStepModel.method.alias === shippingMethod.alias\n }\n\n $scope.checkNoteLength = function() {\n $scope.shippingStepModel.noteForDeliveryErrorText = '';\n\t\t\t if ($scope.shippingStepModel.noteForDelivery.length < 40)\n\t\t\t return;\n\n\t\t\t $scope.shippingStepModel.noteForDelivery = $scope.shippingStepModel.noteForDelivery.substr(0,39);\n $scope.shippingStepModel.noteForDeliveryErrorText = 'Obs. max 40 tegn.';\n }\n\n\t\t\t$scope.setShippingMethod = function (shippingType, shippingMethod) {\n\n\t\t\t\t$scope.setShippingType(shippingType, false, false);\n\n\t\t\t\t$scope.shippingStepModel.method.title = shippingMethod.title;\n\t\t\t\t$scope.shippingStepModel.method.alias = shippingMethod.alias;\n\t\t\t\t$scope.shippingStepModel.pickupPoint = null;\n\n\t\t\t\t// if pickup point, then set pickup form values\n\t\t\t\tif (shippingType.alias.toLowerCase() === 'pickuppoint') {\n\t\t\t\t\t$scope.getPickupDestinations();\n\t\t\t\t}\n\n\t\t\t\tif ($scope.isSelectedToaddressPostNord(shippingType, shippingMethod) === false)\n $scope.shippingStepModel.noteForDelivery = '';\n\n\t\t\t\t$scope.calculateBasketTotal();\n\t\t\t};\n\n\t\t\t$scope.getCountryFromIsoCode = function (isoCode) {\n\t\t\t\tvar shippingCountryCode = isoCode,\n\t\t\t\t\tshippingCountry = _.find($scope.model.countries, function (country) {\n\t\t\t\t\t\treturn country.isoCode === shippingCountryCode;\n\t\t\t\t\t});\n\n\t\t\t\treturn shippingCountry;\n\t\t\t};\n\n\t\t\t$scope.getPickupDestinations = function () {\n\t\t\t\tif ($scope.pickupFormModel.postalCode == null) {\n\t\t\t\t\t$scope.pickupFormModel.zipCodeErrorMessage = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// reset validation error messages\n\t\t\t\t$scope.pickupFormModel.zipCodeErrorMessage = false;\n\n\t\t\t\t// set loading variables\n\t\t\t\t$scope.pickupFormModel.destIsSelected = false;\n\t\t\t\t$scope.pickupFormModel.loadingDeliveryLocations = true;\n\t\t\t\t$scope.shippingStepModel.pickupPoint = null;\n\t\t\t\t$scope.pickupFormModel.pickupDestinations = [];\n\n $scope.pickupDropPointsSuccess = true;\n\n\t\t\t\tshippingInfo.getPickupDestinations({\n\t\t\t\t\talias: $scope.shippingStepModel.method.alias,\n\t\t\t\t\taddress: $scope.pickupFormModel.street,\n\t\t\t\t\tzipCode: $scope.pickupFormModel.postalCode\n\t\t\t\t}).then(function (response) {\n\t\t\t\t\tvar data = response.data;\n\t\t\t\t\tif (data.destinations && data.destinations.length > 0) {\n\t\t\t\t\t\tfor (var index = 0; index < data.destinations.length; index++) {\n\t\t\t\t\t\t\tdata.destinations[index].visible = index < 5;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (data.destinations.length > 5) {\n\t\t\t\t\t\t\t$scope.pickupFormModel.showMorePickupDestinationsButton = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$scope.pickupFormModel.showMorePickupDestinationsButton = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$scope.pickupFormModel.pickupDestinations = data.destinations;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$scope.pickupFormModel.pickupDestinations = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\t$timeout(function () {\n\t\t\t\t\t\t$scope.pickupFormModel.loadingDeliveryLocations = false;\n\t\t\t\t\t}, 1000);\n\n\t\t\t\t}, function (error) {\n\t\t\t\t $timeout(function(){\n shippingInfo.getPickupDestinations({\n alias: $scope.shippingStepModel.method.alias,\n address: $scope.pickupFormModel.street,\n zipCode: $scope.pickupFormModel.postalCode\n }).then(function (response) {\n var data = response.data;\n if (data.destinations && data.destinations.length > 0) {\n for (var index = 0; index < data.destinations.length; index++) {\n data.destinations[index].visible = index < 5;\n }\n if (data.destinations.length > 5) {\n $scope.pickupFormModel.showMorePickupDestinationsButton = true;\n } else {\n $scope.pickupFormModel.showMorePickupDestinationsButton = false;\n }\n $scope.pickupFormModel.pickupDestinations = data.destinations;\n } else {\n $scope.pickupFormModel.pickupDestinations = undefined;\n }\n\n $timeout(function () {\n $scope.pickupFormModel.loadingDeliveryLocations = false;\n }, 1000);\n\n }, function (error) {\n $timeout(function () {\n $scope.pickupFormModel.loadingDeliveryLocations = false;\n $scope.pickupFormModel.pickupDestinations = undefined;\n $scope.pickupDropPointsSuccess = false;\n }, 1000);\n });\n },500);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t$scope.selectPickupDestination = function (pickupPoint, index) {\n\t\t\t\t$scope.pickupFormModel.destIsSelected = true;\n\t\t\t\t$scope.shippingStepModel.pickupPoint = {};\n\t\t\t\t$scope.shippingStepModel.pickupPoint.name = pickupPoint.name;\n\t\t\t\t$scope.shippingStepModel.pickupPoint.address = pickupPoint.address1;\n\t\t\t\t$scope.shippingStepModel.pickupPoint.postalCode = pickupPoint.zipCode;\n\t\t\t\t$scope.shippingStepModel.pickupPoint.city = pickupPoint.city;\n\t\t\t\t$scope.shippingStepModel.pickupPoint.stationId = pickupPoint.id;\n\t\t\t\t$scope.shippingStepModel.pickupPoint.uniqueId = pickupPoint.uniqueId;\n\t\t\t};\n\n\t\t\t$scope.showMorePickupDestinations = function () {\n\t\t\t\t$scope.pickupFormModel.pickupDestinations.forEach(function (entry) {\n\t\t\t\t\tentry.visible = true;\n\t\t\t\t});\n\t\t\t\t$scope.pickupFormModel.showMorePickupDestinationsButton = false;\n\t\t\t\t$scope.pickupFormModel.showFewerPickupDestinationsButton = true;\n\t\t\t};\n\n\t\t\t$scope.showFewerPickupDestinations = function () {\n\n\t\t\t\t$timeout(function () {\n\t\t\t\t\tfor (index = 0; index < $scope.pickupFormModel.pickupDestinations.length; index++) {\n\t\t\t\t\t\t$scope.pickupFormModel.pickupDestinations[index].visible = index < 5;\n\t\t\t\t\t}\n\n\t\t\t\t\t$scope.pickupFormModel.showMorePickupDestinationsButton = true;\n\t\t\t\t\t$scope.pickupFormModel.showFewerPickupDestinationsButton = false;\n\t\t\t\t}, 500);\n\n\t\t\t\t$timeout(function () {\n\t\t\t\t\tvar element = document.getElementById($scope.shippingStepModel.type.alias.toLowerCase() + '-methods-wrapper');\n\t\t\t\t\tsmoothScroll(element);\n\t\t\t\t}, 0);\n\t\t\t};\n\n\t\t\t$scope.goToPickPoint = function () {\n\t\t\t\tvar element = document.getElementById('pickuppoint');\n\t\t\t\tsmoothScroll(element);\n\t\t\t};\n\n\t\t\t$scope.calculateBasketTotal = function () {\n\t\t\t\tvar selectedType = $scope.model.shipping.shippingTypes.filter(function (t) {\n\t\t\t\t\treturn t.alias.toLowerCase() === $scope.shippingStepModel.type.alias.toLowerCase();\n\t\t\t\t});\n\n\t\t\t\tif (selectedType.length === 0) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tselectedType = selectedType[0];\n\n\t\t\t\tvar selectedMethod = selectedType.shippingMethods.filter(function (m) {\n\t\t\t\t\treturn m.alias.toLowerCase() === $scope.shippingStepModel.method.alias.toLowerCase()\n\t\t\t\t});\n\n\t\t\t\tif (selectedMethod.length === 0) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tselectedMethod = selectedMethod[0];\n\n\t\t\t\tvar getBasketTotal = function (shippingTotal) {\n\t\t\t\t\tvar previousShippingTaxTotal = parseFloat($scope.model.basket.shippingTotal.value * 0.2).toFixed(2);\n\t\t\t\t\tvar basketTotalTaxWithoutPreviousShippingTax = $scope.model.basket.taxTotal.value - previousShippingTaxTotal;\n\t\t\t\t\tvar value = $scope.model.basket.subTotal.value + basketTotalTaxWithoutPreviousShippingTax + parseFloat(shippingTotal),\n\t\t\t\t\t\tformat = $filter('currency')(value, '').trim();\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tformat: format\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar getBasketTaxTotal = function (basketTotal) {\n\t\t\t\t\tvar value = parseFloat(basketTotal * 0.2).toFixed(2),\n\t\t\t\t\t\tformat = $filter('currency')(value, '').trim();\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tformat: format\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tshippingTotal = selectedMethod.price;\n\t\t\t\tvar totalWithTax = getBasketTotal(shippingTotal);\n\t\t\t\tvar totalTax = getBasketTaxTotal(totalWithTax.value);\n\t\t\t\t$scope.model.calculated = $scope.model.calculated || {};\n\t\t\t\t_.extend($scope.model.calculated, {\n\t\t\t\t\tshippingTotal: parseFloat(shippingTotal).toFixed(2),\n\t\t\t\t\ttotal: totalWithTax,\n\t\t\t\t\ttaxTotal: totalTax\n\t\t\t\t});\n\n\t\t\t\t$scope.model.basket.shippingTotal = $scope.updatePrice($scope.model.calculated.shippingTotal);\n\t\t\t\t$scope.model.basket.total = $scope.updatePrice($scope.model.calculated.total.value);\n\t\t\t\t$scope.model.basket.taxTotal = $scope.updatePrice($scope.model.calculated.taxTotal.value);\n\t\t\t};\n\n\t\t\t$scope.updatePrice = function (value) {\n\t\t\t\tvar value = value.toString();\n\t\t\t\tvar price = {\n\t\t\t\t\tmajor: value.substr(0, value.indexOf(\".\")),\n\t\t\t\t\tminor: value.substr(value.indexOf(\".\") + 1),\n\t\t\t\t\tvalue: parseFloat(value),\n\t\t\t\t\tformat: $filter('currency')(value, '').trim()\n\t\t\t\t};\n\t\t\t\treturn price;\n\t\t\t};\n\n\t\t\t$scope.submitForm = function (validationState) {\n\n\t\t\t\tif ($scope.pending) {\n\t\t\t\t\tconsole.log('return - pending');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (this.shippingInfoForm.$invalid) {\n\t\t\t\t\tconsole.log('return - form invalid');\n\t\t\t\t\tconsole.log(this.shippingInfoForm);\n\t\t\t\t\t$scope.showValidationMessages = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t$scope.pending = true;\n\t\t\t\t$scope.showValidationMessages = false;\n\n\t\t\t\tvar pickupPointStationId = null;\n\t\t\t\tvar pickupPointStation = null;\n\n\t\t\t\tif ($scope.shippingStepModel.pickupPoint) {\n\t\t\t\t\tpickupPointStationId = $scope.shippingStepModel.pickupPoint.stationId;\n\t\t\t\t\tpickupPointStation = $scope.shippingStepModel.pickupPoint;\n\t\t\t\t}\n\n if ($scope.shippingStepModel.type.alias.toLocaleLowerCase() !== 'toaddress' ||\n ($scope.shippingStepModel.type.alias.toLocaleLowerCase() === 'toaddress' && $scope.shippingStepModel.method.alias.toUpperCase().indexOf('MYPACK_HOME') < 0))\n $scope.shippingStepModel.noteForDelivery = '';\n\n\t\t\t\tvar data = {\n\t\t\t\t\tshippingMethodAlias: $scope.shippingStepModel.method.alias,\n\t\t\t\t\tshippingTypeAlias: $scope.shippingStepModel.type.alias,\n\t\t\t\t\tpickupPointStationId: pickupPointStationId,\n\t\t\t\t\tbasketId: basket.getBasketCookieValue(),\n\t\t\t\t\trequiresAdultAccepted: $scope.model.shippingStepModel.requiresAdultAccepted,\n\t\t\t\t\tpickupPointStation: pickupPointStation,\n noteForDelivery: $scope.shippingStepModel.noteForDelivery\n\t\t\t\t};\n\n $scope.shp = data;\n\n\t\t\t\t$http.post(config.serviceApi.shippingInformation, data, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t}\n\t\t\t\t}).then(function (response) {\n\t\t\t\t\tif (response.data.resultObj && response.data.hasError == false) {\n window.location.href = '/umbraco/Surface/GatewaySurface/CreatePayment';\n }\n else {\n alert(\"Something went wrong!\");\n }\n\t\t\t\t}, function (error) {\n\t\t\t\t\t$scope.showValidationMessages = true;\n\t\t\t\t\t$scope.pending = false;\n\t\t\t\t});\n\t\t\t};\n\t\t}]);\n","angular.module('site.services')\n\t.factory('webshipperShippingService', ['config', '$http', '$rootScope','$q', '$cookies', 'identityService', '$window', function (config, $http, $rootScope, $q,\n\t\t $cookies, identityService, $window) {\n return {\n shippingMethods: function (basketId) { \n return $http({\n url: config.serviceApi.webshipperShipping + '/ShippingMethods/' + basketId,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer '+ identityService.accessToken\n }\n });\n },\n shippingDropPoints: function (carrierId, serviceCode, address, zip, countryCode) { \n return $http({\n url: config.serviceApi.webshipperShipping + '/DropPoints/'+carrierId+'/'+serviceCode+'?Address1='+address+'&Zip='+zip+'&CountryCode='+countryCode,\n method: \"GET\",\n headers: {\n \"Authorization\": 'Bearer '+ identityService.accessToken\n }\n });\n }\n\n\n }\n }]);\n \n\n\n // https://localhost:44331/api/Shipping/DropPoints/1/MYPACK_COLLECT_DP?Zip=8000&CountryCode=DK","angular.module('site.services')\n\t.factory('storageService', function() {\n\t\tvar getStorage = function(name){\n\t\t\t\tvar storage = name + 'Storage';\n\t\t\t\tif(!Modernizr[storage.toLowerCase()]){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn window[storage];\n\t\t\t};\n\n\t\treturn {\n\t\t\tgetKey: function(storage, key){\n\t\t\t\tstorage = getStorage(storage);\n\t\t\t\tif(!storage){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn angular.fromJson(storage.getItem(key));\n\t\t\t},\n\t\t\tsetKey: function(storage, key, value){\n\t\t\t\tstorage = getStorage(storage);\n\t\t\t\tif(!storage){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn storage.setItem(key, angular.toJson(value));\n\t\t\t},\n\t\t\tremoveKey: function(storage, key){\n\t\t\t\tstorage = getStorage(storage);\n\t\t\t\tif(!storage){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn storage.removeItem(key);\n\t\t\t}\n\t\t\t\n\t\t};\n\t});","angular.module('site.services')\n\t.factory('subscriptionService', ['config', '$http', '$rootScope', 'identityService', function (config, $http, $rootScope, identityService) {\n\t\treturn {\n\t\t\tgetSubscriptions: function () {\n\t\t\t\treturn $http.get(subscriptionsServiceUrl + '/api/subscription/getbyprofile', {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tsubscriptionAddProduct: function (id, sku, qty) {\n\t\t\t\tvar params = {\n\t\t\t\t\tSubscriptionId: id,\n\t\t\t\t\tSku: sku,\n\t\t\t\t\tQuantity: qty\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/add/product',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tgetCreationContract: function () {\n\t\t\t\treturn $http.get(subscriptionsServiceUrl + '/api/subscription/getcreate', {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tgetCreationWithProductContract: function (sku) {\n\t\t\t\treturn $http.get(subscriptionsServiceUrl + '/api/subscription/getcreatewithproduct?sku=' + sku, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tcreateSubscription: function (daysBetweenDeliveries, title) {\n\t\t\t\tvar params = {\n\t\t\t\t\tdaysBetweenDeliveries: daysBetweenDeliveries,\n\t\t\t\t\ttitle: title\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/create',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tcreateSubscriptionWithProduct: function (params) {\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/createwithproduct',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tupdateProduct: function (subscriptionId, id, sku, quantity, prescriptionId) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionId: subscriptionId,\n\t\t\t\t\tsku: sku,\n\t\t\t\t\tquantity: quantity,\n\t\t\t\t\tid: id,\n\t\t\t\t\tprescriptionId: prescriptionId\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/web/updateproduct',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tupdateProduct2: function (subscriptionId, id, sku, quantity, prescriptionId) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionId: subscriptionId,\n\t\t\t\t\tsku: sku,\n\t\t\t\t\tquantity: quantity,\n\t\t\t\t\tid: id,\n\t\t\t\t\tprescriptionId: prescriptionId\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/web/updateproduct2',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\n\t\t\tremoveProduct: function (subscriptionProductId) {\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/deleteproduct?id=' + subscriptionProductId,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tupdateTitle: function (subscriptionId, title) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionId: subscriptionId,\n\t\t\t\t\ttitle: title\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/web/updatetitle',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tupdateInterval: function (subscriptionId, daysBetweenDeliveries) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionId: subscriptionId,\n\t\t\t\t\tdaysBetweenDeliveries: daysBetweenDeliveries\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/web/updatedaysbetweendeliveries',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tdelete: function (subscriptionId) {\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/delete?id=' + subscriptionId,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tpause: function (subscriptionId) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionId: subscriptionId,\n\t\t\t\t\tisActive: false\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/web/updateactive',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tresume: function (subscriptionId) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionId: subscriptionId,\n\t\t\t\t\tisActive: true\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/web/updateactive',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tupdateAddress: function (subscriptionId, addressId, firstName, lastName, companyName, addressLine, postalCode, city, countryIsoCode, pickupPointId,pickupPointName,pickupPointAddressLine,pickupPointPostalCode,pickupPointCity) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionId: subscriptionId,\n\t\t\t\t\tid: addressId,\n\t\t\t\t\tfirstName: firstName,\n\t\t\t\t\tlastName: lastName,\n\t\t\t\t\tcompanyName: companyName,\n\t\t\t\t\taddressLine: addressLine,\n\t\t\t\t\tpostalCode: postalCode,\n\t\t\t\t\tcountryIsoCode: countryIsoCode,\n\t\t\t\t\tcity: city,\n\t\t\t\t\tstationId: pickupPointId,\n\t\t\t\t\tpickupPointName: pickupPointName,\n\t\t\t\t\tpickupPointAddressLine: pickupPointAddressLine,\n\t\t\t\t\tpickupPointPostalCode: pickupPointPostalCode,\n\t\t\t\t\tpickupPointCity: pickupPointCity\n\t\t\t\t};\n\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/web/updatedeliveryaddress',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tupdateDeliveryMethod: function (subscriptionId, shippingTypeAlias, shippingMethodAlias) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionId: subscriptionId,\n\t\t\t\t\tpickupAgentId: shippingMethodAlias,\n\t\t\t\t\tshippingTypeAlias: shippingTypeAlias\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscription/web/updatedeliverymethod',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tgetDeliveryWeek: function (date) {\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscriptiondelivery/web/getdeliveryweek?date='+date,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n updateDeliveryAddresses: function (updateAddress){\n return $http(\n {\n method: 'POST',\n data: updateAddress,\n url: subscriptionsServiceUrl + '/api/subscription/updateaddresses',\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken\n }\n });\n }\n\t\t};\n\t}]);\n","angular.module('site.services')\n\t.factory('subscriptionDeliveryService', ['config', '$http', '$rootScope', 'identityService', function (config, $http, $rootScope, identityService) {\n\t\treturn {\n\t\t\tupdateProduct: function (subscriptionDeliveryId, id, sku, quantity, prescriptionId) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionDeliveryId: subscriptionDeliveryId,\n\t\t\t\t\tsku: sku,\n\t\t\t\t\tquantity: quantity,\n\t\t\t\t\tid: id,\n\t\t\t\t\tprescriptionId: prescriptionId\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscriptiondelivery/web/updateproduct',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tremoveProduct: function (subscriptionDeliveryProductId) {\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscriptiondelivery/deleteproduct?id=' + subscriptionDeliveryProductId,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tdelete: function (subscriptionId) {\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscriptiondelivery/skip?id=' + subscriptionId,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tupdateAddress: function (subscriptionDeliveryId, addressId, firstName, lastName, companyName, addressLine, postalCode, city, countryIsoCode, stationId, pickupPointName, pickupPointAddressLine, pickupPointPostalCode, pickupPointCity) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionDeliveryId: subscriptionDeliveryId,\n\t\t\t\t\tid: addressId,\n\t\t\t\t\tfirstName: firstName,\n\t\t\t\t\tlastName: lastName,\n\t\t\t\t\tcompanyName: companyName,\n\t\t\t\t\taddressLine: addressLine,\n\t\t\t\t\tpostalCode: postalCode,\n\t\t\t\t\tcountryIsoCode: countryIsoCode,\n\t\t\t\t\tcity: city,\n\t\t\t\t\tstationId: stationId,\n\t\t\t\t\tpickupPointName: pickupPointName,\n\t\t\t\t\tpickupPointAddressLine: pickupPointAddressLine,\n\t\t\t\t\tpickupPointPostalCode: pickupPointPostalCode,\n\t\t\t\t\tpickupPointCity: pickupPointCity\n\t\t\t\t};\n\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscriptiondelivery/web/updatedeliveryaddress',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\tupdateDeliveryMethod: function (subscriptionDeliveryId, shippingTypeAlias, shippingMethodAlias) {\n\t\t\t\tvar params = {\n\t\t\t\t\tsubscriptionDeliveryId: subscriptionDeliveryId,\n\t\t\t\t\tpickupAgentId: shippingMethodAlias,\n\t\t\t\t\tshippingTypeAlias: shippingTypeAlias\n\t\t\t\t};\n\t\t\t\treturn $http(\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: subscriptionsServiceUrl + '/api/subscriptiondelivery/web/updatedeliverymethod',\n\t\t\t\t\t\tdata: params,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Authorization\": 'Bearer ' + identityService.accessToken\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}]);\n","angular.module('site.services')\n .factory('tagManagerService',\n ['$window', 'basketService',\n function($window, basketService){\n\n function mapPrice(price){\n\n var activePrice = price.currentPrice;\n\n return activePrice.format.replace(\",\", \".\");\n }\n\n function mapTotalPrice(total, quantity){\n return (total / quantity).toFixed(2);\n }\n\n var service = {\n updateDataLayer : function (event, products, tagManagerProperties, raptorModuleName){\n if (!Array.isArray(products)){\n products = [products];\n }\n\n var ecommerceEvent = '';\n switch (event){\n case 'addToCart':\n ecommerceEvent = 'add';\n break;\n case 'removeFromCart':\n ecommerceEvent = 'remove';\n break;\n case 'productClick':\n ecommerceEvent = 'click';\n break;\n case 'transactionSuccess':\n ecommerceEvent = 'purchase';\n break;\n default:\n ecommerceEvent = event;\n break;\n }\n var ecommerce = {\n currencyCode: 'DKK'\n };\n\n if (event === 'addToCart' || event === 'removeFromCart' || event === 'checkout') {\n var cachedBasket = basketService.getCachedPreview();\n var listProductIds = [];\n var basketProducts = [];\n if(cachedBasket && cachedBasket.orderLines)\n {\n for (var i =0;i -1 && found && found.length === 1 && products[i].quantity >= found[0].quantity) {\n listProductIds.splice(index, 1);\n }\n }\n }\n }\n }\n\n var commaSeparatedIds = '';\n if(listProductIds){\n for (var i =0;i highestStockStatus) {\n highestStockStatus = stockStatus;\n }\n }\n\n return highestStockStatus;\n };\n\n // selects alternative address\n $scope.selectAlternativeAddress = function () {\n $scope.model.information.useAlternativeDeliveryAddress = true;\n $scope.model.information.alternativeDeliveryAddress.country = $scope.model.information.country;\n };\n\n // selects default address, cleans up alternative address fields\n $scope.selectDefaultAddress = function () {\n $scope.model.information.useAlternativeDeliveryAddress = false;\n $scope.model.information.alternativeDeliveryAddress.address = null;\n $scope.model.information.alternativeDeliveryAddress.city = null;\n $scope.model.information.alternativeDeliveryAddress.companyName = null;\n $scope.model.information.alternativeDeliveryAddress.country = null;\n $scope.model.information.alternativeDeliveryAddress.firstname = null;\n $scope.model.information.alternativeDeliveryAddress.lastname = null;\n $scope.model.information.alternativeDeliveryAddress.postalCode = null;\n };\n\n $scope.enabledComments = function () {\n $scope.information.hasNote = true;\n };\n\n $scope.disableComments = function () {\n $scope.information.hasNote = false;\n $scope.information.noteForOrder = null;\n };\n\n $scope.changeCountry = function () {\n $scope.selectDefaultAddress();\n };\n\n $scope.getCountryFromIsoCode = function (isoCode) {\n var shippingCountryCode = isoCode,\n shippingCountry = _.find($scope.model.countries, function (country) {\n return country.isoCode === shippingCountryCode;\n });\n\n return shippingCountry;\n };\n\n $scope.isProhibitedCountry = function (countryIsoCode) {\n var matches = _.find($scope.model.prohibitedCountries, function (country) {\n return country.toLowerCase() === countryIsoCode.toLowerCase();\n });\n return matches != undefined;\n };\n\n $scope.isValidAddressLine = function (addressLine) {\n if (!addressLine) {\n return true;\n } else {\n return /\\d+/g.test(addressLine);\n }\n };\n\n $scope.isValidDate = function (year, month, date) {\n year = parseInt(year);\n month = parseInt(month);\n date = parseInt(date);\n\n var dateObj = new Date(year, month - 1, date);\n\n return dateObj.getFullYear() !== year\n || dateObj.getMonth() !== month - 1\n || dateObj.getDate() !== date;\n }\n\n $scope.recalculateBasketForProfileType = function (profileType) {\n return $http.put(config.serviceApi.recalculateBasket, null, {\n params: {\n basketId: $scope.model.information.basketId,\n profileType: profileType\n }\n }).then(function (response) {\n $scope.model.overview = response.data;\n $scope.currentProfileType = profileType;\n });\n }\n\n $scope.validateSignup = function () {\n if ($scope.customerInfoFormSignup.$invalid) {\n $scope.showSignUpValidationMessages = true;\n\n // scroll to first invalid field\n var invalid = $($scope.customerInfoFormSignup.$$element).find('.ng-invalid');\n if (invalid[0]) {\n invalid[0].focus();\n }\n\n return false;\n }\n\n $scope.signup.doSignup = true;\n $element.find('.js-close-overlay').click();\n return $scope.recalculateBasketForProfileType('ClubMember');\n }\n\n $scope.clearSignup = function (skipRecalculate) {\n $scope.signup = {\n newsletter: false,\n acceptedTermsOfAgreement: false,\n birthdateDay: null,\n birthdateMonth: null,\n birthdateYear: null,\n gender: \"\",\n password: \"\",\n doSignup: false,\n };\n\n if (!skipRecalculate) {\n $scope.recalculateBasketForProfileType('Standard');\n }\n }\n\n $scope.formSubmitted = function (event) {\n event.preventDefault();\n \n if ($scope.pending) {\n return false;\n }\n \n // ensure billing form is valid\n if (this.customerInfoForm.$invalid) {\n $scope.showValidationMessages = true;\n return false;\n }\n // ensure sign up form is valid if signup is accepted\n if ($scope.signup.doSignup && this.customerInfoFormSignup.$invalid) {\n $scope.showSignUpValidationMessages = true;\n $element.find('.js-overlay-trigger').click();\n var invalid = $(this.customerInfoFormSignup.$$element).find('.ng-invalid');\n if (invalid[0]) {\n invalid[0].focus();\n }\n return false;\n }\n \n $scope.pending = true;\n \n submitBillingInformation().then(function () {\n if ($scope.signup.doSignup) {\n return createUserAccount(2).then(function () {\n $scope.signup.doSignup = false;\n return login();\n });\n } else {\n window.location.href = nextStepUrl;\n }\n }).catch(function (error) {\n $scope.pending = false;\n }).finally(function() {\n $scope.pending = false;\n });\n };\n\n $scope.showLoginBox = function () {\n $scope.displayLoginBox = this.customerInfoForm.customerInfoFormBilling.email.$valid;\n if ($scope.displayLoginBox) {\n user\n .findUserByEmail($scope.model.information.email)\n .then(function (resp) {\n if (resp && resp.data) {\n $scope.foundUser = resp.data;\n $scope.foundReceiveAdvantage = resp.data.receiveAdvantage;\n }\n }, function (error) {\n $scope.pendingFindUser = false;\n });\n }\n }\n \n function submitBillingInformation() {\n return $http.post(config.serviceApi.saveBillingInformation, $scope.model.information, {\n headers: {\n \"Authorization\": 'Bearer ' + identityService.accessToken\n }\n }).catch(function (error) {\n $scope.showValidationMessages = true;\n $scope.pending = false;\n\n return Promise.reject(error);\n });\n }\n\n function createUserAccount(retries) {\n return user.create(\n {\n \"firstName\": $scope.model.information.firstname,\n \"lastName\": $scope.model.information.lastname,\n \"email\": $scope.model.information.email,\n \"password\": $scope.signup.password,\n \"profileType\": 'ClubMember',\n \"newsletterTermsAccepted\": $scope.signup.newsletter,\n \"address\": {\n \"postalCode\": $scope.model.information.postalCode,\n \"addressLine\": $scope.model.information.address,\n \"city\": $scope.model.information.city,\n \"countryIsoCode\": $scope.model.information.country\n },\n \"information\": {\n \"gender\": $scope.signup.gender,\n },\n \"phoneNumber\": $scope.model.information.mobile\n }).catch(function (error) {\n if (error.status >= 500 && retries > 0) {\n // Retry after short delay.\n return new Promise(function (resolve) {\n setTimeout(resolve, 1000);\n }).then(function () {\n return createUserAccount(retries - 1);\n })\n } else if (error.status >= 400) {\n // Reject to avoid other continuations to run.\n }\n return Promise.reject(error);\n });\n }\n\n function login() {\n var username = $scope.model.information.email;\n var password = $scope.signup.password;\n // Simulate login, now that both calls are done.\n return user.login(username, password, nextStepUrl).then(function (response) {\n $scope.loginValidationErrors = response.data.Messages;\n if (response.data.HasError) {\n $scope.showLoginValidationMessages = true;\n $scope.pending = false;\n return Promise.reject();\n }\n\n if (response.data.ResultObj) {\n window.location.href = response.data.ResultObj;\n } else {\n window.location.href = nextStepUrl;\n }\n }).catch(function (error) {\n // called asynchronously if an error occurs\n // or server returns response with an error status.\n $scope.pending = false; // don't do this in .always(), as we would like the spinner while redirecting\n\n return Promise.reject(error);\n });\n }\n }]);\n","angular.module('site.controllers')\n .controller('categoryController', ['$scope', '$modal', '$element',\n function ($scope, $modal, $element) {\n $scope.init = function () {\n $element.find(\".category-list__category-card:lt(8)\").addClass(\"active\");\n }\n\n $scope.showMoreCategories = function () {\n var listHeight = $(\".category-list--category-overview\").innerHeight();\n $element.find(\".category-list__container\").css(\"height\", listHeight);\n $element.find(\".category-list__category-card:gt(7)\").addClass(\"active\");\n\n $scope.$applyAsync(function() {\n var newListHeight = $element.find(\".category-list--category-overview\").innerHeight();\n $element.find(\".category-list__container\").animate({height: newListHeight}, 200);\n })\n\n $element.find(\".js-show-more-link\").addClass(\"disabled\");\n };\n\n $scope.scrollToFullText = function () {\n var yPos = $(\".category-text__full\").position().top;\n window.scrollTo({ top: yPos, behavior: 'smooth' });\n }\n\n $scope.openBurgerMenu = function () {\n $(\"#mobile-navigation\").addClass(\"sidenav-open\");\n }\n\n $scope.openFiltersMobileModal = function () {\n $scope.modalInstance = $modal.open({\n templateUrl: '/partials/search/facetsMobile',\n controller: 'filterController',\n size: 'lg',\n scope: $scope,\n });\n }\n\n $scope.closeModal = function () {\n // On 1st level category pages (Section.cshtml), scroll to top of /partials/category/products on page navigation or filtering\n var sectionProductsHeadingElem = document.querySelector('#section-products-heading');\n if (sectionProductsHeadingElem) {\n sectionProductsHeadingElem.scrollIntoView({behavior: \"smooth\", block: \"center\" });\n } else {\n window.scrollTo({top: 0});\n }\n $scope.modalInstance.dismiss();\n }\n }]);\n","angular.module('site.controllers')\n\t.controller('competitionController', ['$scope', 'userService', function ($scope, user) {\n\t\t$scope.pending = false;\n\t\t$scope.showValidationMessages = false;\n\t\t$scope.submit = function() {\n\t\t\tif ($scope.competitionForm.$invalid) {\n\t\t\t\t$scope.showValidationMessages = true;\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\t$scope.showValidationMessages = false;\n\t\t\t\t$scope.pending = true;\n\t\t\t\tuser.submitAnswer($scope.model)\n\t\t\t\t\t.then(function(data) {\n\t\t\t\t\t\t$scope.hasEntered = true;\n\t\t\t\t\t\t$scope.pending = false;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}, function(error){\n\t\t\t\t\t\t$scope.pending = false;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t});\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\t$scope.init = function (nodeId) {\n\t\t\t$scope.ready = false;\n\t\t\t$scope.showValidationMessages = false;\n\t\t\t$scope.hasEntered = true;\n\t\t\t$scope.model = { competitionId: nodeId, answer: \"\" };\n\t\t\tuser.hasParticipated($scope.model).then(function(response) {\n\t\t\t\t$scope.hasEntered = response.data;\n\t\t\t\t$scope.ready = true;\n\t\t\t});\n\t\t\t$scope.pending = false;\n\t\t};\n\t}]);","angular.module('site.controllers')\n .controller('customerInfoController', ['$scope', '$filter', '$window', '$location', '$timeout', 'shippingInfoService', 'utilitiesService', 'basketService', 'userService',\n 'smoothScroll', function ($scope, $filter, $window, $location, $timeout, shippingInfo, utilities, basket, user, smoothScroll) {\n\n\t $scope.initAddress = function () {\n\t $scope.addressMode = 'billing';\n\t };\n\n\t $scope.init = function () {\n\t var path = $location.path();\n\t if (path === \"/shippingToAddress\") {\n\n\t $timeout(function () {\n\t var element = document.getElementById('shippingToAddress');\n\t smoothScroll(element);\n\t }, 1500);\n\t }\n }\n\n $scope.initCheckoutModel = function () {\n var json = $('div[data-controller-model]').attr('data-controller-model');\n\t\t\t$scope.model = angular.fromJson(json.toString());\n\t\t\tconsole.log(\"checkout model\");\n\t\t\tconsole.log($scope.model);\n }\n\n\t $scope.init();\n\n\t /*\n * The ITU-T recommendation E.164 for the international telephone network (which most national networks are connected via) specifies that the entire number\n * (including country code, but not including prefixes such as the international calling prefix necessary for dialling out, which varies from country to country,\n * nor including suffixes, such as PBX extension numbers) be at most 15 characters.\n * http://www.itu.int/ITU-T/recommendations/rec.aspx?rec=E.164\n */\n\t $scope.phoneRegex = /(?=^.{3,20}$)^\\+?[0-9]+(\\([0-9]+\\))?[0-9-]*[0-9]$/;\n\n\t // Update order model when changes happen to basket - ie. adding a web present\n $scope.$on('basketModelUpdate', function (event, model) {\n\t $scope.model.order = model;\n\t if ($scope.basketHasPresent()) {\n\t $scope.showNewsLetterGiftDialog = false;\n\t }\n\t });\n\n\t $scope.setSelectedCountriesFromModel = function (model) {\n\t model.customerInformation = model.shippingInformation; // server returns an object 'shippingInformation'\n\n\t if (!model.customerInformation) {\n\t return;\n\t }\n\n\t $scope.model.comment_ask = model.customerInformation.customerMessage || model.customerInformation.shippingComment;\n\n\t // Manual mapping and logic for country selections\n\t model.customerInformation.billingAddress = model.customerInformation.billingAddress || {};\n\t model.customerInformation.shippingAddress = model.customerInformation.shippingAddress || {};\n\t model.customerInformation.pickupAddress = model.customerInformation.pickupAddress || {};\n\n\t model.customerInformation.billingAddress.countryIsoCode = model.customerInformation.billingAddress.countryIsoCode || model.shippingCountries.countries[0].isoCode;\n\t model.customerInformation.shippingAddress.countryIsoCode = model.customerInformation.shippingAddress.countryIsoCode || model.shippingCountries.countries[0].isoCode;\n\n\t model.customerInformation.useShippingAddress = model.customerInformation.useShippingAddress || false;\n\n\t //Trigger email check on load\n\t $scope.emailChanged(model.customerInformation.billingAddress.email, model.customerInformation.newsLetter);\n\n\t if (!model.customerInformation.customerType)\n\t model.customerInformation.customerType = \"Private\";\n\n\t if (model.customerInformation.useShippingAddress) {\n\t $scope.addressMode = 'shipping';\n\t }\n\t };\n\n\t $scope.basketHasPresent = function () {\n\t var hasPresent = true;\n\t if ($scope.model && $scope.model.order) {\n\t var presentOrderLine = _.find($scope.model.order.orderLines, function (orderLine) {\n\t return orderLine.isWebPresent;\n\t });\n\t hasPresent = presentOrderLine ? true : false;\n\t }\n\t return hasPresent;\n\t };\n\t $scope.removePresentFromBasket = function () {\n\t if (!$scope.basketHasPresent() || !$scope.model || !$scope.model.order) {\n\t return;\n\t }\n\t var present = _.find($scope.model.order.orderLines, function (orderLine) {\n\t return orderLine.isWebPresent;\n\t });\n\t if (present) {\n\t $scope.pending = true;\n\t basket.update(present.sku, 0).then(function () {\n\t $scope.pending = false;\n\t });\n\t }\n\t };\n\t $scope.isValidAddressLine = function (addressLine) {\n\t if (!addressLine) {\n\t return true;\n\t } else {\n\t return /\\d+/g.test(addressLine);\n\t }\n\t };\n\t $scope.emailChanged = function (email) {\n\n\n\t if (email && email.length > 0 && !$scope.model.isClubMember) {\n\t\t\t\t$scope.showClubHint = true;\n\t } else {\n\t $scope.showClubHint = false;\n\t }\n\t };\n\n\t // MHB: Some rule in Københavns Kommune says that if the 8th digit of the EAN\n\t // number is 2, the user id is POGR, so set it automatically\n\t $scope.checkEan = function () {\n\t if ($scope.model.customerInformation.billingAddress.eanNumber.charAt(7) === \"2\") {\n\t $scope.model.customerInformation.billingAddress.eanUser = \"POGR\";\n\t }\n\t };\n\n\t $scope.changeCountry = function (address, type) {\n\t $scope.resetShippingMethod();\n\n\t var country = $scope.getCountryFromIsoCode(address.countryIsoCode);\n\t if (type === 'Shipping') {\n\t $scope.model.customerInformation.shippingAddress.countryName = country.name;\n\t }\n\t else {\n\t $scope.model.customerInformation.billingAddress.countryName = country.name;\n\t }\n\n\t if ($scope.model.customerInformation.deliveryMethod === 'Parcel') {\n\t $scope.model.customerInformation.deliveryMethod = 'Billing';\n\t }\n\t };\n\n\t $scope.getCountrySelectedForShipping = function () {\n\t var shippingCountryCode = ($scope.shippingMethod === 'delivery' && $scope.addressMode === 'shipping') ? $scope.model.customerInformation.shippingAddress.countryIsoCode : $scope.model.customerInformation.billingAddress.countryIsoCode,\n\t\t\t\tshippingCountry = _.find($scope.model.shippingCountries.countries, function (country) {\n\t\t\t\t return country.isoCode === shippingCountryCode;\n\t\t\t\t});\n\n\t return shippingCountry;\n\t };\n\n\t // get country name from isoCode\n\t $scope.getCountryFromIsoCode = function (isoCode) {\n\t var shippingCountryCode = isoCode,\n\t\t\t\tshippingCountry = _.find($scope.model.shippingCountries.countries, function (country) {\n\t\t\t\t return country.isoCode === shippingCountryCode;\n\t\t\t\t});\n\n\t return shippingCountry;\n\t };\n\n\t $scope.showMorePickupDestinations = function () {\n\t $scope.pickupDestinations.pickupDestinations.forEach(function (entry) {\n\t entry.visible = true;\n\t });\n\t $scope.showMorePickupDestinationsButton = false;\n\t $scope.showFewerPickupDestinationsButton = true;\n\t };\n\n\t $scope.showFewerPickupDestinations = function () {\n\t for (index = 0; index < $scope.pickupDestinations.pickupDestinations.length; index++) {\n\t $scope.pickupDestinations.pickupDestinations[index].visible = index < 5;\n\t }\n\t $scope.showMorePickupDestinationsButton = true;\n\t $scope.showFewerPickupDestinationsButton = false;\n\t };\n\n\t $scope.getShippingPricesForSelectedCountry = function () {\n\t var country = $scope.getCountrySelectedForShipping();\n\n\t var prices = [];\n\n\t for (var i = 0; i < country.shippingTotal.length; i++) {\n\t prices.push(country.shippingTotal[i].price.format);\n\t }\n\n\t return prices;\n\t };\n\n\t $scope.resetShippingMethod = function () {\n\t if ($scope.model.customerInformation.shippingMethodId !== undefined) {\n\t delete $scope.model.customerInformation.shippingMethodId;\n\t }\n\n\t $scope.showBillingAddressLineNotification = false;\n\t $scope.showShippingAddressLineNotification = false;\n\n\t var shippingCountry = $scope.getCountrySelectedForShipping();\n\n\t if (shippingCountry && shippingCountry.shippingTotal && shippingCountry.shippingTotal.length === 1) {\n\t $scope.model.customerInformation.shippingMethodId = shippingCountry.shippingTotal[0].id;\n\t }\n\n\t };\n\n\t $scope.submitForm = function (validationState) {\n\t angular.element('#ean_id').trigger('keyup');\n\n\n\n\t if ($scope.pending) {\n\t return false;\n\t }\n\n\t if (this.customerInfoForm.$invalid) {\n\t $scope.showValidationMessages = true;\n\t return false;\n\t }\n\t else {\n\t // If ean order and postal code is < 3000 ( = approx. the postal codes of Københavns kommune)\n // and no ean user id was entered, ask user to confirm whether this was a mistake.\n\t if ($scope.model.customerInformation.customerType === 'Public' && !$scope.model.customerInformation.billingAddress.eanUser) {\n\t var postalCode = parseInt($scope.model.customerInformation.billingAddress.postalCode);\n\t if (postalCode < 3000) {\n\t if (confirm(\"Hvis du bestiller til en institution under K\\xF8benhavns Kommune, skal du indtaste et bruger-id.\\n\\nKlik p\\xE5 OK for at g\\xE5 tilbage. Klik p\\xE5 Annuller for at f\\xE6rdigg\\xF8re din ordre.\")) {\n return false;\n }\n }\n\t }\n\n\t if ($scope.model.customerInformation.customerType === 'Private') {\n\t $scope.model.customerInformation.billingAddress.companyName = '';\n\t $scope.model.customerInformation.billingAddress.eanNumber = '';\n\t }\n\t if ($scope.model.customerInformation.customerType === 'Company') {\n\t $scope.model.customerInformation.billingAddress.eanNumber = '';\n\t }\n\n\t // Remove shippingComment when submitting form.\n\t if ($scope.model.customerInformation.deliveryMethod === 'Gls' ||\n\t\t\t\t\t$scope.model.customerInformation.deliveryMethod === 'PostDanmark' ||\n\t\t\t\t\t$scope.model.customerInformation.deliveryMethod === 'Parcel') {\n\t if ($scope.model.customerInformation.shippingAddress) // Just to make sure it's actually there.\n\t {\n\t $scope.model.customerInformation.shippingComment = '';\n\t }\n\t }\n\n\t $scope.model.customerInformation.shippingAddressSelectedInCheckout = $scope.addressMode === 'shipping';\n\n\t $scope.pending = true;\n\t $scope.showValidationMessages = false;\n\n\t shippingInfo.update($scope.model.customerInformation)\n .then(function (response) {\n\t var data = response.data;\n\t\t\t\t\t if (data && data.redirectionUrl) {\n\t\t\t\t\t location.href = data.redirectionUrl;\n\t\t\t\t\t }\n\t\t\t\t\t}, function (error) {\n\t\t\t\t\t $scope.showValidationMessages = true;\n\t\t\t\t\t $scope.pending = false;\n\t\t\t\t\t});\n\n\t }\n\n\t };\n\n $scope.calculateBasketTotal = function (methodId) {\n console.log(methodId);\n\t var shippingTotal = _.find($scope.getCountrySelectedForShipping().shippingTotal, function (method) {\n\t return method.id === parseInt(methodId, 10);\n\t }),\n\t\t\t\tgetBasketTotalFromShippingTotal = function (total) {\n\t\t\t\t var value = $scope.model.order.subTotal.value + $scope.model.order.taxTotal.value + total,\n\t\t\t\t\t\tformat = $filter('currency')(value, '');\n\n\t\t\t\t // Swap , and . manually to avoid full client-side localization.\n\t\t\t\t format = format.replace(',', '*');\n\t\t\t\t format = format.replace('.', ',');\n\t\t\t\t format = format.replace('*', '.');\n\n\t\t\t\t return format;\n\t\t\t\t};\n\n\t if (shippingTotal) {\n\t $scope.model.calculated = $scope.model.calculated || {};\n\t _.extend($scope.model.calculated, {\n\t shippingTotal: shippingTotal.price.format,\n\t total: getBasketTotalFromShippingTotal(shippingTotal.price.value)\n\t });\n\t }\n\t };\n\n\t $scope.orderChanged = function (model) {\n\n\t // Initialize the shipping methods from the current order.\n\t // Could probably be prettier, but the form has turned rather complex:\n\t $scope.calculateBasketTotal(model.customerInformation.shippingMethodId);\n\n\t };\n\n\t $scope.setAddressMode = function (mode) {\n\t if (mode === 'shipping') {\n\t $scope.model.customerInformation.useShippingAddress = true;\n\t $scope.addressMode = 'shipping';\n\t $scope.model.customerInformation.deliveryMethod = \"Shipping\";\n\t $scope.model.customerInformation.shipToAddressType = \"Shipping\";\n\t }\n\t else {\n\t $scope.model.customerInformation.useShippingAddress = false;\n\t $scope.addressMode = 'billing';\n\t $scope.model.customerInformation.deliveryMethod = \"Billing\";\n\t $scope.model.customerInformation.shipToAddressType = \"Billing\";\n\t }\n\t };\n\n\t $scope.$watch('model', $scope.setSelectedCountriesFromModel);\n\t $scope.$watch('model.customerInformation.shippingMethodId', $scope.calculateBasketTotal);\n\t $scope.$watch('model', $scope.orderChanged, true);\n\t}]);\n","angular.module('site.controllers')\n .controller('filterController', ['$scope', '$modal', '$location', 'urlHelperService', function ($scope, $modal, $location, urlHelper) {\n $scope.oneAtATime = false;\n $scope.showAllFilters = false;\n\n $scope.toggleAllFilters = function () {\n $scope.showAllFilters = !$scope.showAllFilters;\n }\n\n $scope.closeFilterOverlay = function () {\n $scope.modalInstance.close();\n }\n\n $scope.openFiltersModal = function (facet) {\n $scope.filterOverlayFacet = facet;\n $scope.modalInstance = $modal.open({\n templateUrl: '/partials/search/filterConstraints',\n controller: 'filterController',\n size: 'lg',\n scope: $scope,\n });\n }\n\n $scope.resetFilterQuery = function () {\n $scope.filterQuery = \"\";\n }\n\n $scope.getActiveConstraints = function (facets) {\n if (facets) {\n var active = [];\n for (var i = 0; i < facets.length; i++) {\n for (var y = 0; y < facets[i].values.length; y++) {\n if (urlHelper.hasParam(facets[i].name, facets[i].values[y].name, true)) {\n var constraint = facets[i].values[y];\n constraint['facetName'] = facets[i].name;\n active.push(constraint);\n }\n }\n }\n return active;\n }\n }\n }]);\n","angular.module('site.controllers')\n\t.controller('giftWrapController', ['$scope', 'basketService', function($scope, basket) {\n\t\t$scope.modelChanges = {};\n\t\t$scope.modelChanges.wrappingInfo = {};\n\t\t$scope.toggleGiftWrapDialog = function(active, event){\n\t\t\tif(event){ event.preventDefault(); }\n\t\t\t$scope.showGiftWrapDialog = active;\n\t\t};\n\t\t$scope.submitGiftWrap = function (giftWrapModel) {\n\t\t\tif($scope.pendingGiftWrap){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$scope.pendingGiftWrap = true;\n\t\t\tgiftWrapModel.enabled = true;\n\t\t\tbasket.giftWrap(giftWrapModel).then(function (response) {\n\t\t\t\t_.extend($scope.model.wrappingInfo, giftWrapModel);\n\t\t\t\t$scope.pendingGiftWrap = false;\n\t\t\t\t$scope.toggleGiftWrapDialog(false);\n\t\t\t});\n\t\t};\n\t\t$scope.disableGiftWrap = function (event) {\n\t\t\tif(event){\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\tif($scope.pendingGiftWrap){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$scope.pendingGiftWrap = true;\n\t\t\tvar giftWrapModel = {\n\t\t\t\twrappingDescription: '',\n\t\t\t\tgreeting: '',\n\t\t\t\tenabled: false\n\t\t\t};\n\t\t\tbasket.giftWrap(giftWrapModel).then(function (data) {\n\t\t\t\t_.extend($scope.model.wrappingInfo, giftWrapModel);\n\t\t\t\t$scope.pendingGiftWrap = false;\n\t\t\t});\n\t\t};\n\t\t$scope.editGiftWrap = function (event) {\n\t\t\tif(event){\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\t_.extend($scope.modelChanges.wrappingInfo, $scope.model.wrappingInfo);\n\t\t\t$scope.toggleGiftWrapDialog(true);\n\t\t};\n\n\t}]);","angular.module('site.controllers')\n .controller('grantsController', ['$scope', '$timeout', 'prescriptionService', function ($scope, $timeout, prescriptionService) {\n $scope.isLoading = true;\n $scope.grants = 0;\n\n $scope.init = function () {\n var json = $('div[data-ctr-widget-model]').attr('data-ctr-widget-model');\n var data = angular.fromJson(json.toString());\n $scope.ctrExpirationDate = data.ctrExpirationDate\n $scope.grants = data.grants;\n $scope.balance = data.balance;\n }\n\n $scope.$on('basketModelUpdate', function (event, model) {\n prescriptionService.getCtrWidgetInformation().then(function (response) {\n var data = response.data;\n if (data.grants != null) {\n $scope.grants = data.grants.format;\n }\n });\n });\n }]);\n","angular.module('site.directives')\n .directive('siteLogin', ['config', '$http', 'userService', '$location', function (config, $http, user, $location) {\n return {\n scope: {},\n templateUrl: '/partials/directives/login',\n link: function (scope, element, attrs) {\n scope.userForgotPassword = false;\n scope.validationErrors = null; // []\n scope.hideSignup = (attrs.siteHideSignup === undefined || attrs.siteHideSignup === true);\n\n scope.switchViewMode = function(forgotPasswordMode) {\n scope.showValidationMessages = false;\n scope.pending = false;\n scope.userForgotPassword = forgotPasswordMode;\n };\n\n scope.resetPassword = function (username) {\n scope.showValidationMessages = true;\n \n if (scope.newPasswordForm.$invalid || scope.pending) {\n return false;\n }\n scope.pending = true;\n \n user.createNewPassword(username)\n .then(function (data) {\n scope.showValidationMessages = false;\n scope.showNofityResetPassword = true;\n scope.pending = false;\n },function (data) {\n scope.pending = false;\n });\n \n };\n\n scope.login = function (username, password) {\n\n scope.showValidationMessages = true;\n\n if (scope.partialsDirectivesLoginForm.$invalid || scope.pending) {\n return false;\n }\n scope.pending = true;\n \n var returnUrl = attrs.siteLogin;\n user.login(username, password, returnUrl)\n .then(function (response) {\n scope.validationErrors = response.data.Messages;\n // scope.showNofityResetPassword = true;\n if (response.data.HasError)\n {\n scope.showValidationMessages = true;\n scope.pending = false;\n return;\n }\n\n if (response.data.ResultObj) {\n window.location.href = response.data.ResultObj;\n } else {\n window.location.reload(true);\n }\n\n },function (data) {\n // called asynchronously if an error occurs\n // or server returns response with an error status.\n scope.pending = false; // don't do this in .always(), as we would like the spinner while redirecting\n });\n };\n }\n };\n }]);\n","angular.module('site.controllers')\n .controller('modelInstanceController', ['$scope', '$modalInstance', 'order', 'itemsAddedCount', 'lastAddedItem', 'userService', '$rootScope',\n function ($scope, $modalInstance, order, itemsAddedCount, lastAddedItem, userService, $rootScope) {\n\n\t $scope.$on('modal:start-open', function () {\n\t $modalInstance.dismiss('cancelled');\n });\n\n\t $scope.order = order;\n\t $scope.itemsAddedCount = itemsAddedCount;\n\t $rootScope.lastAddedItem = lastAddedItem;\n\n $scope.isClubMember = userService.isClubMemberSession();\n\n\t $scope.closeModal = function () {\n var pathname = window.location.pathname;\n\t //$modalInstance.dismiss('cancel');\n if(pathname == '/kurv' || pathname == '/kurv/') {\n location.reload();\n }\n\t $modalInstance.close();\n\t };\n\n\t}]);\n","angular.module('site.controllers')\n .controller('MyPageDeleteProfileController', ['$scope', 'userService',\n function ($scope, userService) {\n\n $scope.pending = false; // if currently pending update membership request\n $scope.deleteRequestAccepted = false; // if deletion request succeeded\n\n $scope.init = function (profilePageUrl) {\n $scope.profilePageUrl = profilePageUrl;\n };\n \n $scope.acceptConsent = function(){\n // ensure process is not pending\n if ($scope.pending)\n {\n return false;\n }\n\n $scope.pending = true;\n userService.requestDelete()\n .then(function (response) {\n $scope.deleteRequestAccepted = true;\n }, function (response) {\n console.error(response);\n $scope.pending = false;\n });\n };\n\n $scope.declineConsent = function(){\n // ensure process is not pending\n if ($scope.pending)\n {\n return false;\n }\n\n window.location = $scope.profilePageUrl;\n };\n\t}]);\n","angular.module('site.controllers')\n .controller('MyPageEditProfileTypeController', ['$scope', 'userService',\n function ($scope, userService) {\n\n $scope.pending = false; // if currently pending update membership request\n\n $scope.current = {\n hasCreditCard : false,\n membership : '',\n membershipText : ''\n };\n\n $scope.selected = {\n membership : '',\n membershipText : ''\n };\n\n $scope.consent = {\n visible : false, // if consent information must be visible,\n type: ''\n };\n\n $scope.init = function (currentProfileType, profilePageUrl, hasCreditCard, currentProfileTypeText) {\n $scope.current.membership = currentProfileType;\n $scope.current.membershipText = currentProfileTypeText;\n $scope.current.hasCreditCard = (hasCreditCard == 'true');\n\n $scope.profilePageUrl = profilePageUrl;\n };\n\n $scope.acceptConsent = function(){\n // ensure process is not pending\n if ($scope.pending)\n {\n return false;\n }\n\n $scope.pending = true;\n\n userService.changeProfileType($scope.selected.membership)\n .then(function (response) {\n window.location = $scope.profilePageUrl;\n }, function (response) {\n console.error(response);\n $scope.pending = false;\n });\n };\n\n $scope.declineConsent = function(){\n // ensure process is not pending\n if ($scope.pending)\n {\n return false;\n }\n\n $scope.consent.visible = false;\n $scope.consent.type = '';\n };\n\n $scope.showConsent = function(membership, membershipText){\n // ensure process is not pending\n if ($scope.pending)\n {\n return false;\n }\n\n // set selected membership\n $scope.selected.membership = membership;\n $scope.selected.membershipText = membershipText;\n\n // figure out consent type\n // if downgrade\n $scope.consent.type = getConsentType($scope.current.membership, membership, $scope.current.hasCreditCard);\n\n // set consent as visible\n $scope.consent.visible = true;\n };\n\n function getConsentType(from, to, hasCreditCard){\n var types = ['standard', 'clubmember', 'premium'];\n\n var fromIndex = types.indexOf(from.toLowerCase());\n var toIndex = types.indexOf(to.toLowerCase());\n\n // downgrade\n if (toIndex < fromIndex){\n return 'DOWNGRADE';\n }\n // upgrade\n else if (toIndex > fromIndex) {\n // if not premium, we can simply upgrade\n if (to.toLowerCase() !== 'premium'){\n return 'UPGRADE';\n }\n\n // if premium then check if card exists\n return ((hasCreditCard) ? 'UPGRADE_WITH_EXISTING_CARD' : 'UPGRADE_MISSING_CARD');\n }\n }\n\n\t}]);\n","angular.module('site.controllers')\n .controller('myPageOrderHistoryController', ['$scope', 'orderService', '$timeout', 'basketService',\n function ($scope, orderService, $timeout, basketService) {\n\t\t$scope.isLoading = true;\n\t\t\n\t\t$scope.init = function (ordersSize) {\n\t\t\torderService.getCombinedHistory(ordersSize || 10).then(function (response) {\n $scope.isLoading = false;\n $scope.model = response.data;\n\t\t\t});\n\t\t};\n\n\t\t$scope.updateBasket = function(id, quantity, event, type){\n\n\t\t\tif (event){\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tif ($scope.pending){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t\n\t\t\t$scope.pending = true;\n\n\t\t\tbasketService.update(id, quantity)\n\t\t\t\t.then(function (results){\n\t\t\t\t\t$scope.pending = false;\n\t\t\t\t}).catch(function (error){\n\t\t\t\t\tconsole.log('fejl:', error);\n\t\t\t\t});\n\t\t};\n\t}]);\n","angular.module('site.controllers')\n .controller('myPageProfileFormController', ['$scope', 'userService', 'utilitiesService', '$timeout', function ($scope, user, utils, $timeout) {\n $scope.isLoading = true;\n\n $scope.init = function () {\n $scope.loadProfile();\n };\n\n $scope.loadProfile = function () {\n user.get().then(function (response) {\n $scope.isLoading = false;\n var data = response.data;\n $scope.model = data;\n\n if (data.information && data.information.dateOfBirth) {\n var dateMs = data.information.dateOfBirth.substring(0, data.information.dateOfBirth.indexOf('T'));\n var date = new Date(dateMs);\n data.information.day = date.getDate();\n data.information.month = date.getMonth() + 1;\n data.information.year = date.getFullYear();\n }\n });\n };\n }]);\n","angular.module('site.controllers')\n .controller('MyPageSubscriptionDeliveryDetailsController', ['$scope', 'subscriptionDeliveryService', 'subscriptionService',\n function ($scope, subscriptionDeliveryService, subscriptionService) {\n $scope.data = {\n model : {},\n status : \"none\",\n };\n\n $scope.init = function (subscriptionsOverviewUrl, isLocked) {\n $scope.data.subscriptionsOverviewUrl = subscriptionsOverviewUrl;\n $scope.data.isLocked = isLocked;\n\n var json = $('#SubscriptionDeliveryDetailsController').attr('data-viewmodel');\n $scope.data.model = angular.fromJson(json.toString());\n $scope.setStatus();\n };\n\n // subscription general methods\n $scope.cancelDelivery = function(){\n if (!confirm(\"Er du sikker?\")) {\n return;\n }\n\n subscriptionDeliveryService.delete($scope.data.model.details.subscriptionDeliveryId).then(\n function successCallback(response) {\n window.location = $scope.data.subscriptionsOverviewUrl;\n },\n function errorCallback(error){\n console.error(error);\n }\n );\n };\n\n $scope.setStatus = function() {\n if($scope.data.model.details.isActive && !$scope.isMissingInformation()) {\n $scope.data.status = 'active';\n } else if ($scope.isMissingInformation()){\n $scope.data.status = 'need-info';\n } else if (!$scope.data.model.details.isActive && !$scope.isMissingInformation() && $scope.data.model.details.statusId != -1) {\n $scope.data.status = 'pause';\n } else if (!$scope.data.model.details.isActive && !$scope.isMissingInformation() && $scope.data.model.details.statusId == -1) {\n $scope.data.status = 'new';\n }\n }\n\n $scope.isMissingInformation = function(){\n if ($scope.data.model.card == null\n || $scope.data.model.details.deliveryAddress == null\n || $scope.data.model.details.shippingTypeAlias == null\n || $scope.data.model.details.pickupAgentId == null)\n {\n return true;\n }\n\n return false;\n };\n\n $scope.isShippingMethodSet = function(){\n if ($scope.data.model.details !== null\n && $scope.data.model.details.shippingTypeAlias !== null\n && $scope.data.model.details.pickupAgentId !== null){\n return true;\n }\n };\n\n $scope.isShippingAddressSet = function(){\n if ($scope.data.model.details === null\n && $scope.data.model.details.deliveryAddress === null\n && $scope.data.model.details.defaultDeliveryAddress === null\n ){\n return false;\n }\n\n return true;\n };\n\n // address\n $scope.updateDeliveryAddressRequest = function(addressId, firstName, lastName, companyName, addressLine, postalCode, city, countryIsoCode){\n return subscriptionDeliveryService.updateAddress($scope.data.model.details.subscriptionDeliveryId, addressId, firstName, lastName, companyName, addressLine, postalCode, city, countryIsoCode);\n };\n\n $scope.initEditTitle = function(){\n $scope.$broadcast(\"initEditTitleEvent\");\n };\n\n $scope.productRemovalRequest = function(productId){\n return subscriptionDeliveryService.removeProduct(productId);\n };\n\n $scope.productQuantityUpdatedRequest = function(productId, sku, quantity, prescriptionId){\n return subscriptionDeliveryService.updateProduct($scope.data.model.details.subscriptionDeliveryId, productId, sku, quantity, prescriptionId);\n };\n\n\t}]);\n","angular.module('site.controllers')\n .controller('MyPageSubscriptionDetailsController', ['$scope', '$timeout', 'subscriptionService',\n function ($scope, $timeout, subscriptionService) {\n $scope.data = {\n model : {},\n status : \"none\",\n editing : {\n title: {\n editing: false,\n value: null\n }\n }\n };\n\n $scope.init = function (subscriptionsOverviewUrl) {\n $scope.data.subscriptionsOverviewUrl = subscriptionsOverviewUrl;\n\n var json = $('#SubscriptionDetailsController').attr('data-viewmodel');\n $scope.data.model = angular.fromJson(json.toString());\n\n $scope.setStatus();\n };\n\n $scope.setStatus = function() {\n if($scope.data.model.details.isActive && !$scope.isMissingInformation()) {\n $scope.data.status = 'active';\n } else if ($scope.isMissingInformation()){\n $scope.data.status = 'need-info';\n } else if (!$scope.data.model.details.isActive && !$scope.isMissingInformation() && $scope.data.model.details.statusId != -1) {\n $scope.data.status = 'pause';\n } else if (!$scope.data.model.details.isActive && !$scope.isMissingInformation() && $scope.data.model.details.statusId == -1) {\n $scope.data.status = 'new';\n }\n }\n\n $scope.isMissingInformation = function(){\n if ($scope.data.model.card == null\n || $scope.data.model.details.deliveryAddress == null\n || $scope.data.model.details.shippingTypeAlias == null\n || $scope.data.model.details.pickupAgentId == null)\n {\n return true;\n }\n return false;\n };\n\n // subscription general methods\n $scope.confirmDeleteSubscription = function(){\n $scope.data.model.details.wantToDelete = true;\n\n $timeout(function () {\n servicemenu();\n }, 0);\n };\n\n $scope.resetServiceMenu = function(){\n $scope.data.model.details.wantToDelete = false;\n\n $timeout(function () {\n servicemenu();\n }, 0);\n };\n\n $scope.deleteSubscription = function(){\n subscriptionService.delete($scope.data.model.details.subscriptionId).then(\n function successCallback(response) {\n window.location = $scope.data.subscriptionsOverviewUrl;\n $scope.data.model.details.wantToDelete = false;\n },\n function errorCallback(error){\n console.error(error);\n }\n );\n };\n\n $scope.resumeSubscription = function(){\n subscriptionService.resume($scope.data.model.details.subscriptionId).then(\n function successCallback(response) {\n $scope.data.model.details.isActive = true;\n\n if ($scope.data.model.details.statusId == -1){\n $scope.data.model.details.statusId = 0;\n }\n\n $scope.setStatus();\n\n $timeout(function () {\n servicemenu();\n }, 0);\n },\n function errorCallback(error){\n console.error(error);\n }\n );\n };\n\n $scope.pauseSubscription = function(){\n subscriptionService.pause($scope.data.model.details.subscriptionId).then(\n function successCallback(response) {\n $scope.data.model.details.isActive = false;\n $scope.setStatus();\n\n $timeout(function () {\n servicemenu();\n }, 0);\n },\n function errorCallback(error){\n console.error(error);\n }\n );\n };\n\n $scope.initEditTitle = function(){\n $scope.$broadcast(\"initEditTitleEvent\");\n };\n\n $scope.updateIntervalRequest = function(interval){\n return subscriptionService.updateInterval($scope.data.model.details.subscriptionId, interval);\n };\n\n $scope.productRemovalRequest = function(productId){\n return subscriptionService.removeProduct(productId);\n };\n\n $scope.productQuantityUpdatedRequest = function(productId, sku, quantity, prescriptionId){\n return subscriptionService.updateProduct($scope.data.model.details.subscriptionId, productId, sku, quantity, prescriptionId);\n };\n\n $scope.updateDeliveryAddressRequest = function(addressId, firstName, lastName, companyName, addressLine, postalCode, city, countryIsoCode){\n return subscriptionService.updateAddress($scope.data.model.details.subscriptionId, addressId, firstName, lastName, companyName, addressLine, postalCode, city, countryIsoCode);\n };\n }]);\n\n","angular.module('site.controllers')\n\t.controller('nemIdLoginController', ['$scope', '$modal', 'customerserviceService', function ($scope, $modal, customerserviceService) {\n\n $scope.openAboutMitIdModal = function () {\n $scope.modalInstance = $modal.open({\n templateUrl: '/partials/nemIdLogin/aboutMitId',\n controller: 'nemIdLoginController',\n size: 'lg',\n scope: $scope,\n });\n }\n\n $scope.openReadMoreModal = function () {\n $scope.modalInstance = $modal.open({\n templateUrl: '/partials/nemIdLogin/readMore',\n controller: 'nemIdLoginController',\n size: 'lg',\n scope: $scope,\n });\n }\n\n $scope.openReadHowModal = function () {\n $scope.modalInstance = $modal.open({\n templateUrl: '/partials/nemIdLogin/readHow',\n controller: 'nemIdLoginController',\n size: 'lg',\n scope: $scope,\n });\n }\n\n $scope.closeModal = function () {\n $scope.modalInstance.dismiss();\n }\n\n $scope.getAllFaqs = function () {\n customerserviceService.allFaq().then(function successCallback(response) {\n $scope.faqs = response.data.channel.items;\n });\n }\n\n $scope.getChildPrescriptionFaq = function (id) {\n customerserviceService.faq(id).then(function successCallback(response) {\n $scope.childPrescriptionFaq = response.data;\n });\n }\n\t}]);\n","angular.module('site.controllers')\n // basket overview in checkout\n\t.controller('newBasketController', ['$scope','$rootScope', '$timeout', '$window', 'basketService', 'tagManagerService', function ($scope,$rootScope, $timeout, $window, basketService, tagManagerService) {\n $scope.active = false;\n $scope.showValidationMessages = false;\n $scope.voucher = {\n visible : false,\n code: '',\n pending: false\n };\n\n $scope.loading = true;\n $scope.error = false;\n\n $scope.init = function () {\n\n $scope.loading = true;\n //Ensure that we show the right basket from basketservice instead of cached version.\n basketService\n .get()\n .then(\n function successCallback(response) {\n if (response != null && response.data != null)\n {\n $scope.model = response.data;\n setCachedPreview($scope.model);\n $rootScope.$broadcast('basketModelUpdate', $scope.model);\n }\n else\n {\n $scope.model = null;\n $scope.error = true;\n }\n\n $scope.loading = false;\n }\n );\n };\n\n $scope.$on('basketModelUpdate', function (event, model) {\n\t $scope.model = model;\n\t $scope.setAnimationTimer();\n });\n\n $scope.productRemovalRequest = function(orderLine, reload){\n var product = tagManagerService.mapBasketOrderLine(orderLine, orderLine.quantity);\n\n if(orderLine.prescriptionId === '' || orderLine.prescriptionId == null){\n return basketService.update(orderLine.sku, 0).then(function(rsp){\n tagManagerService.updateDataLayer('removeFromCart', product);\n if (reload)\n {\n $window.location.reload(true)\n }\n });\n }\n else{\n return basketService.updatePrescriptionProduct(orderLine.sku, 0, orderLine.prescriptionId).then(function(rsp){\n tagManagerService.updateDataLayer('removeFromCart', product);\n if (reload)\n {\n $window.location.reload(true)\n }\n });\n }\n };\n\n $scope.productQuantityUpdatedRequest = function(orderLine, quantity){\n var product = tagManagerService.mapBasketOrderLine(orderLine, Math.abs(quantity));\n var event;\n if (quantity < product.quantity){\n event = 'removeFromCart';\n }\n else {\n event = 'addToCart';\n }\n\n return basketService.update(orderLine.sku, quantity).then(function(rsp){\n tagManagerService.updateDataLayer(event, product);\n });\n };\n\n\t $scope.setAnimationTimer = function () {\n\t if ($scope.animate) {\n\t return;\n\t }\n\t $scope.animate = true;\n\t $timeout(function () {\n\t $scope.animate = false;\n\t }, 3000);\n };\n\n\t $scope.hasSoldOutItems = function (items) {\n\t return !!_.find(items, function (item) {\n\t return !item.inStock;\n\t });\n };\n\n $scope.toggleVisiblity = function() {\n $scope.active = !$scope.active;\n };\n\n $scope.hiddenVisiblity = function () {\n $scope.active = false;\n };\n\n $scope.isVisible = function () {\n return $scope.active;\n };\n\n $scope.getBasketStockStatus = function () {\n var highestStockStatus = 1;\n\n if (!this.model)\n return \"\";\n\n for (var i = 0; i < this.model.orderLines.length; i++) {\n var stockStatus = this.model.orderLines[i].stockStatus;\n\n if (stockStatus > highestStockStatus) {\n highestStockStatus = stockStatus;\n }\n }\n\n return highestStockStatus;\n };\n\n $scope.useVoucher = function () {\n if ($scope.voucher.pending)\n {\n return false;\n }\n\n $scope.showValidationMessages = true;\n if ($scope.voucherForm.$invalid) {\n return false;\n }\n\n if (!($scope.voucher.code != undefined && $scope.voucher.code != \"\")) {\n $scope.showValidationMessages = false;\n return false;\n }\n\n $scope.voucher.pending = true;\n $scope.showValidationMessages = false;\n\n basketService.useVoucher($scope.voucher.code).then(\n function successCallback(response) {\n $scope.voucher.pending = false;\n // $scope.model = $scope.data;\n $scope.voucher.code = '';\n },\n function errorCallback(error){\n $scope.voucher.pending = false;\n console.error(error);\n }\n );\n };\n\n $scope.removeVoucher = function (code) {\n if ($scope.voucher.pending)\n {\n return false;\n }\n\n $scope.voucher.pending = true;\n basketService.removeVoucher(code).then(\n function successCallback(response) {\n $scope.voucher.pending = false;\n // $scope.model = $scope.data;\n },\n function errorCallback(error){\n $scope.voucher.pending = false;\n console.error(error);\n }\n );\n };\n }]);\n","angular.module('site.controllers')\n\t.controller('newsletterSubscribeFormController', ['$scope', 'userService', function ($scope, user) {\n\t $scope.submitForm = function () {\n\t if ($scope.newslettersignupForm.$invalid) {\n\t $scope.showValidationMessages = true;\n\t\t\t} else {\n\t $scope.showValidationMessages = false;\n\t $scope.pending = true;\n\t user.newsletterSubscribe($scope.model)\n\t\t\t\t.then(function (response) {\n\t\t\t\t\tvar data = response.data;\n\t\t\t\t\tif (data.receiptUrl) {\n\t\t\t\t\t\tlocation.href = data.receiptUrl;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$scope.pending = false;\n\t\t\t\t\t}\n\t\t\t\t}, function () {\n\t\t\t\t $scope.pending = false;\n\t\t\t\t});\n\t }\n\t };\n\t}]);","angular.module('site.controllers')\n .controller('panelSearchController', ['$scope', '$timeout', '$http', 'searchService', 'basketService', 'userService', '$modalStack', '$modal', 'tagManagerService', '$rootScope',\n function ($scope, $timeout, $http, searchService, basket, userService, $modalStack, $modal, tagManagerService, $rootScope) {\n\n\t /* ----------------------------------------------------------------------- */\n $scope.isClubMember = userService.isClubMemberSession();\n\t $scope.defaultQuantity = 1; //$scope.product.quantity || 1;\n\t $scope.resetQuantity = function (event) {\n\t if (event) {\n\t event.preventDefault();\n\t }\n\t $scope.quantity = $scope.defaultQuantity;\n\t };\n\n\t $scope.resetQuantity();\n\n $scope.updateBasket = function (id, quantity, event, type, position, searchProduct, tagManagerProperties, relatedProductSkus) {\n\n\t if (event) {\n\t event.preventDefault();\n\t }\n\t if ($scope.pending) {\n\t return;\n\t }\n\t $scope.pending = true;\n\t basket.update(id, quantity).then(function (results) {\n if (searchProduct){\n var product = tagManagerService.mapSearchProduct(searchProduct, position, quantity);\n tagManagerService.updateDataLayer(type, product, tagManagerProperties);\n }\n\t $scope.resetQuantity();\n $scope.pending = false;\n\n\t // when clicking add to basket button\n\t if (type === 'addToCart') {\n\t $scope.order = results.data;\n\t $scope.itemsAddedCount = quantity;\n\n\t var orderLines = $scope.order.orderLines;\n\t // find last added product\n $rootScope.lastAddedItem = _.findWhere(orderLines, { sku: id.toString() });\n\n\t // display dialog\n\t $timeout(function () {\n $scope.openRelatedProductsModel('lg', relatedProductSkus);\n\t }, 50);\n\t }\n\t });\n\t\t};\n\n\t\t$scope.clickProduct = function(position, searchProduct, tagManagerProperties){\n\t\t\tvar product = tagManagerService.mapSearchProduct(searchProduct, position);\n\t\t\ttagManagerService.updateDataLayer('productClick', product, tagManagerProperties);\n\t\t}\n\n\t $timeout(function () {\n\t $scope.initAnim = true;\n\t }, 10);\n\t /* ----------------------------------------------------------------------- */\n\n\n\t $scope.$on('searchTerm', function (event, model) {\n\t $scope.model = model;\n\t $scope.setAnimationTimer();\n\t });\n\n\t $scope.setAnimationTimer = function () {\n\t if ($scope.animate) {\n\t return;\n\t }\n\t $scope.animate = true;\n\t $timeout(function () {\n\t $scope.animate = false;\n\t }, 3000);\n\t };\n\n\t $scope.products = [];\n\t $scope.empty = true;\n\t $scope.searchTerm = null;\n\t $scope.endOfResults = false;\n\n\t $scope.resetSearchTerm = function () {\n\t $scope.searchTerm = null;\n\t $scope.empty = true;\n\t $scope.products.length = 0;\n\t $scope.isLoading = false;\n\t };\n\n\n\t var tempFilterText = '',\n filterTextTimeout;\n\n\t $scope.$watch('searchTerm', function (newValue, oldValue) {\n\n\t\t\tif (filterTextTimeout) $timeout.cancel(filterTextTimeout);\n\n\t $scope.empty = newValue == null || newValue == '';\n\n\t if (newValue == '')\n\t $scope.searchTerm = null;\n\n\t if (newValue != oldValue && newValue != '' && $scope.searchTerm != null) {\n\n\t $scope.isLoading = true;\n\n\t tempFilterText = newValue;\n\t filterTextTimeout = $timeout(function () {\n\t $scope.searchTerm = tempFilterText;\n\n\t searchService.catalogElastic({ 'term': $scope.searchTerm }).then(function (response) {\n\t $scope.data = response.data;\n\t $scope.endOfResults = $scope.data.paging.page == $scope.data.paging.pages;\n\n\t $scope.products = $scope.data.products;\n\t\t\t\t\t\t$scope.isLoading = false;\n\t });\n\n\t\t\t\t}, /* delay */ 250);\n\t }\n\n\t if ($scope.empty) {\n\t $scope.resetSearchTerm();\n\t }\n\t }, true);\n\n\t $scope.loadingMoreProducts = false;\n\t $scope.loadMoreItems = function () {\n\n\t if ($scope.data.paging != null && $scope.data.paging.page != $scope.data.paging.pages) {\n\n\t $scope.loadingMoreProducts = true;\n\n // set next page\n\t $scope.data.paging.page++;\n\n\t var query = {\n\t term: $scope.searchTerm,\n\t page: $scope.data.paging.page\n\t };\n\n\t searchService.catalogElastic(query).then(function (response) {\n\t $scope.data = response.data;\n\t $scope.endOfResults = $scope.data.paging.page == $scope.data.paging.pages;\n\n\t angular.forEach($scope.data.products, function (obj) {\n\t $scope.products.push(obj);\n\t });\n\t });\n\n\t $timeout(function() {\n\t $scope.loadingMoreProducts = false;\n\t }, 100);\n\t }\n\t };\n\n $scope.openRelatedProductsModel = function (size, relatedProductSkus) {\n\n var query = {\n skus: relatedProductSkus,\n isClubMember: $scope.isClubMember\n };\n\n $modalStack.dismissAll();\n var modalInstance = $modal.open({\n templateUrl: '/partials/checkout/addToBasketDialog',\n controller: 'modelInstanceController',\n size: size,\n resolve: {\n order: function () {\n return $scope.order;\n },\n itemsAddedCount: function () {\n return $scope.itemsAddedCount;\n },\n lastAddedItem: function () {\n return $rootScope.lastAddedItem;\n }\n }\n });\n };\n\t}]);\n","angular.module('site.controllers')\n.controller('productDetailsSubscriptionController', ['$scope', '$rootScope', '$timeout', 'subscriptionService',\n function ($scope, $rootScope, $timeout, subscriptionService) {\n \n $scope.model = {\n subscriptions: null\n };\n\n $scope.onInit = function(){\n subscriptionService.getSubscriptions().then(function (response) {\n $scope.model.subscriptions = response.data;\n });\n };\n }]);","angular.module('site.controllers')\n .controller('productListController', ['$scope', '$rootScope', '$timeout', '$filter', '$q', '$modal', '$modalStack', 'basketService', 'reviewService', 'smoothScroll', 'userService', 'tagManagerService',\n function ($scope, $rootScope, $timeout, $filter, $q, $modal, $modalStack, basketService, reviewService, smoothScroll, userService, tagManagerService) {\n $scope.defaultQuantity = 1;//$scope.product.quantity || 1;\n $scope.isClubMember = userService.isClubMemberSession();\n $scope.debounceTimeout;\n $scope.optimistic = {quantity: 1};\n $scope.prevQuantity = 1;\n $scope.incrementValue = 0;\n\n $scope.resetQuantity = function (event) {\n if (event) {\n event.preventDefault();\n }\n $scope.quantity = $scope.defaultQuantity;\n };\n\n $scope.resetQuantity();\n\n $scope.updateBasket = function (id, quantity, event, type, position, productJson, tagManagerProperties, relatedProductSkus) {\n $scope.prevQuantity = quantity;\n type = (typeof type === 'undefined') ? null : type;\n\n if (event) {\n event.preventDefault();\n }\n if ($scope.pending) {\n return;\n }\n $scope.selectedSku = id;\n basketService.update(id, quantity).then(function (results) {\n $scope.optimistic.quantity = quantity;\n\n if (productJson) {\n var product = angular.fromJson(productJson);\n product.position = position;\n product.quantity = quantity;\n tagManagerService.updateDataLayer(type, product, tagManagerProperties);\n }\n $scope.resetQuantity();\n $scope.selectedSku = null;\n\n // when clicking add to basket button\n if (type === 'addToCart') {\n $scope.order = results.data;\n $scope.itemsAddedCount = quantity;\n\n var orderLines = $scope.order.orderLines;\n // find last added product\n $rootScope.lastAddedItem = _.findWhere(orderLines, { sku: id });\n\n // find last added product\n $rootScope.lastAddedItem = _.findWhere(orderLines, { sku: id.toString() });\n\n // display dialog\n $timeout(function () {\n $scope.openRelatedProductsModel('lg', relatedProductSkus);\n }, 50);\n }\n }).catch(function (error) {\n console.log('fejl:', error);\n });\n };\n\n\t\t\t$scope.clickProduct = function(position, productJson, tagManagerProperties){\n var product = angular.fromJson(productJson);\n product.position = position;\n\t\t\t\ttagManagerService.updateDataLayer('productClick', product, tagManagerProperties);\n\t\t\t}\n\n $scope.openRelatedProductsModel = function (size, relatedProductSkus) {\n\n var query = {\n skus: relatedProductSkus,\n isClubMember: $scope.isClubMember\n };\n\n $modalStack.dismissAll();\n var modalInstance = $modal.open({\n templateUrl: '/partials/checkout/addToBasketDialog',\n controller: 'modelInstanceController',\n size: size,\n resolve: {\n order: function () {\n return $scope.order;\n },\n itemsAddedCount: function () {\n return $scope.itemsAddedCount;\n },\n lastAddedItem: function () {\n return $rootScope.lastAddedItem;\n },\n },\n scope: $scope,\n });\n };\n\n }]);\n","angular.module('site.controllers')\n .controller('profileConfirmPasswordController' ,['$scope', '$controller', 'userService', function ($scope, $controller, userService) {\n\n $scope.data = {\n model : {\n email: '',\n password: ''\n },\n config : {},\n form : {},\n userId : '',\n successUrl : ''\n }\n\n $scope.init = function (userId, successUrl) {\n $scope.data.config.email = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n $scope.data.userId = userId;\n $scope.data.successUrl = successUrl;\n }\n\n $scope.save = function ()\n {\n userService\n .oneTimeUpdatePassword($scope.data.userId, $scope.data.model)\n .then(function (rsp){\n window.location = $scope.data.successUrl;\n });\n }\n }]);\n","angular.module('site.controllers')\n .controller('ProfileInformationController', ['$scope', '$timeout', 'utilitiesService', 'userService', 'tagManagerService',\n function ($scope, $timeout, utils, userService, tagManagerService) {\n\n $scope.data = {\n // configuration object, containing default configuration options set in Umbraco\n config: {\n //defaultMembershipAlias : '',\n },\n form: {\n currentStepIndex: 0 ,// which step DOM elements to display?,\n showValidationMessages: false,\n pending: false,\n },\n // contains data collected during signup form steps\n model : {\n membershipAlias : '',\n firstname: '',\n lastname: '',\n gender: null,\n email: '',\n newsletter: false,\n password: '',\n acceptedTermsOfAgreement: false,\n methods: {} // will contain methods related for particular step, check below\n }\n };\n\n $scope.init = function () {\n var jsonConfig = $('#ProfileInformationController').attr('data-config');\n $scope.data.config = angular.fromJson(jsonConfig.toString());\n\n $scope.data.config.email = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n\n // set selected membership alias\n $scope.data.model.membershipAlias = $scope.data.config.MembershipTypeAlias;\n $scope.data.model.nextStepUrl = $scope.data.config.NextStepUrl;\n\n // set userinformation\n $scope.data.model.firstname = $scope.data.config.Firstname;\n $scope.data.model.lastname = $scope.data.config.Lastname;\n $scope.data.model.email = $scope.data.config.UserEmail;\n \n\n // delegate methods\n $scope.data.model.methods.createRange = utils.createRange;\n };\n\n $scope.data.model.methods.formSubmitted = function(form) {\n $scope.data.form.showValidationMessages = true;\n if (form.$invalid || $scope.data.form.pending){\n return false;\n }\n\n $scope.data.config.dateFormatInvalid = false;\n\n userService.create({\n \"firstName\": $scope.data.model.firstname,\n \"lastName\": $scope.data.model.lastname,\n \"email\": $scope.data.model.email,\n \"newsletterTermsAccepted\": $scope.data.model.newsletter,\n \"profileType\": $scope.data.model.membershipAlias,\n \"information\":{\n \"gender\": $scope.data.model.gender\n },\n \"password\": $scope.data.model.password\n })\n .then(function (response) {\n if ($scope.data.model.membershipAlias !== 'Premium') {\n window.location = $scope.data.model.nextStepUrl\n }\n $scope.data.form.pending = false;\n\n // update datalayer\n tagManagerService.push({ event: 'userSignup', type: $scope.data.model.membershipAlias });\n\n //redirect to ConfirmationPage? with params?\n if (response &&\n response.data &&\n response.data.resultObj &&\n response.data.resultObj.dibsRedirectUrl){\n window.location = response.data.resultObj.dibsRedirectUrl;\n }\n\n }, function(error){\n $scope.data.form.pending = false;\n });\n };\n\n $scope.isUndefinedOrNull = function(val) {\n return angular.isUndefined(val) || val === null\n };\n}]);\n","angular.module('site.controllers')\n\t.controller('raptorController', ['$scope', '$timeout', 'raptorProductService','tagManagerService', 'basketService', '$modalStack', '$modal', '$rootScope',\n function ($scope, $timeout, raptorProductService, tagManagerService, basketService, $modalStack, $modal, $rootScope) {\n $scope.defaultQuantity = 1;\n $scope.debounceTimeout;\n $scope.optimistic = {quantity: 1};\n $scope.prevQuantity = 1;\n $scope.incrementValue = 0;\n\n $scope.init = function (method, count, customParam) {\n switch (method) {\n case 'userRecommendations':\n raptorProductService.userRecommendations(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'mostPopularRightNow':\n raptorProductService.mostPopularRightNow(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'topSellingInCategory':\n raptorProductService.topSellingInCategory(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'similarItems':\n raptorProductService.similarItems(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'relatedItems':\n raptorProductService.relatedItems(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'relatedItemsForBasket':\n var basket = basketService.getCachedPreview();\n if (basket && basket.orderLines)\n {\n var skus = '';\n angular.forEach(basket.orderLines, function (v,k){\n if (skus.length == 0){\n skus = v.sku;\n }else {\n skus = skus + ',' + v.sku;\n }\n })\n raptorProductService.relatedItemsForBasket(skus, count).then(function (res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n }\n break;\n case 'userTopSellingItems':\n raptorProductService.userTopSellingItems(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'overallTopSellingXDays':\n raptorProductService.overallTopSellingXDays(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'cookieHistory':\n raptorProductService.cookieHistory(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'campaignItems':\n raptorProductService.campaignItems(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'content2Products':\n raptorProductService.content2Products(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'product2Contents':\n raptorProductService.product2Contents(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'topViewedInCategory':\n raptorProductService.topViewedInCategory(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'getMerchandisingProducts':\n raptorProductService.getMerchandisingProducts(count, customParam).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n default:\n console.log(\"Default added for test\");\n //$scope.recommendedProducts =\n break;\n // REMEMBER, to add new modules in tagManager.js around line 101 as well\n }\n };\n $scope.clickProduct = function(position, productJson, tagManagerProperties, raptorModule){\n var product = angular.fromJson(productJson);\n product.position = position;\n tagManagerService.updateDataLayer('productClick', tagManagerService.mapSearchProduct(product, product.position,1), tagManagerProperties,raptorModule);\n };\n\n $scope.updateBasket = function (id, quantity, event, type, position, productJson, tagManagerProperties,raptorModule) {\n $scope.prevQuantity = quantity;\n type = (typeof type === 'undefined') ? null : type;\n\n if (event) {\n event.preventDefault();\n }\n if ($scope.pending) {\n return;\n }\n $scope.selectedSku = id;\n basketService.update(id, quantity).then(function (results) {\n $scope.optimistic.quantity = quantity;\n\n if (productJson) {\n var product = angular.fromJson(productJson);\n product.position = position;\n product.quantity = quantity;\n tagManagerService.updateDataLayer(type, tagManagerService.mapSearchProduct(product, product.position, product.quantity), tagManagerProperties,raptorModule);\n }\n\n $scope.resetQuantity();\n $scope.selectedSku = null;\n\n // when clicking add to basket button\n if (type === 'addToCart') {\n $scope.order = results.data;\n $scope.itemsAddedCount = quantity;\n\n var orderLines = $scope.order.orderLines;\n // find last added product\n $rootScope.lastAddedItem = _.findWhere(orderLines, { sku: id });\n\n // find last added product\n $rootScope.lastAddedItem = _.findWhere(orderLines, { sku: id.toString() });\n\n // display dialog\n $timeout(function () {\n $scope.openRelatedProductsModel('lg');\n }, 50);\n }\n }).catch(function (error) {\n console.log('fejl:', error);\n });\n };\n $scope.resetQuantity = function (event) {\n if (event) {\n event.preventDefault();\n }\n $scope.quantity = $scope.defaultQuantity;\n };\n\n $scope.resetQuantity();\n\n $scope.openRelatedProductsModel = function (size) {\n\n $modalStack.dismissAll();\n var modalInstance = $modal.open({\n templateUrl: '/partials/checkout/addToBasketDialog',\n controller: 'modelInstanceController',\n size: size,\n resolve: {\n order: function () {\n return $scope.order;\n },\n itemsAddedCount: function () {\n return $scope.itemsAddedCount;\n },\n lastAddedItem: function () {\n return $rootScope.lastAddedItem;\n },\n },\n scope: $scope,\n });\n };\n }]);\n","angular.module('site.controllers')\n.controller('subscriptionCreationController', ['$scope', '$rootScope', '$timeout', 'subscriptionService', '$q',\n function ($scope, $rootScope, $timeout, subscriptionService, $q) {\n \n $scope.model = {\n subscription: null,\n loading : true, // loading contract\n showValidationMessages : false,\n pending: false,\n subscriptionViewUrl: '',\n \n // TODO: move to shared location, where subscription-interval directive can use it aswell\n availableIntervalsInDays : [7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,252,259,266,273,280,287,294,301,308,315,322,329,336,343,350,357,364],\n productsInformation : []\n };\n\n $scope.onInit = function(productSku, productQuantity, subscriptionViewUrl){\n\n // add detailed product information object to product information array, used to display image, stock, prices of product\n var json = $('#SubscriptionCreationController').attr('data-product-information');\n $scope.model.productsInformation.push(angular.fromJson(json.toString()));\n\n // subscription view url\n $scope.subscriptionViewUrl = subscriptionViewUrl;\n\n // get subscriptinon creation contract\n subscriptionService.getCreationContract().then(function (response) {\n // set contract\n $scope.model.subscription = response.data;\n // update contract with preselected product sku\n $scope.model.subscription.products = [\n {\n \"sku\": productSku,\n \"quantity\": productQuantity\n }\n ];\n // ready to be displayed\n $scope.model.loading = false;\n });\n };\n\n // events\n\n $scope.formSubmitted = function(){\n // validate form\n $scope.model.showValidationMessages = true;\n if ($scope['subscriptionCreationForm'].$invalid || $scope.pending){\n return false;\n }\n \n // set as pending, to avoid resubmittion of form or subscribed product quantity change\n $scope.model.pending = true;\n \n // call service, to create a new subscription\n subscriptionService.createSubscription($scope.model.subscription.daysBetweenDeliveries, $scope.model.subscription.title)\n .then(function (response) {\n var subscriptionId = response.data.resultObj;\n\n // create subscription product\n subscriptionService.updateProduct(subscriptionId, null, $scope.model.subscription.products[0].sku,\n $scope.model.subscription.products[0].quantity, null)\n .then(function (productResponseData) {\n // redirect to subscription page\n window.location = $scope.subscriptionViewUrl+'/'+subscriptionId;\n }, function (productResponseData) {\n console.error(productResponseData);\n $scope.model.pending = false;\n });\n\n },function (data) {\n console.error(data);\n $scope.model.pending = false;\n });\n };\n\n $scope.productQuantityUpdatedRequest = function(productId, sku, quantity, prescriptionId){\n return $q(function(resolve, reject) {\n resolve(\n {\n \"sku\": sku,\n \"quantity\": quantity\n }\n );\n });\n };\n }]);","angular.module('site.controllers')\n .controller('subscriptionDeliveryShippingDetailsController', ['$scope', '$rootScope', '$timeout', 'subscriptionDeliveryService',\n '$q', 'shippingService', 'userService',\n function ($scope, $rootScope, $timeout, subscriptionDeliveryService, $q, shippingService, userService) {\n\n $scope.shippingSettings = null;\n\n $scope.subscriptionDeliveryAddress = null;\n $scope.profileType = null;\n $scope.loading = true;\n $scope.pending = false;\n\n $scope.subscriptionDeliveryId = null;\n $scope.successRedirectUrl = null;\n $scope.preselectedShippingTypeAlias = null;\n $scope.preselectedShippingMethodAlias = null;\n $scope.preselectedPickupPointId = null;\n $scope.shipping = {};\n\n $scope.init = function (subscriptionDeliveryId, successRedirectUrl, preselectedShippingTypeAlias, preselectedShippingMethodAlias) {\n\n // subscription address contract\n var json = $('#SubscriptionDeliveryShippingDetailsController').attr('data-viewmodel');\n $scope.subscriptionAddress = angular.fromJson(json.toString());\n\n // profile type\n $scope.profileType = userService.getProfileTypeAlias();\n\n // general\n $scope.successRedirectUrl = successRedirectUrl;\n $scope.subscriptionDeliveryId = subscriptionDeliveryId;\n\n // preselected values, used on save event, to see if any changes are made\n $scope.preselectedShippingTypeAlias = preselectedShippingTypeAlias;\n $scope.preselectedShippingMethodAlias = preselectedShippingMethodAlias;\n if ($scope.subscriptionAddress && $scope.subscriptionAddress.stationId) {\n $scope.preselectedPickupPointId = $scope.subscriptionAddress.stationId;\n $scope.shipping.selectedPickupPoint = $scope.subscriptionAddress.stationId;\n }\n\n $scope.shipping.selectedShippingType = preselectedShippingTypeAlias;\n $scope.shipping.selectedShippingTypeMethod = preselectedShippingMethodAlias;\n\n // shipping settings\n loadShippingSettings();\n };\n\n // private functions\n\n function loadShippingSettings() {\n\n shippingService.getSettingsForSubscriptionDelivery($scope.subscriptionDeliveryId).then(\n function successCallback(response) {\n $scope.shippingSettings = response.data;\n $scope.loading = false;\n $scope.validateShipping();\n },\n function errorCallback(error) {\n console.error(error);\n }\n );\n }\n\n // view functions\n\n $scope.save = function (data) {\n $scope.pending = true;\n $scope.subscriptionAddress = $scope.subscriptionAddress || {};\n var pickupPointId = (($scope.shipping.selectedPickupPoint) ? $scope.shipping.selectedPickupPoint : null);\n\n // if no changes, just redirect to success\n if ($scope.preselectedShippingMethodAlias == $scope.shipping.selectedShippingTypeMethod\n && $scope.preselectedPickupPointId == $scope.shipping.selectedPickupPoint) {\n\n console.log(\"No changes were made to shipping options\");\n window.location = $scope.successRedirectUrl;\n return false;\n }\n\n\n // update delivery method\n subscriptionDeliveryService.updateDeliveryMethod($scope.subscriptionDeliveryId, $scope.shipping.selectedShippingType, $scope.shipping.selectedShippingTypeMethod)\n .then(\n function successCallback(response) {\n // update address\n subscriptionDeliveryService.updateAddress($scope.subscriptionDeliveryId,\n $scope.subscriptionAddress.id,\n $scope.subscriptionAddress.firstName,\n $scope.subscriptionAddress.lastName,\n $scope.subscriptionAddress.companyName,\n $scope.subscriptionAddress.addressLine,\n $scope.subscriptionAddress.postalCode,\n $scope.subscriptionAddress.city,\n $scope.subscriptionAddress.countryIsoCode,\n pickupPointId,\n $scope.subscriptionAddress.pickupPointName,\n $scope.subscriptionAddress.pickupPointAddressLine,\n $scope.subscriptionAddress.pickupPointPostalCode,\n $scope.subscriptionAddress.pickupPointCity)\n .then(function successCallback(response) {\n window.location = $scope.successRedirectUrl;\n }, function (error) {\n console.error(error);\n });\n },\n function errorCallback(error) {\n console.error(error);\n }\n );\n };\n\n $scope.handleShippingOptionsInit = function (type, method) {\n $scope.shipping.selectedShippingType = type.alias;\n $scope.shipping.selectedShippingTypeMethod = method.alias;\n $scope.shipping.isPickupService = method.isPickupService;\n $scope.validateShipping();\n }\n // method called by shipping options directive\n $scope.handleShippingTypeMethodChanged = function (type, method) {\n $scope.shipping.selectedShippingType = type.alias;\n $scope.shipping.selectedShippingTypeMethod = method.alias;\n $scope.shipping.selectedPickupPoint = null;\n $scope.shipping.isPickupService = method.isPickupService;\n $scope.validateShipping();\n }\n // method called by shipping options directive\n $scope.handlePickupPointChanged = function (pickupPoint) {\n $scope.shipping.selectedPickupPoint = pickupPoint.id;\n $scope.subscriptionAddress.pickupPointName = pickupPoint.name;\n $scope.subscriptionAddress.pickupPointAddressLine = pickupPoint.address1;\n $scope.subscriptionAddress.pickupPointPostalCode = pickupPoint.zipCode;\n $scope.subscriptionAddress.pickupPointCity = pickupPoint.city;\n $scope.validateShipping();\n }\n\n $scope.validateShipping = function () {\n if ($scope.shipping.isPickupService) {\n if ($scope.shipping.selectedPickupPoint) {\n $scope.shipping.shippingValid = true;\n } else {\n $scope.shipping.shippingValid = false;\n }\n } else {\n $scope.shipping.shippingValid = true;\n }\n }\n }]);\n","angular.module('site.controllers')\n .controller('subscriptionFlowController', ['$scope', '$timeout', 'userService', 'subscriptionService', 'shippingService', function ($scope, $timeout, user, subscriptionService, shippingService) {\n $scope.showValidationMessages = false;\n $scope.pending = false;\n $scope.validationErrors = null; // []\n $scope.showNofityResetPassword = false;\n $scope.step = 'undefined';\n\n $scope.currentExisting = {}\n $scope.currentProduct = {}\n $scope.currentNewSubscription = {};\n $scope.currentNewSubscriptionId = {};\n $scope.currentNewSubscriptionTotal = 0;\n $scope.currentNewSubscriptionShowDatePicker = true;\n $scope.currentNewSubscriptionStartingDate = \"\";\n $scope.model = {};\n $scope.cntrl = {};\n $scope.shipping = {};\n $scope.newPickedDate = \"\";\n $scope.nextDeliveryWeek = \"\";\n\n\n $scope.init = function () {\n $scope.$on('open-subscription-flow-new', function (event, args) {\n $scope.getDeliveryWeek(0);\n $scope.initNewSubscription(args);\n console.log('args', args);\n });\n\n $scope.$on('open-subscription-flow-existing', function (event, args) {\n $scope.openExisting(args);\n });\n };\n\n // add to existing subscription\n $scope.openExisting = function (args) {\n $scope.step = 'addToExisting';\n\n var promise = subscriptionService.subscriptionAddProduct(args.SubId, args.Sku, 1);\n promise.then(function (response) {\n $scope.handleResponse(response, args.Sku);\n });\n };\n\n $scope.changeQty = function (qty) {\n $scope.currentProduct.qty = $scope.currentProduct.qty + qty;\n if ($scope.currentProduct.qty <= 0)\n $scope.currentProduct.qty = 0;\n\n $scope.updateProduct($scope.currentProduct.qty);\n }\n\n $scope.changeQtyNew = function (qty) {\n if (($scope.currentNewSubscription.quantity + qty) <= 0)\n return;\n\n $scope.currentNewSubscription.quantity = $scope.currentNewSubscription.quantity + qty;\n $scope.currentNewSubscriptionTotal = $scope.currentNewSubscription.productPrice * $scope.currentNewSubscription.quantity;\n }\n\n $scope.updateProduct = function (quantity) {\n var promise = subscriptionService.updateProduct2($scope.currentExisting.id, $scope.currentProduct.id, $scope.currentProduct.sku, quantity, null);\n promise.then(\n function (response) {\n $scope.handleResponse(response, $scope.currentProduct.sku);\n }\n );\n };\n\n $scope.getDeliveryWeek = function (date) {\n var promise = subscriptionService.getDeliveryWeek(date)\n promise.then(function (resp) {\n $scope.nextDeliveryWeek = resp.data;\n });\n }\n\n $scope.selectPickupPoint = function () {\n console.log('$scope.currentNewSubscription', $scope.currentNewSubscription);\n $scope.step = 'selectPickupPoint';\n $scope.newPickedDate = $('#js-datepicker-container #datepicker').val();\n }\n\n $scope.loadShippingSettingsForSubscription = function (sku, quantity) {\n console.log('$scope.loadShippingSettingsForSubscription ');\n shippingService.getSettingsForSubscription(sku, quantity).then(\n function successCallback(response) {\n $scope.shippingSettings = response.data;\n\n $scope.cntrl.shippingSettings = response.data;\n $scope.loading = false;\n },\n function errorCallback(error) {\n console.error(error);\n }\n );\n };\n\n $scope.end = function (response) {\n $scope.step = 'end';\n $scope.currentNewSubscriptionId = response.data.resultObj;\n $timeout(function () {\n overlays();\n }, 0);\n }\n\n $scope.goToSubscriptionNewAddCard = function () {\n window.location = \"/umbraco/Surface/GatewaySurface/CreateSubscriptionPayment?subscriptionid=\"+$scope.currentNewSubscriptionId;\n }\n\n $scope.goToSubscriptionNew = function (baseUrl) {\n var url = baseUrl + \"/\" + $scope.currentNewSubscriptionId;\n window.location = url;\n }\n\n $scope.goToSubscriptionExisting = function (baseUrl) {\n var url = baseUrl + \"/\" + $scope.currentExisting.id;\n\n window.location = url;\n }\n\n $scope.toggleDatePicker = function () {\n $scope.currentNewSubscriptionShowDatePicker = !$scope.currentNewSubscriptionShowDatePicker;\n };\n\n $scope.fc = function (value) {\n var tmp = Math.round(value * 100) / 100;\n tmp = tmp.toString();\n\n var decPos = tmp.indexOf('.');\n\n if (decPos === -1) {\n return value + \",00\";\n }\n\n var major = tmp.substring(0, decPos);\n var minor = tmp.substring(decPos + 1);\n\n if (minor.length > 2) {\n minor = minor.substring(0, 2);\n } else {\n minor = minor.padEnd(2, '0');\n }\n\n return major + \",\" + minor;\n };\n\n // create new subscription\n $scope.initNewSubscription = function (sku) {\n $scope.step = 'new';\n $scope.newPickedDate = \"\";\n\n var promise = subscriptionService.getCreationWithProductContract(sku);\n promise.then(function (response) {\n $scope.currentNewSubscription = response.data;\n $scope.currentNewSubscriptionTotal = $scope.currentNewSubscription.productPrice * $scope.currentNewSubscription.quantity;\n });\n }\n\n $scope.handleResponse = function (response, sku) {\n $scope.currentExisting = response.data.value;\n\n var products = $scope.currentExisting.subscriptionProducts;\n for (var i = 0; i < products.length; i++) {\n if (products[i].sku == sku) {\n $scope.currentProduct = products[i];\n break;\n }\n }\n };\n\n $scope.dateChanged = function (d) {\n var df = $scope.formatDateForService(d);\n $scope.getDeliveryWeek(df);\n }\n\n $scope.formatDateForService = function (d) {\n\n if (d != null && d.indexOf('-') > 0) {\n var ya = d.split('-');\n var ma = ya[0].split('/');\n var year = ya[1];\n var month = ma[1];\n var day = ma[0];\n\n return year + \"-\" + month + \"-\" + day;\n }\n };\n\n $scope.createNewSubscription = function () {\n\n console.log('$scope.createNewSubscription');\n if ($scope.creationPending) {\n return;\n }\n\n $scope.currentNewSubscription.stationId = $scope.shipping.selectedPickupPoint;\n $scope.currentNewSubscription.shippingTypeAlias = $scope.shipping.selectedShippingType;\n $scope.currentNewSubscription.pickupAgentId = $scope.shipping.selectedShippingTypeMethod;\n\n var tmp = $scope.newPickedDate;\n\n if (tmp != null && tmp.indexOf('-') > 0) {\n var ya = tmp.split('-');\n var ma = ya[0].split('/');\n var year = ya[1];\n var month = ma[1];\n var day = ma[0];\n\n $scope.currentNewSubscription.startingDate = year + \"-\" + month + \"-\" + day;\n\n console.log(\"currentNewSubscriptionStartingDate\", $scope.currentNewSubscriptionStartingDate);\n } else {\n console.log(\"no date\");\n $scope.currentNewSubscription.startingDate = null;\n }\n\n $scope.creationPending = true;\n console.log('$scope.createNewSubscription', 'calling service');\n var promise = subscriptionService.createSubscriptionWithProduct($scope.currentNewSubscription);\n\n promise.then(function (response) {\n console.log('$scope.createNewSubscription response', response);\n $scope.end(response);\n }, function (response) {\n console.log(\"error\", response);\n $scope.creationPending = false;\n });\n }\n\n // method called by shipping options directive\n $scope.handleShippingOptionsInit = function (type, method) {\n $scope.shipping.selectedShippingType = type.alias;\n $scope.shipping.selectedShippingTypeMethod = method.alias;\n $scope.shipping.isPickupService = method.isPickupService;\n $scope.validateShipping();\n }\n // method called by shipping options directive\n $scope.handleShippingTypeMethodChanged = function (type, method) {\n $scope.shipping.selectedShippingType = type.alias;\n $scope.shipping.selectedShippingTypeMethod = method.alias;\n $scope.shipping.selectedPickupPoint = null;\n $scope.shipping.isPickupService = method.isPickupService;\n $scope.validateShipping();\n }\n // method called by shipping options directive\n $scope.handlePickupPointChanged = function (pickupPoint) {\n $scope.shipping.selectedPickupPoint = pickupPoint.id;\n\n var address = {\n \"stationId\": pickupPoint.id,\n \"companyName\": pickupPoint.name,\n \"name\": \"PickupPoint\",\n \"addressLine\": pickupPoint.address1,\n \"postalCode\": pickupPoint.zipCode,\n \"city\": pickupPoint.city\n };\n\n $scope.currentNewSubscription.pickupPointAddress = address;\n $scope.validateShipping();\n }\n\n $scope.validateShipping = function () {\n if ($scope.shipping.isPickupService) {\n if ($scope.shipping.selectedPickupPoint) {\n $scope.shipping.shippingValid = true;\n } else {\n $scope.shipping.shippingValid = false;\n }\n } else {\n $scope.shipping.shippingValid = true;\n }\n }\n\n // event passed to shipping options directive\n $scope.save = function (data) {\n $scope.shipping.selectedShippingType = data.type.alias;\n $scope.shipping.selectedShippingTypeMethod = data.method.alias;\n $scope.shipping.selectedPickupPoint = data.pickupPoint.id;\n }\n\n $scope.init();\n\n }]);\n","angular.module('site.controllers')\n .controller('subscriptionShippingDetailsController', ['$scope', '$rootScope', '$timeout', 'subscriptionService', '$q', 'shippingService', 'userService',\n function ($scope, $rootScope, $timeout, subscriptionService, $q, shippingService, userService) {\n\n $scope.shippingSettings = null;\n $scope.subscriptionAddress = null; // subscription\n $scope.profileType = null;\n $scope.loading = true;\n $scope.pending = false;\n\n $scope.subscriptionId = null;\n $scope.successRedirectUrl = null;\n $scope.preselectedShippingTypeAlias = null;\n $scope.preselectedShippingMethodAlias = null;\n $scope.preselectedPickupPointId = null;\n $scope.shipping = {};\n\n $scope.init = function (subscriptionId, successRedirectUrl, preselectedShippingTypeAlias, preselectedShippingMethodAlias) {\n\n // subscription address contract\n var json = $('#SubscriptionShippingDetailsController').attr('data-viewmodel');\n $scope.subscriptionAddress = angular.fromJson(json.toString());\n\n // profile type\n $scope.profileType = userService.getProfileTypeAlias();\n\n // general\n $scope.subscriptionId = subscriptionId;\n $scope.successRedirectUrl = successRedirectUrl;\n\n // preselected values, used on save event, to see if any changes are made\n $scope.preselectedShippingTypeAlias = preselectedShippingTypeAlias;\n $scope.preselectedShippingMethodAlias = preselectedShippingMethodAlias;\n if ($scope.subscriptionAddress && $scope.subscriptionAddress.stationId){\n $scope.preselectedPickupPointId = $scope.subscriptionAddress.stationId;\n $scope.shipping.selectedPickupPoint = $scope.subscriptionAddress.stationId;\n }\n\n $scope.shipping.selectedShippingType = preselectedShippingTypeAlias;\n $scope.shipping.selectedShippingTypeMethod = preselectedShippingMethodAlias;\n\n // shipping settings\n loadShippingSettings();\n };\n\n // private functions\n\n function loadShippingSettings() {\n shippingService.getSettingsForExistingSubscription($scope.subscriptionId).then(\n function successCallback(response) {\n $scope.shippingSettings = response.data;\n $scope.loading = false;\n $scope.validateShipping();\n },\n function errorCallback(error) {\n console.error(error);\n }\n );\n }\n\n // view functions\n $scope.save = function (data) {\n\n $scope.pending = true;\n $scope.subscriptionAddress = $scope.subscriptionAddress || {};\n var pickupPointId = (($scope.shipping.selectedPickupPoint) ? $scope.shipping.selectedPickupPoint : null);\n\n // if no changes, just redirect to success\n if ($scope.preselectedShippingMethodAlias == $scope.shipping.selectedShippingTypeMethod\n && $scope.preselectedPickupPointId == $scope.shipping.selectedPickupPoint){\n \n console.log(\"No changes were made to shipping options\");\n window.location = $scope.successRedirectUrl;\n return false;\n }\n\n // update delivery method\n subscriptionService.updateDeliveryMethod($scope.subscriptionId, $scope.shipping.selectedShippingType, $scope.shipping.selectedShippingTypeMethod)\n .then(\n function successCallback(response) {\n // update address\n subscriptionService.updateAddress($scope.subscriptionId, \n $scope.subscriptionAddress.id,\n $scope.subscriptionAddress.firstName,\n $scope.subscriptionAddress.lastName, \n $scope.subscriptionAddress.companyName, \n $scope.subscriptionAddress.addressLine, \n $scope.subscriptionAddress.postalCode, \n $scope.subscriptionAddress.city,\n $scope.subscriptionAddress.countryIsoCode,\n pickupPointId,\n $scope.subscriptionAddress.pickupPointName,\n $scope.subscriptionAddress.pickupPointAddressLine,\n $scope.subscriptionAddress.pickupPointPostalCode,\n $scope.subscriptionAddress.pickupPointCity\n )\n .then(function successCallback(response) {\n window.location = $scope.successRedirectUrl;\n }, function (error) {\n console.error(error);\n });\n },\n function errorCallback(error) {\n console.error(error);\n }\n );\n };\n\n $scope.handleShippingOptionsInit = function (type, method) {\n $scope.shipping.selectedShippingType = type.alias;\n $scope.shipping.selectedShippingTypeMethod = method.alias;\n $scope.shipping.isPickupService = method.isPickupService;\n $scope.validateShipping();\n }\n // method called by shipping options directive\n $scope.handleShippingTypeMethodChanged = function (type, method) {\n $scope.shipping.selectedShippingType = type.alias;\n $scope.shipping.selectedShippingTypeMethod = method.alias;\n $scope.shipping.selectedPickupPoint = null;\n $scope.shipping.isPickupService = method.isPickupService;\n $scope.validateShipping();\n }\n // method called by shipping options directive\n $scope.handlePickupPointChanged = function (pickupPoint) {\n $scope.shipping.selectedPickupPoint = pickupPoint.id;\n $scope.subscriptionAddress.pickupPointName = pickupPoint.name;\n $scope.subscriptionAddress.pickupPointAddressLine = pickupPoint.address1;\n $scope.subscriptionAddress.pickupPointPostalCode = pickupPoint.zipCode;\n $scope.subscriptionAddress.pickupPointCity = pickupPoint.city;\n $scope.validateShipping();\n }\n\n $scope.validateShipping = function () {\n if ($scope.shipping.isPickupService){\n if($scope.shipping.selectedPickupPoint){\n $scope.shipping.shippingValid = true;\n } else {\n $scope.shipping.shippingValid = false;\n }\n } else {\n $scope.shipping.shippingValid = true;\n }\n }\n \n }]);","angular.module('site.filters')\n\t.filter('keepItemsWithProperty', function () {\n\t\treturn function (items, property) {\n\t\t\treturn _.filter(items, function (item) {\n\t\t\t\treturn item.hasOwnProperty(property);\n\t\t\t});\n\n\t\t};\n\t});","// to replace \\n to
      \nangular.module('site.filters')\n\t.filter('newlines', function () {\n return function(text) {\n \t if(text)\n \t return text.replace(/\\n/g, '
      ');\n return '';\n }\n})\n","// to escape html tags\nangular.module('site.filters')\n .filter('nohtml', function () {\n return function(text) {\n if(text)\n\t return text\n\t .replace(/&/g, '&')\n\t .replace(/>/g, '>')\n\t .replace(/= items.length - total;\n\t\t\t});\n\n\t\t};\n\t});","angular.module('site.filters')\n\t.filter('removeItemsWithProperty', [function () {\n\t\treturn function (items, property) {\n\t\t\treturn _.filter(items, function (item) {\n\t\t\t\treturn !item.hasOwnProperty(property);\n\t\t\t});\n\n\t\t};\n\t}]);","// to replace / /g to  \nangular.module('site.filters')\n\t.filter('replacespaces', function () {\n\t return function (text) {\n\t if (text)\n\t return text.replace(/ /g, \"  \");\n\t return '';\n\t }\n\t})","angular.module('site.filters')\n\t.filter('reverseItems', function () {\n\t\treturn function (items) {\n\t\t\treturn items.slice().reverse();\n\t\t};\n\t});","angular.module('site.filters')\n.filter('safe', ['$sce', function($sce){\n return function(text) {\n return $sce.trustAsHtml(text);\n };\n}]);","angular.module(\"site.directives\", []).directive('pageslide', [\n function (){\n var defaults = {};\n\n /* Return directive definition object */\n\n return {\n restrict: \"EA\",\n replace: false,\n transclude: false,\n scope: {\n psOpen: \"=?\",\n psAutoClose: \"=?\"\n },\n link: function ($scope, el, attrs) {\n /* Inspect */\n //console.log($scope);\n //console.log(el);\n //console.log(attrs);\n\n /* parameters */\n var param = {};\n\n param.side = attrs.psSide || 'right';\n param.speed = attrs.psSpeed || '0.5';\n param.size = attrs.psSize || '300px';\n param.zindex = attrs.psZindex || 1000;\n param.className = attrs.psClass || 'ng-pageslide';\n \n /* DOM manipulation */\n var content = null;\n var slider = null;\n\n if (!attrs.href && el.children() && el.children().length) {\n content = el.children()[0]; \n } else {\n\n var targetId = (attrs.href || attrs.psTarget).substr(1);\n content = document.getElementById(targetId);\n slider = document.getElementById('pageslide-target-' + targetId);\n\n if (!slider) {\n slider = document.createElement('div');\n slider.id = 'pageslide-target-' + targetId;\n }\n }\n \n // Check for content\n if (!content) \n throw new Error('You have to elements inside the or you have not specified a target href');\n\n slider = slider || document.createElement('div');\n slider.className = param.className;\n\n /* Style setup */\n slider.style.transitionDuration = param.speed + 's';\n slider.style.webkitTransitionDuration = param.speed + 's';\n slider.style.zIndex = param.zindex;\n slider.style.position = 'fixed';\n slider.style.width = 0;\n slider.style.height = 0;\n slider.style.transitionProperty = 'width, height';\n\n switch (param.side){\n case 'right':\n slider.style.height = attrs.psCustomHeight || '100%'; \n slider.style.top = attrs.psCustomTop || '0px';\n slider.style.bottom = attrs.psCustomBottom || '0px';\n slider.style.right = attrs.psCustomRight || '0px';\n break;\n case 'left':\n slider.style.height = attrs.psCustomHeight || '100%'; \n slider.style.top = attrs.psCustomTop || '0px';\n slider.style.bottom = attrs.psCustomBottom || '0px';\n slider.style.left = attrs.psCustomLeft || '0px';\n break;\n case 'top':\n slider.style.width = attrs.psCustomWidth || '100%'; \n slider.style.left = attrs.psCustomLeft || '0px';\n slider.style.top = attrs.psCustomTop || '0px';\n slider.style.right = attrs.psCustomRight || '0px';\n break;\n case 'bottom':\n slider.style.width = attrs.psCustomWidth || '100%'; \n slider.style.bottom = attrs.psCustomBottom || '0px';\n slider.style.left = attrs.psCustomLeft || '0px';\n slider.style.right = attrs.psCustomRight || '0px';\n break;\n }\n\n\n /* Append */\n document.body.appendChild(slider);\n slider.appendChild(content);\n\n /* Closed */\n function psClose(slider,param){\n if (slider && slider.style.width !== 0 && slider.style.width !== 0){\n content.style.display = 'none';\n switch (param.side){\n case 'right':\n slider.style.width = '0px'; \n break;\n case 'left':\n slider.style.width = '0px';\n break;\n case 'top':\n slider.style.height = '0px'; \n break;\n case 'bottom':\n slider.style.height = '0px'; \n break;\n }\n }\n $scope.psOpen = false;\n }\n\n /* Open */\n function psOpen(slider,param){\n if (slider.style.width !== 0 && slider.style.width !== 0){\n switch (param.side){\n case 'right':\n slider.style.width = param.size; \n break;\n case 'left':\n slider.style.width = param.size; \n break;\n case 'top':\n slider.style.height = param.size; \n break;\n case 'bottom':\n slider.style.height = param.size; \n break;\n }\n setTimeout(function(){\n content.style.display = 'block';\n },(param.speed * 1000));\n\n }\n }\n\n function isFunction(functionToCheck){\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n }\n\n /*\n * Watchers\n * */\n\n if(attrs.psSize){\n $scope.$watch(function(){\n return attrs.psSize;\n }, function(newVal,oldVal) {\n param.size = newVal;\n if($scope.psOpen) {\n psOpen(slider,param);\n }\n });\n }\n\n $scope.$watch(\"psOpen\", function (value){\n if (!!value) {\n // Open\n psOpen(slider,param);\n } else {\n // Close\n psClose(slider,param);\n }\n });\n\n // close panel on location change\n if($scope.psAutoClose){\n $scope.$on(\"$locationChangeStart\", function(){\n psClose(slider, param);\n if(isFunction($scope.psAutoClose)) {\n $scope.psAutoClose();\n }\n });\n $scope.$on(\"$stateChangeStart\", function(){\n psClose(slider, param);\n if(isFunction($scope.psAutoClose)) {\n $scope.psAutoClose();\n }\n });\n }\n\n\n\n /*\n * Events\n * */\n\n $scope.$on('$destroy', function() {\n document.body.removeChild(slider);\n });\n\n var close_handler = (attrs.href) ? document.getElementById(attrs.href.substr(1) + '-close') : null;\n if (el[0].addEventListener) {\n el[0].addEventListener('click',function(e){\n e.preventDefault();\n psOpen(slider,param); \n });\n\n if (close_handler){\n close_handler.addEventListener('click', function(e){\n e.preventDefault();\n psClose(slider,param);\n });\n }\n } else {\n // IE8 Fallback code\n el[0].attachEvent('onclick',function(e){\n e.returnValue = false;\n psOpen(slider,param); \n });\n\n if (close_handler){\n close_handler.attachEvent('onclick', function(e){\n e.returnValue = false;\n psClose(slider,param);\n });\n }\n }\n\n }\n };\n }\n]);\n\n","angular.module('site.directives')\n\t.directive('siteAutofillModel', ['$parse', 'utilitiesService', function ($parse, utils) {\n\n\t\treturn {\n\t\t\tpriority: 10,\n\t\t\tlink: function (scope, element, attrs) {\n\t\t\t\tvar eventType = attrs.siteAutofillModel || 'submit';\n\t\t\t\telement.bind(eventType, function (event) {\n\t\t\t\t\t_.each(element.find('input'), function (input) {\n\t\t\t\t\t\tinput = angular.element(input);\n\t\t\t\t\t\tif (input.attr('type') !== 'checkbox' && input.attr('type') !== 'radio' && input.attr('ng-model')) {\n\t\t\t\t\t\t\tvar ngModelCtrl = input.controller('ngModel');\n\t\t\t\t\t\t\tngModelCtrl.$setViewValue(input.val());\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}]);","angular.module('site.directives')\n .component('becomemember', {\n restrict: 'E',\n bindings: {\n data: '@'\n },\n controller: ['$scope', 'config', 'userService', '$element', 'tagManagerService', function ($scope, config, userService, $element, tagManagerService) {\n this.$onInit = function () {\n $scope.model = angular.fromJson(this.data);\n }\n $scope.validateSignup = function () {\n $scope.showErrorMessage = false;\n if ($scope.customerInfoFormSignup.$invalid) {\n $scope.showSignUpValidationMessages = true;\n // scroll to first invalid field\n var invalid = $($scope.customerInfoFormSignup.$$element).find('.ng-invalid');\n if (invalid[0]) {\n invalid[0].focus();\n }\n return false;\n }\n $scope.createUser();\n }\n $scope.createUser = function () {\n $scope.data.model.membershipAlias = 'ClubMember'\n userService.create({\n \"firstName\": $scope.data.model.firstname,\n \"lastName\": $scope.data.model.lastname,\n \"email\": $scope.data.model.email,\n \"newsletterTermsAccepted\": $scope.data.model.newsletter,\n \"profileType\": $scope.data.model.membershipAlias,\n \"information\": {\n \"gender\": $scope.data.model.gender\n },\n \"password\": $scope.data.model.password\n })\n .then(function (response) {\n tagManagerService.push({event: 'userSignup', type: $scope.data.model.membershipAlias});\n window.location.href = '/opret-profil/tillykke/';\n document.querySelector('.js-close-overlay').click();\n }, function (error) {\n $scope.showErrorMessage = true;\n $scope.errorMessage = error.data;\n });\n }\n }],\n templateUrl: '/dist/templates/directives/becomemember.tpl.html'\n });\n","angular.module('site.directives')\n\t.directive('siteBlur', ['$parse', 'utilitiesService', function ($parse, utils) {\n\t\treturn function (scope, element, attrs) {\n\t\t\tvar fn = $parse(attrs.siteBlur);\n\t\t\telement.bind(\"blur\", function (e) {\n\t\t\t\tutils.safeApply(scope, function () {\n\t\t\t\t\tfn(scope, {\n\t\t\t\t\t\t$event: e\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\t}]);","angular.module('site.directives')\n\t.directive('siteClickOutside', ['$document', 'utilitiesService', function($document, utils) {\n\t\treturn function(scope, elem, attr) {\n\t\t\telem.bind('click', function(event) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t});\n\t\t\t$document.bind('click', function() {\n\t\t\t\tutils.safeApply(scope, function () {\n\t\t\t\t\tscope.$eval(attr.siteClickOutside);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tvar tapping;\n\t\t\ttapping = false;\n\t\t\t$document.bind('touchstart', function (e) {\n\t\t\t //element.addClass('active');\n\t\t\t tapping = true;\n\t\t\t});\n\t\t\t$document.bind('touchmove', function (e) {\n\t\t\t //element.removeClass('active');\n\t\t\t tapping = false;\n\t\t\t});\n\t\t\t$document.bind('touchend', function (e) {\n\t\t\t //element.removeClass('active');\n\t\t\t if (tapping) {\n\t\t\t utils.safeApply(scope, function () {\n\t\t\t scope.$eval(attr.siteClickOutside);\n\t\t\t });\n\t\t\t //scope.$apply(attrs['ngTap'], element);\n\t\t\t }\n\t\t\t});\n\t\t};\n\t}]);","angular.module('site.directives')\n\t.directive('siteCookieInfo', ['cookieService', function (cookie) {\n\t\treturn {\n\t\t\tscope:{},\n\t\t\tlink: function(scope, element, attr) {\n\t\t\t\tscope.active = true;\n\t\t\t\tscope.acceptCookies = function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tcookie.acceptCookies();\n\t\t\t\t\tscope.active = false;\n\t\t\t\t};\n\t\t\t\tscope.$watch('active', function(active){\n\t\t\t\t\tvar offset = 0;\n\t\t\t\t\tif(active){\n\t\t\t\t\t offset = element[0].offsetHeight;\n\t\t\t\t\t $(element).parent().addClass('cookie-bar-visible');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t $(element).parent().removeClass('cookie-bar-visible');\n\t\t\t\t\t}\n\t\t\t\t\t//$(element).parent().find(\"> .container\").css('marginTop', offset + 'px');\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}]);","angular.module('site.directives')\n .component('dictionaryItem', {\n restrict: 'E',\n replace: false,\n bindings: {\n alias: '@'\n },\n template: '',\n bindToController: true,\n controllerAs : 'cntrl',\n controller: ['$scope', function ($scope) {\n $scope.cntrl.value = null;\n\n this.$onInit = function() { \n if (WebapoteketDictionary && typeof WebapoteketDictionary[$scope.cntrl.alias] !== 'undefined')\n {\n $scope.cntrl.value = WebapoteketDictionary[$scope.cntrl.alias];\n }\n else{\n $scope.cntrl.value = $scope.cntrl.alias;\n }\n };\n }] \n });\n","angular.module('site.directives')\n .directive('siteEnter', function () {\n return function (scope, element, attrs) {\n element.bind(\"keydown keypress\", function (event) {\n if (event.which === 13) {\n scope.$apply(function () {\n scope.$eval(attrs.siteEnter);\n });\n\n event.preventDefault();\n }\n });\n };\n });","angular.module('site.directives')\n\t.directive('siteFieldError', ['$timeout', function($timeout) {\n\t\tvar errorMapper = function(error, text){\n\t\t\treturn {\n\t\t\t\terror: error,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t};\n\t\treturn {\n\t\t\tscope: true,\n\t\t\ttemplateUrl: '/partials/directives/fieldError',\n\t\t\treplace: true,\n\t\t\tlink: function(scope, elem, attr) {\n\t\t\t\tscope.$watch(attr.siteFieldError, function(err){\n\t\t\t\t\tif(_.isObject(err)){\n\t\t\t\t\t\tscope.errors = _.map(err, errorMapper);\n\t\t\t\t\t\tscope.hasError = _.find(err, function(error, text){\n\t\t\t\t\t\t\treturn error;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t}\n\t\t};\n\t}]);\n\n\n","angular.module('site.directives')\n .directive('siteEcommerceTracking', ['gaTrackingService', function (tracking) {\n return {\n scope: {\n order: '=siteEcommerceTracking'\n },\n link: function (scope, element, attrs) {\n scope.$watch('order', function (order) {\n tracking.trackOrder(order);\n });\n }\n };\n }]); ","angular.module('site.directives')\n\t.directive('highlighter', ['$timeout', function ($timeout) {\n\t return {\n\t require: 'ngModel',\n\t restrict: 'A',\n\t replace: false,\n\t scope: '=',\n\t link: function (scope, element, attrs, ngModel) {\n\t scope.$watch(function () {\n\t return ngModel.$modelValue;\n\t }, function (newValue) {\n\t //console.log(newValue);\n\n\t // apply class\n\t element.addClass('highlight').addClass('anim-highlight');\n\n\t // auto remove after some delay\n\t $timeout(function () {\n\t element.removeClass('highlight').removeClass('anim-highlight');\n\t }, 1500);\n\t });\n\n\t //scope.$watch('model.calculated.total', function (nv, ov) {\n\t // if (nv !== ov) {\n\t // // apply class\n\t // element.addClass('highlight');\n\n\t // // auto remove after some delay\n\t // $timeout(function () {\n\t // element.removeClass('highlight');\n\t // }, 1000);\n\t // }\n\t //});\n\t }\n\t };\n\t}]);","angular.module('site.directives')\n\t.directive('siteLocationTransition', ['$window', '$location', 'urlHelperService', 'storageService', function($window, $location, urlHelper, storage) {\n\t\tvar clearElementHeight = function(elem, current, previous){\n\t\t\t\telem.css('min-height', 0);\n\t\t\t},\n\t\t\tsetPersistElementHeight = function(elem){\n\t\t\t\tvar method = 'session',\n\t\t\t\t\tkey = 'locationTransition',\n\t\t\t\t\ttransition = storage.getKey(method, key);\n\n\t\t\t\tif(transition && transition.path === $location.path()){\n\t\t\t\t\telem.css('min-height', transition.height + 'px');\n\t\t\t\t\tstorage.removeKey(method,key);\n\t\t\t\t}\n\n\t\t\t\tangular.element($window).bind('unload', function(){\n\t\t\t\t\tvar elemHeight = elem[0].offsetHeight,\n\t\t\t\t\t\ttransition = { path: $location.path(), height:elemHeight };\n\t\t\t\t\tstorage.setKey(method, key, transition);\n\t\t\t\t});\n\t\t\t},\n\t\t\thandleLocationChange = function(current, previous){\n\t\t\t\tvar curParams = urlHelper.getParamsFromPath(current),\n\t\t\t\t\tprevParams = urlHelper.getParamsFromPath(previous);\n\n\t\t\t\tif(curParams.page || prevParams.page && curParams.page !== prevParams.page){\n\t\t\t\t\t$window.scrollTo(0, 0);\n\t\t\t\t}\n\t\t\t};\n\n\n\t\treturn function(scope, elem, attr) {\n\t\t\tscope.$on('$locationChangeSuccess', function(event, current, previous){\n\t\t\t\tif(current && previous && current !== previous){\n\t\t\t\t\tclearElementHeight(elem, current, previous);\n\t\t\t\t\thandleLocationChange(current, previous);\n\t\t\t\t}\n\t\t\t});\n\t\t\tsetPersistElementHeight(elem);\n\t\t};\n\t}]);","angular.module('site.directives')\n .component('mobileNavigation', {\n bindings: {\n membershipSelectionUrl: '@',\n clubFrontPageUrl: '@',\n signoutUrl: '@',\n links: '@'\n },\n controller: ['$scope', '$location', '$window', 'identityService'\n , function ($scope, $location, $window, identityService) {\n $scope.navData = $window.mainMenu;\n $scope.activeLevel = [];\n $scope.parentLevel = null;\n $scope.grandparentLevel = null;\n\n this.$onInit = function () {\n $scope.element = document.getElementById(\"mobile-navigation\");\n $scope.currentUrl = $window.location.pathname;\n findActiveLevel();\n\n $scope.membershipSelectionUrl = this.membershipSelectionUrl;\n $scope.clubFrontPageUrl = this.clubFrontPageUrl;\n $scope.signoutUrl = this.signoutUrl;\n $scope.links = angular.fromJson(this.links);\n $scope.isAuthenticated = !!identityService.accessToken;\n };\n\n $scope.openNav = function (resetToLevelOne) {\n if (resetToLevelOne) {\n $scope.activeLevel = $scope.navData;\n $scope.parentLevel = null;\n $scope.grandparentLevel = null;\n }\n\n // This is a function that is called at site init. Needs to be called again here\n // to include the login modal we use in the template.\n overlays();\n $scope.element.classList.add(\"sidenav-open\");\n $(document.body).addClass('modal-open');\n }\n\n $scope.closeNav = function () {\n $scope.element.classList.remove(\"sidenav-open\");\n $(document.body).removeClass('modal-open');\n // Wait for close transition before resetting level.\n setTimeout(function() {\n $scope.currentUrl = $window.location.pathname;\n findActiveLevel();\n }, 400);\n }\n\n $scope.clickItem = function (url) {\n if (url !== $scope.currentUrl) {\n $scope.currentUrl = url;\n\n findActiveLevel();\n } else {\n $scope.closeNav();\n }\n }\n\n $scope.isCurrentLocation = function (url) {\n return $window.location.pathname === url;\n }\n\n function findActiveLevel() {\n var urlArr = _.without($scope.currentUrl.split('/'), '');\n var currentLevel = $scope.navData;\n var parentLevel = null;\n var grandparentLevel = null;\n\n for (var i = 0; i < urlArr.length && i < 2; i++) {\n for (var j = 0; j < currentLevel.length; j++) {\n var currentLevelUrlArr = _.without(currentLevel[j].url.split('/'), '');\n if (currentLevelUrlArr[i] === urlArr[i]) {\n if (currentLevel[j].children.length > 0) {\n if (i === 1) {\n grandparentLevel = _.clone(parentLevel);\n }\n parentLevel = currentLevel[j];\n currentLevel = currentLevel[j].children;\n }\n break;\n }\n }\n }\n $scope.activeLevel = currentLevel;\n $scope.parentLevel = parentLevel;\n $scope.grandparentLevel = grandparentLevel;\n }\n }],\n templateUrl: '/dist/templates/directives/mobilenavigation.tpl.html'\n });\n","angular.module('site.directives')\n\t.directive('siteModalDialog', ['$compile', 'utilitiesService', function ($compile, utilitiesService) {\n\t\treturn {\n\t\t\tlink: function (scope, element, attr) {\n\t\t\t\tvar modalDialogHtml = $compile('
      Luk' + angular.element(document.getElementById(attr.siteModalDialog)).html() + '
      ')(scope),\n\t\t\t\t\tmodalDialog,\n\t\t\t\t\tshowModalDialog = function(event){\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t if (!modalDialog) {\n\t\t\t\t\t modalDialog = angular.element(document.createElement('div'));\n\t\t\t\t\t modalDialog.append(modalDialogHtml);\n\t\t\t\t\t angular.element(document.getElementsByTagName('body')[0]).prepend(modalDialog);\n\t\t\t\t\t angular.element(modalDialog.children()[0]).bind('click', closeModalDialog);\n\t\t\t\t\t angular.element(angular.element(modalDialog.children()[1]).children()[0]).bind('click', closeModalDialog);\n\t\t\t\t\t angular.element(angular.element(angular.element(modalDialog.children()[1]).children()[3]).children()[0]).bind('click', closeModalDialog);\n\n\t\t\t\t\t }\n\t\t\t\t\t var dialogWidth = attr.width || 500;\n\n\t\t\t\t\t\tvar offset = window.pageYOffset ? window.pageYOffset + 'px' : 0 + 'px';\n\t\t\t\t\t\tmodalDialog.children()[1].style.marginTop = offset;\n\t\t\t\t\t\tmodalDialog.children()[1].style.width = dialogWidth + 'px';\n\t\t\t\t\t\tmodalDialog.addClass('active');\n\n\t\t\t\t\t\tangular.element(document.getElementsByTagName('body')[0]).addClass('modal-active');\n\t\t\t\t\t\tangular.element(document.getElementsByTagName('html')[0]).addClass('modal-active');\n\t\t\t\t\t\tutilitiesService.safeApply(scope, function () {\n\t\t\t\t\t\t\tscope[attr.siteActive] = true;\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcloseModalDialog = function(event){\n\t\t\t\t\t\tif(event){\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodalDialog.removeClass('active');\n\t\t\t\t\t\tangular.element(document.getElementsByTagName('body')[0]).removeClass('modal-active');\n\t\t\t\t\t\tangular.element(document.getElementsByTagName('html')[0]).removeClass('modal-active');\n\t\t\t\t\t\tutilitiesService.safeApply(scope, function () {\n\t\t\t\t\t\t\tscope[attr.siteActive] = false;\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tdestroyModalDialog = function () {\n\t\t\t\t\t\tif(modalDialog){\n\t\t\t\t\t\t\tmodalDialog.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\telement.bind('click', showModalDialog);\n\t\t\t\tscope.$on('$destroy', destroyModalDialog);\n\n\t\t\t\tscope.$watch(attr.siteActive, function(active){\n\t\t\t\t\tif(active){\n\t\t\t\t\t\telement.triggerHandler('click');\n\t\t\t\t\t}else if(modalDialog){\n\t\t\t\t\t\tcloseModalDialog();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}]);","angular.module('site.directives')\n .directive('siteModel', ['config', '$http', function (config, $http) {\n return {\n priority: 0,\n scope: {\n },\n link: function (scope, elm, attrs) {\n //if (config.serviceApi[attrs.siteModel]) {\n // scope.$watch(attrs.siteParams, function (params) {\n\n // $http.get(config.serviceApi[attrs.siteModel],\n // {\n // params: params\n // })\n // .then(function (response) {\n // scope.model = response.data;\n // console.log(scope.model);\n // });\n\n // }, true);\n //} else {\n // scope.model = angular.fromJson(attrs.siteModel);\n // console.log(scope.model);\n //} \n }\n };\n }]);\n","angular.module('site.directives')\n .component('myPageOrderHistory', {\n restrict: 'E',\n bindings: {\n detailsLink: '@',\n pagination: '=',\n title: '@',\n overviewUrl: '@',\n pagingEnabled: '@'\n },\n controller: ['$scope', 'orderService', function ($scope, orderService) {\n\n // init\n this.$onInit = function() {\n $scope.data = {\n title: this.title,\n isLoading: false,\n pagingEnabled: this.pagingEnabled == 'true',\n overviewUrl: this.overviewUrl,\n result: angular.copy(this.pagination),\n availablePageSizes: [\n {\n 'amount':10\n },\n {\n 'amount':20\n },\n {\n 'amount':60\n },\n {\n 'amount':120\n },\n {\n 'amount':null,\n 'text': 'Alle'\n }\n ],\n detailsLink: this.detailsLink,\n currentResultsAmountInformation :{\n count: null,\n of: null\n }\n };\n setCurrentResultsAmountInformation();\n };\n\n $scope.changePageSize = function(size){\n $scope.data.result.pageSize = size;\n $scope.data.result.currentPage = 1;\n filter();\n };\n\n $scope.changePage = function(page){\n $scope.data.result.currentPage = page;\n filter();\n }\n\n function setCurrentResultsAmountInformation(){\n /* \n if page size is selected to show all records,\n then show xx of xx amount, which is totalResults\n */\n if (!$scope.data.result.pageSize){\n $scope.data.currentResultsAmountInformation.count = $scope.data.result.totalCount;\n $scope.data.currentResultsAmountInformation.of = $scope.data.result.totalCount;\n return;\n }\n\n /*\n if not enough records to display \n f.x.: 15 of 20, if only 15 are in total, must look like 15 of 15\n */\n if ($scope.data.result.pageSize > $scope.data.result.totalCount){\n $scope.data.currentResultsAmountInformation.count = $scope.data.result.totalCount;\n $scope.data.currentResultsAmountInformation.of = $scope.data.result.totalCount;\n return;\n }\n\n $scope.data.currentResultsAmountInformation.count = $scope.data.result.pageSize * $scope.data.result.currentPage;\n $scope.data.currentResultsAmountInformation.of = $scope.data.result.totalCount;\n };\n\n function filter(){\n var promise = null;\n promise = orderService.filterOrderHistory($scope.data.result.pageSize, $scope.data.result.currentPage);\n\n promise.then(function (response) {\n $scope.data.isLoading = false;\n $scope.data.result.currentPage = response.data.currentPage;\n $scope.data.result.items = response.data.items;\n $scope.data.result.pageSize = response.data.pageSize;\n $scope.data.result.totalCount = response.data.totalCount;\n $scope.data.result.totalPages = response.data.totalPages;\n setCurrentResultsAmountInformation();\n });\n };\n }],\n templateUrl: '/dist/templates/directives/mypageorderhistory.tpl.html'\n });\n","angular.module('site.directives')\n .component('newBasketProductOrderline', {\n restrict: 'E',\n bindings: {\n data: '=',\n citoWarningText: '@',\n onQuantityUpdated: '&', // event raised on quantity updated by user\n onRemoved: '&' // even raised on product removal request by user\n },\n controller: ['$scope','$controller', '$window', '$timeout', function ($scope, $controller, $window, $timeout) {\n $scope.debounceTimeout;\n\n this.$onInit = function() {\n $scope.cntrl.model = {\n pending: false, // use to show state of current ordeline, true when action is in progress,\n temporaryQuantity : $scope.cntrl.data.quantity, // used for input temporary quantity, updated with actual value when is valid\n errorMessages: []\n };\n };\n\n $scope.remove = function(){\n $scope.cntrl.model.pending = true;\n $scope.cntrl.onRemoved()($scope.cntrl.data, true).then(\n function successCallback(response) {\n $scope.cntrl.model.pending = false;\n $window.location.reload(true)\n },\n function errorCallback(error){\n $scope.cntrl.model.pending = false;\n console.error(error);\n }\n );\n };\n\n $scope.decrement = function () {\n $scope.cntrl.model.temporaryQuantity = $scope.cntrl.model.temporaryQuantity - 1;\n\n if ($scope.debounceTimeout) {\n $timeout.cancel($scope.debounceTimeout);\n }\n $scope.debounceTimeout = $timeout($scope.updateQuantity, 400);\n }\n\n $scope.increment = function () {\n $scope.cntrl.model.temporaryQuantity = $scope.cntrl.model.temporaryQuantity + 1;\n\n if ($scope.debounceTimeout) {\n $timeout.cancel($scope.debounceTimeout);\n }\n $scope.debounceTimeout = $timeout($scope.updateQuantity, 400);\n }\n\n $scope.updateQuantity = function() {\n\n if ($scope.cntrl.model.temporaryQuantity === 0) {\n $scope.remove();\n }\n\n // if input value is not set, do nothing\n if (!$scope.cntrl.model.temporaryQuantity){\n return false;\n }\n\n // if input value is not a digit or exceeds maximum value of 999, then reset to original quantity\n if ($scope.cntrl.model.temporaryQuantity >= 1000\n || $scope.cntrl.model.temporaryQuantity <= 0\n ){\n $scope.cntrl.model.temporaryQuantity = $scope.cntrl.data.quantity;\n return false;\n }\n // if the same as original value, do nothing\n else if ($scope.cntrl.model.temporaryQuantity == $scope.cntrl.data.quantity){\n return false;\n }\n\n $scope.cntrl.model.pending = true;\n\n // get original quantity\n // get input quantity value\n var quantityUpdateValue = ($scope.cntrl.data.quantity - $scope.cntrl.model.temporaryQuantity) * -1; // we multiply by -1 to inverse value, as that is what basket API expects. - value when decrease, + value when increase\n $scope.cntrl.onQuantityUpdated()($scope.cntrl.data, quantityUpdateValue)\n .then(\n function successCallback(response) {\n $scope.cntrl.data.quantity = $scope.cntrl.model.temporaryQuantity;\n $scope.cntrl.model.pending = false;\n },\n function errorCallback(error){\n console.error(error);\n $scope.cntrl.model.errorMessages = error.data.messages;\n $scope.cntrl.model.temporaryQuantity = $scope.cntrl.data.quantity;\n $scope.cntrl.model.pending = false;\n }\n );\n };\n\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/newbasketproductorderline.tpl.html'\n });\n","angular.module('site.directives')\n .component('orderDetails', {\n restrict: 'E',\n bindings: {\n saadanHandlerDu: '<',\n order: '<'\n },\n controller: ['$scope','config', function ($scope, config) {\n \n $scope.model = {};\n this.$onInit = function() { \n $scope.model.orderInformation = this.order;\n };\n\n this.$onChanges = function (changes) {\n if (changes.order)\n $scope.model.orderInformation = changes.order.currentValue;\n\n if (changes.termsText){\n $scope.model.termsText = changes.termsText;\n }\n\n if (changes.saadanHandlerDu)\n $scope.model.saadanHandlerDu = changes.saadanHandlerDu.currentValue;\n };\n }],\n templateUrl: '/dist/templates/directives/orderdetails.tpl.html'\n });","angular.module('site.directives')\n .component('orderDetailsContainer', {\n restrict: 'E',\n bindings: {\n orderNumber: '@',\n orderHistoryLink: '@',\n saadanHandlerDuLink: '@'\n },\n controller: ['$scope','$http','config', function ($scope, $http, config) {\n\n this.$onInit = function() { \n\n $scope.model = {\n orderInformation : null,\n shippingInformation : null,\n order : null,\n orderNumber: this.orderNumber,\n orderHistoryLink: this.orderHistoryLink,\n saadanHandlerDuLink: this.saadanHandlerDuLink\n };\n \n $http.get(config.serviceApi.getOrder,\n {\n params : {\n 'orderNumber': $scope.model.orderNumber\n }\n }\n )\n .then(function (response) {\n $scope.model.orderInformation = response.data.orderInformation;\n $scope.model.shippingInformation = response.data.shippingInformation;\n $scope.model.order = response.data.order;\n });\n\n };\n }],\n templateUrl: '/dist/templates/directives/orderdetailscontainer.tpl.html'\n });","angular.module('site.directives')\n .component('orderHistory', {\n restrict: 'E',\n bindings: {\n count: '@',\n detailsLink: '@'\n },\n controller: ['$scope','$http','config', 'identityService', function ($scope, $http, config, identityService) {\n this.$onInit = function() {\n \n $scope.model = {\n orders : [],\n count: this.count || 100,\n detailsLink: this.detailsLink\n };\n \n $http.get(ordersServiceUrl+'/orders/overview',\n {\n params : {\n count: $scope.model.count\n },\n headers : {\n \"Authorization\": 'Bearer '+ identityService.accessToken\n }\n }\n )\n .then(function (response) { \n $scope.model.orders = response.data;\n });\n\n };\n }],\n templateUrl: '/dist/templates/directives/orderhistory.tpl.html'\n });\n","angular.module('site.directives')\n .directive(\"owlCarousel\", [ \"$timeout\", function($timeout) {\n return {\n restrict: 'AE',\n transclude: false,\n link: function (scope) {\n scope.initCarousel = function(element) {\n var defaultOptions = {\n };\n var customOptions = scope.$eval($(element).attr('data-options'));\n for(var key in customOptions) {\n defaultOptions[key] = customOptions[key];\n }\n var timer;\n if (timer) $timeout.cancel(timer);\n\n if (defaultOptions[\"lazyLoad\"] == true) {\n var images = $(element).find(\"img\").addClass(\"lazyOwl\");\n\n timer = $timeout(function () {\n $.each(images, function (key, value) {\n var imgSrc = $(this).attr(\"src\");\n\n $(this).attr(\"data-src\", imgSrc);\n });\n }, 0);\n }\n if (timer) {\n timer.then(function () {\n $timeout(function () {\n $(element).owlCarousel(defaultOptions);\n }, 0);\n });\n } else {\n $timeout(function () {\n $(element).owlCarousel(defaultOptions);\n }, 0);\n }\n };\n }\n };\n }])\n .directive('owlCarouselItem', [function() {\n return {\n restrict: 'A',\n transclude: false,\n link: function(scope, element) {\n if (scope.$last) {\n scope.initCarousel(element.parent());\n }\n }\n };\n }]);","angular.module('site.directives')\n\t.directive('siteProductDetail', [function() {\n\t\treturn {\n\t\t\ttemplateUrl: '/partials/directives/productDetail',\n\t\t\tcontroller: 'productController',\n\t\t\tscope: {\n\t\t\t\tproduct: '=siteProductDetail'\n\t\t\t}\n\t\t};\n\t}]);","angular.module('site.directives')\n .directive('siteProductListItem',\n [\n function() {\n return {\n templateUrl: '/partials/directives/productListItem',\n controller: 'productController',\n scope: {\n product: '=siteProductListItem'\n }\n };\n }\n ])\n .directive('siteSearchProductListItem',\n [\n function() {\n return {\n templateUrl: '/partials/directives/productSearchListItem',\n controller: 'panelSearchController',\n scope: {\n product: '=siteSearchProductListItem'\n }\n };\n }\n ])\n .directive('catalogProductListItem',\n [\n function() {\n return {\n templateUrl: '/partials/directives/catalog/products/item',\n controller: 'panelSearchController',\n scope: {\n product: '=catalogProductListItem',\n index: '=catalogProductListIndex',\n position: '=catalogProductListPosition',\n categoryName: '=catalogProductListCategoryName'\n }\n };\n }\n ])\n\n","angular.module('site.directives')\n\t.directive('siteProductOrderLine', [function() {\n\t\treturn {\n\t\t\ttemplateUrl: '/partials/directives/productOrderLine',\n\t\t\tcontroller: 'productController',\n\t\t\tscope: {\n\t\t\t\tproduct: '=siteProductOrderLine'\n\t\t\t}\n\t\t};\n\t}]);","angular.module('site.directives')\n .component('profileAddress', {\n restrict: 'E',\n bindings: {\n data: '='\n },\n controller: ['$scope', '$controller', 'userService','subscriptionService', function ($scope, $controller, userService, subscriptionService) {\n\n this.$onInit = function() {\n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'profileAddressForm';\n\n // extra properties for particular directive\n var json = $('profile-address').attr('data-countries');\n $scope.cntrl.countries = angular.fromJson(json.toString()) || [];\n\n $scope.cntrl.regex = {\n email : /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,\n phone : /(?=^.{3,20}$)^\\+?[0-9]+(\\([0-9]+\\))?[0-9-]*[0-9]$/,\n postalCodeDigits : /^\\d+$/,\n addressFieldRegex : /^.*\\s\\d.*$/\n\n };\n\n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n this.isValidAddressLine = function(addressLine){\n if(!addressLine){\n return true;\n }else{\n return /\\d+/g.test(addressLine);\n }\n };\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function(){\n $scope.cntrl.pending = true;\n\n userService.updateMyProfile(profileServiceUrl+'/api/profile/updateaddress', $scope.cntrl.temporaryData)\n .then(function (response) {\n $scope.$emit('basketModelRefresh', []);\n $scope.cntrl.data = $scope.cntrl.temporaryData;\n $scope.cntrl.successAndClose();\n \n if (response.status === 200) {\n subscriptionService.updateDeliveryAddresses(response.data.resultObj)\n .then(function (resp) {});\n }\n // $scope.cntrl.showSubmitSuccess();\n\n }, function (response) {\n $scope.cntrl.pending = false;\n\t\t\t\t });\n };\n\n $scope.$watch('cntrl.temporaryData.address.countryIsoCode', function (newValue, oldValue, scope) {\n if (newValue && newValue != 'DK'){\n $scope.cntrl.temporaryData.address = $scope.cntrl.temporaryData.address || {};\n $scope.cntrl.temporaryData.address.countryIsoCode = $scope.cntrl.temporaryData.address.countryIsoCode || 'DK';\n }\n }, true);\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/profileaddress.tpl.html'\n });\n","angular.module('site.directives')\n\t.controller('BaseProfileDirectiveController', ['$scope', function ($scope) {\n \n baseActivate();\n \n ////////////////////////////////////////////\n\n // called $onInit for parent controller\n function baseActivate(){\n $scope.cntrl.showValidationMessages = false;\n $scope.cntrl.editing = false;\n $scope.cntrl.pending = false;\n $scope.cntrl.temporaryData = {};\n }\n\n // default implementation of edit button click event\n this.edit = function(){\n // clone object into temporary entity\n $scope.cntrl.temporaryData = angular.copy($scope.cntrl.data);\n if ($scope.cntrl.editClicked){\n $scope.cntrl.editClicked();\n }\n\n $scope.cntrl.editing = true;\n $scope.cntrl[$scope.cntrl.formName].$setPristine();\n };\n\n // default implementation of save button click event\n this.save = function(){\n $scope.cntrl.showValidationMessages = true;\n if ($scope.cntrl[$scope.cntrl.formName].$invalid || $scope.cntrl.pending){\n return false;\n }\n\n // check if form is pristine? skip updating API then\n if (this.formIsPristine()){\n $scope.cntrl.showValidationMessages = false;\n $scope.cntrl.editing = false;\n console.log(\"Pristine\");\n return false;\n }\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n if ($scope.cntrl.baseValidationDoneBeforeSaving){\n $scope.cntrl.baseValidationDoneBeforeSaving();\n }\n else{\n console.warn(\"No handler found for saving form data. Ensure to have existing method: baseValidationDoneBeforeSaving()\");\n }\n\n \n // $scope.cntrl.data = $scope.cntrl.temporaryData;\n };\n\n this.successAndClose = function(){\n $scope.cntrl.pending = false;\n this.close();\n };\n\n this.close = function(){\n $scope.cntrl.showValidationMessages = false;\n $scope.cntrl.editing = false;\n $scope.cntrl.temporaryData = {};\n };\n\n this.formIsPristine = function(){\n return $scope.cntrl[$scope.cntrl.formName].$pristine;\n };\n\n this.hasPendingChanges = function(){\n return $scope.cntrl.editing && !this.formIsPristine();\n };\n \n\t}]);\n","angular.module('site.directives')\n .component('profileBirthdate', {\n restrict: 'E',\n bindings: {\n data: '='\n },\n controller: ['$scope', 'utilitiesService', '$controller','userService', function ($scope, utils, $controller, userService) {\n \n this.$onInit = function() { \n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'profileBirthdateForm';\n\n // extra properties for particular directive\n $scope.cntrl.createRange = utils.createRange;\n $scope.cntrl.dateRegex = /^([0-2][0-9]|(3)[0-1])(\\/)(((0)[0-9])|((1)[0-2]))(\\/)\\d{4}$/;\n $scope.cntrl.dateFormatInvalid = false;\n\n $scope.cntrl.dayRange = utils.createRange(1,31,31);\n $scope.cntrl.monthRange = utils.createRange(1,12,12);\n $scope.cntrl.yearRange = utils.createRange(1910,2010,2010);\n\n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n this.isValid = function(){\n if (!$scope.cntrl.temporaryData.formattedBirthDate){\n return false;\n }\n\n var matchesPattern = $scope.cntrl.temporaryData.formattedBirthDate.match($scope.cntrl.dateRegex);\n if (!matchesPattern || matchesPattern.length <= 0)\n {\n return false;\n }\n\n var formattedBirthDate = $scope.cntrl.temporaryData.formattedBirthDate.split('/');\n $scope.cntrl.temporaryData.information.day = parseInt(formattedBirthDate[0]);\n $scope.cntrl.temporaryData.information.month = parseInt(formattedBirthDate[1]);\n $scope.cntrl.temporaryData.information.year = parseInt(formattedBirthDate[2]);\n\n // validate if in allowed range\n if (!(\n $scope.cntrl.dayRange.indexOf($scope.cntrl.temporaryData.information.day) >= 0\n && $scope.cntrl.monthRange.indexOf($scope.cntrl.temporaryData.information.month) >= 0\n && $scope.cntrl.yearRange.indexOf($scope.cntrl.temporaryData.information.year) >= 0\n )){\n return false;\n }\n\n return true;\n };\n\n this.revalidate = function(){\n if (!$scope.cntrl.isValid()){\n $scope.cntrl.dateFormatInvalid = true;\n }\n else{\n $scope.cntrl.dateFormatInvalid = false;\n }\n };\n\n this.editClicked = function(){\n if ($scope.cntrl.temporaryData.information && $scope.cntrl.temporaryData.formattedBirthDate){\n var formattedBirthDate = $scope.cntrl.temporaryData.formattedBirthDate.split('/');\n $scope.cntrl.temporaryData.information.day = parseInt(formattedBirthDate[0]);\n\t\t\t \t$scope.cntrl.temporaryData.information.month = parseInt(formattedBirthDate[1]);\n\t\t\t \t$scope.cntrl.temporaryData.information.year = parseInt(formattedBirthDate[2]);\n }\n else if ($scope.cntrl.temporaryData.information && $scope.cntrl.temporaryData.information.dateOfBirth) {\n\t\t\t\t\tvar dateMs = $scope.cntrl.temporaryData.information.dateOfBirth.substring(0, $scope.cntrl.temporaryData.information.dateOfBirth.indexOf('T'));\t\t\t\t\n\t\t\t\t\tvar date = new Date(dateMs);\n\t\t\t\t\t$scope.cntrl.temporaryData.information.day = date.getDate();\n\t\t\t \t$scope.cntrl.temporaryData.information.month = date.getMonth() + 1;\n\t\t\t \t$scope.cntrl.temporaryData.information.year = date.getFullYear();\n\t\t\t }\n };\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function(){\n if (!$scope.cntrl.isValid()){\n $scope.cntrl.dateFormatInvalid = true;\n return false;\n }\n\n //call service, to hit REST API and update data\n $scope.cntrl.pending = true;\n $scope.cntrl.dateFormatInvalid = false;\n\n userService.updateMyProfile(profileServiceUrl+'/api/profile/updatedateofbirth', $scope.cntrl.temporaryData)\n .then(function (response) {\n $scope.$emit('basketModelRefresh', []);\n $scope.cntrl.data = $scope.cntrl.temporaryData;\n $scope.cntrl.successAndClose();\n }, function (response) {\n $scope.cntrl.pending = false;\n\t\t\t\t });\n };\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/profilebirthdate.tpl.html'\n });","angular.module('site.directives')\n .component('profileChangePassword', {\n restrict: 'E',\n bindings: {\n data: '='\n },\n controller: ['$scope','$controller','userService', function ($scope, $controller, user) {\n \n this.$onInit = function() { \n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'profileChangePasswordForm';\n\n // extra properties for particular directive\n $scope.cntrl.showNofityPasswordChanged = false;\n \n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n this.submitOnEnter = function (event) {\n if (event.keyCode === 13) {\n event.preventDefault();\n $scope.changePassword($scope.cntrl.temporaryData.password, $scope.cntrl.temporaryData.passwordRepeat);\n }\n };\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function(){\n\n if ($scope.cntrl.profileChangePasswordForm.password_id.$invalid \n || $scope.cntrl.profileChangePasswordForm.password_id_confirm.$invalid\n || $scope.cntrl.temporaryData.password != $scope.cntrl.temporaryData.passwordRepeat) {\n return false;\n }\n\n $scope.cntrl.pending = true;\n\n user.changePassword($scope.cntrl.temporaryData.password, $scope.cntrl.temporaryData.passwordRepeat)\n .then(function (data) {\n $scope.cntrl.showNofityPasswordChanged = true;\n $scope.cntrl.successAndClose();\n }, function (data) {\n $scope.pendingPassword = false;\n });\n };\n\n this.editClicked = function(){\n $scope.cntrl.temporaryData = {\n password: '',\n passwordRepeat: ''\n };\n };\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/profilechangepassword.tpl.html'\n });","angular.module('site.directives')\n .component('profileCpr', {\n restrict: 'E',\n bindings: {\n data: '=',\n mitidUrl: '@'\n },\n controller: ['$scope','$controller', 'userService', function ($scope, $controller, user) {\n \n this.$onInit = function() { \n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'profileCprForm';\n \n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n this.removeNemIdLink = function() {\n $scope.cntrl.pending = true;\n\n user.removeNemId($scope.cntrl.data)\n .then(function (response) {\n // $scope.showSubmitSuccess();\n $scope.$emit('basketModelRefresh', []);\n $scope.cntrl.data = response.data;\n $scope.cntrl.successAndClose();\n }, function (data) {\n $scope.cntrl.pending = false;\n });\n };\n\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/profilecpr.tpl.html'\n });\n","angular.module('site.directives')\n .component('profileCustomerType', {\n restrict: 'E',\n bindings: {\n data: '='\n },\n controller: ['$scope','$controller', 'userService', function ($scope, $controller, userService) {\n \n this.$onInit = function() { \n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'profileCustomerTypeForm';\n\n // extra properties for particular directive\n $scope.cntrl.customerTypes = [\"Privatperson\",\"Offentlig institution\",\"Virksomhed\"];\n \n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n this.getCustomerTypeAsText = function(index){\n if (index !== undefined) {\n return $scope.cntrl.customerTypes[index];\n }\n return '';\n };\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function(){\n $scope.cntrl.pending = true;\n\n userService.updateMyProfile(profileServiceUrl+'/api/profile/updatecustomertype', $scope.cntrl.temporaryData)\n .then(function (response) {\n // $scope.cntrl.showSubmitSuccess();\n $scope.$emit('basketModelRefresh', []);\n $scope.cntrl.data = $scope.cntrl.temporaryData;\n $scope.cntrl.successAndClose();\n }, function (response) {\n $scope.cntrl.pending = false;\n\t\t\t\t });\n };\n\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/profilecustomertype.tpl.html'\n });","angular.module('site.directives')\n .component('profileFieldLayout', {\n restrict: 'E',\n transclude: {\n 'label': 'layoutLabel',\n 'content': '?layoutContent',\n 'button': '?layoutButton'\n },\n bindings: {\n pendingChanges: '&'\n },\n controller: ['$scope','config', function ($scope, config) {\n }],\n templateUrl: '/dist/templates/directives/profilefieldlayout.tpl.html'\n });\n","angular.module('site.directives')\n .component('profileGender', {\n restrict: 'E',\n bindings: {\n data: '='\n },\n controller: ['$scope','$controller', 'userService', function ($scope, $controller, userService) {\n \n this.$onInit = function() { \n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'profileGenderForm';\n \n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function(){\n\t\t\t\t$scope.cntrl.pending = true;\n\n userService.updateMyProfile(profileServiceUrl+'/api/profile/updategender', $scope.cntrl.temporaryData)\n .then(function (response) {\n // $scope.cntrl.showSubmitSuccess();\n $scope.$emit('basketModelRefresh', []);\n $scope.cntrl.data = $scope.cntrl.temporaryData;\n $scope.cntrl.successAndClose();\n }, function (response) {\n $scope.cntrl.pending = false;\n\t\t\t\t });\n }; \n \n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/profilegender.tpl.html'\n });","angular.module('site.directives')\n .component('profileInHouse', {\n restrict: 'E',\n bindings: {\n data: '='\n },\n controller: ['$scope','$controller','utilitiesService','userService', function ($scope, $controller, utils,userService) {\n \n this.$onInit = function() { \n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'profileInHouseForm';\n\n // extra properties for particular directive\n $scope.cntrl.createRange = utils.createRange;\n \n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function(){\n // call service, to hit REST API and update data\n \t$scope.cntrl.pending = true;\n\n userService.updateMyProfile(profileServiceUrl+'/api/profile/updatenumberinhouse', $scope.cntrl.temporaryData)\n .then(function (response) {\n // $scope.cntrl.showSubmitSuccess();\n $scope.$emit('basketModelRefresh', []);\n $scope.cntrl.data = $scope.cntrl.temporaryData;\n $scope.cntrl.successAndClose();\n }, function (response) {\n $scope.cntrl.pending = false;\n\t\t\t\t });\n };\n \n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/profileinhouse.tpl.html'\n });","angular.module('site.directives')\n .component('profileMemberOfDanmark', {\n restrict: 'E',\n bindings: {\n data: '='\n },\n controller: ['$scope','$controller', 'userService', function ($scope, $controller,userService) {\n \n this.$onInit = function() { \n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'profileMemberOfDanmarkForm';\n \n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function(){\n // call service, to hit REST API and update data\n \t$scope.cntrl.pending = true;\n\n userService.updateMyProfile(profileServiceUrl+'/api/profile/updatememberofdanmark', $scope.cntrl.temporaryData)\n .then(function (response) {\n // $scope.cntrl.showSubmitSuccess();\n $scope.$emit('basketModelRefresh', []);\n $scope.cntrl.data = $scope.cntrl.temporaryData;\n $scope.cntrl.successAndClose();\n }, function (response) {\n $scope.cntrl.pending = false;\n\t\t\t\t });\n };\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/profilememberofdanmark.tpl.html'\n });","angular.module('site.directives')\n .component('profileNewsletter', {\n restrict: 'E',\n bindings: {\n data: '='\n },\n controller: ['$scope', '$controller', 'userService', function ($scope, $controller, userService) {\n \n this.$onInit = function() { \n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'profileNewsletterForm';\n\n // extra properties for particular directive\n $scope.cntrl.showNofityMembership = false;\n \n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function(){\n // call service, to hit REST API and update data\n $scope.cntrl.pending = true;\n\n if ($scope.cntrl.temporaryData.isNewsletterSubscribed){\n userService.subscribeToNewsletter()\n .then(function (response) {\n $scope.cntrl.data = $scope.cntrl.temporaryData;\n $scope.cntrl.successAndClose();\n }, function (response) {\n $scope.cntrl.pending = false;\n });\n }\n else {\n userService.unsubscribeFromNewsletter()\n .then(function (response) {\n $scope.cntrl.data = $scope.cntrl.temporaryData;\n $scope.cntrl.successAndClose();\n }, function (response) {\n $scope.cntrl.pending = false;\n });\n }\n };\n\n this.notifyMembership = function(isSubscribed) {\n if (!isSubscribed && $scope.cntrl.temporaryData.typeString == \"ClubMember\") {\n $scope.cntrl.showNofityMembership = true;\n }\n };\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/profilenewsletter.tpl.html'\n });","angular.module('site.directives')\n .component('profileSubscriptionCard', {\n restrict: 'E',\n bindings: {\n data: '=',\n addUrl: '@'\n },\n controller: ['$scope','$controller', 'userService', function ($scope, $controller, user) {\n\n this.$onInit = function() {\n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'profileSubscriptionCardForm';\n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n this.getLastCard4Digits = function(){\n if ($scope.cntrl.data == null\n || $scope.cntrl.data.subscriptionCard == null)\n {\n return null;\n }\n\n return $scope.cntrl.data.subscriptionCard.card.substr($scope.cntrl.data.subscriptionCard.card.length - 4);\n }\n\n this.removeCards = function() {\n $scope.cntrl.pending = true;\n\n user.removeCards()\n .then(function (response) {\n console.log(response);\n $scope.cntrl.data.subscriptionCard = null;\n $scope.cntrl.successAndClose();\n }, function (data) {\n $scope.cntrl.pending = false;\n });\n\n };\n\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/profilesubscriptioncard.tpl.html'\n });\n","angular.module('site.directives')\n\t.directive('profileFieldError', ['$timeout', function($timeout) {\n\t\tvar errorMapper = function(error, text){\n\t\t\treturn {\n\t\t\t\terror: error,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t};\n\t\treturn {\n\t\t\tscope: true,\n\t\t\ttemplateUrl: '/dist/templates/directives/profilefielderror.tpl.html',\n\t\t\treplace: true,\n\t\t\tlink: function(scope, elem, attr) {\n\t\t\t\tscope.$watch(attr.profileFieldError, function(err){\n\t\t\t\t\tif(_.isObject(err)){\n\t\t\t\t\t\tscope.errors = _.map(err, errorMapper);\n\t\t\t\t\t\tscope.hasError = _.find(err, function(error, text){\n\t\t\t\t\t\t\treturn error;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t}\n\t\t};\n\t}]);\n\n\n","angular.module('site.directives')\n .component('raptorBanner', {\n restrict: 'E',\n bindings: {\n identifier: '@',\n amount: '@',\n fisk:'=',\n customparam: '=',\n header: '@',\n customclass: '@',\n itemsperrowdesktop: '@'\n },\n controller: ['$scope','config', '$timeout', 'raptorProductService','tagManagerService', 'basketService', '$modalStack', '$modal', '$rootScope',\n function ($scope, config, $timeout, raptorProductService, tagManagerService, basketService, $modalStack, $modal, $rootScope) {\n $scope.model = {};\n\n this.$onInit = function() {\n $scope.model.params=this;\n\n var method = $scope.model.params.identifier;\n var count = $scope.model.params.amount;\n var customParam = $scope.model.params.customparam;\n\n $scope.init(method,count,customParam);\n };\n\n $scope.init = function (method, count, customParam) {\n switch (method) {\n case 'userRecommendations':\n raptorProductService.userRecommendations(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'mostPopularRightNow':\n raptorProductService.mostPopularRightNow(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'topSellingInCategory':\n raptorProductService.topSellingInCategory(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'similarItems':\n raptorProductService.similarItems(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'relatedItems':\n raptorProductService.relatedItems(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'relatedItemsForBasket':\n raptorProductService.relatedItemsForBasket(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'userTopSellingItems':\n raptorProductService.userTopSellingItems(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'overallTopSellingXDays':\n raptorProductService.overallTopSellingXDays(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'cookieHistory':\n raptorProductService.cookieHistory(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'campaignItems':\n raptorProductService.campaignItems(count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'content2Products':\n raptorProductService.content2Products(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'product2Contents':\n raptorProductService.product2Contents(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'topViewedInCategory':\n raptorProductService.topViewedInCategory(customParam, count).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n case 'getMerchandisingProducts':\n raptorProductService.getMerchandisingProducts(count, customParam).then(function(res) {\n $scope.recommendedProducts = res.data;\n $timeout(raptorSlider, 0);\n });\n break;\n \n default:\n console.log(\"Default added for test\");\n //$scope.recommendedProducts =\n break;\n }\n };\n $scope.clickProduct = function(position, productJson, tagManagerProperties){\n\n var product = angular.fromJson(productJson);\n product.position = position;\n tagManagerService.updateDataLayer('productClick', tagManagerService.mapSearchProduct(product, product.position,1), tagManagerProperties, $scope.model.params.identifier);\n };\n $scope.updateBasket = function (id, quantity, event, type, position, productJson, tagManagerProperties, relatedProductSkus) {\n\n type = (typeof type === 'undefined') ? null : type;\n\n if (event) {\n event.preventDefault();\n }\n if ($scope.pending) {\n return;\n }\n $scope.selectedSku = id;\n basketService.update(id, quantity).then(function (results) {\n if (productJson) {\n var product = angular.fromJson(productJson);\n product.position = position;\n product.quantity = quantity;\n tagManagerService.updateDataLayer(type, tagManagerService.mapSearchProduct(product,product.position, product.quantity), tagManagerProperties);\n }\n $scope.resetQuantity();\n $scope.selectedSku = null;\n\n // when clicking add to basket button\n if (type === 'addToCart') {\n $scope.order = results.data;\n $scope.itemsAddedCount = quantity;\n\n var orderLines = $scope.order.orderLines;\n // find last added product\n $rootScope.lastAddedItem = _.findWhere(orderLines, { sku: id });\n\n // find last added product\n $rootScope.lastAddedItem = _.findWhere(orderLines, { sku: id.toString() });\n\n // display dialog\n $timeout(function () {\n $scope.openRelatedProductsModel('lg', relatedProductSkus);\n }, 50);\n }\n }).catch(function (error) {\n console.log('fejl:', error);\n });\n };\n $scope.resetQuantity = function (event) {\n if (event) {\n event.preventDefault();\n }\n $scope.quantity = $scope.defaultQuantity;\n };\n\n $scope.resetQuantity();\n\n $scope.openRelatedProductsModel = function (size, relatedProductSkus) {\n\n var query = {\n skus: relatedProductSkus,\n isClubMember: $scope.isClubMember\n };\n\n $modalStack.dismissAll();\n var modalInstance = $modal.open({\n templateUrl: '/partials/checkout/addToBasketDialog',\n controller: 'modelInstanceController',\n size: size,\n resolve: {\n order: function () {\n return $scope.order;\n },\n itemsAddedCount: function () {\n return $scope.itemsAddedCount;\n },\n lastAddedItem: function () {\n return $rootScope.lastAddedItem;\n }\n }\n });\n };\n\n\n }],\n templateUrl: '/dist/templates/directives/raptorbanner.tpl.html'\n });\n","angular.module('site.directives')\n\t.directive('siteResponseError', ['$timeout', function ($timeout) {\n\t\tvar defaults = {\n\t\t\tmax: 3,\n\t\t\ttimeout: 3000\n\t\t};\n\t\treturn {\n\t\t\ttemplateUrl: '/partials/directives/responseError',\n\t\t\tscope: true,\n\t\t\tlink: function (scope, elem, attr) {\n\t\t\t\tscope.settings = defaults;\n\t\t\t\tif (attr.siteResponseError) {\n\t\t\t\t\t_.extend(scope.settings, scope.$eval(attr.siteResponseError));\n\t\t\t\t}\n\n\t\t\t\tscope.responseErrors = [];\n\t\t\t\tscope.timer = {};\n\t\t\t\tscope.isInErrorState = false;\n\t\t\t\tscope.responseErrorHandler = function (event, messages) {\n\n\t\t\t\t\tif (!jQuery.isArray(messages)) {\n\t\t\t\t\t\tmessages = [messages];\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.responseErrors = messages;\n\n\t\t\t\t\tvar tag = $(\"#localErrorMessage\");\n\t\t\t\t\tif (tag && tag.length >= 1) {\n\t\t\t\t\t\tscope.showLocalErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscope.responseErrors = messages;\n\t\t\t\t\t\tscope.showResponseErrors();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tscope.hideLocalErrors = function () {\n\t\t\t\t\tvar tag = $(\"#localErrorMessage\");\n\t\t\t\t\ttag.text(\"\");\n\t\t\t\t}\n\n\t\t\t\tscope.showLocalErrors = function () {\n\t\t\t\t\tvar tag = $(\"#localErrorMessage\");\n\t\t\t\t\ttag.text(scope.responseErrors);\n\t\t\t\t\tscope.timer = $timeout(scope.hideLocalErrors, 10000);\n\t\t\t\t}\n\n\t\t\t\tscope.hideResponseErrors = function () {\n\t\t\t\t\tscope.isInErrorState = false;\n\t\t\t\t};\n\n\t\t\t\tscope.showResponseErrors = function () {\n\t\t\t\t\tscope.isInErrorState = true;\n\t\t\t\t\t$timeout.cancel(scope.timer);\n\t\t\t\t\tscope.timer = $timeout(scope.hideResponseErrors, scope.settings.timeout);\n\t\t\t\t\twindow.scrollTo(0, 0);\n\t\t\t\t};\n\n\t\t\t\tscope.$on('responseInterceptorError', scope.responseErrorHandler);\n\t\t\t}\n\t\t};\n\t}]);","angular.module('site.directives')\n\t.directive('siteScrollTo', ['$window', function($window) {\n\t\treturn function(scope, elem, attr) {\n\t\t\tvar scrollToElem = document.getElementById(attr.siteScrollTo);\n\t\t\telem.bind('click', function(event){\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif(scrollToElem){\n\t\t\t\t\t$window.scrollTo(0, scrollToElem.offsetTop);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t}]);","angular.module('site.directives')\n .component('searchAutosuggest', {\n restrict: 'E',\n bindings: {\n resultPageLink: '@',\n searchImage: '@'\n\n },\n controller: ['$scope', '$element', '$location', '$window', 'urlHelperService', 'gaTrackingService', 'wapSearchCategoriesResource', '$filter', 'userService', '$timeout', 'basketService', 'tagManagerService', '$modal', '$modalStack', 'searchService', '$rootScope'\n , function ($scope, $element, $location, $window, urlHelper, gaTracking, wapSearchCategoriesResource, $filter, userService, $timeout, basketService, tagManagerService, $modal, $modalStack, searchService, $rootScope) {\n $scope.defaultQuantity = 1;//$scope.product.quantity || 1;\n $scope.limitPopularSearchesMobile = 5;\n\n this.$onInit = function () {\n $scope.active = false;\n $scope.resultPageUrl = this.resultPageLink;\n $scope.products = [];\n $scope.popularSearches = [];\n $scope.categories = [];\n $scope.articles = [];\n $scope.timeout = {};\n $scope.searchImageUrl = this.searchImage;\n $scope.mobileTab = 1;\n $scope.searchTerm = \"\";\n $scope.mobileThreshold = 991;\n\n $scope.preSearchLinks = JSON.parse($element.attr('pre-search-links').replaceAll('"', '\"'));\n $scope.isClubMember = userService.isClubMemberSession();\n\n var profileType = 'Standard';\n if (userService.isClubMemberSession()) {\n profileType = 'ClubMember';\n }\n else if (userService.isPremiumMemberSession()) {\n profileType = 'Premium';\n }\n\n $scope.profileType = profileType;\n };\n\n $scope.getPopularSearches = function () {\n if ($scope.popularSearches.length === 0) {\n searchService.popularSearches({ profileType: $scope.profileType })\n .then(function (result) { $scope.popularSearches = result.data; });\n }\n }\n\n $scope.resetQuantity = function (event) {\n if (event) {\n event.preventDefault();\n }\n $scope.quantity = $scope.defaultQuantity;\n };\n\n $scope.toggleVisiblity = function () {\n $scope.getPopularSearches();\n\n $scope.active = true;\n $(\".search-bar .search-input\").addClass(\"active\");\n $(\".button-search\").addClass(\"active\");\n $(\".close-search\").addClass(\"active\");\n $(\"body #backgrounds\").addClass(\"nav-focus\");\n $(\"body\").addClass(\"no-scroll\");\n\n searchAutoSuggestHeight();\n }\n\n $scope.hiddenVisiblity = function () {\n $scope.active = false;\n $(\"body #backgrounds\").removeClass(\"nav-focus\");\n $(\".button-search\").removeClass(\"active\");\n $(\".close-search\").removeClass(\"active\");\n $(\".search-bar .search-input\").removeClass(\"active\");\n $(\"body\").removeClass(\"no-scroll\");\n $scope.mobileTab = 1;\n }\n\n $scope.isVisible = function () {\n return $scope.active;\n }\n\n $scope.submit = function () {\n if ($scope.resultPageUrl === '' || $scope.searchTerm == null || $scope.searchTerm.length <= 1) {\n return;\n }\n\n // Manually replace all instances of = and / as they interfere with the current url scheme.\n // Encoding them doesn't help as angular routing rewrites them again as they are valid url chars\n var term = $scope.searchTerm.replace(/[\\/=]/g, '');\n\n if (!term) {\n return;\n }\n\n $scope.updateSearchTerm($scope.searchTerm);\n }\n\n $scope.updateSearchTerm = function (query) {\n $scope.hiddenVisiblity();\n $window.location.href = $scope.resultPageUrl + '#!/term=/' + $window.encodeURIComponent(query);\n }\n\n $scope.innerSearch = function () {\n if (!$scope.searchTerm) {\n return;\n }\n\n $scope.quickSearch();\n\n searchAutoSuggestHeight();\n }\n\n $scope.quickSearch = function () {\n var query = $scope.searchTerm;\n var productProfileType = $scope.profileType;\n var hitsPerPage = {\n products: 6,\n categories: 7,\n articles: 5\n }\n\n searchService.quickSearch(query, productProfileType, hitsPerPage)\n .then(function (xhr) {\n if (xhr && xhr.data) {\n var result = xhr.data;\n $scope.hasSearchedForProducts = true;\n $scope.products = result.products ? result.products : [];\n $scope.categories = result.categories ? result.categories : [];\n $scope.articles = result.articles ? result.articles : [];\n }\n });\n }\n\n $scope.categorySearch = function () {\n searchService.categorySearch({ term: $scope.searchTerm, hitsPerPage: 7 }).then(function (xhr) {\n if (xhr && xhr.data) {\n var result = xhr.data;\n $scope.active = true;\n $scope.categories = result.categories ? result.categories : [];\n if ($window.innerWidth <= $scope.mobileThreshold) {\n if ($scope.mobileTab === 1 && $scope.categories.length === 0) {\n $scope.mobileTab = 2;\n $scope.quickSearch();\n }\n }\n }\n });\n }\n\n $scope.articleSearch = function () {\n searchService.articleSearch({ term: $scope.searchTerm, hitsPerPage: 5 }).then(function (xhr) {\n if (xhr && xhr.data) {\n var result = xhr.data;\n $scope.articles = result.articles ? result.articles : [];\n if ($scope.articles.length > 0 && $scope.searchTerm.length > 1) {\n $(\"body #backgrounds\").addClass(\"nav-focus\");\n $(\"body\").addClass(\"no-scroll\");\n }\n else {\n $(\"body\").removeClass(\"no-scroll\");\n }\n }\n });\n }\n\n $scope.search = function (event) {\n $scope.hasSearchedForProducts = false;\n if (event) {\n var keyCode = event.keyCode;\n // 13 = Enter, 16 = Shift, 17 = Ctrl, 18 = Alt\n var keysToIgnore = [13, 16, 17, 18];\n\n if (keysToIgnore.includes(keyCode)) {\n return;\n }\n }\n\n $timeout.cancel($scope.timeout)\n // Only search on two letters and more\n if ($scope.searchTerm.length > 1) {\n $scope.timeout = $timeout($scope.innerSearch);\n }\n else {\n $scope.products = [];\n $scope.categories = [];\n $scope.articles = [];\n }\n }\n\n $scope.updateBasket = function (id, quantity, event, type, position, productJson, tagManagerProperties, relatedProductSkus) {\n type = (typeof type === 'undefined') ? null : type;\n\n if (event) {\n event.preventDefault();\n }\n if ($scope.pending) {\n return;\n }\n $scope.selectedSku = id;\n basketService.update(id, quantity).then(function (results) {\n if (productJson) {\n var product = angular.fromJson(productJson);\n product.position = position;\n product.quantity = quantity;\n tagManagerService.updateDataLayer(type, product, tagManagerProperties);\n }\n $scope.resetQuantity();\n $scope.selectedSku = null;\n\n // when clicking add to basket button\n if (type === 'addToCart') {\n $scope.order = results.data;\n $scope.itemsAddedCount = quantity;\n\n var orderLines = $scope.order.orderLines;\n // find last added product\n $rootScope.lastAddedItem = _.findWhere(orderLines, { sku: id });\n\n // find last added product\n $rootScope.lastAddedItem = _.findWhere(orderLines, { sku: id.toString() });\n\n // display dialog\n $timeout(function () {\n $scope.openRelatedProductsModel('lg', relatedProductSkus);\n }, 50);\n\n }\n }).catch(function (error) {\n console.log('fejl:', error);\n });\n };\n\n $scope.openRelatedProductsModel = function (size, relatedProductSkus) {\n\n var query = {\n skus: relatedProductSkus,\n isClubMember: $scope.isClubMember\n };\n\n $modalStack.dismissAll();\n var modalInstance = $modal.open({\n templateUrl: '/partials/checkout/addToBasketDialog',\n controller: 'modelInstanceController',\n size: size,\n resolve: {\n order: function () {\n return $scope.order;\n },\n itemsAddedCount: function () {\n return $scope.itemsAddedCount;\n },\n lastAddedItem: function () {\n return $rootScope.lastAddedItem;\n }\n }\n });\n };\n\n $scope.setMobileTab = function (tabId) {\n $scope.mobileTab = tabId;\n };\n\n $scope.isMobileTabSet = function (tabId) {\n return $scope.mobileTab === tabId;\n };\n\n $scope.selectCategoryTabMobile = function () {\n $scope.setMobileTab(1);\n }\n\n $scope.selectProductTabMobile = function () {\n $scope.setMobileTab(2);\n }\n\n $scope.selectArticleTabMobile = function () {\n $scope.setMobileTab(3);\n }\n }],\n templateUrl: '/dist/templates/directives/searchautosuggest.tpl.html'\n });\n","angular.module('site.directives')\n\t.directive('siteSearchForm', ['$window', '$location', 'urlHelperService', function($window, $location, urlHelper) {\n\t\treturn {\n\t\t scope: {\n\t\t url: '@siteSearchForm'\n\t\t\t},\n\t\t templateUrl: '/partials/directives/searchform',\n\t\t\tlink: function(scope, elem, attr) {\n\t\t\t\tscope.search = function(){\n\t\t\t\t\t// Manually replace all instances of = and / as they interfere with the current url scheme.\n\t\t\t\t\t// Encoding them doesn't help as angular routing rewrites them again as they are valid url chars\n\t\t\t\t\tvar term = scope.term.replace(/[\\/=]/g,'');\n\n\t\t\t\t\tif(!term){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif($window.location.pathname === scope.url){\n\t\t\t\t\t\t$location.path('term=/' + term);\n\t\t\t\t\t}else{\n\t\t\t\t\t\t$window.location.href = scope.url + '#!/term=/' + $window.encodeURIComponent(term);\n }\n\t\t\t\t};\n\t\t\t\tscope.term = urlHelper.getParamsFromPath($location.path()).term || '';\n\t\t\t}\n\t\t};\n\t}]);","angular.module('site.directives')\n .component('shippingOptions', {\n restrict: 'E',\n bindings: {\n shippingSettings: '=',\n\n // showValidationMessages: '<', // if validation messages should be visible\n zipCode: '@',\n addressLine: '@',\n profileType: '@',\n pending: '<', // if form submittion is pending\n\n backLink: '@',\n onSave: '&', // event raised when form submitted and validataed\n\n // currently user preselected values\n selectedType: '@',\n selectedMethod: '@',\n selectedPickupPointId: '@',\n mode: '@'\n },\n controller: ['$scope', '$controller', 'shippingInfoService', 'shippingService', function ($scope, $controller, shippingInfoService, shippingService) {\n\n // INITIALIZATION\n\n $scope.cntrl.model = {\n selectedShippingType: null,\n selectedShippingTypeMethod: null,\n selectedPickupPointId: null,\n\n // view specific\n radioButtonSelectedShippingTypeMethodAlias: null,\n radioButtonSelectedPickupPointId: null,\n\n pickupPoints: {\n items: [], // pickup points\n loading: true,\n total: 0, // total count of pickup points\n limit: 0, // how many pickup points are visible for user\n defaultLimit: 5 // default for how many pickup points displayed\n },\n\n showValidationMessages: false\n };\n\n $scope.cntrl.showSaveButton = true;\n\n function initSubscriptionFlow() {\n var cheapestType = null;\n var cheapestMethod = null;\n\n for (var st = 0; st < $scope.$parent.cntrl.shippingSettings.shippingTypes.length; st++) {\n for (var sm = 0; sm < $scope.$parent.cntrl.shippingSettings.shippingTypes[st].shippingMethods.length; sm++) {\n\n if (cheapestMethod == null || parseFloat(cheapestMethod.price) > parseFloat($scope.$parent.cntrl.shippingSettings.shippingTypes[st].shippingMethods[sm].price)) {\n cheapestType = $scope.$parent.cntrl.shippingSettings.shippingTypes[st];\n cheapestMethod = $scope.$parent.cntrl.shippingSettings.shippingTypes[st].shippingMethods[sm];\n }\n\n if ($scope.$parent.cntrl.shippingSettings.shippingTypes[st].shippingMethods[sm].alias == $scope.cntrl.selectedMethod) {\n $scope.cntrl.model.selectedShippingType = $scope.$parent.cntrl.shippingSettings.shippingTypes[st];\n $scope.cntrl.model.selectedShippingTypeMethod = $scope.$parent.cntrl.shippingSettings.shippingTypes[st].shippingMethods[sm];\n $scope.cntrl.model.radioButtonSelectedShippingTypeMethodAlias = $scope.$parent.cntrl.shippingSettings.shippingTypes[st].shippingMethods[sm].alias;\n }\n }\n }\n\n if ($scope.cntrl.model.selectedShippingTypeMethod == null) {\n $scope.cntrl.model.selectedShippingType = cheapestType;\n $scope.cntrl.model.selectedShippingTypeMethod = cheapestMethod;\n $scope.cntrl.model.radioButtonSelectedShippingTypeMethodAlias = cheapestMethod.alias;\n }\n\n $scope.selectedShippingTypeMethodChanged($scope.cntrl.model.selectedShippingType, $scope.cntrl.model.selectedShippingTypeMethod);\n };\n\n this.$onInit = function () {\n\n if ($scope.cntrl.mode && $scope.cntrl.mode.toLowerCase() === \"inline\") {\n\n shippingService.getSettingsForSubscription($scope.$parent.currentNewSubscription.sku, $scope.$parent.currentNewSubscription.quantity).then(\n function successCallback(response) {\n $scope.$parent.shippingSettings = response.data;\n $scope.$parent.cntrl.shippingSettings = response.data;\n $scope.$parent.loading = false;\n\n initSubscriptionFlow();\n },\n function errorCallback(error) {\n console.error(error);\n }\n );\n\n } else {\n\n if ($scope.cntrl.shippingSettings && $scope.cntrl.mode) {\n if ($scope.cntrl.mode.toLowerCase() === \"inline\") {\n $scope.cntrl.showSaveButton = false;\n } else {\n $scope.cntrl.showSaveButton = true;\n }\n }\n\n // recalculate prices of shipping types and methods based on user profile\n if ($scope.cntrl.profileType == 'Premium') {\n CalculateShippingPricesForPremium($scope.cntrl.shippingSettings.shippingTypes);\n }\n else if ($scope.cntrl.profileType == 'ClubMember') {\n CalculateShippingPricesForClubMember($scope.cntrl.shippingSettings.shippingTypes);\n }\n else {\n CalculateShippingPricesForStandard($scope.cntrl.shippingSettings.shippingTypes);\n }\n\n var type = null;\n var method = null;\n\n // if user has selected prefered values for shipping\n if ($scope.cntrl.selectedType !== undefined && $scope.cntrl.selectedMethod !== undefined) {\n var preselectedTypes = $scope.cntrl.shippingSettings.shippingTypes.filter(function (t) {\n return t.alias.toLowerCase() === $scope.cntrl.selectedType.toLowerCase();\n });\n type = (preselectedTypes.length == 1) ? preselectedTypes[0] : null;\n\n // if type is valid then try to find matching method, else fallback to default\n if (type) {\n var preselectedTypeMethods = type.shippingMethods.filter(function (t) {\n return t.alias.toLowerCase() === $scope.cntrl.selectedMethod.toLowerCase();\n });\n method = (preselectedTypeMethods.length == 1) ? preselectedTypeMethods[0] : null;\n }\n }\n\n // if type or method is not set, then use defautl shipping configuration values instead\n if (!type || !method) {\n console.warn(\"Fallback to default\");\n // find preselected shipping type\n type = $scope.cntrl.shippingSettings.shippingTypes.filter(function (t) {\n return t.alias.toLowerCase() === $scope.cntrl.shippingSettings.preSelectedTypeAlias.toLowerCase();\n })[0];\n\n // use preselected shipping types default method\n method = type.shippingMethods.filter(function (t) {\n return t.alias.toLowerCase() === type.preSelectedMethodAlias.toLowerCase();\n })[0];\n }\n\n // // set final values for model\n $scope.cntrl.model.selectedShippingType = type;\n $scope.cntrl.model.selectedShippingTypeMethod = method;\n $scope.cntrl.model.radioButtonSelectedShippingTypeMethodAlias = method.alias;\n\n if ($scope.$parent && $scope.$parent.handleShippingOptionsInit) {\n $scope.$parent.handleShippingOptionsInit(type, method);\n }\n\n // if default selected shipping type is a pickup service, then load pickup points\n if (type && type.isPickupService) {\n $scope.reloadPickupPoints($scope.cntrl.selectedPickupPointId);\n }\n }\n };\n\n // INNER FUNCTIONS\n\n function CalculateShippingPricesForPremium(shippingTypes) {\n // types\n angular.forEach(shippingTypes, function (shippingType) {\n shippingType.lowestPrice = '0,-';\n\n // methods\n angular.forEach(shippingType.shippingMethods, function (shippingTypeMethod) {\n shippingTypeMethod.price = 0;\n });\n });\n };\n\n function CalculateShippingPricesForClubMember(shippingTypes) {\n // types\n angular.forEach(shippingTypes, function (shippingType) {\n\n // methods\n angular.forEach(shippingType.shippingMethods, function (shippingTypeMethod) {\n // only if has a free shipping option\n if (shippingTypeMethod.hasFreeShippingOption) {\n shippingTypeMethod.price = 0;\n\n // set available lowest price on shipping type\n shippingType.lowestPrice = '0,-';\n }\n });\n });\n };\n\n function CalculateShippingPricesForStandard(shippingTypes) {\n // do nothing atm.\n };\n\n // VIEW FUNCTIONS\n\n // fired when new shipping type method is selected by user\n $scope.selectedShippingTypeMethodChanged = function (newShippingType, newShippingTypeMethod) {\n // reset selected values=\n $scope.cntrl.model.selectedShippingType = newShippingType;\n $scope.cntrl.model.selectedShippingTypeMethod = newShippingTypeMethod;\n\n // reset pickup values\n $scope.cntrl.model.selectedPickupPoint = null;\n $scope.cntrl.model.radioButtonSelectedPickupPointId = null;\n\n // if new type is pickup point, then reload pickup points\n if (newShippingType.isPickupService) {\n $scope.reloadPickupPoints();\n }\n\n if ($scope.$parent && $scope.$parent.handleShippingTypeMethodChanged) {\n $scope.$parent.handleShippingTypeMethodChanged(newShippingType, newShippingTypeMethod);\n }\n };\n\n $scope.selectedPickupPointChanged = function (pickupPoint) {\n $scope.cntrl.model.selectedPickupPoint = pickupPoint;\n\n if ($scope.$parent && $scope.$parent.handlePickupPointChanged) {\n $scope.$parent.handlePickupPointChanged(pickupPoint);\n }\n };\n\n // load pickup points data\n $scope.reloadPickupPoints = function (preferedPickupPointId) {\n\n // ensure address and zip code are present\n if ($scope.cntrl.zipCode === \"\" || $scope.cntrl.addressLine === \"\")\n {\n $scope.cntrl.model.pickupPoints.loading = false;\n return false;\n }\n\n if (!$scope.cntrl.model.selectedShippingType.isPickupService)\n {\n $scope.cntrl.model.pickupPoints.loading = false;\n return false;\n }\n\n // reset pickup points properties\n $scope.cntrl.model.pickupPoints.loading = true;\n $scope.cntrl.model.pickupPoints.items = null;\n $scope.cntrl.model.pickupPoints.total = 0;\n $scope.cntrl.model.pickupPoints.limit = $scope.cntrl.model.pickupPoints.defaultLimit;\n\n $scope.cntrl.model.selectedPickupPoint = null;\n $scope.cntrl.model.radioButtonSelectedPickupPointId = null;\n\n shippingInfoService.getPickupDestinations({\n alias: $scope.cntrl.model.selectedShippingTypeMethod.alias,\n address: $scope.cntrl.addressLine,\n zipCode: $scope.cntrl.zipCode\n }).then(function (response) {\n $scope.cntrl.model.pickupPoints.items = response.data.destinations;\n $scope.cntrl.model.pickupPoints.total = response.data.destinations.length;\n\n // if user has selected preffered pickup point, then try to find it in results\n if (preferedPickupPointId) {\n var matchingPickupPoints = response.data.destinations.filter(function (t) {\n return t.id.toString() === preferedPickupPointId.toString();\n });\n if (matchingPickupPoints.length == 1) {\n $scope.cntrl.model.selectedPickupPoint = matchingPickupPoints[0];\n $scope.cntrl.model.radioButtonSelectedPickupPointId = matchingPickupPoints[0].id;\n }\n else {\n $scope.cntrl.selectedPickupPointId = null;\n }\n }\n\n $scope.cntrl.model.pickupPoints.loading = false;\n }, function (error) {\n console.error(error);\n });\n };\n\n $scope.showAllPickupPoints = function () {\n $scope.cntrl.model.pickupPoints.limit = $scope.cntrl.model.pickupPoints.total;\n };\n\n $scope.showLimitedPickupPoints = function () {\n $scope.cntrl.model.pickupPoints.limit = $scope.cntrl.model.pickupPoints.defaultLimit;\n };\n\n $scope.formSubmitted = function () {\n $scope.cntrl.model.showValidationMessages = true;\n if ($scope['shippingOptionsForm'].$invalid || $scope.cntrl.pending) {\n return false;\n }\n\n if ($scope.cntrl.model.selectedShippingType.isPickupService && !$scope.cntrl.model.selectedPickupPoint) {\n return false;\n }\n\n $scope.cntrl.onSave()({\n type: $scope.cntrl.model.selectedShippingType,\n method: $scope.cntrl.model.selectedShippingTypeMethod,\n pickupPoint: $scope.cntrl.model.selectedPickupPoint\n });\n };\n\n }],\n controllerAs: 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/shippingoptions.tpl.html'\n });\n","angular.module('site.directives')\n\t.directive('shippingExpand', ['$window', 'smoothScroll', function ($window, smoothScroll) {\n\t return {\n\t restrict: 'A',\n\t scope: true,\n\t link: function (scope, element, attrs) {\n\t var columns = 2;\n\t var index = element.index();\n\n\t var w = angular.element($window);\n\t scope.getWindowDimensions = function () {\n\t return {\n\t 'h': w.height(),\n\t 'w': w.width()\n\t };\n\t };\n\n\t scope.$watch(scope.getWindowDimensions, function (newValue, oldValue) {\n\t scope.windowHeight = newValue.h;\n\t scope.windowWidth = newValue.w;\n\n\t if (scope.windowWidth < 668) {\n\t columns = 1;\n\t } else {\n\t columns = 2;\n\t }\n\n\t if (scope.windowWidth != oldValue.w) {\n\t scope.reArrangeElements(columns);\n\t }\n\n\t }, true);\n\n\t w.bind('resize', function () {\n\t scope.$apply();\n\t });\n\t \n\t element.bind('click', function () {\n\t scope.reArrangeElements(columns);\n\t });\n\n\t scope.reArrangeElements = function (cols) {\n\n\t var elemIndex = 0;\n\n\t var shippingInfo = element.parent().find(\".method-details\");\n\n\t var els = element.parent('.delivery-methods-wrapper').find('.delivery-method');\n\t angular.forEach(els, function (el, i) {\n\n\t var selected = angular.element(el).hasClass('selected');\n\t if (selected) {\n\t elemIndex = i;\n\t }\n\n\t if ((i + 1) % cols == 0) {\n\t angular.element(el).removeClass(\"margin-bottom\").addClass(\"no-margin\");\n\t }\n\t else {\n\t angular.element(el).removeClass(\"no-margin\").addClass(\"margin-bottom\");\n\t }\n\t });\n\n\t var position = (elemIndex + 1) + ((elemIndex + 1) % cols);\n\t var lastElementInRow = angular.element(els[position - 1]);\n\t shippingInfo.insertAfter(lastElementInRow);\n\n\t var options = attrs;\n\t smoothScroll(element[0], options);\n\t }\n\n\t scope.reArrangeElements(columns);\n\t }\n\t };\n\t}]);","angular.module('site.directives')\n\t.directive('shippingTypeSelect', ['$window', 'smoothScroll', function ($window, smoothScroll) {\n\t return {\n\t restrict: 'A',\n\t link: function (scope, element) {\n\n\t element.bind('click', function (e) {\n\t angular.element(element).siblings('.delivery-methods-wrapper').find(\".delivery-method.selected\").trigger('click');\n\t });\n\t }\n\t };\n\t}]);","angular.module('site.directives')\r\n\t.directive('siteSlidetoggle', ['$window', function ($window) {\r\n\t\treturn {\r\n restrict: 'E',\r\n transclude: true,\r\n scope: {\r\n closeButtonText: '@'\r\n },\r\n template: '
      ' +\r\n '
      ' +\r\n '
      ' +\r\n '{{ closeButtonText }}' +\r\n '
      ',\r\n\t\t\tlink: function (scope, element, attr) {\r\n\r\n function setup() {\r\n // Attach click event to elementForToggling\r\n var elementForToggling = attr['elementForToggling'];\r\n if (elementForToggling) {\r\n var elm = angular.element(document.querySelector(elementForToggling));\r\n elm.bind('click', function (event) {\r\n event.preventDefault();\r\n scope.toggle();\r\n scope.$apply(); // Trigger a digest cycle to update the view\r\n });\r\n }\r\n\r\n // Attach resize event to window so we can resize the container accordingly\r\n var resizeTimeout;\r\n angular.element($window).on('resize', function () {\r\n clearTimeout(resizeTimeout);\r\n resizeTimeout = setTimeout(function () {\r\n console.log('resize', scope.measureContainerHeight())\r\n if (scope.isOpen) {\r\n console.log('its open, setting...')\r\n scope.setMaxHeightToMeasuredHeight();\r\n scope.$apply();\r\n }\r\n }, 200);\r\n });\r\n \r\n scope.$on('$destroy', function () {\r\n angular.element($window).off('resize');\r\n });\r\n \r\n scope.close();\r\n }\r\n\r\n\r\n scope.measureContainerHeight = function () {\r\n return element[0].querySelector('.slidetoggle-container').scrollHeight;\r\n }\r\n\r\n scope.setMaxHeightToMeasuredHeight = function () {\r\n var extraHeight = 30;\r\n scope.maxHeight = (scope.measureContainerHeight() + extraHeight) + 'px';\r\n }\r\n\r\n scope.open = function() {\r\n scope.setMaxHeightToMeasuredHeight();\r\n scope.isOpen = true;\r\n } \r\n\r\n scope.close = function() {\r\n scope.maxHeight = 0\r\n scope.isOpen = false;\r\n };\r\n\r\n scope.toggle = function() {\r\n if (scope.isOpen) {\r\n scope.close();\r\n } else {\r\n scope.open();\r\n }\r\n }\r\n\r\n setup();\r\n\t\t\t}\r\n\t\t};\r\n\t}]);\r\n","angular.module('site.directives')\n\t.directive('starRating', [function() {\n return {\n restrict : \"EA\",\n template : \"
        \" +\n \"
      • \" +\n \" \" + // icon-star //★\n \"
      • \" +\n \"
      \",\n scope : {\n ratingValue : \"=ngModel\",\n max : \"=?\", //optional: default is 5\n readonly: \"=?\"\n },\n link : function(scope, elem, attrs) {\n if (scope.max == undefined) { scope.max = 5; }\n function updateStars() {\n scope.stars = [];\n for (var i = 0; i < scope.max; i++) {\n scope.stars.push({\n filled : i < scope.ratingValue\n });\n }\n };\n scope.toggle = function(index) {\n if (scope.readonly == undefined || scope.readonly == false){\n scope.ratingValue = index + 1;\n }\n };\n scope.$watch(\"ratingValue\", function (newVal, oldVal) {\n if (newVal) {\n updateStars();\n }\n });\n }\n };\n}]);","angular.module('site.directives')\n .component('subscriptionAddress', {\n restrict: 'E',\n bindings: {\n data: '=',\n onSave: '&',\n locked: '<'\n },\n controller: ['$scope', '$controller', function ($scope, $controller) {\n\n this.$onInit = function() {\n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'subscriptionAddressForm';\n\n // extra properties for particular directive\n var json = $('subscription-address').attr('data-countries');\n $scope.cntrl.countries = angular.fromJson(json.toString()) || [];\n $scope.cntrl.linkToMyProfile = $('subscription-address').attr('link-to-myprofile');\n\n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n /*\n called when edit button is clicked, init edit view model\n */\n this.editClicked = function(){\n\n // if alternative address is set\n if ($scope.cntrl.data){\n // do nothing\n return;\n }\n // default delivery address to be used as a starter point for alternative delivery address\n $scope.cntrl.temporaryData = angular.copy($scope.cntrl.data);\n // if country is not set, fallback to Denmark\n $scope.cntrl.temporaryData.countryIsoCode = $scope.cntrl.temporaryData.countryIsoCode || 'DK';\n };\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function(){\n // check if values are the same as with default delivery address, then there is nothing to update\n if (\n $scope.cntrl.data == null\n && $scope.cntrl.data.firstName == $scope.cntrl.temporaryData.firstName\n && $scope.cntrl.data.lastName == $scope.cntrl.temporaryData.lastName\n && $scope.cntrl.data.addressLine == $scope.cntrl.temporaryData.addressLine\n && $scope.cntrl.data.companyName == $scope.cntrl.temporaryData.companyName\n && $scope.cntrl.data.postalCode == $scope.cntrl.temporaryData.postalCode\n && $scope.cntrl.data.city == $scope.cntrl.temporaryData.city\n && $scope.cntrl.data.countryIsoCode == $scope.cntrl.temporaryData.countryIsoCode\n )\n {\n console.log(\"Values are the same as before\");\n $scope.cntrl.successAndClose();\n return;\n }\n\n // if address id is 0, it is null instead, specific value API expects\n if ($scope.cntrl.temporaryData.id == 0)\n {\n $scope.cntrl.temporaryData.id = null;\n }\n\n $scope.cntrl.pending = true;\n $scope.cntrl.onSave()(\n\n $scope.cntrl.temporaryData.id,\n $scope.cntrl.temporaryData.firstName,\n $scope.cntrl.temporaryData.lastName,\n $scope.cntrl.temporaryData.companyName,\n $scope.cntrl.temporaryData.addressLine,\n $scope.cntrl.temporaryData.postalCode,\n $scope.cntrl.temporaryData.city,\n $scope.cntrl.temporaryData.countryIsoCode\n\n ).then(function (response) {\n $scope.cntrl.data = $scope.cntrl.data || {};\n $scope.cntrl.data.id = response.data.resultObj.id;\n $scope.cntrl.data.firstName= $scope.cntrl.temporaryData.firstName;\n $scope.cntrl.data.lastName= $scope.cntrl.temporaryData.lastName;\n $scope.cntrl.data.companyName= $scope.cntrl.temporaryData.companyName;\n $scope.cntrl.data.addressLine= $scope.cntrl.temporaryData.addressLine;\n $scope.cntrl.data.postalCode= $scope.cntrl.temporaryData.postalCode;\n $scope.cntrl.data.city= $scope.cntrl.temporaryData.city;\n $scope.cntrl.data.countryIsoCode= $scope.cntrl.temporaryData.countryIsoCode;\n $scope.cntrl.successAndClose();\n }, function (response) {\n $scope.cntrl.pending = false;\n });\n };\n\n this.isValidAddressLine = function(addressLine){\n if(!addressLine){\n return true;\n }else{\n return /\\d+/g.test(addressLine);\n }\n };\n\n $scope.$watch('cntrl.temporaryData.countryIsoCode', function (newValue, oldValue, scope) {\n if (newValue && newValue != 'DK'){\n $scope.cntrl.temporaryData = $scope.cntrl.temporaryData || {};\n $scope.cntrl.temporaryData.countryIsoCode = $scope.cntrl.temporaryData.countryIsoCode || 'DK';\n }\n }, true);\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/subscriptionaddress.tpl.html'\n });\n","angular.module('site.directives')\n .component('subscriptionCard', {\n restrict: 'E',\n bindings: {\n card: '=',\n profilePageUrl: '@',\n locked: '<'\n },\n controller: ['$scope', '$controller', function ($scope, $controller) {\n\n this.$onInit = function() { \n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'subscriptionCardForm';\n\n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n this.getLastCard4Digits = function(){\n if ($scope.cntrl.card == null)\n {\n return null;\n }\n\n return $scope.cntrl.card.card.substr($scope.cntrl.card.card.length - 4);\n }\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function(){\n $scope.cntrl.pending = true;\n\n };\n }],\n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/subscriptioncard.tpl.html'\n });\n","angular.module('site.directives')\n .component('subscriptionInterval', {\n restrict: 'E',\n bindings: {\n data: '=',\n onSave: '&'\n },\n controller: ['$scope', '$controller', function ($scope, $controller) {\n\n this.$onInit = function () {\n // required properties, for proper layout/flow/validation functionality in base controller\n $scope.cntrl.formName = 'subscriptionIntervalForm';\n\n $scope.cntrl.availableIntervals = $scope.$parent.data.model.intervals;\n $scope.cntrl.data.selectedInterval = $scope.cntrl.availableIntervals[0];\n\n for (var i = 0; i < $scope.cntrl.availableIntervals.length; i++) {\n if ($scope.cntrl.availableIntervals[i].value === $scope.cntrl.data.daysBetweenDeliveries) {\n $scope.cntrl.data.selectedInterval = $scope.cntrl.availableIntervals[i];\n }\n }\n\n angular.extend(this, $controller('BaseProfileDirectiveController', {\n $scope: $scope\n }));\n };\n\n /*\n called when form is saved and form data is valid (based on data attributes)\n any custom fields or values, must be revalidated\n */\n this.baseValidationDoneBeforeSaving = function () {\n $scope.cntrl.pending = true;\n $scope.cntrl.onSave()($scope.cntrl.temporaryData.daysBetweenDeliveries).then(function (response) {\n for (var i = 0; i < $scope.cntrl.availableIntervals.length; i++) {\n if ($scope.cntrl.availableIntervals[i].value == $scope.cntrl.temporaryData.daysBetweenDeliveries) {\n $scope.cntrl.data.selectedInterval = $scope.cntrl.availableIntervals[i];\n }\n }\n\n $scope.cntrl.data.daysBetweenDeliveries = $scope.cntrl.temporaryData.daysBetweenDeliveries;\n $scope.cntrl.successAndClose();\n }, function (response) {\n $scope.cntrl.pending = false;\n });\n\n };\n }],\n controllerAs: 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/subscriptioninterval.tpl.html'\n });\n\n","angular.module('site.directives')\n .component('myPageSubscriptionProducts', {\n restrict: 'E',\n bindings: {\n subscriptionProducts: '=',\n productsInformation: '=',\n locked: '<', // if quantity fields/ removal are available\n allowDeletion: '<', // if deletion is allowed\n onQuantityUpdated: '&', // event raised on quantity updated by user\n onRemoved: '&' // even raised on product removal request by user\n },\n controller: ['$scope', 'subscriptionService', function ($scope, subscriptionService) {\n\n /*\n\n conditional fields on product:\n .error - if product is not found\n .originalQuantity - quantity that is stored before trying to update quantity\n .details - details object from Product API, set during MapAndCalculateProducts()\n .calculated - calculated values\n .total\n .value\n .format\n */\n\n this.$onInit = function () {\n $scope.cntrl.calculated = {\n total: null\n // set during CalculateTotal();\n // {\n // value : 0,\n // format: 0\n // };\n };\n\n MapAndCalculateProducts();\n CalculateTotal();\n };\n\n\n $scope.removeSubscriptionProduct = function (product) {\n $scope.cntrl.onRemoved()(product.id).then(\n function successCallback(response) {\n // remove product from list\n var index = $scope.cntrl.subscriptionProducts.indexOf(product);\n if (index > -1) {\n $scope.cntrl.subscriptionProducts.splice(index, 1);\n }\n else {\n console.error(\"Couldn't remove product from products array\");\n }\n },\n function errorCallback(error) {\n console.error(error);\n }\n );\n };\n\n $scope.productQuantityUpdated = function (product) {\n // validate quantity\n if (!product.quantity\n || product.quantity >= 1000\n || product.quantity <= 0\n ) {\n product.quantity = product.originalQuantity;\n return false;\n }\n\n $scope.cntrl.onQuantityUpdated()(product.id, product.sku, product.quantity, product.prescriptionId)\n .then(\n function successCallback(response) {\n product.originalQuantity = product.quantity;\n MapAndCalculateProducts();\n CalculateTotal();\n },\n function errorCallback(error) {\n console.error(error);\n product.quantity = product.originalQuantity;\n }\n );\n };\n\n $scope.incrementQuantity = function (el, product){\n\n product.quantity = GetCount(el, \"plus\");\n $scope.productQuantityUpdated(product);\n };\n\n $scope.decrementQuantity = function (el, product){\n product.quantity = GetCount(el, \"minus\");\n $scope.productQuantityUpdated(product);\n };\n\n function GetCount(el, type){\n var countEl = el.parentNode.parentNode.getElementsByClassName(\"input--quantity\")[0];\n var count = +countEl.value;\n if(type == \"minus\"){\n if (count > 1) {\n count--;\n }\n }\n else {\n count++;\n }\n return count;\n }\n\n // functions\n\n function MapAndCalculateProducts() {\n // loop through each product in subscription and lookup for according product entity\n angular.forEach($scope.cntrl.subscriptionProducts, function (value, key) {\n var matchingProducts = $scope.cntrl.productsInformation.filter(function (product) {\n return product.sku == value.sku;\n });\n\n value.originalQuantity = value.quantity;\n if (matchingProducts.length == 0) {\n value.details = null;\n value.calculated = null;\n value.error = true;\n }\n else {\n value.details = matchingProducts[0];\n value.error = false;\n CalculatePrice(value);\n }\n });\n };\n\n /*\n Calculates total subscription amount to pay, based on precalculated product prices based on their quantity\n */\n function CalculateTotal() {\n var total = 0;\n angular.forEach($scope.cntrl.subscriptionProducts, function (value, key) {\n if (value.calculated && value.calculated.total) {\n total = total + value.calculated.total.value;\n }\n });\n\n $scope.cntrl.calculated.total = {\n value: total,\n format: FormatDecimalNumber(total)\n };\n };\n\n /*\n Recalculates product total price, based on quantity, rounds and formats it\n */\n function CalculatePrice(product) {\n var totalPrice = product.details.price.value * product.quantity;\n\n product.calculated = {\n total: {\n value: totalPrice,\n format: FormatDecimalNumber(totalPrice)\n }\n };\n };\n\n function FormatDecimalNumber(value) {\n var tmp = Math.round(value * 100) / 100;\n tmp = tmp.toString();\n\n var decPos = tmp.indexOf('.');\n\n if (decPos === -1) {\n return value + \",00\";\n }\n\n var major = tmp.substring(0, decPos);\n var minor = tmp.substring(decPos + 1);\n\n if (minor.length > 2) {\n minor = minor.substring(0, 2);\n } else {\n minor = minor.padEnd(2, '0');\n }\n\n return major + \",\" + minor;\n };\n\n }],\n controllerAs: 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/mypagesubscriptionproducts.tpl.html'\n });\n","angular.module('site.directives')\n .component('myPageSubscriptionTitle', {\n restrict: 'E',\n bindings: {\n title: '=',\n subscriptionId: '=',\n titlePrefix: '@'\n },\n controller: ['$scope', 'subscriptionService', function ($scope, subscriptionService) {\n \n this.$onInit = function() { \n $scope.cntrl.data = {\n editing : false,\n value: null\n };\n }; \n \n // can be broadcasted from parent, to init edit title view\n $scope.$on(\"initEditTitleEvent\", function (event, args) {\n $scope.edit();\n });\n\n // title editing\n $scope.edit = function(){\n $scope.cntrl.data.value = $scope.cntrl.title;\n $scope.cntrl.data.editing = true;\n };\n\n $scope.formSubmitted = function(){\n subscriptionService.updateTitle($scope.cntrl.subscriptionId,\n $scope.cntrl.data.value).then(\n function successCallback(response) {\n $scope.cntrl.title = $scope.cntrl.data.value;\n $scope.cntrl.data.editing = false;\n },\n function errorCallback(error){\n console.error(error);\n $scope.data.editing.title.editing = false;\n }\n );\n };\n\n }], \n controllerAs : 'cntrl',\n bindToController: true,\n templateUrl: '/dist/templates/directives/subscriptiontitle.tpl.html'\n });\n","angular.module('site.directives')\n\t.directive('siteTabs', [function() {\n\t\tvar tabsMapper = function(html, title){\n\t\t\treturn {\n\t\t\t\ttitle: title,\n\t\t\t\thtml: html\n\t\t\t};\n\t\t};\n\t\treturn {\n\t\t\tscope: true,\n\t\t\ttemplateUrl: '/partials/directives/tabs',\n\t\t\treplace: true,\n\t\t\tlink: function(scope, elem, attr) {\n\t\t\t\tscope.setActive = function(tab){\n\t\t\t\t\tif(!tab){return;}\n\t\t\t\t\tvar activeTab = _.find(scope.tabs, function(tab){ return tab.active; });\n\n\t\t\t\t\tif(activeTab){\n\t\t\t\t\t\tactiveTab.active = false;\n\t\t\t\t\t}\n\n\t\t\t\t\ttab.active = true;\n\t\t\t\t};\n\t\t\t\tscope.$watch(attr.siteTabs, function(tabs){\n\t\t\t\t\tif(_.isObject(tabs)){\n\t\t\t\t\t\tscope.tabs = _.map(tabs, tabsMapper);\n\t\t\t\t\t\tscope.setActive(scope.tabs[0]);\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\n\t\t\t}\n\t\t};\n\t}]);\n\n\n","angular.module('site.directives')\n\t.directive('siteValidateEan', ['utilitiesService', function(utils) {\n\t\treturn {\n\t\t\trequire: 'ngModel',\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\n\t\t\t var beginsWith = /^57/;\n\t\t\t var beginsWith2 = /^25/;\n\t\t\t\t\tvar eanFormat = new Barcoder('ean13', { enableZeroPadding : false }),\n\t\t\t\t\thandleKeyUp = function(event){\n\t\t\t\t\t utils.safeApply(scope, function () {\n\t\t\t\t\t if (ctrl.$modelValue) {\n\t\t\t\t\t var trimmedEan = ctrl.$modelValue\n\t\t\t\t\t .replace(/-/g, '')\n\t\t\t\t\t .replace(/ /g, '');\n\t\t\t\t\t var isValid = !trimmedEan ||\n\t\t\t\t\t (beginsWith.test(trimmedEan) || beginsWith2.test(trimmedEan)) && eanFormat.validate(trimmedEan);\n\n\t\t\t\t\t ctrl.$setValidity('siteValidateEan', isValid);\n\t\t\t\t\t }\n\t\t\t\t\t });\n\t\t\t\t\t};\n\t\t\t\t\telm.bind('keyup', handleKeyUp);\n\t\t\t}\n\t\t};\n\t}]);","angular.module('site.directives')\n\t.directive('siteValidateQuantity', ['utilitiesService', function(utils) {\n\t\treturn {\n\t\t\trequire: 'ngModel',\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\n\t\t\t\tvar pattern = /^[1-9][0-9]*$/,\n\t\t\t\t\tmax = parseInt(attrs.siteValidateQuantity, 10),\n\t\t\t\t\thandleKeyUp = function(event){\n\t\t\t\t\t\tutils.safeApply(scope, function(){\n\t\t\t\t\t\t\tctrl.$setValidity('siteValidateQuantity', ctrl.$modelValue && pattern.test(ctrl.$modelValue) && parseInt(ctrl.$modelValue, 10) <= max);\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\t\t\t\telm.bind('keyup', handleKeyUp);\n\t\t\t}\n\t\t};\n\t}]);","angular.module('site.directives')\n .component('warningMessage', {\n restrict: 'E',\n controller: ['$scope', function ($scope) {\n \n this.$onInit = function() { \n \n }; \n\n }],\n transclude: true,\n templateUrl: '/dist/templates/directives/warningmessage.tpl.html'\n });\n","angular.module('site.directives')\n .component('webshipper', {\n restrict: 'E',\n bindings: {\n address: '@',\n countrycode: '@',\n postalcode: '@',\n mode: '@'\n },\n controller: ['$scope', '$controller', 'webshipperShippingService', 'basketService', 'config', function ($scope, $controller, webshipperShippingService, basketService, config) {\n\n $scope.model = {};\n $scope.b = {};\n\n this.$onInit = function () {\n var basketId = basketService.getBasketCookieValue();\n\n var promise = webshipperShippingService.shippingMethods(basketId);\n promise.then(function (req) {\n $scope.model.methods = req.data;\n });\n\n\n console.log(\"params\", this.address, this.countrycode, this.postalcode);\n\n $scope.b.address = this.address;\n $scope.b.countrycode = this.countrycode;\n $scope.b.postalcode = this.postalcode;\n\n\n\n };\n\n //GetDropPoints(s.carrierId,s.carrierServiceCode)\n\n $scope.Fisk = function () {\n alert(\"fisk\");\n };\n\n $scope.GetDropPoints = function (method, p_address, p_postalcode) {\n var v_address = $scope.b.address;\n var v_postalCode = $scope.b.postalcode;\n\n if (p_address !== undefined) {\n v_address = p_address;\n }\n if (p_postalcode !== undefined) {\n v_postalCode = p_postalcode;\n }\n\n console.log(\"getDropPoints\", method.carrierId, method.carrierServiceCode, v_address, v_postalCode, $scope.b.countrycode);\n\n var promise = webshipperShippingService.shippingDropPoints(method.carrierId, method.carrierServiceCode, v_address, v_postalCode, $scope.b.countrycode);\n promise.then(function (req) {\n $scope.model.dropPoints = req.data;\n method.dropPoints = req.data;\n });\n\n }\n\n\n }],\n templateUrl: '/partials/checkout/deliveryMethod'\n });\n\n\n","angular.module('site.directives')\n\t.directive('siteZipLookup', ['utilitiesService', '$parse', function (utils, $parse) {\n\t\tvar previousZip;\n\t\treturn {\n\t\t\trequire: 'ngModel',\n\t\t\tlink: function (scope, elm, attrs, ctrl) {\n\t\t\t\tvar handleKeyUp = function (event) {\n\t\t\t\t\tif (ctrl.$modelValue) {\n\t\t\t\t\t\tvar countryCode = scope.$eval(attrs.zipLookupModelCountry),\n\t\t\t\t\t\t\tzipCode = ctrl.$modelValue;\n\t\t\t\t\t\tif (!ctrl.$invalid && zipCode !== previousZip) {\n\t\t\t\t\t\t\tpreviousZip = zipCode;\n\t\t\t\t\t\t\tutils.safeApply(scope, function() { // scope.apply from http://stackoverflow.com/questions/17701503/angularjs-http-not-firing-get-call\n\t\t\t\t\t\t\t\tutils.zipLookup(zipCode, countryCode)\n .then(function (response) {\n if (response.data && response.data.city) {\n\t\t\t\t\t\t\t\t\t\t\tutils.safeApply(scope, function() {\n\t\t\t\t\t\t\t\t\t\t\t\tvar cityModel = $parse(attrs.zipLookupModelCity);\n cityModel.assign(scope, response.data.city);\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\telm.bind('keyup', handleKeyUp);\n\t\t}\n\t};\n}]);\n","//angular.module('site', ['site.filters', 'site.services', 'ngResource', 'site.resources', 'site.directives', 'site.controllers', 'ngCookies', 'ngSanitize', 'ui.bootstrap.datepicker', 'ui.bootstrap.tpls', 'ui.bootstrap.tabs', 'ui.bootstrap.tooltip', 'ui.bootstrap.accordion', 'ui.bootstrap.modal', 'ngMobile', 'smoothScroll', 'ngStorage', 'ngKookies'])\nangular.module('site', ['ngTouch', 'tw.directives.clickOutside','site.filters', 'site.services', 'site.directives',\n 'site.controllers', 'site.resources', 'ngResource', 'ngCookies', 'ngSanitize', 'ui.bootstrap.datepicker',\n 'ui.bootstrap.tpls', 'ui.bootstrap.tabs', 'ui.bootstrap.tooltip', 'ui.bootstrap.accordion', 'ui.bootstrap.modal',\n 'smoothScroll', 'ngStorage', 'ngKookies'])\n\t.value('$anchorScroll', angular.noop)\n\t.constant('config', {\n appVersion: '1.13',\n\t serviceApi: {\n\t review: '/api/json/oneway/catalog/review',\n getBasket: basketServiceUrl+'/api/basket',\n voucher: basketServiceUrl+'/api/basket/voucher',\n\t\t\tcatalog:\t\t\t\t'/api/search',\n\t\t\tcontent:\t\t\t\t'/Umbraco/Api/ContentSearch/All',\n shippingInformation:\tbasketServiceUrl+'/api/checkout/shipping', //'/api/basket/address',\n saveBillingInformation:\tbasketServiceUrl+'/api/checkout/billing',\n recalculateBasket: basketServiceUrl+'/api/checkout/billing/recalculate',\n getPickupDestinations: deliveryServiceUrl+'/shipping/delivery',\n\t\t\tupdateUser:\t\t\t\tprofileServiceUrl+'/api/profile/update',\n\t\t\tgetUser:\t\t\t\tprofileServiceUrl+'/api/profile/getedit',\n\t\t\tgiftWrap:\t\t\t\t'/api/json/oneway/UpdateGiftWrappingInfo',\n getOrderHistory: '/api/orderhistory',\n getOrder:\t\t\t\t'/api/orderhistory/details',\n getProducts:\t\t\t'/api/json/oneway/GetProducts',\n login:\t\t\t\t\t'/umbraco/Surface/Account/Login',\n deleteProfile: '/api/user/profile',\n createNewPassword:\t\t'/api/json/oneway/CreateNewPassword',\n welcomePresentCheck: '/api/json/oneway/WelcomePresentCheck',\n\t\t isClubMember: '/api/user/ismember',\n changePassword:\t\t\tprofileServiceUrl+'/api/profile/change-password',\n checkEmail:\t\t\t\t'/api/json/oneway/NewsletterCheck',\n subscribeEmail:\t\t\t'/api/newsletter/signup',\n submitAnswer:\t\t\t'/api/json/oneway/SubmitAnswer',\n hasParticipated:\t\t'/api/json/oneway/HasParticipated',\n zipToCity: '/api/postalcodes',\n validateAndAddCprNr: '/umbraco/surface/NemIdValidationSurface/Validate',\n getCtrWidgetInformation: '/umbraco/Surface/CtrSurface/GetWidgetInformation',\n updateBasketPrescriptionProduct: frontendService + '/api/basket/prescription',\n getPrescriptionsAddedToBasket: '/api/basket/prescriptions',\n removeNemIdLink: profileServiceUrl+'/api/profile/remove-nemlogin',\n raptorProducts: frontendService + '/api/raptor',\n webshipperShipping: frontendService + '/api/shipping',\n receiptApiUrl: \"/Umbraco/Api/ReceiptApi/Receipt\",\n createCustomer: frontendService+ '/api/customer/create'\n\t\t},\n\t\tgaTracking:{\n\t\t\tsiteSearchQueryPattern: '<%= path %>?q=<%= term %>'\n\t\t},\n\t\thashPrefix: '!',\n\t\turlPattern: '<% _.each(params, function(values, key){ %><% if(values && values.length){ %>/<%= key %>=<% } %><% if( _.isArray(values) ){ %><% _.each(values, function(value) { %>/<%= value %><% }); %><% } else { %>/<%= values %><% } %><% }); %>'\n\t})\n .config(['config', '$httpProvider', '$locationProvider', '$qProvider', function(config, $httpProvider, $locationProvider, $qProvider) {\n\t\t$locationProvider.html5Mode(false).hashPrefix(config.hashPrefix);\n $httpProvider.interceptors.push('preventTemplateCacheInterceptor');\n $httpProvider.interceptors.push('responseInterceptorService');\n $httpProvider.interceptors.push('preventGetRequestCachingInterceptor');\n $qProvider.errorOnUnhandledRejections(false);\n }])\n .run(['identityService', function(identityService) {\n identityService.accessToken = $(\"body\").data('sessionToken');\n $(\"body\").removeAttr('data-session-token');\n }])\n .run(['userService', function(userService) {\n userService.clubMemberSession = $(\"body\").data('sessionIsClubMember').toString() == 'true';\n $(\"body\").removeAttr('data-session-is-club-member');\n }]);\n\n","//angular.module('site', ['site.filters', 'site.services', 'ngResource', 'site.resources', 'site.directives', 'site.controllers', 'ngCookies', 'ngSanitize', 'ui.bootstrap.datepicker', 'ui.bootstrap.tpls', 'ui.bootstrap.tabs', 'ui.bootstrap.tooltip', 'ui.bootstrap.accordion', 'ui.bootstrap.modal', 'ngMobile', 'smoothScroll', 'ngStorage', 'ngKookies'])\nangular.module('site', ['ngTouch', 'tw.directives.clickOutside','site.filters', 'site.services', 'site.directives',\n 'site.controllers', 'site.resources', 'ngResource', 'ngCookies', 'ngSanitize', 'ui.bootstrap.datepicker',\n 'ui.bootstrap.tpls', 'ui.bootstrap.tabs', 'ui.bootstrap.tooltip', 'ui.bootstrap.accordion', 'ui.bootstrap.modal',\n 'smoothScroll', 'ngStorage', 'ngKookies'])\n\t.value('$anchorScroll', angular.noop)\n\t.constant('config', {\n appVersion: '1.13',\n\t serviceApi: {\n\t review: '/api/json/oneway/catalog/review',\n getBasket: basketServiceUrl+'/api/basket',\n voucher: basketServiceUrl+'/api/basket/voucher',\n\t\t\tcatalog:\t\t\t\t'/api/search',\n\t\t\tcontent:\t\t\t\t'/Umbraco/Api/ContentSearch/All',\n shippingInformation:\tbasketServiceUrl+'/api/checkout/shipping', //'/api/basket/address',\n saveBillingInformation:\tbasketServiceUrl+'/api/checkout/billing',\n recalculateBasket: basketServiceUrl+'/api/checkout/billing/recalculate',\n getPickupDestinations: deliveryServiceUrl+'/shipping/delivery',\n\t\t\tupdateUser:\t\t\t\tprofileServiceUrl+'/api/profile/update',\n\t\t\tgetUser:\t\t\t\tprofileServiceUrl+'/api/profile/getedit',\n\t\t\tgiftWrap:\t\t\t\t'/api/json/oneway/UpdateGiftWrappingInfo',\n getOrderHistory: '/api/orderhistory',\n getOrder:\t\t\t\t'/api/orderhistory/details',\n getProducts:\t\t\t'/api/json/oneway/GetProducts',\n login:\t\t\t\t\t'/umbraco/Surface/Account/Login',\n deleteProfile: '/api/user/profile',\n createNewPassword:\t\t'/api/json/oneway/CreateNewPassword',\n welcomePresentCheck: '/api/json/oneway/WelcomePresentCheck',\n\t\t isClubMember: '/api/user/ismember',\n changePassword:\t\t\tprofileServiceUrl+'/api/profile/change-password',\n checkEmail:\t\t\t\t'/api/json/oneway/NewsletterCheck',\n subscribeEmail:\t\t\t'/api/newsletter/signup',\n submitAnswer:\t\t\t'/api/json/oneway/SubmitAnswer',\n hasParticipated:\t\t'/api/json/oneway/HasParticipated',\n zipToCity: '/api/postalcodes',\n validateAndAddCprNr: '/umbraco/surface/NemIdValidationSurface/Validate',\n getCtrWidgetInformation: '/umbraco/Surface/CtrSurface/GetWidgetInformation',\n updateBasketPrescriptionProduct: basketServiceUrl+'/api/basket/prescription',\n getPrescriptionsAddedToBasket: '/api/basket/prescriptions',\n prescriptionComplimentaryProductsInformations: '/Umbraco/Api/PrescriptionComplimentaryProductsInformations/GetByProduct',\n removeNemIdLink: profileServiceUrl+'/api/profile/remove-nemlogin',\n raptorProducts: frontendService + '/api/raptor',\n webshipperShipping: frontendService + '/api/shipping',\n receiptApiUrl: \"/Umbraco/Api/ReceiptApi/Receipt\",\n removeCardsApi: frontendService+ '/api/payment/cards/',\n createCustomer: frontendService+ '/api/customer/create'\n\t\t},\n\t\tgaTracking:{\n\t\t\tsiteSearchQueryPattern: '<%= path %>?q=<%= term %>'\n\t\t},\n\t\thashPrefix: '!',\n\t\turlPattern: '<% _.each(params, function(values, key){ %><% if(values && values.length){ %>/<%= key %>=<% } %><% if( _.isArray(values) ){ %><% _.each(values, function(value) { %>/<%= value %><% }); %><% } else { %>/<%= values %><% } %><% }); %>'\n\t})\n .config(['config', '$httpProvider', '$locationProvider', '$qProvider', function(config, $httpProvider, $locationProvider, $qProvider) {\n\t\t$locationProvider.html5Mode(false).hashPrefix(config.hashPrefix);\n $httpProvider.interceptors.push('preventTemplateCacheInterceptor');\n $httpProvider.interceptors.push('responseInterceptorService');\n $httpProvider.interceptors.push('preventGetRequestCachingInterceptor');\n }])\n .run(['identityService', function(identityService) {\n identityService.accessToken = $(\"body\").data('sessionToken');\n $(\"body\").removeAttr('data-session-token');\n }])\n .run(['userService', function(userService) {\n userService.clubMemberSession = $(\"body\").data('sessionIsClubMember').toString() == 'true';\n $(\"body\").removeAttr('data-session-is-club-member');\n }]);\n","var webapoteket = {};\n\n$(function() {\n webapoteket.reviews.tabView('.webapoteket-tab-views .nav-tabs li a');\n webapoteket.reviews.reviewsDelegateClick('.webapoteket-reviews-click-delegate');\n});\n\nwebapoteket.reviews = new function() {\n var self = this;\n\n this.scrollToView = function(element){\n var elementRect = element.getBoundingClientRect();\n var absoluteElementTop = elementRect.top + window.pageYOffset;\n var middle = absoluteElementTop - (window.innerHeight / 2);\n window.scrollTo(0, middle);\n }\n\n this.click = function(link, scroll) {\n $(link).parent().siblings().removeClass('active');\n $(link).parent().addClass('active');\n\n var updateTarget = $(link).parents('.webapoteket-tab-views').find(\"[data-tab-name='\" + $(link).data('tab-target') + \"']\");\n $(updateTarget).siblings().removeClass('active');\n $(updateTarget).addClass('active');\n\n if (scroll) {\n self.scrollToView($(updateTarget)[0]);\n }\n }\n\n this.tabView = function (target) {\n $(document).on('click', target, function (e) {\n e.preventDefault();\n self.click($(this), false);\n });\n };\n\n this.reviewsDelegateClick = function (target) {\n $(document).on('click', target, function (e) {\n e.preventDefault();\n\n var target = $($(this).data('click-target'));\n self.click($(target)[0], true);\n });\n };\n};\n"]}