{"version":3,"sources":["extend.js","polyfills.js","app.module.js","checkout/checkout.module.js","contact/contact.module.js","content/content.module.js","details/details.module.js","search/search.module.js","shared/shared.module.js","cart/shopping-cart.component.js","checkout/checkout.component.js","checkout/checkout.service.js","contact/contact.component.js","contact/contact.service.js","content/content.controller.js","content/content.service.js","search/search.controller.js","search/search.service.js","wizard/wizard.controller.js","checkout/cart-overview/cart-overview.component.js","checkout/cart-items/cart-item-amount.component.js","checkout/cart-items/cart-items.component.js","checkout/checkout-breadcrumbs/checkout-breadcrumbs.component.js","checkout/checkout-address/checkout-address.component.js","checkout/payment/order-credit-modal.component.js","checkout/payment/payment.component.js","search/search-filter/search-filter-group.component.js","search/search-filter/search-filter-tag-group.component.js","search/search-filter/search-filter.component.js","search/search-result/search-result.component.js","search/search-input/search-input.component.js","search/search-result-pagination/search-result-pagination.component.js","shared/directives/checkImage.directive.js","shared/directives/cookieConsent.directive.js","shared/directives/validation.directive.js","shared/service/auth.service.js","shared/service/cart.service.js","shared/service/cartPopover.service.js","shared/service/price.service.js","shared/filters/price.filter.js","shared/filters/titleCase.filter.js","shared/filters/urlEncode.filter.js","shared/components/add-to-cart-button/add-to-cart-button.component.js","shared/components/aside-menu/aside-menu.component.js","shared/components/ask-price-button/ask-price-button.component.js","shared/components/cj-checkbox/cj-checkbox.component.js","shared/components/ask-price-modal/ask-price-modal.component.js","shared/components/confirm-cart-modal/confirm-cart-modal.component.js","shared/components/confirm-cart-modal/confirm-cart-related-modal.component.js","shared/components/price-converter/price-converter.component.js","templates.js"],"names":["toogleFilter","e","$","children","each","this","toggleClass","parent","siblings","encodeTypeCode","type","replace","encodeDescription","description","Array","prototype","reduce","Object","defineProperty","value","callback","TypeError","o","len","length","k","arguments","keys","hasOwnProperty","hasDontEnumBug","toString","propertyIsEnumerable","dontEnums","dontEnumsLength","obj","prop","i","result","call","push","find","predicate","thisArg","kValue","angular","module","constant","toastr","moment","history","_","defaultLang","run","$http","$rootScope","isCollapsed","options","positionClass","config","localStorageServiceProvider","setPrefix","setStorageType","setStorageCookie","setStorageCookieDomain","setNotify","$translateProvider","settings","console","log","useLoaderCache","useUrlLoader","useSanitizeValueStrategy","$locationProvider","html5Mode","enabled","requireBase","rewriteLinks","$translate","use","document","ready","click","window","location","href","attr","ShoppingCardController","cartService","getItemsInCart","getTotalItemCount","$inject","component","bindings","templateUrl","controller","CheckoutController","checkoutService","preloadAddress","getExpectedDeliveryDate","CheckoutService","$q","$window","auth","localStorageService","service","baseUrl","vatAmountCountries","CountryCode","VAT","loadCartItems","partIds","items","map","item","ItemNo","get","params","Parts[]","then","response","merge","data","extendItems","saveCartToStorage","totalWithoutTax","Count","SalesPrice","deliveryMethod","Cost","cartItem","ExpectedDeliveryDate","User","userAuthorized","getCountryCodes","isAddressValid","isAuth","customer","code","address","name","Name","street","Address","zipcode","ZipCode","city","City","country","Country","Code","email","Email","eanno","Ean","countries","countryName","loadAddressFromStorage","billingValid","cellphone","shippingValid","separateAddress","deliveryAddress","generateOrderModel","Items","Amount","Price","Description","StreetName","CellPhone","EanNo","DeliveryName","DeliveryStreet","DeliveryZipCode","DeliveryCity","DeliveryCountry","undefined","SeparateDelivery","DeliveryMethod","ParcelShopNo","selectedParcelShop","Number","ReceiveNewsletter","newsletter","Comments","comment","termConfirmation","totalTax","specificVAT","totalWithTax","getCityFromZipCode","zipCode","navn","reject","saveAddress","set","getDeliveryMethods","resolve","findNearestParcelShop","selectedCarrier","Street","CountryIso","SelectedCarrier","resetConfirmation","createCreditOrder","model","post","createOrder","showLoading","target","append","removeLoading","remove","checkAuthorized","validateCart","clearAll","clearCart","ContactController","contactService","vm","clearForm","subject","message","file","isSending","sendMessage","error","validateForm","success","Message","ContactService","Upload","upload","url","method","Attachment","Subject","askPrice","ContentController","contentService","loadWebContent","getWebContent","webContent","groupBy","wc","ContentSectionId","sections","creating","newContentIdHasChanged","newContentTitle","newContentId","newContentSection","onNewContentTitleChange","toLowerCase","onNewContentIdChange","createNewContent","createWebContent","ExceptionMessage","deleteContent","content","deleting","confirm","trashWebContent","Id","getContentSections","InnerContentService","deferred","defer","withCredentials","catch","promise","contentName","contentId","sectionId","ContentTitle","ContentId","SectionId","factory","SearchController","$scope","viewData","searchService","$location","filterStateKeys","types","manufacturers","categories","models","nos","mapToUpperCase","toUpperCase","fetchResults","isLoading","searchSpareParts","searchString","selectedFilters","pagingData","searchResults","searchFilters","totalItems","Parts","Types","mapFilterKeysToUpperCase","Manufacturers","Categories","Models","ItemNos","TotalResults","extend","selectedFiltersHistory","acc","key","Key","split","filterState","join","path","search","updateFilterHistory","finally","filter","itemsPerPage","currentPage","getDeepLink","absUrl","searchResultHeader","getFirstFilter","filterKeys","toggleFilter","$broadcast","handlePageChange","debounce","handleFilterChange","SearchService","deferredAbort","filters","timeout","Query","Types[]","Manufacturers[]","Categories[]","Models[]","ItemNos[]","page","pageSize","typeahead","limit","q","typeaheadV2","getWizardFilters","manufacturer","category","getRelatedItems","itemNo","amount","requests","WizardController","getUrlQueryString","no","query","encodeURIComponent","getUrlQueryStringOrWizard","typeSEO","categorySEO","getWizardUrl","wizard","wizardTypes","getUrl","Filters","Nos","CartOverviewController","$filter","ctrl","isShowInforDelivery","showInfoDelivery","forEach","$on","event","CartItemAmountController","decrease","oldAmount","itemAmount","newAmount","onChange","increase","CartItemsController","isShowExpectedDelivery","isShowExpected","footerColspan","removeCartItem","itemIndex","findIndex","splice","vatAmount","vatRate","handleAmountChange","setAmount","getExpectedDeliveryDateForCartItem","isLoggedIn","getDetailsUrl","removeSplashCode","string","ExpectedDeliveryDateShow","CheckoutBreadcrumbsController","$state","CheckoutAddressController","autoCompleteCity","field","submitAddress","go","close","dismiss","template","PaymentController","$uibModal","validateOrder","validateAddress","validateDelivery","validateParcelShop","validateTermsConfirmation","deliveryMethods","parcelShops","canOrderByCredit","isCreditApproved","creatingOrder","handleDeliveryMethodChange","indexOf","getDeliveryAddressForParcelShop","warn","findParcelShops","orderByCredit","open","animation","size","accepturl","OrderNo","statusText","noop","createAndPayOrder","FailedItems","instant","CoolPayLink","isParcelShops","cartTotal","concat","MinimumTotalAmount","chain","x","max","SearchFilterGroupController","defaultMaxItems","showingAll","maxItems","toggleCheckbox","index","selectedItems","toggleShowAll","filterItems","filterTranslationMap","$onChanges","changeObject","HasValue","Value","m_Item1","groupName","onReady","filterMap","translation","translationKey","text","SearchFilterTagGroupController","removeItem","filterType","translateMap","prefixTranslationKey","encodeTranslationKey","handleChange","SearchResultController","Lightbox","showPrice","openThumbnail","preventDefault","openModal","getHrefForSendMail","pop","results","SearchInputController","mapTypeaheadResult","arr","searchQuery","typeaheadLimit","typeaheadInputFormat","input","Model","No","selectResult","getSearchUrl","getSearchQuery","init","getPagingStats","itemFrom","itemTo","Math","min","resultsNum","checkImage","$timeout","restrict","compile","pre","scope","element","attrs","$observe","ngSrc","image","Image","onerror","closest","removeAttr","off","$digest","onload","src","directive","cookieConsent","csMessage","csReadmoreUrl","csReadmore","csAccept","cookieConsentController","link","el","$element","shouldShowMessageStorageKey","showConsent","show","getStorage","localStorage","sessionStorage","closeConsent","slideUp","storage","getElementsByTagName","style","bottom","ex","shouldShowMessage","validation","require","formCtrl","inputEl","querySelector","inputNgEl","inputName","bind","$invalid","authService","InnerAuthService","user","CartService","localStorageKey","localStorageKeyRelatedDisplay","loadCartFromStorage","generateRequestModel","checkItems","MustCheck","sort","a","b","addCartLocal","newItem","oldItem","showGotoCheckoutModal","animate","scrollTop","fadeIn","clearTimeout","modalConfirmTimeout","setTimeout","fadeOut","part","addToCart","notDisplayRelated","res","showModal","addRelatedToCart","Manufacturer","Type","productTypeKey","updateRelatedDisplay","status","y","cartPopover","InnerCartPopover","popover","showPopover","elem","cancel","buttonPos","position","buttonHeight","innerHeight","buttonWidth","outerWidth","buttonInnerWidth","innerWidth","insertAfter","css","top","left","limitPopover","on","create","offset","PriceService","getAllCurrency","base","getExchangeRates","price","symbol","fractionSize","titleCase","txt","charAt","substr","AddToCartButtonController","pickAmount","isDefined","isAdding","$event","stopPropagation","buttonClass","AsideMenuController","htmlElement","bodyElement","overlayElement","asideElement","isOpen","overlay","transitionEvent","t","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","whichTransitionEvent","hasTransition","one","hideOverlay","registerHideOverlayAfterTransition","activateOverlay","removeClass","addClass","hide","toggle","ref","eq","$destroy","asideClass","transclude","AskPriceButtonController","openAskPriceModal","isChecked","label","AskPriceModalController","$onInit","send","$value","modalInstance","ConfirmCartRelatedModalController","notDisplay","initRelated","addRelated","addCount","addRelatedText","$apply","displayAction","PriceConverterController","priceService","$document","isExchange","baseCurrency","exchangeOption","err","height","next","allRates","rates","changeCurrency","c","gPrice","tmpPrice","parseFloat","toFixed","clickOptionCurrency","parseToMoney","m","pos","lastIndexOf","substring","basecurrency","spanclass","$templateCache","put"],"mappings":"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","file":"bundle.js","sourcesContent":["$(document).ready(function () {\r\n $('li.filter-hidden').each(function () {\r\n $(this).toggleClass('toggle-filter-display');\r\n });\r\n $('.search-filter-group li label').click(function() {\r\n window.location.href = $(this).find('a').attr('href');\r\n });\r\n});\r\n\r\nfunction toogleFilter(e) {\r\n $(e).children('span').each(function () {\r\n $(this).toggleClass('toggle-filter-display');\r\n });\r\n $($(e).parent('li')[0]).siblings('li.filter-hidden').each(function () {\r\n $(this).toggleClass('toggle-filter-display');\r\n });\r\n}\r\n\r\nfunction encodeTypeCode(type) {\r\n type = type.replace(/\\//g, '--');\r\n //type = type.replace(/\\./g, '_');\r\n type = type.replace(/ä/g, 'a');\r\n type = type.replace(/ü/g, 'u');\r\n type = type.replace(/ö/g, 'o');\r\n type = type.replace(/ø/g, 'oe');\r\n type = type.replace(/Ã¥/g, 'aa');\r\n type = type.replace(/æ/g, 'ae');\r\n type = type.replace(/Ä/g, 'A');\r\n type = type.replace(/Ãœ/g, 'U');\r\n type = type.replace(/Ö/g, 'O');\r\n type = type.replace(/Ø/g, 'OE');\r\n type = type.replace(/Ã…/g, 'AA');\r\n type = type.replace(/Æ/g, 'AE');\r\n return type;\r\n}\r\n\r\nfunction encodeDescription(description) {\r\n description = encodeTypeCode(description);\r\n description = description.replace(/\\*/g, '_');\r\n description = description.replace(/:/g, '_');\r\n description = description.replace(/\"/g, '_');\r\n return description;\r\n}\r\n\r\n\r\n","// Production steps of ECMA-262, Edition 5, 15.4.4.21\r\n// Reference: http://es5.github.io/#x15.4.4.21\r\n// https://tc39.github.io/ecma262/#sec-array.prototype.reduce\r\nif (!Array.prototype.reduce) {\r\n Object.defineProperty(Array.prototype, 'reduce', {\r\n value: function(callback /*, initialValue*/) {\r\n if (this === null) {\r\n throw new TypeError( 'Array.prototype.reduce ' + \r\n 'called on null or undefined' );\r\n }\r\n if (typeof callback !== 'function') {\r\n throw new TypeError( callback +\r\n ' is not a function');\r\n }\r\n\r\n // 1. Let O be ? ToObject(this value).\r\n var o = Object(this);\r\n\r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0; \r\n\r\n // Steps 3, 4, 5, 6, 7 \r\n var k = 0; \r\n var value;\r\n\r\n if (arguments.length >= 2) {\r\n value = arguments[1];\r\n } else {\r\n while (k < len && !(k in o)) {\r\n k++; \r\n }\r\n\r\n // 3. If len is 0 and initialValue is not present,\r\n // throw a TypeError exception.\r\n if (k >= len) {\r\n throw new TypeError( 'Reduce of empty array ' +\r\n 'with no initial value' );\r\n }\r\n value = o[k++];\r\n }\r\n\r\n // 8. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kPresent be ? HasProperty(O, Pk).\r\n // c. If kPresent is true, then\r\n // i. Let kValue be ? Get(O, Pk).\r\n // ii. Let accumulator be ? Call(\r\n // callbackfn, undefined,\r\n // « accumulator, kValue, k, O »).\r\n if (k in o) {\r\n value = callback(value, o[k], k, o);\r\n }\r\n\r\n // d. Increase k by 1. \r\n k++;\r\n }\r\n\r\n // 9. Return accumulator.\r\n return value;\r\n }\r\n });\r\n}\r\n\r\n\r\n // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\r\nif (!Object.keys) {\r\n Object.keys = (function() {\r\n 'use strict';\r\n var hasOwnProperty = Object.prototype.hasOwnProperty,\r\n hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),\r\n dontEnums = [\r\n 'toString',\r\n 'toLocaleString',\r\n 'valueOf',\r\n 'hasOwnProperty',\r\n 'isPrototypeOf',\r\n 'propertyIsEnumerable',\r\n 'constructor'\r\n ],\r\n dontEnumsLength = dontEnums.length;\r\n \r\n return function(obj) {\r\n if (typeof obj !== 'function' && (typeof obj !== 'object' || obj === null)) {\r\n throw new TypeError('Object.keys called on non-object');\r\n }\r\n \r\n var result = [], prop, i;\r\n \r\n for (prop in obj) {\r\n if (hasOwnProperty.call(obj, prop)) {\r\n result.push(prop);\r\n }\r\n }\r\n \r\n if (hasDontEnumBug) {\r\n for (i = 0; i < dontEnumsLength; i++) {\r\n if (hasOwnProperty.call(obj, dontEnums[i])) {\r\n result.push(dontEnums[i]);\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n }());\r\n}\r\n\r\n\r\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\r\nif (!Array.prototype.find) {\r\n Object.defineProperty(Array.prototype, 'find', {\r\n value: function(predicate) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n \r\n var o = Object(this);\r\n \r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n \r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n \r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n var thisArg = arguments[1];\r\n \r\n // 5. Let k be 0.\r\n var k = 0;\r\n \r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return kValue.\r\n var kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k, o)) {\r\n return kValue;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n \r\n // 7. Return undefined.\r\n return undefined;\r\n }\r\n });\r\n }","(function () {\r\n /* globals _: false, PaymentWindow: false, History: false, Immutable: false */\r\n 'use strict';\r\n\r\n angular.module('app',\r\n [\r\n /*\r\n * Angular modules\r\n */\r\n //'ngSanitize',\r\n /*\r\n * 3rd party modules\r\n */\r\n 'pascalprecht.translate',\r\n 'ui.bootstrap',\r\n //'angular-loading-bar',\r\n 'LocalStorageModule',\r\n 'ui.router',\r\n 'ngMap',\r\n 'ngFileUpload',\r\n 'bootstrapLightbox',\r\n //'asideModule',\r\n //'ngAside'\r\n\r\n 'app.sharedextend',\r\n 'app.shared',\r\n 'app.contact',\r\n 'app.details',\r\n 'app.search',\r\n 'app.checkout',\r\n 'app.content'\r\n ])\r\n\r\n // Inject toastr.js\r\n .constant('toastr', toastr)\r\n\r\n // Inject moment.js\r\n .constant('moment', moment)\r\n\r\n // Inject historyAPI\r\n .constant('history', history)\r\n\r\n // Inject underscore.js\r\n .constant('_', _)\r\n\r\n // ViewData config - this must be empty as it may be overridden in a particular view\r\n // (this is merely to avoid injection errors)\r\n .constant('viewData', {})\r\n\r\n // Defining app settings.\r\n .constant('settings', {\r\n defaultLang: 'da-DK'\r\n })\r\n\r\n // Set api version headers\r\n .run(['$http', function($http) {\r\n //$http.defaults.headers.common.ApiVersion = 'v1';\r\n }])\r\n\r\n // Set api version headers\r\n .run(['$rootScope',function ($rootScope) {\r\n $rootScope.isCollapsed = true;\r\n }])\r\n\r\n .run(['toastr',\r\n function (toastr) {\r\n toastr.options.positionClass = 'toast-top-right';\r\n }])\r\n\r\n .config(['localStorageServiceProvider',\r\n function (localStorageServiceProvider) {\r\n localStorageServiceProvider\r\n .setPrefix('CJH')\r\n .setStorageType('localStorage')\r\n .setStorageCookie(100, '/')\r\n .setStorageCookieDomain('')\r\n .setNotify(true, true);\r\n }])\r\n\r\n // Configure the translation provider\r\n .config(['$translateProvider', 'settings',\r\n function ($translateProvider, settings) {\r\n // add translation table\r\n\r\n console.log('%cCulture', 'background-color: #BADA55;', settings.defaultLang);\r\n $translateProvider.useLoaderCache(true);\r\n $translateProvider.useUrlLoader('/api/v1/localization/gettranslations');\r\n $translateProvider.useSanitizeValueStrategy('escaped');\r\n }])\r\n\r\n .config(['$locationProvider', function($locationProvider){\r\n $locationProvider.html5Mode({\r\n enabled: true,\r\n requireBase: false,\r\n rewriteLinks: false\r\n });\r\n //$locationProvider.hashPrefix('');\r\n }])\r\n\r\n .run(['$translate', 'settings', function($translate, settings){\r\n console.log('%cCulture', 'background-color: #BADA55;', settings.defaultLang);\r\n $translate.use(settings.defaultLang);\r\n }])\r\n\r\n ; // Module definition end\r\n\r\n}());","(function(){\r\n 'use strict';\r\n \r\n angular.module('app.checkout', ['app.shared', 'ngMap']).config(CheckoutConfig);\r\n\r\n /* @ngInject */\r\n function CheckoutConfig(){\r\n\r\n }\r\n\r\n})();","(function(){\r\n\r\n angular.module('app.contact', []);\r\n\r\n})();","(function(){\r\n \r\n angular.module('app.content', []);\r\n \r\n })();","(function(){\r\n\r\n angular.module('app.details', []);\r\n\r\n})();","(function(){\r\n \r\n angular.module('app.search', []);\r\n\r\n})();","(function(){\r\n\r\n angular.module('app.shared', []);\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n ShoppingCardController.$inject = [\"cartService\"];\r\n angular.module('app').component('shoppingCart', {\r\n bindings: {\r\n },\r\n templateUrl: '/app/cart/shopping-cart.component.html',\r\n controller: ShoppingCardController\r\n });\r\n\r\n /* @ngInject */\r\n function ShoppingCardController(cartService){\r\n var ctrl = this;\r\n \r\n ctrl.getItemsInCart = cartService.getTotalItemCount;\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n CheckoutController.$inject = [\"cartService\", \"checkoutService\"];\r\n angular.module('app.checkout').component('checkout', {\r\n bindings: { },\r\n templateUrl: '/app/checkout/checkout.component.html',\r\n controller: CheckoutController\r\n });\r\n\r\n /* @ngInject */\r\n function CheckoutController(cartService, checkoutService){\r\n var ctrl = this;\r\n ctrl.cartService = cartService;\r\n \r\n init();\r\n\r\n function init(){\r\n checkoutService.preloadAddress();\r\n cartService.getExpectedDeliveryDate();\r\n }\r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n CheckoutService.$inject = [\"$http\", \"$q\", \"$window\", \"auth\", \"localStorageService\", \"_\", \"cartService\"];\r\n angular.module('app.checkout').service('checkoutService', CheckoutService);\r\n\r\n /* @ngInject */\r\n function CheckoutService($http, $q, $window, auth, localStorageService, _, cartService) {\r\n var service = this;\r\n var baseUrl = '/api/cart/';\r\n var vatAmount = 0.25;\r\n var vatRate = 1.25;\r\n\r\n var vatAmountCountries = [\r\n { 'CountryCode': 'AT', 'VAT': 0.20 },\r\n { 'CountryCode': 'BE', 'VAT': 0.21 },\r\n { 'CountryCode': 'BG', 'VAT': 0.20 },\r\n { 'CountryCode': 'CY', 'VAT': 0.19 },\r\n { 'CountryCode': 'CZ', 'VAT': 0.21 },\r\n { 'CountryCode': 'DE', 'VAT': 0.19 },\r\n { 'CountryCode': 'DK', 'VAT': 0.25 },\r\n { 'CountryCode': 'EE', 'VAT': 0.20 },\r\n { 'CountryCode': 'EL', 'VAT': 0.24 },\r\n { 'CountryCode': 'ES', 'VAT': 0.21 },\r\n { 'CountryCode': 'FI', 'VAT': 0.24 },\r\n { 'CountryCode': 'FR', 'VAT': 0.20 },\r\n { 'CountryCode': 'HR', 'VAT': 0.25 },\r\n { 'CountryCode': 'HU', 'VAT': 0.27 },\r\n { 'CountryCode': 'IE', 'VAT': 0.23 },\r\n { 'CountryCode': 'IT', 'VAT': 0.22 },\r\n { 'CountryCode': 'LT', 'VAT': 0.21 },\r\n { 'CountryCode': 'LU', 'VAT': 0.17 },\r\n { 'CountryCode': 'LV', 'VAT': 0.21 },\r\n { 'CountryCode': 'MT', 'VAT': 0.18 },\r\n { 'CountryCode': 'NL', 'VAT': 0.21 },\r\n { 'CountryCode': 'PL', 'VAT': 0.23 },\r\n { 'CountryCode': 'PT', 'VAT': 0.23 },\r\n { 'CountryCode': 'RO', 'VAT': 0.19 },\r\n { 'CountryCode': 'SE', 'VAT': 0.25 },\r\n { 'CountryCode': 'SI', 'VAT': 0.22 },\r\n { 'CountryCode': 'SK', 'VAT': 0.20 }\r\n ];\r\n \r\n service.separateAddress = false;\r\n service.address = {};\r\n service.deliveryAddress = {};\r\n service.deliveryMethod = null;\r\n service.selectedParcelShop = null;\r\n service.termConfirmation = false;\r\n service.newsletter = false;\r\n\r\n service.loadCartItems = loadCartItems;\r\n service.totalTax = totalTax;\r\n service.totalWithTax = totalWithTax;\r\n service.totalWithoutTax = totalWithoutTax;\r\n\r\n service.getCityFromZipCode = getCityFromZipCode;\r\n service.getCountryCodes = getCountryCodes;\r\n service.preloadAddress = preloadAddress;\r\n service.saveAddress = saveAddress;\r\n service.getDeliveryMethods = getDeliveryMethods;\r\n service.findNearestParcelShop = findNearestParcelShop;\r\n service.resetConfirmation = resetConfirmation;\r\n service.isAddressValid = isAddressValid;\r\n\r\n service.createCreditOrder = createCreditOrder;\r\n service.createOrder = createOrder;\r\n service.showLoading = showLoading;\r\n service.removeLoading = removeLoading;\r\n service.checkAuthorized = checkAuthorized;\r\n service.validateCart = validateCart;\r\n\r\n service.clearAll = clearAll;\r\n\r\n init();\r\n\r\n /////////////\r\n\r\n function init() {\r\n //if (!checkAuthorized()) {\r\n loadCartItems();\r\n preloadAddress();\r\n //}\r\n }\r\n\r\n function checkAuthorized() {\r\n for (var i = 0; i < cartService.items.length; i++) {\r\n if (cartService.items[i].User !== $window.userAuthorized) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n function loadCartItems() {\r\n var partIds = cartService.items.map(function (item) { return item.ItemNo; });\r\n return $http.get(baseUrl, {\r\n params: {\r\n 'Parts[]': partIds\r\n }\r\n })\r\n .then(function (response) {\r\n angular.merge(cartService.items = response.data.map(extendItems));\r\n cartService.saveCartToStorage();\r\n });\r\n }\r\n\r\n function specificVAT() {\r\n var VAT = 0.25;\r\n if (service.deliveryMethod) {\r\n var item = _.find(vatAmountCountries, { 'CountryCode': service.deliveryMethod.CountryCode });\r\n if (item) {\r\n VAT = item.VAT;\r\n }\r\n }\r\n return VAT;\r\n }\r\n\r\n function totalTax() {\r\n return totalWithoutTax() * specificVAT();\r\n }\r\n\r\n function totalWithTax() {\r\n return totalWithoutTax() * vatRate;\r\n }\r\n\r\n function totalWithoutTax() {\r\n return _.reduce(cartService.items, function (result, item) {\r\n return result + (item.Count * item.SalesPrice);\r\n }, 0) + (service.deliveryMethod && service.deliveryMethod.Cost);\r\n }\r\n\r\n function extendItems(item) {\r\n var cartItem = cartService.get(item.ItemNo);\r\n item.Count = cartItem.Count;\r\n item.ExpectedDeliveryDate = cartItem.ExpectedDeliveryDate;\r\n item.User = $window.userAuthorized;\r\n return item;\r\n }\r\n\r\n function getCityFromZipCode(zipCode) {\r\n return $http.get('https://dawa.aws.dk/postnumre/' + zipCode)\r\n .then(function (response) {\r\n if (response.data && response.data.navn) {\r\n return response.data.navn;\r\n } else {\r\n return $q.reject('No result');\r\n }\r\n });\r\n }\r\n\r\n function getCountryCodes() {\r\n return $http.get('/dist/locale/countries.json')\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n function getCountryName(code) {\r\n return getCountryCodes().then(function (countries) {\r\n var country = countries.find(function (country) {\r\n return country.Code === code;\r\n });\r\n return country && country.Name;\r\n });\r\n }\r\n\r\n function preloadAddress() {\r\n if (!isAddressValid()) {\r\n if (auth.isAuth()) {\r\n loadAddressFromService();\r\n } else if (localStorageAddressExists()) {\r\n loadAddressFromStorage();\r\n }\r\n }\r\n }\r\n\r\n function isAddressValid() {\r\n var billingValid = service.address.name &&\r\n service.address.street &&\r\n service.address.zipcode &&\r\n service.address.city &&\r\n service.address.country &&\r\n service.address.email &&\r\n service.address.cellphone &&\r\n (!service.address.eanno || service.address.eanno.length === 13);\r\n var shippingValid = !service.separateAddress || (\r\n service.deliveryAddress.name &&\r\n service.deliveryAddress.street &&\r\n service.deliveryAddress.zipcode &&\r\n service.deliveryAddress.city &&\r\n service.deliveryAddress.country);\r\n var value = billingValid && shippingValid;\r\n return value;\r\n }\r\n\r\n function saveAddress() {\r\n localStorageService.set('billingAddress', service.address);\r\n localStorageService.set('deliveryAddress', service.deliveryAddress);\r\n localStorageService.set('separateAddress', service.separateAddress);\r\n }\r\n\r\n function loadAddressFromService() {\r\n return $http.get(baseUrl + 'customer')\r\n .then(function (response) { return response.data; })\r\n .then(function (customer) {\r\n service.address.name = customer.Name;\r\n service.address.street = customer.Address;\r\n service.address.zipcode = customer.ZipCode;\r\n service.address.city = customer.City;\r\n service.address.country = customer.Country ? { Code: customer.Country }: null;\r\n service.address.email = customer.Email;\r\n service.address.eanno = customer.Ean;\r\n\r\n if (customer.Country) {\r\n getCountryName(customer.Country).then(function (countryName) {\r\n service.address.country.Name = countryName;\r\n });\r\n }\r\n });\r\n }\r\n\r\n function loadAddressFromStorage() {\r\n angular.merge(service.address, localStorageService.get('billingAddress') || {});\r\n angular.merge(service.deliveryAddress, localStorageService.get('deliveryAddress') || {});\r\n service.separateAddress = localStorageService.get('separateAddress');\r\n if (service.deliveryAddress.country) {\r\n if (service.address.country.Code) {\r\n service.address.country = service.address.country.Code;\r\n }\r\n }\r\n if (service.deliveryAddress.country) {\r\n if (service.deliveryAddress.country.Code) {\r\n service.deliveryAddress.country = service.deliveryAddress.country.Code;\r\n }\r\n }\r\n }\r\n\r\n function localStorageAddressExists() {\r\n return !!localStorageService.get('billingAddress');\r\n }\r\n\r\n function getDeliveryMethods() {\r\n if (!isAddressValid()) {\r\n loadAddressFromStorage();\r\n }\r\n if (!isAddressValid()) {\r\n return $q.resolve();\r\n }\r\n var country = service.separateAddress ? service.deliveryAddress.country : service.address.country;\r\n return $http.get(baseUrl + 'delivery?countryCode=' + country)\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n function findNearestParcelShop(street, zipcode, city, country, selectedCarrier) {\r\n return $http.get(baseUrl + 'nearestparcelshop', {\r\n params: {\r\n 'Street': street,\r\n 'ZipCode': zipcode,\r\n 'City': city,\r\n 'CountryIso': country,\r\n 'SelectedCarrier': selectedCarrier\r\n }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n function getStreetWithoutNo(street) {\r\n var firstNumber = street.search(/\\d/);\r\n return firstNumber > 0 ? street.substring(0, firstNumber) : street;\r\n }\r\n\r\n function resetConfirmation() {\r\n service.termConfirmation = false;\r\n }\r\n\r\n function createCreditOrder() {\r\n var model = generateOrderModel();\r\n\r\n // Call webservice for data\r\n return $http.post(baseUrl + 'createcreditorder', model)\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n function createOrder() {\r\n var model = generateOrderModel();\r\n\r\n return $http.post(baseUrl + 'createorder', model)\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n\r\n function generateOrderModel() {\r\n var items = _.map(cartService.items, function (item) {\r\n return {\r\n ItemNo: item.ItemNo,\r\n Amount: item.Count,\r\n Price: item.SalesPrice,\r\n Description: item.Description,\r\n ExpectedDeliveryDate: item.ExpectedDeliveryDate\r\n };\r\n });\r\n\r\n var addressData = {\r\n Name: service.address.name,\r\n StreetName: service.address.street,\r\n ZipCode: service.address.zipcode,\r\n City: service.address.city,\r\n Country: service.address.country,\r\n Email: service.address.email,\r\n CellPhone: service.address.cellphone,\r\n EanNo: service.address.eanno,\r\n\r\n DeliveryName: service.deliveryAddress.name,\r\n DeliveryStreet: service.deliveryAddress.street,\r\n DeliveryZipCode: service.deliveryAddress.zipcode,\r\n DeliveryCity: service.deliveryAddress.city,\r\n DeliveryCountry: service.deliveryAddress.country ? service.deliveryAddress.country : undefined\r\n };\r\n\r\n var model = {\r\n Items: items,\r\n Address: addressData,\r\n SeparateDelivery: service.separateAddress,\r\n DeliveryMethod: service.deliveryMethod,\r\n ParcelShopNo: service.selectedParcelShop ? service.selectedParcelShop.Number : '',\r\n ReceiveNewsletter: service.newsletter,\r\n Comments: service.address.comment\r\n };\r\n\r\n return model;\r\n }\r\n\r\n function clearAll() {\r\n service.separateAddress = false;\r\n service.address = {};\r\n service.deliveryAddress = {};\r\n service.deliveryMethod = null;\r\n service.selectedParcelShop = null;\r\n service.termConfirmation = false;\r\n service.newsletter = false;\r\n\r\n localStorageService.remove('billingAddress');\r\n localStorageService.remove('deliveryAddress');\r\n localStorageService.remove('separateAddress');\r\n\r\n cartService.clearCart();\r\n }\r\n\r\n\r\n function validateCart() {\r\n return cartService.items && cartService.items.length > 0;\r\n }\r\n\r\n\r\n function showLoading(target) {\r\n if (typeof target === 'undefined') {\r\n target = 'body';\r\n }\r\n $(target).append('<div class=\\'loading\\'>Loading…</div>');\r\n }\r\n\r\n function removeLoading(target) {\r\n if (typeof target === 'undefined') {\r\n target = 'body';\r\n }\r\n $(target).find('.loading').remove();\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n //angular.module('app.contact').component('contact', {\r\n // bindings: {\r\n // },\r\n // templateUrl: '/app/contact/contact.component.html',\r\n // controller: ContactController\r\n //});\r\n\r\n ContactController.$inject = [\"toastr\", \"contactService\"];\r\n angular.module('app.contact')\r\n .controller('ContactController', ContactController);\r\n\r\n /* @ngInject */\r\n function ContactController(toastr, contactService){\r\n var vm = this;\r\n\r\n clearForm();\r\n\r\n vm.isSending = false;\r\n vm.sendMessage = sendMessage;\r\n\r\n /////////////\r\n\r\n function sendMessage() {\r\n if(!validateForm()){\r\n return;\r\n }\r\n\r\n vm.isSending = true;\r\n contactService.sendMessage(vm.name, vm.email, vm.message, vm.subject, vm.file).then(function (result) {\r\n clearForm();\r\n\r\n toastr.success('Din besked er sendt og vil blive behandlet hurtigst muligt.');\r\n vm.isSending = false;\r\n }, function (error) {\r\n if (error.data && error.data.Message) {\r\n toastr.error(error.data.Message, 'Der skete en fejl.');\r\n } else {\r\n toastr.error('Beskeden kunne ikke sendes. Prøv venligst igen.', 'Der skete en fejl.');\r\n }\r\n vm.isSending = false;\r\n });\r\n }\r\n\r\n function validateForm(){\r\n if (!vm.name) {\r\n toastr.error('Du skal udfylde dit navn.');\r\n return false;\r\n } else if (!vm.email) {\r\n toastr.error('Du skal udfylde din e-mail adresse.');\r\n return false;\r\n } else if (!vm.message) {\r\n toastr.error('Du skal udfylde en besked.');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n function clearForm(){\r\n vm.name = '';\r\n vm.email = '';\r\n vm.subject = '';\r\n vm.message = '';\r\n vm.file = null;\r\n }\r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n ContactService.$inject = [\"$http\", \"Upload\"];\r\n angular.module('app.shared').service('contactService', ContactService);\r\n\r\n /* @ngInject */\r\n function ContactService($http, Upload) {\r\n var service = this;\r\n var baseUrl = '/api/contact/';\r\n\r\n service.sendMessage = sendMessage;\r\n service.askPrice = askPrice;\r\n\r\n\r\n /////////////\r\n\r\n function sendMessage(name, email, message, subject, file) {\r\n return Upload.upload({\r\n url: baseUrl,\r\n method: 'POST',\r\n data: {\r\n Attachment: file,\r\n Name: name,\r\n Email: email,\r\n Message: message,\r\n Subject: subject || null\r\n }\r\n });\r\n }\r\n\r\n function askPrice(name, email, message) {\r\n return $http.post(baseUrl + 'askprice', {\r\n Name: name,\r\n Email: email,\r\n Message: message\r\n });\r\n }\r\n }\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular.module('app.content')\r\n .controller('ContentController', ContentController);\r\n\r\n ContentController.$inject = ['contentService', 'toastr', '_'];\r\n\r\n function ContentController(contentService, toastr, _) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n vm.sections = [];\r\n vm.webContent = [];\r\n\r\n vm.creating = false;\r\n\r\n vm.newContentIdHasChanged = false;\r\n vm.newContentTitle = null;\r\n vm.newContentId = null;\r\n vm.newContentSection = null;\r\n\r\n vm.onNewContentTitleChange = onNewContentTitleChange;\r\n vm.onNewContentIdChange = onNewContentIdChange;\r\n vm.createNewContent = createNewContent;\r\n vm.deleteContent = deleteContent;\r\n\r\n init();\r\n\r\n\r\n function init() {\r\n loadContentSections();\r\n loadWebContent();\r\n }\r\n\r\n function loadContentSections() {\r\n return contentService.getContentSections().then(function (data) {\r\n vm.sections = data;\r\n }, function (error) {\r\n toastr.error('Der opstod en fejl under indlæsning af indholds sectioner.');\r\n console.error('Fetch error: ', error);\r\n });\r\n }\r\n\r\n function loadWebContent() {\r\n return contentService.getWebContent().then(function (data) {\r\n vm.webContent = _.groupBy(data, function (wc) { return wc.ContentSectionId; });\r\n }, function (error) {\r\n toastr.error('Der opstod en fejl under indlæsning af liste af web indhold.');\r\n console.error('Fetch error: ', error);\r\n });\r\n }\r\n\r\n function onNewContentTitleChange() {\r\n if (!vm.newContentIdHasChanged) {\r\n vm.newContentId = vm.newContentTitle.replace(/[^A-Za-z0-9_~]+/g, '-').toLowerCase();\r\n }\r\n }\r\n\r\n function onNewContentIdChange() {\r\n vm.newContentIdHasChanged = true;\r\n vm.newContentId = vm.newContentId.replace(/[^A-Za-z0-9_~]+/g, '-').toLowerCase();\r\n }\r\n\r\n function createNewContent() {\r\n vm.creating = true;\r\n contentService.createWebContent(vm.newContentTitle, vm.newContentId, vm.newContentSection)\r\n .then(function (data) {\r\n vm.newContentIdHasChanged = false;\r\n vm.newContentTitle = null;\r\n vm.newContentId = null;\r\n vm.newContentSection = null;\r\n vm.creating = false;\r\n\r\n loadWebContent();\r\n }, function (error) {\r\n vm.creating = false;\r\n\r\n if (error.data && error.data.ExceptionMessage) {\r\n toastr.error(error.data.ExceptionMessage);\r\n } else {\r\n toastr.error('Der opstod en fejl under oprettelse af web indhold.');\r\n }\r\n console.error('Create web content error: ', error);\r\n });\r\n }\r\n\r\n function deleteContent(content) {\r\n /* globals confirm: false */\r\n if(!content){\r\n return;\r\n }\r\n\r\n content.deleting = true;\r\n if (confirm('Er du sikker pÃ¥ du vil slette dette indhold?')) {\r\n contentService.trashWebContent(content.Id).then(function (data) {\r\n toastr.success('Web indholdet blev slettet.');\r\n content.deleting = false;\r\n\r\n loadWebContent();\r\n }, function (error) {\r\n toastr.error('Der opstod en fejl under indlæsning af liste af web indhold.');\r\n content.deleting = false;\r\n console.error('Fetch error: ', error);\r\n });\r\n }\r\n }\r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('app.content')\r\n .factory('contentService', contentService);\r\n\r\n contentService.$inject = ['$http', '$q'];\r\n\r\n function contentService($http, $q) {\r\n var baseUrl = '/api/v1/content/';\r\n\r\n var InnerContentService = function () { };\r\n\r\n InnerContentService.prototype.getContentSections = getContentSections;\r\n InnerContentService.prototype.createWebContent = createWebContent;\r\n InnerContentService.prototype.trashWebContent = trashWebContent;\r\n InnerContentService.prototype.getWebContent = getWebContent;\r\n\r\n return new InnerContentService();\r\n\r\n\r\n\r\n ///////////// Implementation\r\n\r\n function getContentSections() {\r\n\r\n /*jshint validthis: true */\r\n var scope = this;\r\n // Create promise\r\n var deferred = $q.defer();\r\n\r\n // Call webservice for data\r\n $http.get(baseUrl + 'sections', { withCredentials: true })\r\n .then(function (response) {\r\n deferred.resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n deferred.reject(error);\r\n });\r\n\r\n // Return promise\r\n return deferred.promise;\r\n }\r\n\r\n function getWebContent() {\r\n\r\n /*jshint validthis: true */\r\n var scope = this;\r\n // Create promise\r\n var deferred = $q.defer();\r\n\r\n // Call webservice for data\r\n $http.get(baseUrl, { withCredentials: true })\r\n .then(function (response) {\r\n deferred.resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n deferred.reject(error);\r\n });\r\n\r\n // Return promise\r\n return deferred.promise;\r\n }\r\n\r\n function trashWebContent(contentId) {\r\n\r\n /*jshint validthis: true */\r\n var scope = this;\r\n // Create promise\r\n var deferred = $q.defer();\r\n\r\n\r\n $http({\r\n method: 'DELETE',\r\n url: baseUrl + '?id=' + contentId,\r\n withCredentials: true\r\n }).then(function (response) {\r\n deferred.resolve(response.data);\r\n }, function (error) {\r\n deferred.reject(error);\r\n });\r\n\r\n // Return promise\r\n return deferred.promise;\r\n }\r\n\r\n function createWebContent(contentName, contentId, sectionId) {\r\n\r\n /*jshint validthis: true */\r\n var scope = this;\r\n // Create promise\r\n var deferred = $q.defer();\r\n\r\n // Call webservice for data\r\n $http.post(baseUrl, {\r\n ContentTitle: contentName,\r\n ContentId: contentId,\r\n SectionId: sectionId\r\n }, { withCredentials: true })\r\n .then(function (response) {\r\n deferred.resolve(response.data);\r\n })\r\n .catch(function (error) {\r\n deferred.reject(error);\r\n });\r\n\r\n // Return promise\r\n return deferred.promise;\r\n }\r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n SearchController.$inject = [\"$scope\", \"$rootScope\", \"viewData\", \"searchService\", \"_\", \"$location\", \"$window\"];\r\n angular.module('app')\r\n .controller('SearchController', SearchController);\r\n\r\n /* @ngInject */\r\n function SearchController($scope, $rootScope, viewData, searchService, _, $location, $window) {\r\n /* jshint validthis: true */\r\n var vm = this;\r\n var filterStateKeys = { types: 't', manufacturers: 'm', categories: 'c', models: 'mo', nos: 'no' };\r\n\r\n // Properties\r\n vm.searchString = '';\r\n vm.searchResults = [];\r\n vm.searchFilters = {\r\n types: [],\r\n manufacturers: [],\r\n models: [],\r\n categories: [],\r\n nos: []\r\n };\r\n vm.selectedFilters = {};\r\n vm.selectedFiltersHistory = {};\r\n vm.pagingData = {\r\n totalItems: 0,\r\n itemsPerPage: 50,\r\n currentPage: 1\r\n };\r\n vm.isLoading = false;\r\n\r\n // Functions\r\n vm.fetchResults = fetchResults;\r\n vm.getDeepLink = getDeepLink;\r\n vm.searchResultHeader = searchResultHeader;\r\n vm.getFirstFilter = getFirstFilter;\r\n vm.toggleFilter = toggleFilter;\r\n\r\n // Callbacks\r\n vm.handlePageChange = _.debounce(handlePageChange, 200);\r\n vm.handleFilterChange = _.debounce(handleFilterChange, 200);\r\n\r\n init();\r\n\r\n /////////////\r\n\r\n function init(){\r\n extractViewData();\r\n fetchResults();\r\n }\r\n\r\n function extractViewData(){\r\n vm.searchString = viewData.searchString;\r\n extractSelectedFiltersFromViewData();\r\n }\r\n\r\n function extractSelectedFiltersFromViewData(){\r\n vm.selectedFilters = Object.keys(vm.searchFilters).reduce(function(acc, key){\r\n acc[key] = viewData[key] ? viewData[key].split(',').map(mapToUpperCase) : [];\r\n return acc;\r\n }, {});\r\n }\r\n\r\n function extractSelectedFiltersHistory() {\r\n vm.selectedFiltersHistory = Object.keys(vm.searchFilters).reduce(function (acc, key) {\r\n acc[key] = vm.selectedFilters[key] && vm.selectedFilters[key].length > 0 ? $window.encodeTypeCode(vm.searchFilters[key][0].Key).split(',').map(mapToUpperCase) : [];\r\n return acc;\r\n }, {});\r\n }\r\n\r\n function toggleFilter(){\r\n $rootScope.$broadcast('toggleAsideMenu');\r\n }\r\n \r\n function mapToUpperCase(value){\r\n return value && value.toUpperCase();\r\n }\r\n\r\n function fetchResults(){\r\n vm.isLoading = true;\r\n\r\n return searchService.searchSpareParts(vm.searchString, vm.selectedFilters, vm.pagingData)\r\n .then(function (result) {\r\n updateSearchResults(result.Parts);\r\n updateSearchFilters(result);\r\n updatePaging(result.TotalResults);\r\n\r\n updateFilterHistory();\r\n }).finally(function(){\r\n vm.isLoading = false;\r\n });\r\n }\r\n \r\n function updateSearchResults(searchResults){\r\n vm.searchResults = searchResults;\r\n }\r\n\r\n function updateSearchFilters(searchFilters){\r\n vm.searchFilters = {\r\n types: (searchFilters.Types || []).map(mapFilterKeysToUpperCase),\r\n manufacturers: (searchFilters.Manufacturers || []).map(mapFilterKeysToUpperCase),\r\n categories: (searchFilters.Categories || []).map(mapFilterKeysToUpperCase),\r\n models: (searchFilters.Models || []).map(mapFilterKeysToUpperCase),\r\n nos: (searchFilters.ItemNos || []).map(mapFilterKeysToUpperCase)\r\n };\r\n }\r\n\r\n function mapFilterKeysToUpperCase(filter){\r\n filter.Key = filter.Key && filter.Key.toUpperCase();\r\n return filter;\r\n }\r\n\r\n function updatePaging(totalItems){\r\n vm.pagingData = angular.extend({}, vm.pagingData, { totalItems: totalItems });\r\n }\r\n\r\n function updateFilterHistory() {\r\n extractSelectedFiltersHistory();\r\n var filterState = Object.keys(filterStateKeys).reduce(function(acc, key){\r\n if (vm.selectedFiltersHistory[key] && vm.selectedFiltersHistory[key].length > 0){\r\n acc[filterStateKeys[key]] = vm.selectedFiltersHistory[key].join(',');\r\n }\r\n return acc;\r\n }, {});\r\n\r\n $location.path('q/'+vm.searchString).search(filterState);\r\n $location.replace();\r\n }\r\n\r\n function getDeepLink(){\r\n return $location.absUrl();\r\n }\r\n\r\n function handlePageChange(){\r\n fetchResults();\r\n }\r\n\r\n function handleFilterChange(){\r\n fetchResults();\r\n }\r\n\r\n function searchResultHeader(){\r\n if(vm.searchString){\r\n return 'searchString';\r\n }\r\n if((vm.selectedFilters.manufacturers && vm.selectedFilters.manufacturers.length > 0) || \r\n (vm.selectedFilters.types && vm.selectedFilters.types.length > 0)){\r\n return 'filters';\r\n }\r\n }\r\n\r\n function getFirstFilter(){\r\n var filterKeys = Object.keys(vm.selectedFilters);\r\n for(var i = 0; i < filterKeys.length; i++){\r\n if(vm.selectedFilters[filterKeys[i]] && vm.selectedFilters[filterKeys[i]].length > 0){\r\n return vm.selectedFilters[filterKeys[i]][0];\r\n }\r\n }\r\n return 'N/A';\r\n }\r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n SearchService.$inject = [\"$http\", \"$q\"];\r\n angular.module('app')\r\n .service('searchService', SearchService);\r\n\r\n /* @ngInject */\r\n function SearchService($http, $q) {\r\n var service = this;\r\n var baseUrl = '/api/v2/search/';\r\n var deferredAbort;\r\n\r\n service.searchSpareParts = searchSpareParts;\r\n service.typeahead = typeahead;\r\n service.typeaheadV2 = typeaheadV2;\r\n service.getWizardFilters = getWizardFilters;\r\n service.getRelatedItems = getRelatedItems;\r\n service.getExpectedDeliveryDate = getExpectedDeliveryDate;\r\n \r\n\r\n /////////////\r\n\r\n function searchSpareParts(searchString, filters, pagingData) {\r\n if (deferredAbort) { deferredAbort.resolve(); }\r\n deferredAbort = $q.defer();\r\n\r\n return $http.get(baseUrl, {\r\n timeout: deferredAbort.promise,\r\n params: {\r\n 'Query': searchString || '',\r\n 'Types[]': filters.types,\r\n 'Manufacturers[]': filters.manufacturers,\r\n 'Categories[]': filters.categories,\r\n 'Models[]': filters.models,\r\n 'ItemNos[]': filters.nos,\r\n 'page': pagingData.currentPage || 1,\r\n 'pageSize': pagingData.itemsPerPage || 20\r\n }\r\n })\r\n .then(function(response){ return response.data; })\r\n .finally(function(){ deferredAbort = null; });\r\n }\r\n\r\n function typeahead(searchString, limit) {\r\n if (deferredAbort) { deferredAbort.resolve(); }\r\n deferredAbort = $q.defer();\r\n\r\n return $http.get('/api/typeahead/', {\r\n timeout: deferredAbort.promise,\r\n params: {\r\n 'q': searchString || '',\r\n 'limit': limit || 10\r\n }\r\n })\r\n .then(function(response){ return response.data; })\r\n .finally(function(){ deferredAbort = null; });\r\n }\r\n \r\n function typeaheadV2(searchString, limit) {\r\n if (deferredAbort) { deferredAbort.resolve(); }\r\n deferredAbort = $q.defer();\r\n\r\n return $http.get('/api/v2/typeahead/', {\r\n timeout: deferredAbort.promise,\r\n params: {\r\n 'q': (searchString) || '',\r\n 'limit': limit || 10\r\n }\r\n })\r\n .then(function(response){ return response.data; })\r\n .finally(function(){ deferredAbort = null; });\r\n }\r\n\r\n function getWizardFilters(type, manufacturer, category, model) {\r\n return $http.get('/api/wizardfilter/', {\r\n params: {\r\n 'type': type ||'',\r\n 'manufacturer': manufacturer || '',\r\n 'category': category || '',\r\n 'model': model || ''\r\n }\r\n })\r\n .then(function (response) { return response.data; });\r\n }\r\n\r\n function getRelatedItems(itemNo, amount) {\r\n if (deferredAbort) { deferredAbort.resolve(); }\r\n deferredAbort = $q.defer();\r\n\r\n return $http.get('/api/v2/getrelated/', {\r\n timeout: deferredAbort.promise,\r\n params: {\r\n 'itemNo': itemNo || '',\r\n 'amount': amount}\r\n })\r\n .then(function (response) { return response.data; })\r\n .finally(function () { deferredAbort = null; });\r\n }\r\n\r\n function getExpectedDeliveryDate(requests) {\r\n return $http.post('api/v2/getExpectedDeliveryDate', requests)\r\n .then(function (response) {\r\n return response.data;\r\n });\r\n }\r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n WizardController.$inject = [\"$rootScope\", \"viewData\", \"searchService\", \"toastr\", \"$translate\"];\r\n angular.module('app')\r\n .controller('WizardController', WizardController);\r\n \r\n /* @ngInject */\r\n function WizardController($rootScope, viewData, searchService, toastr, $translate){\r\n /* jshint validthis: true */\r\n var vm = this;\r\n vm.isLoading = false;\r\n vm.type = null;\r\n vm.manufacturer = null;\r\n vm.category = null;\r\n vm.model = null;\r\n\r\n vm.wizard = null;\r\n vm.wizardTypes = { type: 'type', manufacturer: 'manufacturer', category: 'category' };\r\n\r\n vm.filters = [];\r\n vm.searchFilters = {\r\n types: [],\r\n manufacturers: [],\r\n models: [],\r\n categories: [],\r\n nos: []\r\n };\r\n vm.selectedFilters = {};\r\n\r\n // Functions\r\n vm.toggleFilter = toggleFilter;\r\n\r\n vm.getUrl = getUrl;\r\n vm.handleFilterChange = handleFilterChange;\r\n \r\n init();\r\n\r\n /////////////\r\n\r\n function init() {\r\n extractViewData();\r\n extractSelectedFiltersFromViewData();\r\n\r\n determineWizardType();\r\n\r\n fetchFilters();\r\n }\r\n\r\n function extractViewData(){\r\n vm.type = viewData.type;\r\n vm.manufacturer = viewData.manufacturer;\r\n vm.category = viewData.category;\r\n vm.typeSEO = viewData.typeSEO;\r\n vm.categorySEO = viewData.categorySEO;\r\n vm.model = viewData.model;\r\n }\r\n \r\n function extractSelectedFiltersFromViewData(){\r\n vm.selectedFilters = {};\r\n vm.selectedFilters.types = viewData.type ? [viewData.type.toUpperCase()] : [];\r\n vm.selectedFilters.manufacturers = viewData.manufacturer ? [viewData.manufacturer.toUpperCase()] : [];\r\n vm.selectedFilters.categories = viewData.category ? [viewData.category.toUpperCase()] : [];\r\n vm.selectedFilters.models = [];\r\n vm.selectedFilters.nos = [];\r\n }\r\n\r\n function toggleFilter() {\r\n $rootScope.$broadcast('toggleAsideMenu');\r\n }\r\n\r\n function determineWizardType(){\r\n if (vm.type && vm.manufacturer) {\r\n vm.wizard = vm.wizardTypes.category;\r\n }else if (vm.type && !vm.manufacturer){\r\n vm.wizard = vm.wizardTypes.manufacturer;\r\n }else if (!vm.type && vm.manufacturer){\r\n vm.wizard = vm.wizardTypes.type;\r\n }else if (vm.category){\r\n vm.wizard = vm.wizardTypes.type;\r\n }else{\r\n // Redirect to search page\r\n window.location = getUrlQueryString(vm.type, vm.manufacturer, vm.category);\r\n }\r\n }\r\n\r\n function getUrlQueryString(type, manufacturer, category, model, no){\r\n var query = '/q?t=' + encodeURIComponent(type) + '&m=' + encodeURIComponent(manufacturer) + '&c=' + encodeURIComponent(category);\r\n if(model){\r\n query += '&mo=' + encodeURIComponent(model);\r\n }\r\n if(no){\r\n query += '&no=' + encodeURIComponent(no);\r\n }\r\n return query;\r\n }\r\n\r\n function fetchFilters(){\r\n vm.isLoading = true;\r\n return searchService.getWizardFilters(vm.type, vm.manufacturer, vm.category, vm.model)\r\n .then(function (result) {\r\n vm.filters = result.Filters;\r\n vm.searchFilters.types = result.Types || [];\r\n vm.searchFilters.manufacturers = result.Manufacturers || [];\r\n vm.searchFilters.categories = result.Categories || [];\r\n vm.searchFilters.models = result.Models || [];\r\n vm.searchFilters.nos = result.Nos || [];\r\n }, function (error) {\r\n toastr.error('Der opstod en fejl under indlæsning af ' + vm.wizard + ' filtre.');\r\n }).finally(function(){\r\n vm.isLoading = false;\r\n });\r\n }\r\n\r\n function getUrl(filter){\r\n switch(vm.wizard){\r\n case 'type':\r\n return getUrlQueryStringOrWizard(filter, vm.manufacturer, vm.category, filter, vm.categorySEO); \r\n case 'manufacturer':\r\n return getUrlQueryStringOrWizard(vm.type, filter, vm.category, vm.typeSEO, vm.categorySEO); \r\n case 'category':\r\n return getUrlQueryStringOrWizard(vm.type, vm.manufacturer, filter, vm.category, vm.typeSEO, vm.categorySEO);\r\n }\r\n }\r\n\r\n function handleFilterChange(){\r\n var type = vm.selectedFilters.types[0] || vm.type;\r\n var manufacturer = vm.selectedFilters.manufacturers[0] || vm.manufacturer;\r\n var category = vm.selectedFilters.categories[0] || vm.category;\r\n var model = vm.selectedFilters.models[0] || vm.model;\r\n var no = vm.selectedFilters.nos[0] || vm.no;\r\n window.location = getUrlQueryString(type, manufacturer, category, model, no);\r\n }\r\n\r\n function getUrlQueryStringOrWizard(type, manufacturer, category, typeSEO, categorySEO){\r\n if(type && manufacturer && category){\r\n return getUrlQueryString(type, manufacturer, category);\r\n }\r\n return getWizardUrl(typeSEO, manufacturer, categorySEO);\r\n }\r\n \r\n function getWizardUrl(type, manufacturer, category) {\r\n var url = '';\r\n if (category) {\r\n url += '/c/' + encodeURIComponent(encodeTypeCode(category.toLowerCase()));\r\n }\r\n if (manufacturer) {\r\n url += '/m/' + encodeURIComponent(manufacturer.toLowerCase());\r\n }\r\n if (type) {\r\n url += '/t/' + encodeURIComponent(encodeTypeCode(type.toLowerCase()));\r\n }\r\n return url;\r\n }\r\n \r\n function encodeTypeCode(type) {\r\n type = type.replace(/\\//g, '--');\r\n type = type.replace(/\\./g, '_');\r\n type = type.replace(/ä/g, 'a');\r\n type = type.replace(/ü/g, 'u');\r\n type = type.replace(/ö/g, 'o');\r\n type = type.replace(/ø/g, 'oe');\r\n type = type.replace(/Ã¥/g, 'aa');\r\n type = type.replace(/æ/g, 'ae');\r\n type = type.replace(/Ä/g, 'A');\r\n type = type.replace(/Ãœ/g, 'U');\r\n type = type.replace(/Ö/g, 'O');\r\n type = type.replace(/Ø/g, 'OE');\r\n type = type.replace(/Ã…/g, 'AA');\r\n type = type.replace(/Æ/g, 'AE');\r\n return type;\r\n }\r\n\r\n }\r\n})();","(function(){\r\n 'use strict';\r\n\r\n CartOverviewController.$inject = [\"$filter\", \"cartService\", \"checkoutService\", \"$scope\"];\r\n angular.module('app.checkout').component('cartOverview', {\r\n bindings: {\r\n },\r\n templateUrl: '/app/checkout/cart-overview/cart-overview.component.html',\r\n controller: CartOverviewController\r\n });\r\n\r\n /* @ngInject */\r\n function CartOverviewController($filter, cartService, checkoutService, $scope){\r\n var ctrl = this;\r\n ctrl.clearCart = clearCart;\r\n ctrl.items = cartService.items;\r\n ctrl.showInfoDelivery = false;\r\n\r\n isShowInforDelivery();\r\n checkoutService.resetConfirmation();\r\n\r\n $scope.$on('checkInfoExpectedDeliveryDate', function (event, data) {\r\n isShowInforDelivery();\r\n });\r\n \r\n function clearCart(){\r\n /* globals confirm: false */\r\n if(confirm($filter('translate')('Er du sikker pÃ¥ du vil rydde kurven?'))){\r\n cartService.clearCart();\r\n }\r\n }\r\n\r\n function isShowInforDelivery() {\r\n ctrl.showInfoDelivery = false;\r\n cartService.items.forEach(function (item) {\r\n if (item.ExpectedDeliveryDate) {\r\n ctrl.showInfoDelivery = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n CartItemAmountController.$inject = [\"$filter\"];\r\n angular.module('app.checkout').component('cartItemAmount', {\r\n bindings: {\r\n itemAmount: '<',\r\n onChange: '&'\r\n },\r\n templateUrl: '/app/checkout/cart-items/cart-item-amount.component.html',\r\n controller: CartItemAmountController\r\n });\r\n\r\n /* @ngInject */\r\n function CartItemAmountController($filter){\r\n var ctrl = this;\r\n \r\n ctrl.decrease = decrease;\r\n ctrl.increase = increase;\r\n\r\n /////////////\r\n\r\n function decrease(){\r\n var oldAmount = ctrl.itemAmount;\r\n var newAmount = ctrl.itemAmount - 1;\r\n\r\n if(ctrl.onChange){\r\n ctrl.onChange({ newAmount: newAmount, oldAmount: oldAmount });\r\n }\r\n }\r\n\r\n function increase(){\r\n var oldAmount = ctrl.itemAmount;\r\n var newAmount = ctrl.itemAmount + 1;\r\n\r\n if(ctrl.onChange){\r\n ctrl.onChange({ newAmount: newAmount, oldAmount: oldAmount });\r\n }\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n CartItemsController.$inject = [\"checkoutService\", \"cartService\", \"auth\", \"_\", \"$filter\", \"$scope\", \"$rootScope\"];\r\n angular.module('app.checkout').component('cartItems', {\r\n bindings: {\r\n },\r\n templateUrl: '/app/checkout/cart-items/cart-items.component.html',\r\n controller: CartItemsController\r\n });\r\n\r\n /* @ngInject */\r\n function CartItemsController(checkoutService, cartService, auth, _, $filter, $scope, $rootScope){\r\n var ctrl = this;\r\n \r\n ctrl.service = checkoutService;\r\n \r\n ctrl.vatAmount = 0.25;\r\n ctrl.vatRate = 1.25;\r\n ctrl.isLoading = false;\r\n ctrl.items = cartService.items;\r\n \r\n ctrl.handleAmountChange = handleAmountChange;\r\n ctrl.removeCartItem = removeCartItem;\r\n \r\n ctrl.totalTax = checkoutService.totalTax;\r\n ctrl.totalWithTax = checkoutService.totalWithTax;\r\n ctrl.totalWithoutTax = checkoutService.totalWithoutTax;\r\n ctrl.isLoggedIn = isLoggedIn;\r\n ctrl.getDetailsUrl = cartService.getDetailsUrl;\r\n ctrl.removeSplashCode = removeSplashCode;\r\n ctrl.footerColspan = 5;\r\n //ctrl.expectedDeliveryDateShow = expectedDeliveryDateShow;\r\n\r\n $scope.$on('updatedExpectedDeliveryDate', function (event, data) {\r\n ctrl.items = cartService.items;\r\n isShowExpectedDelivery();\r\n });\r\n\r\n $scope.$on('updatedExpectedDeliveryDateForCartItem', function (event, data) {\r\n if (data) {\r\n var cartItem = cartService.get(data.ItemNo);\r\n cartItem.ExpectedDeliveryDate = data.ExpectedDeliveryDate;\r\n cartItem.ExpectedDeliveryDateShow = data.ExpectedDeliveryDateShow;\r\n isShowExpectedDelivery();\r\n }\r\n });\r\n\r\n isShowExpectedDelivery();\r\n\r\n function handleAmountChange(newAmount, oldAmount, item){\r\n var cartItem = cartService.get(item.ItemNo);\r\n if(newAmount <= 0){\r\n removeCartItem(item);\r\n }else{\r\n cartService.setAmount(item.ItemNo, newAmount);\r\n item.Count = newAmount;\r\n cartService.getExpectedDeliveryDateForCartItem(cartItem);\r\n }\r\n }\r\n\r\n function isShowExpectedDelivery() {\r\n ctrl.isShowExpected = false;\r\n ctrl.footerColspan = 5;\r\n cartService.items.forEach(function (item) {\r\n if (item.ExpectedDeliveryDate) {\r\n ctrl.isShowExpected = true;\r\n ctrl.footerColspan = 6;\r\n }\r\n });\r\n }\r\n\r\n //function expectedDeliveryDateShow(expectedDeliveryDate) {\r\n // var m = new Date();\r\n // //dd-MM-yyyy\r\n // var nowString =\r\n // m.getUTCFullYear() + '-' +\r\n // ('0' + (m.getUTCMonth() + 1)).slice(-2) + '-' +\r\n // ('0' + m.getUTCDate()).slice(-2);\r\n // var expectedDeliveryDateForCompare = expectedDeliveryDate.reverse();\r\n // if (expectedDeliveryDateForCompare >= nowString) {\r\n // return expectedDeliveryDate;\r\n // }\r\n // return 'Unknow';\r\n //}\r\n\r\n function removeSplashCode(string) {\r\n return string.replace(/\\//g,'-');\r\n }\r\n\r\n function removeCartItem(item){\r\n /* globals confirm: false */\r\n if(confirm($filter('translate')('Dette vil fjerne varen fra kurven. Er du sikker?'))){\r\n cartService.remove(item.ItemNo);\r\n var itemIndex = _.findIndex(ctrl.items, { 'ItemNo': item.ItemNo });\r\n if(itemIndex > -1){\r\n ctrl.items.splice(itemIndex, 1);\r\n }\r\n $rootScope.$broadcast('checkInfoExpectedDeliveryDate', cartService.items);\r\n }\r\n }\r\n\r\n function isLoggedIn(){\r\n return auth.isAuth();\r\n }\r\n\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n CheckoutBreadcrumbsController.$inject = [\"$state\"];\r\n angular.module('app.checkout').component('checkoutBreadcrumbs', {\r\n bindings: {\r\n },\r\n templateUrl: '/app/checkout/checkout-breadcrumbs/checkout-breadcrumbs.component.html',\r\n controller: CheckoutBreadcrumbsController\r\n });\r\n\r\n /* @ngInject */\r\n function CheckoutBreadcrumbsController($state){\r\n var ctrl = this;\r\n ctrl.$state = $state;\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n CheckoutAddressController.$inject = [\"checkoutService\", \"auth\", \"_\", \"$state\"];\r\n angular.module('app.checkout').component('checkoutAddress', {\r\n bindings: {\r\n },\r\n templateUrl: '/app/checkout/checkout-address/checkout-address.component.html',\r\n controller: CheckoutAddressController\r\n });\r\n\r\n /* @ngInject */\r\n function CheckoutAddressController(checkoutService, auth, _, $state){\r\n var ctrl = this;\r\n \r\n ctrl.service = checkoutService;\r\n ctrl.address = checkoutService.address;\r\n ctrl.deliveryAddress = checkoutService.deliveryAddress;\r\n ctrl.isLoggedIn = isLoggedIn;\r\n ctrl.countries = [];\r\n\r\n ctrl.autoCompleteCity = autoCompleteCity;\r\n\r\n ctrl.submitAddress = submitAddress;\r\n \r\n init();\r\n\r\n\r\n /////////////\r\n\r\n function init(){\r\n checkoutService.resetConfirmation();\r\n loadCountries();\r\n }\r\n\r\n function loadCountries(){\r\n checkoutService.getCountryCodes().then(function(countries){\r\n ctrl.countries = countries;\r\n });\r\n }\r\n\r\n function preloadAddress(){\r\n checkoutService.preloadAddress();\r\n }\r\n\r\n function isLoggedIn(){\r\n return auth.isAuth();\r\n }\r\n\r\n function autoCompleteCity(zipCode, field) {\r\n checkoutService.getCityFromZipCode(zipCode).then(function (city) {\r\n if (field === 'invoice') {\r\n ctrl.address.city = city;\r\n } else if (field === 'delivery') {\r\n ctrl.deliveryAddress.city = city;\r\n }\r\n });\r\n }\r\n\r\n function submitAddress(){\r\n checkoutService.saveAddress();\r\n $state.go('payment');\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n angular.module('app.checkout').component('orderCreditModal', {\r\n bindings: {\r\n close: '&',\r\n dismiss: '&'\r\n },\r\n template: [\r\n '<div class=\"modal-header\">',\r\n ' <h3 class=\"modal-title\" translate>Er du sikker pÃ¥ du vil gennemføre bestillingen og betale pr. faktura?</h3>',\r\n '</div>',\r\n '<div class=\"modal-footer\">',\r\n ' <button class=\"btn btn-primary\" type=\"button\" ng-click=\"$ctrl.close()\">',\r\n ' <span translates>Ja, foretag bestilling.</span>',\r\n ' </button>',\r\n ' <button class=\"btn btn-warning\" type=\"button\" ng-click=\"$ctrl.dismiss()\"',\r\n ' translate>Nej</button>',\r\n '</div>'\r\n ].join(''),\r\n controller: OrderCreditModalController\r\n });\r\n\r\n /* @ngInject */\r\n function OrderCreditModalController(){ }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n PaymentController.$inject = [\"$scope\", \"$window\", \"auth\", \"checkoutService\", \"_\", \"$uibModal\", \"viewData\", \"$translate\", \"cartService\"];\r\n angular.module('app.checkout').component('payment', {\r\n bindings: {\r\n },\r\n templateUrl: '/app/checkout/payment/payment.component.html',\r\n controller: PaymentController\r\n });\r\n\r\n /* @ngInject */\r\n function PaymentController($scope, $window, auth, checkoutService, _, $uibModal, viewData, $translate, cartService) {\r\n var ctrl = this;\r\n\r\n ctrl.service = checkoutService;\r\n ctrl.deliveryMethods = [];\r\n ctrl.parcelShops = [];\r\n ctrl.canOrderByCredit = auth.isCreditApproved();\r\n ctrl.creatingOrder = false;\r\n\r\n ctrl.isLoggedIn = isLoggedIn;\r\n\r\n ctrl.handleDeliveryMethodChange = handleDeliveryMethodChange;\r\n ctrl.orderByCredit = orderByCredit;\r\n ctrl.createAndPayOrder = createAndPayOrder;\r\n ctrl.validateOrder = validateOrder;\r\n ctrl.validateAddress = validateAddress;\r\n ctrl.validateCart = validateCart;\r\n ctrl.validateDelivery = validateDelivery;\r\n ctrl.validateParcelShop = validateParcelShop;\r\n ctrl.validateTermsConfirmation = validateTermsConfirmation;\r\n ctrl.isParcelShops = isParcelShops;\r\n ctrl.showInfoDelivery = false;\r\n\r\n init();\r\n\r\n /////////////\r\n\r\n function init() {\r\n checkoutService.resetConfirmation();\r\n //checkoutService.saveAddress();\r\n loadDeliveryMethods();\r\n isShowInforDelivery();\r\n checkoutService.deliveryMethod = null;\r\n }\r\n\r\n $scope.$on('checkInfoExpectedDeliveryDate', function (event, data) {\r\n isShowInforDelivery();\r\n });\r\n\r\n function loadDeliveryMethods() {\r\n checkoutService.getDeliveryMethods().then(function(deliveryMethods) {\r\n //if (deliveryMethods && !checkoutService.checkAuthorized()) {\r\n if (deliveryMethods) {\r\n checkoutService.loadCartItems().then(function() {\r\n var cartTotal = checkoutService.totalWithoutTax();\r\n deliveryMethods = deliveryMethods.concat({\r\n CountryCode: 'DK',\r\n DeliveryMethod: $translate.instant('OrderConfirmation.PickupShippingMethod').toUpperCase(),\r\n Cost: 0,\r\n MinimumTotalAmount: 0\r\n });\r\n ctrl.deliveryMethods = _.chain(deliveryMethods)\r\n .filter(function(x) { return x.MinimumTotalAmount <= cartTotal; })\r\n .groupBy('DeliveryMethod')\r\n .map(function(value, key) {\r\n return _.max(value, function(x) { return x.MinimumTotalAmount; });\r\n })\r\n .value();\r\n });\r\n } \r\n });\r\n //.finally(function () {\r\n // checkoutService.removeLoading();\r\n //});\r\n }\r\n\r\n function handleDeliveryMethodChange(deliveryMethod) {\r\n checkoutService.deliveryMethod = deliveryMethod;\r\n if (deliveryMethod.DeliveryMethod.toLowerCase().indexOf('pakkeshop') >= 0 ||\r\n deliveryMethod.DeliveryMethod.toLowerCase().indexOf('postipiste') >= 0 ||\r\n deliveryMethod.DeliveryMethod.toLowerCase().indexOf('serviceombud') >= 0 ||\r\n deliveryMethod.DeliveryMethod.toLowerCase().indexOf('parcelshop') >= 0 ||\r\n deliveryMethod.DeliveryMethod.toLowerCase().indexOf('bring postkontor') >= 0\r\n ) {\r\n findParcelShops(deliveryMethod.DeliveryMethod);\r\n }\r\n }\r\n function isParcelShops() {\r\n try {\r\n if (!checkoutService.deliveryMethod || !checkoutService.deliveryMethod.DeliveryMethod) {\r\n return false;\r\n }\r\n if (checkoutService.deliveryMethod.DeliveryMethod.toLowerCase().indexOf('pakkeshop') >= 0 ||\r\n checkoutService.deliveryMethod.DeliveryMethod.toLowerCase().indexOf('postipiste') >= 0 ||\r\n checkoutService.deliveryMethod.DeliveryMethod.toLowerCase().indexOf('serviceombud') >= 0 ||\r\n checkoutService.deliveryMethod.DeliveryMethod.toLowerCase().indexOf('parcelshop') >= 0 ||\r\n checkoutService.deliveryMethod.DeliveryMethod.toLowerCase().indexOf('bring postkontor') >= 0\r\n ) {\r\n return true;\r\n }\r\n } catch (e) {\r\n return false;\r\n } \r\n return false;\r\n }\r\n\r\n function isLoggedIn() {\r\n return auth.isAuth();\r\n }\r\n\r\n function findParcelShops(selectedCarrier) {\r\n var address = getDeliveryAddressForParcelShop();\r\n if (address) {\r\n checkoutService.findNearestParcelShop(address.street, address.zipcode, address.city, address.country, selectedCarrier)\r\n .then(function (parcelShops) {\r\n ctrl.parcelShops = parcelShops;\r\n }, function (error) {\r\n console.warn(error);\r\n toastr.error(error);\r\n });\r\n }\r\n }\r\n\r\n function getDeliveryAddressForParcelShop() {\r\n var address = ctrl.service.separateAddress ? ctrl.service.deliveryAddress : ctrl.service.address;\r\n if (address.street && address.zipcode && address.city && address.country) {\r\n return address;\r\n }\r\n }\r\n\r\n function orderByCredit() {\r\n if (!ctrl.canOrderByCredit) {\r\n toastr.error('Du er ikke godkendt til at bestille pÃ¥ kredit.');\r\n return;\r\n }\r\n\r\n var popup = $uibModal.open({\r\n animation: true,\r\n component: 'orderCreditModal',\r\n size: 's'\r\n });\r\n\r\n popup.result.then(function () {\r\n checkoutService.createCreditOrder(viewData.accepturl)\r\n .then(function (data) {\r\n // Redirect \r\n $window.location = '/Bekræftelse?orderid=' + data.OrderNo;\r\n }, function (error) {\r\n console.warn(error.data || error.statusText);\r\n toastr.error(error.data || error.statusText);\r\n });\r\n }, angular.noop);\r\n }\r\n\r\n function createAndPayOrder() {\r\n\r\n if (!validateOrder()) {\r\n return false;\r\n }\r\n checkoutService.showLoading();\r\n\r\n ctrl.creatingOrder = true;\r\n checkoutService.createOrder().then(function (result) {\r\n if (result.FailedItems != null && result.FailedItems.length > 0) {\r\n var items = result.FailedItems.map(function (item) { return item; });\r\n toastr.error($translate.instant('OrderConfirmation.FailToAddItems') + items);\r\n cartService.getExpectedDeliveryDate(items);\r\n checkoutService.removeLoading();\r\n }\r\n else {\r\n $window.location.href = result.CoolPayLink;\r\n }\r\n }, function (error) {\r\n console.warn(error);\r\n checkoutService.removeLoading();\r\n toastr.error(error.data || error);\r\n }).finally(function () {\r\n ctrl.creatingOrder = false;\r\n });\r\n }\r\n\r\n function validateOrder() {\r\n return validateAddress() &&\r\n validateCart() &&\r\n validateDelivery() &&\r\n validateParcelShop() &&\r\n validateTermsConfirmation();\r\n }\r\n\r\n function validateAddress() {\r\n return checkoutService.isAddressValid();\r\n }\r\n\r\n function validateCart() {\r\n return checkoutService.validateCart();\r\n }\r\n\r\n function validateDelivery() {\r\n return checkoutService.deliveryMethod;\r\n }\r\n\r\n function validateParcelShop() {\r\n return (checkoutService.deliveryMethod.DeliveryMethod.toLowerCase() !== 'gls pakkeshop' || checkoutService.selectedParcelShop);\r\n }\r\n\r\n function validateTermsConfirmation() {\r\n return checkoutService.termConfirmation;\r\n }\r\n\r\n function isShowInforDelivery() {\r\n ctrl.showInfoDelivery = false;\r\n cartService.items.forEach(function (item) {\r\n if (item.ExpectedDeliveryDate) {\r\n ctrl.showInfoDelivery = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n SearchFilterGroupController.$inject = [\"$translate\"];\r\n angular.module('app.search').component('searchFilterGroup', {\r\n bindings: {\r\n groupName: '<',\r\n filterItems: '<',\r\n selectedItems: '<',\r\n onChange: '&'\r\n },\r\n templateUrl: '/app/search/search-filter/search-filter-group.component.html',\r\n controller: SearchFilterGroupController\r\n });\r\n\r\n /* @ngInject */\r\n function SearchFilterGroupController($translate){\r\n var ctrl = this;\r\n\r\n ctrl.defaultMaxItems = 8;\r\n ctrl.showingAll = false;\r\n ctrl.maxItems = ctrl.defaultMaxItems;\r\n ctrl.toggleCheckbox = toggleCheckbox;\r\n ctrl.toggleShowAll = toggleShowAll;\r\n ctrl.filterItems = [];\r\n ctrl.filterTranslationMap = {};\r\n\r\n ctrl.$onChanges = handleChanges;\r\n \r\n /////////////\r\n\r\n\r\n function handleChanges(changeObject){\r\n if(changeObject.filterItems){\r\n ctrl.filterItems = ctrl.filterItems && ctrl.filterItems\r\n .filter(function(filter){\r\n return filter.Key && filter.Key.length > 0;\r\n })\r\n .map(function(filter){\r\n filter.HasValue = (filter.Value.m_Item1 && filter.Value.m_Item1 > 0) || filter.Value > 0;\r\n return filter;\r\n });\r\n\r\n if (ctrl.groupName === 'Search.sfType' || ctrl.groupName === 'Search.sfCategory') {\r\n $translate.onReady(function() {\r\n translate();\r\n });\r\n }\r\n }\r\n }\r\n\r\n function translate(){\r\n ctrl.filterTranslationMap = ctrl.filterItems.reduce(function(filterMap, filter, index){\r\n var key = prefixTranslationKey(\r\n encodeTranslationKey(filter.Key));\r\n filterMap[key] = index;\r\n return filterMap;\r\n }, {});\r\n\r\n console.log('W00t!', ctrl.filterTranslationMap);\r\n\r\n return $translate(Object.keys(ctrl.filterTranslationMap)).then(function(translation){\r\n console.log(translation);\r\n Object.keys(translation).forEach(function(translationKey){\r\n var index = ctrl.filterTranslationMap[translationKey];\r\n var item = ctrl.filterItems[index];\r\n if(item){\r\n item.text = translation[translationKey];\r\n }\r\n });\r\n });\r\n }\r\n\r\n function prefixTranslationKey(key){\r\n if (ctrl.groupName === 'Search.sfType') {\r\n return 'ProductType.' + key;\r\n } else if (ctrl.groupName === 'Search.sfCategory') {\r\n return 'ProductCategory.' + key;\r\n }else {\r\n return key;\r\n }\r\n }\r\n\r\n function encodeTranslationKey(key){\r\n return key.replace(/[\\s\\&\\-\\/_\\\\]+/g, '_');\r\n }\r\n\r\n function toggleCheckbox(filter){\r\n var index = ctrl.selectedItems.indexOf(filter);\r\n \r\n // Remove if exists; otherwise push to array\r\n if(index > -1){\r\n ctrl.selectedItems.splice(index, 1);\r\n } else {\r\n ctrl.selectedItems.push(filter);\r\n }\r\n\r\n if(ctrl.onChange){\r\n ctrl.onChange();\r\n }\r\n }\r\n\r\n function toggleShowAll(){\r\n if(ctrl.showingAll){\r\n ctrl.maxItems = ctrl.defaultMaxItems;\r\n }else{\r\n ctrl.maxItems = ctrl.filterItems.length;\r\n }\r\n ctrl.showingAll = !ctrl.showingAll;\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n SearchFilterTagGroupController.$inject = [\"$translate\"];\r\n angular.module('app.search').component('searchFilterTagGroup', {\r\n bindings: {\r\n selectedFilters: '<',\r\n onChange: '&'\r\n },\r\n templateUrl: '/app/search/search-filter/search-filter-tag-group.component.html',\r\n controller: SearchFilterTagGroupController\r\n });\r\n\r\n /* @ngInject */\r\n function SearchFilterTagGroupController($translate){\r\n var ctrl = this;\r\n\r\n ctrl.removeItem = removeItem;\r\n ctrl.translateMap = translateMap;\r\n /////////////\r\n\r\n function removeItem(index, filterType){\r\n ctrl.selectedFilters[filterType].splice(index, 1);\r\n if(ctrl.onChange){\r\n ctrl.onChange();\r\n }\r\n }\r\n\r\n function translateMap(groupName, filter) {\r\n var key = prefixTranslationKey(\r\n encodeTranslationKey(filter), groupName);\r\n return $translate.instant(key);\r\n }\r\n\r\n function encodeTranslationKey(key) {\r\n return key.replace(/[\\s\\&\\-\\/_\\\\]+/g, '_');\r\n }\r\n\r\n function prefixTranslationKey(key, groupName) {\r\n if (groupName === 'type') {\r\n return 'ProductType.' + key;\r\n } else if (groupName === 'category') {\r\n return 'ProductCategory.' + key;\r\n } else {\r\n return key;\r\n }\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n angular.module('app.search').component('searchFilter', {\r\n bindings: {\r\n searchFilters: '<',\r\n selectedFilters: '<',\r\n onChange: '&'\r\n },\r\n templateUrl: '/app/search/search-filter/search-filter.component.html',\r\n controller: SearchFilterController\r\n });\r\n\r\n /* @ngInject */\r\n function SearchFilterController(){\r\n var ctrl = this;\r\n \r\n ctrl.handleChange = function(){\r\n if(ctrl.onChange){\r\n ctrl.onChange();\r\n }\r\n };\r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n SearchResultController.$inject = [\"auth\", \"Lightbox\", \"cartService\"];\r\n angular.module('app.search').component('searchResult', {\r\n bindings: {\r\n results: '<',\r\n isLoading: '<'\r\n },\r\n templateUrl: '/app/search/search-result/search-result.component.html',\r\n controller: SearchResultController\r\n });\r\n\r\n /* @ngInject */\r\n function SearchResultController(auth, Lightbox, cartService) {\r\n var ctrl = this;\r\n\r\n ctrl.getDetailsUrl = cartService.getDetailsUrl;\r\n ctrl.showPrice = showPrice;\r\n ctrl.openThumbnail = openThumbnail;\r\n ctrl.getHrefForSendMail = getHrefForSendMail;\r\n ctrl.removeSplashCode = removeSplashCode;\r\n /////////////\r\n\r\n\r\n function removeSplashCode(string) {\r\n return string.replace(/\\//g, '-');\r\n }\r\n\r\n function showPrice() {\r\n return !auth.isAuth();\r\n }\r\n\r\n function openThumbnail(event, itemNo) {\r\n event.preventDefault();\r\n Lightbox.openModal([{ url: '/images/products/' + itemNo.replace(/\\//g, '-') + '.jpg' }], 0);\r\n }\r\n\r\n function getHrefForSendMail() {\r\n var dataTranslate = $('#mailToWithSubject').attr('value');\r\n var href = 'mailto:info@cjdele.dk?subject=' + dataTranslate + encodeURIComponent(window.location.href.split('/').pop());\r\n return href;\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n SearchInputController.$inject = [\"searchService\", \"$location\", \"viewData\", \"$window\"];\r\n angular.module('app.search').component('searchInput', {\r\n bindings: {\r\n },\r\n templateUrl: '/app/search/search-input/search-input.component.html',\r\n controller: SearchInputController\r\n });\r\n\r\n /* @ngInject */\r\n function SearchInputController(searchService, $location, viewData, $window){\r\n var ctrl = this;\r\n \r\n ctrl.searchQuery = '';\r\n ctrl.typeaheadLimit = 10;\r\n ctrl.typeahead = typeahead;\r\n ctrl.typeaheadInputFormat = typeaheadInputFormat;\r\n ctrl.selectResult = selectResult;\r\n ctrl.getSearchUrl = getSearchUrl;\r\n ctrl.getSearchQuery = getSearchQuery;\r\n\r\n init();\r\n\r\n /////////////\r\n\r\n function init() {\r\n var searchString = '';\r\n if (typeof (viewData.searchString) !== 'undefined') {\r\n searchString = viewData.searchString.replace(/--/g, '/');\r\n }\r\n ctrl.searchQuery = searchString;\r\n }\r\n\r\n function typeahead(query) {\r\n return searchService.typeaheadV2(query, ctrl.typeaheadLimit).then(function (data) {\r\n var result = [];\r\n \r\n result = mapTypeaheadResult(result, 'manufacturer', data.Manufacturers);\r\n result = mapTypeaheadResult(result, 'category', data.Categories);\r\n result = mapTypeaheadResult(result, 'model', data.Models);\r\n result = mapTypeaheadResult(result, 'no', data.Nos);\r\n result = mapTypeaheadResult(result, 'part', data.Parts);\r\n\r\n return result;\r\n });\r\n }\r\n\r\n function mapTypeaheadResult(arr, type, data){\r\n return arr.concat(data.map(function(x){ \r\n return { type: type, value: x };\r\n }));\r\n }\r\n \r\n function typeaheadInputFormat(input){\r\n if(input && input.type)\r\n {\r\n switch(input.type){\r\n case 'manufacturer':\r\n return input.value;\r\n case 'model':\r\n return input.value.Model;\r\n case 'no':\r\n return input.value.No;\r\n case 'category':\r\n case 'part':\r\n return input.value.Description;\r\n default:\r\n return input.type;\r\n }\r\n }\r\n return input;\r\n }\r\n\r\n function getSearchUrl() {\r\n $window.location.href = '/q/' + encodeURIComponent(ctrl.searchQuery.replace(/\\//g, '--'));\r\n }\r\n\r\n function getSearchQuery() {\r\n return '';\r\n //return $location.search();\r\n }\r\n \r\n function selectResult(item) {\r\n var type = item.type;\r\n var value = item.value;\r\n switch(type){\r\n case 'manufacturer':\r\n window.location = '/m/' + value.toLowerCase();\r\n break;\r\n case 'category':\r\n window.location = '/c/' + value.Code.toLowerCase();\r\n break;\r\n case 'model':\r\n if(value.No){\r\n window.location = '/q/?mo=' + value.Model.toLowerCase() + '&no=' + value.No.toLowerCase();\r\n }else{\r\n window.location = '/q/?mo=' + value.Model.toLowerCase();\r\n }\r\n break;\r\n case 'no':\r\n if(value.Model){\r\n window.location = '/q/?no=' + value.No.toLowerCase() + '&mo=' + value.Model.toLowerCase();\r\n }else{\r\n window.location = '/q/?no=' + value.No.toLowerCase();\r\n }\r\n break;\r\n case 'part':\r\n window.location = '/Detaljer?itemNo=' + value.ItemNo;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n angular.module('app.search').component('searchResultPagination', {\r\n bindings: { \r\n pagingData: '<',\r\n onChange: '&'\r\n },\r\n templateUrl: '/app/search/search-result-pagination/search-result-pagination.component.tpl.html',\r\n controller: SearchResultPaginationController\r\n });\r\n\r\n /* @ngInject */\r\n function SearchResultPaginationController(){\r\n var ctrl = this;\r\n\r\n ctrl.handleChange = function(){\r\n if(ctrl.onChange){\r\n ctrl.onChange();\r\n }\r\n };\r\n\r\n ctrl.getPagingStats = function(){\r\n return {\r\n itemFrom: ((ctrl.pagingData.currentPage-1) * ctrl.pagingData.itemsPerPage) + 1,\r\n itemTo: Math.min(ctrl.pagingData.currentPage * ctrl.pagingData.itemsPerPage, ctrl.pagingData.totalItems),\r\n resultsNum: ctrl.pagingData.totalItems\r\n };\r\n };\r\n }\r\n\r\n})();","/* globals Image */\r\n(function () {\r\n 'use strict';\r\n\r\n angular.module('app').directive('checkImage', checkImage); \r\n \r\n checkImage.$inject = ['$q', '$http'];\r\n\r\n function checkImage($q, $http, $timeout) {\r\n return {\r\n restrict: 'A',\r\n compile: function(){\r\n return {\r\n pre: function (scope, element, attrs) {\r\n var url = attrs.checkImage ? attrs.checkImage : '/images/noimg.jpg';\r\n attrs.$observe('ngSrc', function (ngSrc) {\r\n var deferred = $q.defer();\r\n var image = new Image();\r\n image.onerror = function () {\r\n deferred.resolve(true);\r\n element.attr('src', url); // set default image\r\n element.attr('title', null);\r\n element.attr('alt', null);\r\n $('#zoomImage').remove();\r\n element.closest('.zoomImage').removeAttr('ng-click').removeAttr('title');\r\n element.closest('.zoomImage').off('click');\r\n scope.$digest();\r\n };\r\n image.onload = function () {\r\n deferred.resolve(true);\r\n };\r\n image.src = ngSrc;\r\n return deferred.promise;\r\n });\r\n }\r\n };\r\n }\r\n };\r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('app')\r\n .directive('cookieConsent', cookieConsent);\r\n\r\n\r\n cookieConsent.$inject = [];\r\n\r\n function cookieConsent() {\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n csMessage: '@csMessage',\r\n csReadmoreUrl: '@csReadmoreUrl',\r\n csReadmore: '@csReadmore',\r\n csAccept: '@csAccept'\r\n },\r\n replace: true,\r\n template: '<div class=\"cookie-consent\" style=\"display: none;\">' +\r\n '<div class=\"cookie-consent-icon-container\"><span class=\"cookie-consent-icon\"></span></div>' +\r\n '<div class=\"cookie-consent-message\">{{csMessage}}</div>' +\r\n '<div class=\"cookie-consent-buttons\">' +\r\n '<a ng-if=\"csReadmoreUrl\" class=\"btn btn-consent\" ng-href=\"{{csReadmoreUrl}}\" title=\"{{ \\'Læs mere om vores brug af cookies\\' | translate }}\">' +\r\n '{{csReadmore}}</a>' +\r\n '<button class=\"btn btn-consent\" ng-click=\"closeConsent()\">{{csAccept}}</button>' +\r\n '</div></div>',\r\n controller: cookieConsentController,\r\n link: function (scope, el, attrs) { }\r\n };\r\n }\r\n\r\n cookieConsentController.$inject = ['$scope', '$element', '$window'];\r\n\r\n function cookieConsentController($scope, $element, $window) {\r\n\r\n var shouldShowMessageStorageKey = 'cookieConsentDirective.shouldShowMessage';\r\n\r\n\r\n // Setup defaults\r\n $scope.csAccept = $scope.csAccept || 'Accept';\r\n $scope.csReadmore = $scope.csReadmore || 'Read more';\r\n $scope.csMessage = $scope.csMessage || 'To give you the best experience, this site uses cookies. ' +\r\n 'Continuing to use this site means you agree to our use of cookies. ' +\r\n 'If you would like to learn more about the cookies we use, please click \\'' +\r\n $scope.csReadmore + '\\'.';\r\n\r\n $scope.showConsent = showConsent;\r\n $scope.closeConsent = closeConsent;\r\n\r\n initialize();\r\n\r\n\r\n function initialize() {\r\n if (shouldShowMessage()) {\r\n showConsent();\r\n }\r\n }\r\n\r\n function showConsent() {\r\n $element.show();\r\n }\r\n\r\n function closeConsent() {\r\n $element.slideUp();\r\n\r\n var storage = getStorage();\r\n if (!storage) { return; }\r\n\r\n storage[shouldShowMessageStorageKey] = false;\r\n try {\r\n if (document.getElementsByTagName('iframe')[0].src.indexOf('crowdio.com') > -1) {\r\n document.getElementsByTagName('iframe')[0].style.bottom = '10px';\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n } \r\n }\r\n\r\n function shouldShowMessage() {\r\n var storage = getStorage();\r\n if (!storage) {\r\n return true;\r\n }\r\n return storage[shouldShowMessageStorageKey] === 'false' ? false : true;\r\n }\r\n\r\n function getStorage() {\r\n if ('localStorage' in $window && $window.localStorage !== null) {\r\n return $window.localStorage;\r\n } else if ('sessionStorage' in $window && $window.sessionStorage !== null) {\r\n return $window.sessionStorage;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('app')\r\n .directive('validation', validation);\r\n\r\n\r\n validation.$inject = [];\r\n\r\n function validation() {\r\n return {\r\n restrict: 'A',\r\n require: '^form',\r\n scope: { validation: '@validation' },\r\n link: function (scope, el, attrs, formCtrl) {\r\n // find the text box element, which has the 'name' attribute\r\n var inputEl = el[0].querySelector('[name]');\r\n if (scope.validation) {\r\n inputEl = $(scope.validation).get(0);\r\n }\r\n\r\n // convert the native text box element to an angular element\r\n var inputNgEl = angular.element(inputEl);\r\n // get the name on the text box so we know the property to check\r\n // on the form controller\r\n var inputName = inputNgEl.attr('name');\r\n\r\n // only apply the has-error class after the user leaves the text box or the value is changed\r\n inputNgEl.bind('change', function () {\r\n el.toggleClass('has-error', formCtrl[inputName].$invalid);\r\n });\r\n inputNgEl.bind('blur', function () {\r\n el.toggleClass('has-error', formCtrl[inputName].$invalid);\r\n });\r\n\r\n scope.$on('show-errors-check-validity', function () {\r\n el.toggleClass('has-error', formCtrl[inputName].$invalid);\r\n });\r\n\r\n\r\n // On destruction of directive, clear change event handler.\r\n scope.$on('$destroy', function () {\r\n inputNgEl.off('change');\r\n inputNgEl.off('blur');\r\n });\r\n }\r\n };\r\n }\r\n\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('app')\r\n .service('auth', authService);\r\n\r\n\r\n authService.$inject = ['viewData'];\r\n\r\n function authService(viewData) {\r\n\r\n\r\n var InnerAuthService = function () { };\r\n\r\n InnerAuthService.prototype.user = viewData.user;\r\n InnerAuthService.prototype.isAuth = isAuth;\r\n InnerAuthService.prototype.isCreditApproved = isCreditApproved;\r\n\r\n return new InnerAuthService();\r\n\r\n\r\n ///////////// Implementation\r\n\r\n\r\n function isAuth() {\r\n return viewData.user && viewData.user !== '';\r\n }\r\n\r\n function isCreditApproved() {\r\n return isAuth && viewData.canOrderByCredit === true;\r\n }\r\n\r\n }\r\n\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n CartService.$inject = [\"localStorageService\", \"$window\", \"_\", \"$uibModal\", \"$translate\", \"searchService\", \"$rootScope\"];\r\n angular.module('app.shared').service('cartService', CartService);\r\n\r\n /* @ngInject */\r\n function CartService(localStorageService, $window, _, $uibModal, $translate, searchService, $rootScope){\r\n var service = this;\r\n var localStorageKey = 'shoppingCart';\r\n var localStorageKeyRelatedDisplay = 'relatedDisplay';\r\n\r\n service.items = [];\r\n\r\n service.getTotalItemCount = getTotalItemCount;\r\n service.addToCart = addToCart;\r\n service.clearCart = clearCart;\r\n service.get = get;\r\n service.setAmount = setAmount;\r\n service.remove = remove;\r\n service.saveCartToStorage = saveCartToStorage;\r\n service.showModal = showGotoCheckoutModal;\r\n service.addRelatedToCart = addRelatedToCart;\r\n service.getDetailsUrl = getDetailsUrl;\r\n service.updateRelatedDisplay = updateRelatedDisplay;\r\n service.getExpectedDeliveryDate = getExpectedDeliveryDate;\r\n service.getExpectedDeliveryDateForCartItem = getExpectedDeliveryDateForCartItem;\r\n\r\n loadCartFromStorage();\r\n \r\n\r\n /////////////\r\n\r\n function loadCartFromStorage(){\r\n service.items = localStorageService.get(localStorageKey) || [];\r\n }\r\n\r\n function getExpectedDeliveryDate(checkItems) {\r\n var requests = generateRequestModel(service.items, checkItems);\r\n searchService.getExpectedDeliveryDate(requests)\r\n .then(function (res) {\r\n if (res !== null) {\r\n service.items.forEach(function (item) {\r\n item.ExpectedDeliveryDate = res.find(function (y) {\r\n if (y.ItemNo === item.ItemNo) {\r\n return y;\r\n }\r\n }).ExpectedDeliveryDate;\r\n item.ExpectedDeliveryDateShow = res.find(function (y) {\r\n if (y.ItemNo === item.ItemNo) {\r\n return y;\r\n }\r\n }).ExpectedDeliveryDateShow;\r\n });\r\n localStorageService.set(localStorageKey, service.items);\r\n $rootScope.$broadcast('updatedExpectedDeliveryDate', service.items);\r\n $rootScope.$broadcast('checkInfoExpectedDeliveryDate', service.items);\r\n }\r\n });\r\n }\r\n\r\n function getExpectedDeliveryDateForCartItem(cartItem) {\r\n var requests = generateRequestModel([cartItem]);\r\n searchService.getExpectedDeliveryDate(requests)\r\n .then(function (res) {\r\n if (res !== null) {\r\n cartItem.ExpectedDeliveryDate = res[0].ExpectedDeliveryDate;\r\n cartItem.ExpectedDeliveryDateShow = res[0].ExpectedDeliveryDateShow;\r\n\r\n }\r\n else {\r\n cartItem.ExpectedDeliveryDate = '';\r\n cartItem.ExpectedDeliveryDateShow = '';\r\n }\r\n var item = _.find(service.items, { 'ItemNo': cartItem.ItemNo });\r\n item.ExpectedDeliveryDate = cartItem.ExpectedDeliveryDate;\r\n item.ExpectedDeliveryDateShow = cartItem.ExpectedDeliveryDateShow;\r\n localStorageService.set(localStorageKey, service.items);\r\n $rootScope.$broadcast('updatedExpectedDeliveryDateForCartItem', cartItem);\r\n $rootScope.$broadcast('checkInfoExpectedDeliveryDate', null);\r\n });\r\n }\r\n\r\n function generateRequestModel(items, checkItems) {\r\n var result = _.map(items, function (item) {\r\n var index = -1;\r\n if (checkItems) {\r\n index = checkItems.indexOf(item.ItemNo);\r\n }\r\n return {\r\n ItemNo: item.ItemNo,\r\n Amount: item.Count,\r\n MustCheck: index >= 0 ? 1 : 0\r\n };\r\n });\r\n return result;\r\n }\r\n\r\n function saveCartToStorage() {\r\n service.items.sort(function (a, b) { return a.SalesPrice - b.SalesPrice; });\r\n localStorageService.set(localStorageKey, service.items);\r\n }\r\n\r\n function getTotalItemCount(){\r\n return _.reduce(service.items, function (result, part) {\r\n return result + part.Count;\r\n }, 0);\r\n }\r\n\r\n function addToCart(item, amount){\r\n addCartLocal(item, amount);\r\n\r\n var notDisplayRelated = localStorageService.get(localStorageKeyRelatedDisplay);\r\n\r\n if (notDisplayRelated === null || notDisplayRelated === false) {\r\n //get related items\r\n searchService.getRelatedItems(item.ItemNo, 3)\r\n .then(function (res) {\r\n if (res !== null) {\r\n showGotoCheckoutModalNew(res);\r\n }\r\n else {\r\n showGotoCheckoutModal();\r\n }\r\n });\r\n }\r\n else {\r\n showGotoCheckoutModal();\r\n }\r\n }\r\n\r\n function addRelatedToCart(item, amount) {\r\n addCartLocal(item, amount);\r\n }\r\n\r\n function addCartLocal(item, amount) {\r\n amount = Math.max(1, amount);\r\n loadCartFromStorage();\r\n\r\n var oldItem = _.find(service.items, { 'ItemNo': item.ItemNo });\r\n if (oldItem) {\r\n oldItem.Count += amount;\r\n } else {\r\n var newItem = mapItem(item, amount);\r\n service.items.push(newItem);\r\n }\r\n\r\n saveCartToStorage();\r\n }\r\n\r\n function getDetailsUrl(part) {\r\n if (!part) {\r\n return '';\r\n }\r\n if (part.Manufacturer && part.Type) {\r\n return '/' + part.Manufacturer + '/' + $window.encodeTypeCode(translateMap(part.Type)) + '/' + $window.encodeDescription(encodeTranslationKey(part.Description)) + '-' + $window.encodeTypeCode(part.ItemNo);\r\n } else if (part.Description){\r\n return '/p/' + $window.encodeTypeCode(encodeTranslationKey(part.Description)) + '-' + $window.encodeTypeCode(part.ItemNo);\r\n }\r\n else{\r\n return '/detaljer?itemNo=' + part.ItemNo;\r\n }\r\n }\r\n\r\n function translateMap(type) {\r\n var productTypeKey = 'ProductType.' + encodeTranslationKey(type);\r\n return $translate.instant(productTypeKey);\r\n }\r\n\r\n function encodeTranslationKey(key) {\r\n return key.replace(/[\\s\\&\\-\\/_\\\\]+/g, '_');\r\n }\r\n\r\n\r\n function clearCart(){\r\n service.items = [];\r\n localStorageService.remove(localStorageKey);\r\n }\r\n\r\n function mapItem(item, amount){\r\n return {\r\n 'ItemNo': item.ItemNo,\r\n 'Count': amount,\r\n 'SalesPrice': item.SalesPrice,\r\n 'Description': item.Description,\r\n 'User': $window.userAuthorized\r\n };\r\n }\r\n\r\n function showGotoCheckoutModal() {\r\n //new confirm modal\r\n $('html, body').animate({ scrollTop: 0 }, 'fast');\r\n $('div.add-to-cart-success').fadeIn(500);\r\n clearTimeout(service.modalConfirmTimeout);\r\n service.modalConfirmTimeout = setTimeout(function () {\r\n $('div.add-to-cart-success').fadeOut(500);\r\n }, 3000);\r\n //var popup = $uibModal.open({\r\n // animation: true,\r\n // component: 'confirmCartModal',\r\n // size: 's'\r\n //});\r\n\r\n //popup.result.then(function () {\r\n // $window.location = '/Kurv';\r\n //}, angular.noop);\r\n }\r\n\r\n function showGotoCheckoutModalNew(model){\r\n var popup = $uibModal.open({\r\n animation: true,\r\n component: 'confirmCartRelatedModal',\r\n size: 's',\r\n resolve: {\r\n items:function() {\r\n return model;\r\n }\r\n }\r\n });\r\n\r\n popup.result.then(function () { \r\n $window.location = '/Kurv';\r\n }, angular.noop);\r\n }\r\n\r\n function get(itemNo){\r\n return _.find(service.items, { 'ItemNo': itemNo });\r\n }\r\n\r\n function setAmount(itemNo, amount){\r\n var item = _.find(service.items, { 'ItemNo': itemNo });\r\n if(item){\r\n item.Count = amount;\r\n saveCartToStorage();\r\n }\r\n }\r\n\r\n function remove(itemNo){\r\n var index = _.findIndex(service.items, { 'ItemNo': itemNo });\r\n if(index > -1){\r\n service.items.splice(index, 1);\r\n \r\n saveCartToStorage();\r\n }\r\n }\r\n\r\n function updateRelatedDisplay(status) {\r\n localStorageService.set(localStorageKeyRelatedDisplay, status);\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('app')\r\n .service('cartPopover', cartPopover);\r\n\r\n\r\n cartPopover.$inject = ['$timeout'];\r\n\r\n function cartPopover($timeout) {\r\n\r\n\r\n var InnerCartPopover = function () { };\r\n\r\n InnerCartPopover.popover;\r\n InnerCartPopover.promise;\r\n\r\n InnerCartPopover.prototype.showPopover = showPopover;\r\n\r\n return new InnerCartPopover(); \r\n\r\n\r\n\r\n ///////////// Implementation\r\n\r\n function showPopover(item, elem) {\r\n // Destroy any previous popovers\r\n if (InnerCartPopover.popover) {\r\n destroy();\r\n }\r\n\r\n if (!elem || !item) {\r\n return;\r\n }\r\n\r\n // Create DOM and events\r\n create(item, elem);\r\n // Show the popover\r\n show();\r\n\r\n // Hide the popover on timeout\r\n InnerCartPopover.promise = $timeout(function(){\r\n hide();\r\n },2000);\r\n } \r\n\r\n\r\n function create(item, elem) {\r\n // Get variables\r\n var buttonPos = elem.position();\r\n var buttonHeight = elem.innerHeight();\r\n var buttonWidth = elem.outerWidth(true);\r\n var buttonInnerWidth = elem.innerWidth();\r\n\r\n // Insert HTML for the popover - hidden but still \"visible\" from jquery point of view\r\n var popover = $(\r\n '<div class=\"popover bottom\" role=\"tooltip\" style=\"display: block; visibility: hidden;\">' +\r\n ' <div class=\"arrow\"></div>'+\r\n ' <div class=\"popover-content\">Du har lagt 1x '+ item.Description +' i kurven.</div>' +\r\n '</div>'\r\n ).insertAfter(elem); \r\n\r\n // Change position of the popover\r\n popover.css('position', 'absolute');\r\n popover.css('top', buttonPos.top + buttonHeight);\r\n popover.css('left', buttonPos.left + buttonWidth - (popover.outerWidth(true)));\r\n popover.data('offset-top', popover.position().top);\r\n\r\n // Grab the arrow\r\n var popoverArrow = popover.children('.arrow');\r\n // Change position of arrow\r\n popoverArrow.css('left', popover.innerWidth() - (buttonInnerWidth / 2));\r\n\r\n // Limit the posision of the popover to always be shown on screen.\r\n limitPopover(popover);\r\n $(document).on('scroll',function () {\r\n limitPopover(popover);\r\n });\r\n\r\n // Reset visibility attributes\r\n popover.css('display', '');\r\n popover.css('visibility', '');\r\n\r\n // Store as singleton\r\n InnerCartPopover.popover = popover;\r\n }\r\n\r\n function show() {\r\n InnerCartPopover.popover.fadeIn();\r\n }\r\n\r\n function hide() {\r\n InnerCartPopover.popover.fadeOut();\r\n }\r\n function destroy() {\r\n // Kill the timeout\r\n $timeout.cancel(InnerCartPopover.promise);\r\n // Fade out\r\n InnerCartPopover.popover.fadeOut();\r\n // Remove the scroll event\r\n $(document).off('scroll');\r\n // Remove the popover DOM\r\n InnerCartPopover.popover.remove();\r\n // Remove jquery reference to the now removed DOM from the singleton\r\n InnerCartPopover.popover = null;\r\n\r\n // We now got a clean slate.\r\n }\r\n\r\n function limitPopover(elem) {\r\n var offset = elem.offset();\r\n if (offset) {\r\n var top = elem.data('offset-top');\r\n elem.css('position', 'absolute');\r\n elem.css('top', Math.max(top, $(document).scrollTop() - (110 - top)));\r\n\r\n }\r\n }\r\n }\r\n\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n PriceService.$inject = [\"$http\", \"$q\"];\r\n angular.module('app')\r\n .service('priceService', PriceService);\r\n\r\n /* @ngInject */\r\n function PriceService($http, $q) {\r\n var service = this;\r\n var baseUrl = 'https://api.exchangerate.host/';\r\n var deferredAbort;\r\n\r\n service.getAllCurrency = getAllCurrency;\r\n service.getExchangeRates = getExchangeRates;\r\n\r\n /////////////\r\n\r\n function getAllCurrency() {\r\n if (deferredAbort) { deferredAbort.resolve(); }\r\n deferredAbort = $q.defer();\r\n\r\n return $http.get(baseUrl +'latest', {\r\n timeout: deferredAbort.promise,\r\n params: {\r\n 'base': 'EUR'\r\n }\r\n })\r\n .then(function(response){ return response.data; })\r\n .finally(function(){ deferredAbort = null; });\r\n }\r\n\r\n function getExchangeRates(base) {\r\n if (deferredAbort) { deferredAbort.resolve(); }\r\n deferredAbort = $q.defer();\r\n\r\n return $http.get(baseUrl + 'latest', {\r\n timeout: deferredAbort.promise,\r\n params: {\r\n 'base': base\r\n }\r\n })\r\n .then(function (response) { return response.data; })\r\n .finally(function () { deferredAbort = null; });\r\n }\r\n\r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('app')\r\n .filter('price', price);\r\n\r\n\r\n price.$inject = ['$filter'];\r\n\r\n function price($filter) {\r\n return function (input, symbol, fractionSize) {\r\n return (symbol || 'DKK ') + $filter('number')(input, fractionSize || 2);\r\n };\r\n }\r\n\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('app')\r\n .filter('titleCase', titleCase);\r\n\r\n\r\n titleCase.$inject = ['$filter'];\r\n\r\n function titleCase($filter) {\r\n return function (input) {\r\n\r\n return input.replace(/\\w\\S*/g, function (txt) {\r\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\r\n });\r\n\r\n };\r\n }\r\n\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n angular.module('app.shared')\r\n .filter('urlEncode', UrlEncodeFilter);\r\n\r\n /* @ngInject */\r\n function UrlEncodeFilter(){\r\n return function(input){\r\n return encodeURIComponent(input);\r\n };\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n AddToCartButtonController.$inject = [\"cartService\"];\r\n angular.module('app.shared').component('addToCartButton', {\r\n bindings: { \r\n item: '<',\r\n pickAmount: '<',\r\n buttonClass: '<'\r\n },\r\n template: [\r\n '<div class=\"add-to-cart-control\">',\r\n '<input min=\"1\" ng-if=\"$ctrl.pickAmount\" type=\"number\" class=\"add-to-cart-amount\" ng-model=\"$ctrl.amount\" />',\r\n '<button class=\"btn btn-add-to-cart\" ng-click=\"$ctrl.addToCart($event)\" ng-disabled=\"$ctrl.isAdding\">',\r\n '<i class=\"fa fa-shopping-cart fa-lg\"></i> <span>{{ \"Cart.Add\" | translate }}</span>',\r\n '</button>',\r\n '</div>'\r\n ].join(''),\r\n controller: AddToCartButtonController\r\n });\r\n\r\n /* @ngInject */\r\n function AddToCartButtonController(cartService){\r\n var ctrl = this;\r\n ctrl.pickAmount = angular.isDefined(ctrl.pickAmount) ? ctrl.pickAmount : false;\r\n \r\n ctrl.amount = 1;\r\n ctrl.isAdding = false;\r\n ctrl.addToCart = addToCart;\r\n\r\n\r\n /////////////\r\n\r\n function addToCart($event){\r\n $event.stopPropagation();\r\n $event.preventDefault();\r\n ctrl.isAdding = true;\r\n\r\n cartService.addToCart(ctrl.item, Math.max(1, ctrl.amount));\r\n \r\n ctrl.isAdding = false;\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n AsideMenuController.$inject = [\"$rootScope\", \"$element\", \"$timeout\"];\r\n angular.module('app').component('asideMenu', {\r\n bindings: {\r\n asideClass: '@',\r\n buttonClass: '@',\r\n overlay: '@?',\r\n ref: '='\r\n },\r\n template: [\r\n '<div class=\"aside-menu\" ng-class=\"$ctrl.asideClass\">',\r\n '<div class=\"aside-menu-content\">',\r\n '<ng-transclude></ng-transclude>',\r\n '</div>',\r\n '</div>'\r\n ].join(''),\r\n controller: AsideMenuController,\r\n transclude: true\r\n });\r\n\r\n /* @ngInject */\r\n function AsideMenuController($rootScope, $element, $timeout){\r\n var ctrl = this;\r\n var htmlElement;\r\n var bodyElement;\r\n var overlayElement;\r\n var asideElement;\r\n var isOpen = false;\r\n ctrl.overlay = angular.isDefined(ctrl.overlay) ? ctrl.overlay : true;\r\n\r\n ctrl.toggle = toggle;\r\n\r\n ctrl.ref = {\r\n open: open,\r\n close: close\r\n };\r\n\r\n init();\r\n\r\n $rootScope.$on('toggleAsideMenu', ctrl.toggle);\r\n\r\n ctrl.$destroy = function(){\r\n if(overlayElement){\r\n overlayElement.off('click', close);\r\n }\r\n };\r\n\r\n /////////////\r\n\r\n function init(){\r\n htmlElement = angular.element('html');\r\n bodyElement = angular.element('body');\r\n asideElement = $element.children().eq(0);\r\n }\r\n\r\n function open(){\r\n isOpen = true;\r\n activateOverlay();\r\n deactivateScroll();\r\n showAside();\r\n disableTouchScroll();\r\n }\r\n\r\n function close(){\r\n isOpen = false;\r\n deactivateOverlay();\r\n reactivateScroll();\r\n hideAside();\r\n reenableTouchScroll();\r\n }\r\n\r\n function toggle(){\r\n if(isOpen){\r\n close();\r\n }else{\r\n open();\r\n }\r\n }\r\n\r\n function activateOverlay(){\r\n if(ctrl.overlay && !overlayElement){\r\n overlayElement = angular.element('<div class=\"aside-overlay\"></div>');\r\n overlayElement.on('click', close);\r\n bodyElement.append(overlayElement);\r\n }\r\n\r\n overlayElement.show();\r\n overlayElement.css('opacity', 100);\r\n registerHideOverlayAfterTransition();\r\n }\r\n \r\n function deactivateOverlay(){\r\n overlayElement && overlayElement.css('opacity', 0);\r\n }\r\n\r\n function hideOverlay(){\r\n overlayElement && overlayElement.hide();\r\n }\r\n\r\n function deactivateScroll(){\r\n htmlElement.css('height', '100%');\r\n bodyElement.css('height', '100%');\r\n htmlElement.css('overflow', 'hidden');\r\n bodyElement.css('overflow', 'hidden');\r\n bodyElement.css('-ms-touch-action', 'none');\r\n bodyElement.css('touch-action', 'none');\r\n }\r\n\r\n function reactivateScroll(){\r\n htmlElement.css('height', null);\r\n bodyElement.css('height', null);\r\n htmlElement.css('overflow', 'visible');\r\n bodyElement.css('overflow', 'visible');\r\n bodyElement.css('-ms-touch-action', 'auto');\r\n bodyElement.css('touch-action', 'auto');\r\n }\r\n\r\n function showAside(){\r\n asideElement.removeClass('aside-menu-shown');\r\n asideElement.addClass('aside-menu-shown');\r\n }\r\n \r\n function hideAside(){\r\n asideElement.removeClass('aside-menu-shown');\r\n }\r\n\r\n function registerHideOverlayAfterTransition(){\r\n var transitionEvent = whichTransitionEvent();\r\n if(transitionEvent && overlayElement && hasTransition(overlayElement)){\r\n overlayElement.one(transitionEvent, hideOverlay);\r\n }\r\n }\r\n \r\n function hasTransition(element){\r\n return element && element.css('transitionDuration') !== '0s';\r\n }\r\n \r\n /* From Modernizr */\r\n function whichTransitionEvent(){\r\n var t;\r\n var el = document.createElement('fakeelement');\r\n var transitions = {\r\n 'transition':'transitionend', \r\n 'OTransition':'oTransitionEnd', \r\n 'MozTransition':'transitionend', \r\n 'WebkitTransition':'webkitTransitionEnd'\r\n };\r\n\r\n for(t in transitions){\r\n if( el.style[t] !== undefined ){\r\n return transitions[t];\r\n }\r\n }\r\n }\r\n\r\n function disableTouchScroll(){\r\n // $('html, body').on('touchstart touchmove', function(e){ \r\n // e.preventDefault(); \r\n // });\r\n }\r\n\r\n function reenableTouchScroll(){\r\n //$('html, body').off('touchstart touchmove');\r\n }\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n AskPriceButtonController.$inject = [\"$uibModal\"];\r\n angular.module('app.shared').component('askPriceButton', {\r\n bindings: { \r\n item: '<',\r\n buttonClass: '<'\r\n },\r\n template: [\r\n '<button class=\"btn btn-result-askprice\" ng-class=\"$ctrl.buttonClass\" ng-click=\"$ctrl.openAskPriceModal()\" ng-disabled=\"$ctrl.isAdding\">',\r\n '<span>{{ \"Cart.Ask\" | translate }}</span>',\r\n '</button>'\r\n ].join(''),\r\n controller: AskPriceButtonController\r\n });\r\n\r\n /* @ngInject */\r\n function AskPriceButtonController($uibModal){\r\n var ctrl = this;\r\n \r\n ctrl.openAskPriceModal = openAskPriceModal;\r\n\r\n /////////////\r\n\r\n \r\n function openAskPriceModal() {\r\n $uibModal.open({\r\n animation: true,\r\n component: 'askPriceModal',\r\n resolve: {\r\n part: ctrl.item\r\n }\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n angular.module('app.shared').component('cjCheckbox', {\r\n bindings: {\r\n isChecked: '=',\r\n value: '<',\r\n name: '@',\r\n label: '@'\r\n },\r\n transclude: true,\r\n template: [\r\n '<span class=\"cj-checkbox\">',\r\n '<input type=\"checkbox\" ',\r\n 'id=\"{{$ctrl.name}}\" ',\r\n 'name=\"{{$ctrl.name}}\" ',\r\n 'value=\"{{$ctrl.value}}\" ',\r\n 'ng-model=\"$ctrl.isChecked\" />',\r\n '<label for=\"{{$ctrl.name}}\">',\r\n ' <ng-transclude></ng-transclude>',\r\n '</label>',\r\n '</span>',\r\n ].join(''),\r\n controller: CheckboxController\r\n });\r\n\r\n /* @ngInject */\r\n function CheckboxController(){\r\n\r\n }\r\n})();","(function(){\r\n 'use strict';\r\n\r\n AskPriceModalController.$inject = [\"contactService\", \"toastr\"];\r\n angular.module('app.shared').component('askPriceModal', {\r\n bindings: {\r\n resolve: '<',\r\n close: '&',\r\n dismiss: '&'\r\n },\r\n templateUrl: '/app/shared/components/ask-price-modal/ask-price-modal.component.html',\r\n controller: AskPriceModalController\r\n });\r\n\r\n /* @ngInject */\r\n function AskPriceModalController(contactService, toastr){\r\n var ctrl = this;\r\n\r\n ctrl.isLoading = false;\r\n ctrl.name = '';\r\n ctrl.email = '';\r\n ctrl.message = '';\r\n \r\n ctrl.$onInit = function () {\r\n ctrl.message = 'Jeg ønsker at forespørge om pris pÃ¥ vare med nr.: ' + ctrl.resolve.part.ItemNo;\r\n };\r\n\r\n ctrl.send = send;\r\n ctrl.cancel = cancel;\r\n \r\n\r\n /////////////\r\n\r\n function send() {\r\n ctrl.isLoading = true;\r\n contactService.askPrice(ctrl.name, ctrl.email, ctrl.message).then(function () {\r\n ctrl.isLoading = false;\r\n toastr.success('Din forespørgsel blev afsendt.');\r\n ctrl.close();\r\n }, function () {\r\n ctrl.isLoading = false;\r\n toastr.error('Denne forespørgsel kunne ikke sendes. Prøv venligst igen.');\r\n });\r\n }\r\n \r\n function cancel() {\r\n ctrl.dismiss({$value: 'cancel'});\r\n }\r\n\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n\r\n angular.module('app.shared').component('confirmCartModal', {\r\n bindings: {\r\n modalInstance: '<',\r\n },\r\n templateUrl: '/app/shared/components/confirm-cart-modal/confirm-cart-modal.component.html',\r\n controller: ConfirmCartModalController\r\n });\r\n\r\n /* @ngInject */\r\n function ConfirmCartModalController(){\r\n var ctrl = this;\r\n \r\n ctrl.send = function () {\r\n ctrl.modalInstance.close();\r\n };\r\n\r\n ctrl.cancel = function () {\r\n ctrl.modalInstance.dismiss('cancel');\r\n };\r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n ConfirmCartRelatedModalController.$inject = [\"cartService\"];\r\n angular.module('app.shared').component('confirmCartRelatedModal', {\r\n bindings: {\r\n modalInstance: '<',\r\n resolve: '<'\r\n },\r\n templateUrl: '/app/shared/components/confirm-cart-modal/confirm-cart-related-modal.component.html',\r\n controller: ConfirmCartRelatedModalController\r\n });\r\n\r\n /* @ngInject */\r\n function ConfirmCartRelatedModalController(cartService) {\r\n var ctrl = this;\r\n ctrl.notDisplay = false;\r\n ctrl.removeSplashCode = removeSplashCode;\r\n ctrl.getDetailsUrl = cartService.getDetailsUrl;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.items = this.resolve.items;\r\n ctrl.initRelated();\r\n };\r\n\r\n ctrl.send = function () {\r\n ctrl.modalInstance.close();\r\n };\r\n\r\n ctrl.cancel = function () {\r\n ctrl.modalInstance.dismiss('cancel');\r\n };\r\n\r\n function removeSplashCode(string) {\r\n return string.replace(/\\//g, '-');\r\n }\r\n\r\n ctrl.addRelated = function (item) {\r\n cartService.addRelatedToCart(item, item.addCount);\r\n item.addRelatedText = '✔';\r\n setTimeout(function () {\r\n ctrl.initRelated();\r\n }, 2000);\r\n\r\n };\r\n\r\n ctrl.initRelated = function () {\r\n ctrl.items.forEach(function (item) {\r\n item.addCount = 1;\r\n item.addRelatedText = 'CartPopup.Add'; //'Tilføj';\r\n });\r\n var element = angular.element($('div.item-related'));\r\n if (element !== undefined && element.scope() !== undefined) { element.scope().$apply(); }\r\n };\r\n\r\n \r\n ctrl.displayAction = function () {\r\n ctrl.notDisplay = !ctrl.notDisplay;\r\n cartService.updateRelatedDisplay(ctrl.notDisplay);\r\n };\r\n }\r\n\r\n})();","(function(){\r\n 'use strict';\r\n PriceConverterController.$inject = [\"priceService\", \"$document\", \"$scope\", \"$filter\"];\r\n angular.module('app.sharedextend', ['ui.select2']).component('priceConverter', {\r\n bindings: { \r\n price: '@',\r\n basecurrency: '=',\r\n spanclass:'@'\r\n },\r\n templateUrl: '/app/shared/components/price-converter/price-converter.component.html',\r\n controller: PriceConverterController\r\n });\r\n\r\n /* @ngInject */\r\n function PriceConverterController(priceService, $document, $scope, $filter){\r\n var ctrl = this;\r\n\r\n ctrl.isExchange = false;\r\n ctrl.baseCurrency = 'DKK';//default currency\r\n\r\n ctrl.exchangeOption = exchangeOption;\r\n ctrl.changeCurrency = changeCurrency;\r\n ctrl.clickOptionCurrency = clickOptionCurrency;\r\n ctrl.parseToMoney = parseToMoney;\r\n\r\n /////////////\r\n\r\n function parseToMoney(m) {\r\n try {\r\n var pos = m.lastIndexOf(',');\r\n if (pos > -1) {\r\n m = m.substring(0, pos) + '.' + m.substring(pos + 1);\r\n }\r\n //return parseFloat(m).toFixed(2);\r\n return $filter('number')(m, 2);\r\n } catch (e) {\r\n return m;\r\n } \r\n }\r\n\r\n function exchangeOption($event) {\r\n $event.stopPropagation();\r\n $event.preventDefault();\r\n\r\n if (!ctrl.isExchange) {\r\n //close other pc-modals\r\n try {\r\n $document.click();\r\n }\r\n catch (err) { //by pass if err\r\n }\r\n\r\n //calc position absolute\r\n var target = angular.element($event.target);\r\n var left = target.position().left;\r\n var top = target.position().top;\r\n var height = target.height();\r\n\r\n var pop = target.next('div.pc-exchange');\r\n pop.css('top', top + 32 + height);\r\n pop.css('left', left - 130);\r\n\r\n //get currency\r\n if (ctrl.allRates === undefined) {\r\n priceService.getAllCurrency().then(function (result) {\r\n ctrl.allRates = result.rates;\r\n }).finally(function () {\r\n });\r\n }\r\n \r\n }\r\n //display\r\n ctrl.isExchange = !ctrl.isExchange;\r\n }\r\n\r\n function changeCurrency(c) {\r\n if (c !== null && c !== undefined) {\r\n \r\n //binding exchange rates\r\n priceService.getExchangeRates(ctrl.baseCurrency).then(function (result) {\r\n ctrl.rates = result.rates;\r\n }).finally(function () {\r\n //calc new price\r\n var gPrice = ctrl.price.replace(/,/g, '.');\r\n var tmpPrice = (parseFloat(ctrl.rates[c]) * parseFloat(gPrice)).toFixed(2).replace('.', ',');\r\n if (tmpPrice !== 'NaN') {\r\n ctrl.price = tmpPrice;\r\n ctrl.baseCurrency = c;\r\n }\r\n //hide\r\n ctrl.isExchange = !ctrl.isExchange;\r\n });\r\n }\r\n }\r\n\r\n //other events\r\n function clickOptionCurrency($event) {\r\n $event.stopPropagation();\r\n $event.preventDefault();\r\n }\r\n\r\n $document.bind('click', function (event) {\r\n if (ctrl.isExchange) {\r\n ctrl.isExchange = false;\r\n $scope.$apply();\r\n }\r\n });\r\n }\r\n\r\n})();",null]}